Feature-level compatibility for the CSharpDB SQL dialect. This development snapshot separates current availability from roadmap intent and does not imply compatibility with another vendor dialect.
Development preview. This page describes the audited main-branch snapshot below, not the latest released package. No released compatibility snapshot has been published yet.
Availability and roadmap intent are independent. A planned row may still be unavailable today. Partial rows state their exact limitations. No aggregate compatibility percentage is published.
Add a column with a literal default and backfill existing rows
alter.add_column.defaulted · ALTER TABLE
supportedroadmap: shipped
ALTER TABLE users ADD COLUMN status TEXT NOT NULL DEFAULT 'new'
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationnot applicable
Limitations
The default must be one of the supported typed literal or NULL forms. Adding a required column without a value for existing rows is rejected. A failed rewrite makes either explicit transaction API rollback-only.
Intentional deviations
Existing rows are streamed through a shadow table root and receive the persisted default before the catalog root is swapped.
ALTER TABLE children DROP CONSTRAINT fk_children_parent
Parsersupported
Executionsupported
Persistencepartial
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationunsupported
Limitations
Only existing foreign-key constraints are handled. Other constraint kinds do not yet exist, and the EF provider rejects standalone foreign-key changes.
Indexed, constrained, trigger-, validation-rule-, or stored-view-dependent, primary-key, and last-column drops are rejected. Stored-view preflight is deliberately table-conservative and follows direct/transitive view chains rather than attempting column-level SQL rewriting. Deterministic fault-injection and process-interruption coverage remain follow-on work.
ALTER TABLE users RENAME COLUMN old_name TO new_name
Parsersupported
Executionsupported
Persistencepartial
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationsupported
Limitations
Dependency repair is implemented for current indexes, keys, checks, and foreign keys. Stored-view, trigger, and applicable validation-rule dependencies are rejected until their definitions can be rewritten atomically; a dedicated successful-rename reopen proof is not yet linked in this development snapshot.
This row does not claim arbitrary vendor-specific rename syntax. Renames reject stored-view, trigger, and validation-rule dependencies until those definitions can be rewritten atomically.
A column-scoped CHECK may reference only its own column and otherwise follows the deterministic row-local expression limits of table CHECK. Core SQL covers enforcement, persistence, catalog exposure, column/table rename repair, ADO.NET metadata, direct/REST/gRPC schema transport, archive round trips, and EF create-table checks.
Intentional deviations
A false result rejects the write, while NULL/UNKNOWN passes. Dropping a column with a CHECK dependency is rejected.
This row covers PRIMARY KEY declarations inside CREATE TABLE. A composite key is a logical constraint and does not infer integer identity behavior; standalone ADD/DROP PRIMARY KEY remains outside this feature.
Intentional deviations
One primary key is allowed per table and every participating value must be non-NULL.
This row covers UNIQUE declarations inside CREATE TABLE. Standalone ADD UNIQUE remains outside this feature; named UNIQUE constraints can be removed with DROP CONSTRAINT when no foreign key depends on them.
Intentional deviations
Rows containing NULL in any participating column do not collide with one another.
dml.insert.default_keyword · Defaults and constraints
partialroadmap: shipped
INSERT INTO orders (status) VALUES (DEFAULT)
Parsersupported
Executionsupported
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETpartial
REST statelesspartial
REST sessionpartial
gRPC unarypartial
gRPC sessionpartial
EF querypartial
EF migrationnot applicable
Limitations
Core SQL covers INSERT DEFAULT VALUES and DEFAULT markers in value tuples against literal column defaults. Feature-specific ADO.NET, REST, gRPC, and EF query paths are not yet linked, and the available default expression shapes are limited by the literal-only column DEFAULT row.
Intentional deviations
An explicit NULL does not request a default; it remains NULL.
schema.not_null.enforcement · Defaults and constraints
partialroadmap: shipped
name TEXT NOT NULL
Parsersupported
Executionsupported
Persistencepartial
Catalogsupported
Embedded ADO.NETpartial
REST statelesspartial
REST sessionpartial
gRPC unarypartial
gRPC sessionpartial
EF querynot applicable
EF migrationsupported
Limitations
Core tests cover SQL INSERT rejection, shared direct InsertBatch validation, and sys.columns nullability. A narrow reopen proof and feature-specific ADO.NET, REST, and gRPC write tests are not yet linked.
Intentional deviations
NOT NULL is enforced independently from CHECK; CHECK may accept UNKNOWN while NOT NULL still rejects NULL.
The first slice accepts typed literal and NULL defaults only. Column references, parameters, functions including CURRENT_TIMESTAMP, subqueries, computed expressions, and EF DefaultValueSql remain rejected. Core SQL, ADO.NET metadata, direct/REST/gRPC schema transport, archive round trips, and EF create-table literal defaults have focused coverage.
Intentional deviations
Omitted columns and explicit DEFAULT apply the persisted literal; explicit NULL remains NULL and is checked independently against nullability.
Checks must be deterministic and row-local. Parameters, functions, subqueries, and qualified references are rejected. Core SQL covers enforcement, persistence, catalog exposure, rename dependency repair, named ALTER add/drop, ADO.NET metadata, direct/REST/gRPC schema transport, archive round trips, and EF create-table checks.
Intentional deviations
A false result rejects the write, while NULL/UNKNOWN passes in accordance with SQL CHECK semantics. Enforcement is immediate.
Core SQL tests cover reserved words, whitespace, and doubled-quote escapes through CREATE, INSERT, and SELECT. Names are limited to 128 characters and cannot contain NUL. A dedicated reopen/catalog proof and feature-specific ADO.NET, REST, gRPC, and EF query/migration round trips are not yet linked; the EF proof covers identifier generation only.
Intentional deviations
Double quotes delimit identifiers and a doubled double quote escapes a quote. Name resolution remains ordinal case-insensitive rather than introducing case-sensitive quoted names.
An unquoted name must begin with a letter recognized by .NET or underscore and continue with letters, decimal digits, or underscores. Reserved keywords require quoting, NUL is rejected, and the maximum length is 128 characters.
Intentional deviations
Name resolution is ordinal case-insensitive on current catalog paths.
Direct evaluator tests cover NULL comparisons, NOT NULL, and the AND/OR truth-table cases exercised by CHECK enforcement. This row does not yet qualify every WHERE, JOIN, IN/NOT IN, aggregate, transport, ADO.NET, or EF-generated expression shape.
Intentional deviations
UNKNOWN is represented as NULL; logical operators short-circuit to FALSE or TRUE where SQL truth tables permit a determinate result.
The referenced columns must exactly match the order, types, and collations of a primary or unique candidate key. MATCH FULL, MATCH PARTIAL, deferred validation, ON UPDATE actions, and EF composite-FK generation are not supported.
Intentional deviations
MATCH SIMPLE is used: any NULL child component suppresses the parent lookup.
The referenced column must be an ordered primary or unique candidate key with a compatible type and collation. EF supports inline single-column create-table relationships but rejects standalone foreign-key changes.
Intentional deviations
Enforcement is immediate; deferred validation is not supported.
SQL supports table-level scalar and composite declarations. The EF provider generates inline scalar relationships but still rejects composite and standalone foreign-key operations.
Intentional deviations
Constraint validation is immediate and uses MATCH SIMPLE for nullable composite child keys.
The supported operation set is create/drop table, add/drop/rename column, rename table, and create/drop index within the provider's schema restrictions.
The provider throws a clear NotSupportedException for idempotent scripts; a migration-history and locking design is not part of the first compatibility release.
DbDataReader.GetSchemaTable provenance and constraint detail
metadata.reader.schema_provenance · Metadata
partialroadmap: planned
reader.GetSchemaTable()
Parsernot applicable
Executionnot applicable
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETpartial
REST statelessnot applicable
REST sessionnot applicable
gRPC unarynot applicable
gRPC sessionnot applicable
EF querynot applicable
EF migrationnot applicable
Limitations
The schema table reports intrinsic result metadata including ordinal, CLR/provider types, nullability, sizes, key/unique/identity flags when known, and expression shape. The current binder does not carry reliable source lineage for every projected expression, so unavailable base catalog, table, and column names are deliberately returned as NULL instead of being invented.
The registry centralizes names, aliases, kinds, arity, return metadata, determinism, and registered callbacks. Rich binder type signatures, generated documentation tables, and a broader conformance corpus remain follow-on work.
Intentional deviations
CSharpDB exposes this metadata through sys.functions and the sys_functions alias.
EXPLAIN ESTIMATE FOR SELECT * FROM orders WHERE customer_id = 42
Parsersupported
Executionsupported
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationnot applicable
Limitations
Output describes estimate inputs and planner decisions. It follows read-only transaction routing and prepared commands discover/rebind parameters inside the target. It is not a complete physical operator tree and reports no actual execution metrics.
Intentional deviations
The target query is not executed; mutation targets are rejected.
SELECT id FROM current_users UNION ALL SELECT id FROM archived_users
Parsersupported
Executionsupported
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETpartial
REST statelesspartial
REST sessionpartial
gRPC unarypartial
gRPC sessionpartial
EF querypartial
EF migrationnot applicable
Limitations
Core tests cover duplicate and NULL preservation, first-branch column names, numeric promotion, incompatible-type rejection, parenthesized operands, view serialization, outer LIMIT short-circuiting, and cancellation cleanup. Feature-specific ADO.NET, REST, gRPC, and EF query proofs are not yet linked; INTERSECT ALL and EXCEPT ALL remain unsupported.
Intentional deviations
Branch types must match or have a supported numeric common type; incompatible branches fail before enumeration.
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at)
Parsersupported
Executionpartial
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETunsupported
REST statelessunsupported
REST sessionunsupported
gRPC unaryunsupported
gRPC sessionunsupported
EF queryunsupported
EF migrationnot applicable
Limitations
Experimental in-memory slice only: one compatible window specification per SELECT; ROW_NUMBER, RANK, DENSE_RANK, and non-DISTINCT COUNT, SUM, AVG, MIN, and MAX over direct source rows. Star and mixed-expression projections preserve public SELECT-list order and hide internal window slots. Explicit frames, named windows, nested windows, mixed ordinary aggregation/grouping, incompatible specifications, navigation functions, and spill-to-disk are rejected. Large inputs remain bounded only by available process memory, although long sort/evaluation loops poll cancellation.
Intentional deviations
Default frames are SQL-consistent: an unordered window covers the whole partition, while an ordered aggregate window uses peer-aware unbounded-preceding through current-row semantics.