CSharpDB SQL Compatibility

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.

SnapshotDevelopment preview
Package4.0.4
Commit522f98d
Generated07/17/2026 15:20:19

Machine-readable sources: manifest JSON and JSON Schema. Follow implementation sequencing in the SQL Compatibility Roadmap.

Showing 43 feature rows.

Add a column with a literal default and backfill existing rows

alter.add_column.defaulted · ALTER TABLE
supported roadmap: 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.
Automated proof ids

Positive: parser.alter.add, engine.alter.add_default_backfill, engine.alter.rewrite_rollback, engine.alter.public_write_rollback, engine.alter.add.reopen, catalog.default_check, ado.schema.defaults_checks_keys, rest.sql, rest.session, grpc.sql, grpc.session

Negative: parser.default_check.unsupported

First supported version: 4.0.4 · Related documentation

Add a nullable column without a default

alter.add_column.nullable · ALTER TABLE
supported roadmap: shipped
ALTER TABLE users ADD COLUMN nickname TEXT
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationsupported

Limitations

  • Computed values are not supported. Literal-default backfill and selected ALTER COLUMN metadata actions are qualified in separate rows.
Automated proof ids

Positive: parser.alter.add, engine.create_and_query, engine.alter.add.reopen, catalog.core, ado.schema.core, rest.sql, rest.session, grpc.sql, grpc.session, ef.migration.basic

First supported version: 4.0.4 · Related documentation

Add or drop a named CHECK constraint

alter.constraint.check · ALTER TABLE
supported roadmap: shipped
ALTER TABLE orders ADD CONSTRAINT ck_total CHECK (total >= 0)
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationnot applicable

Limitations

  • Only named row-local deterministic CHECK expressions are accepted. Adding a constraint validates every existing row before the catalog is changed.

Intentional deviations

  • A CHECK expression that evaluates to UNKNOWN passes, matching CREATE TABLE CHECK behavior.
Automated proof ids

Positive: parser.alter.column_metadata, engine.alter.named_check, schema.default_check.serialization, catalog.default_check, ado.schema.defaults_checks_keys, rest.sql, rest.session, grpc.sql, grpc.session

Negative: parser.default_check.unsupported

First supported version: 4.0.4 · Related documentation

Drop a foreign-key constraint by name

alter.drop_constraint.foreign_key · ALTER TABLE
partial roadmap: planned
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.
Automated proof ids

Positive: parser.alter.drop, engine.fk.drop_constraint, catalog.fk, ado.schema.fk, rest.sql, rest.session, grpc.fk.metadata, grpc.session

Negative: engine.fk.drop_missing.rejected, ef.fk.standalone.rejected

First supported version: 4.0.4 · Related documentation

Drop an unconstrained, non-indexed column

alter.drop_column.unconstrained · ALTER TABLE
supported roadmap: shipped
ALTER TABLE users DROP COLUMN obsolete_value
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationsupported

Limitations

  • 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.
Automated proof ids

Positive: parser.alter.drop, engine.alter.drop, engine.alter.rewrite_drop, engine.alter.rewrite_rollback, engine.alter.public_write_rollback, catalog.core, ado.schema.core, rest.sql, rest.session, grpc.sql, grpc.session, ef.migration.basic

Negative: engine.alter.drop_indexed.rejected, engine.alter.dependency_preflight, engine.alter.drop_stored_dependency_preflight

First supported version: 4.0.4 · Related documentation

Rename a column

alter.rename_column · ALTER TABLE
partial roadmap: planned
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.
Automated proof ids

Positive: parser.alter.rename_column, engine.alter.rename_column, catalog.core, ado.schema.core, rest.sql, rest.session, grpc.sql, grpc.session, ef.migration.basic

Negative: engine.alter.rename_old.rejected, engine.alter.rename_column_dependency_preflight

First supported version: 4.0.4 · Related documentation

Rename a durable table

alter.rename_table.standalone · ALTER TABLE
supported roadmap: shipped
ALTER TABLE users RENAME TO customers
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationsupported

Limitations

  • 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.
Automated proof ids

Positive: parser.alter.rename_table, engine.create_and_query, engine.alter.rename_table.reopen, catalog.core, ado.schema.core, rest.sql, rest.session, grpc.sql, grpc.session, ef.migration.basic

Negative: engine.alter.rename_dependency_preflight

First supported version: 4.0.4 · Related documentation

Set or drop a literal column default

alter.column.default · ALTER TABLE
supported roadmap: shipped
ALTER TABLE users ALTER COLUMN status SET DEFAULT 'new'
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationnot applicable

Limitations

  • SET DEFAULT accepts only the literal default forms supported by CREATE TABLE; it changes future writes and does not rewrite existing values.
Automated proof ids

Positive: parser.alter.column_metadata, engine.alter.column_default, engine.alter.column_default_runtime, catalog.default_check, ado.schema.defaults_checks_keys, rest.sql, rest.session, grpc.sql, grpc.session

Negative: parser.default_check.unsupported

First supported version: 4.0.4 · Related documentation

Set or drop column NOT NULL metadata

alter.column.not_null · ALTER TABLE
supported roadmap: shipped
ALTER TABLE users ALTER COLUMN email SET NOT NULL
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationnot applicable

Limitations

  • SET NOT NULL scans existing rows and refuses the metadata change if any value is NULL. Type and collation changes are not part of this feature.
Automated proof ids

Positive: parser.alter.column_metadata, engine.alter.column_not_null, engine.alter.add.reopen, catalog.core, ado.schema.core, rest.sql, rest.session, grpc.sql, grpc.session

First supported version: 4.0.4 · Related documentation

Create a basic durable table

ddl.create_table.basic · Data definition
supported roadmap: shipped
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL)
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationsupported

Limitations

  • This row covers primitive columns, nullability, and a single-column primary key; defaults, checks, and composite primary keys are separate rows.
Automated proof ids

Positive: parser.create_table.basic, engine.create_and_query, engine.persistence.reopen, catalog.core, ado.crud, rest.sql, rest.session, grpc.sql, grpc.session, ef.migration.basic

First supported version: 4.0.4 · Related documentation

Column CHECK constraint

schema.check.column · Defaults and constraints
partial roadmap: shipped
amount INTEGER CONSTRAINT ck_amount CHECK (amount >= 0)
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationpartial

Limitations

  • 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.
Automated proof ids

Positive: parser.default_check.create, schema.default_check.serialization, engine.check.enforcement, engine.check.update_atomic, engine.default_check.reopen, catalog.default_check, engine.default_check.rename, engine.three_valued.truth_tables, ado.schema.defaults_checks_keys, direct.schema.constraints, rest.schema.constraints, grpc.schema.constraints, ef.schema.literal_defaults_checks

Negative: parser.default_check.unsupported

First supported version: 4.0.4 · Related documentation

Composite table-level primary key

schema.key.composite_primary · Defaults and constraints
supported roadmap: shipped
CONSTRAINT pk_order_lines PRIMARY KEY (order_id, line_no)
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querysupported
EF migrationsupported

Limitations

  • 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.
Automated proof ids

Positive: parser.key.composite, schema.key.serialization, engine.key.composite_primary, catalog.key_constraints, ado.schema.defaults_checks_keys, direct.schema.constraints, rest.schema.constraints, grpc.schema.constraints, archive.schema.constraints, ef.schema.composite_keys, ef.runtime.composite_keys

First supported version: 4.0.4 · Related documentation

Composite table-level unique key

schema.key.composite_unique · Defaults and constraints
supported roadmap: shipped
CONSTRAINT uq_tenant_email UNIQUE (tenant_id, email)
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationnot applicable

Limitations

  • 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.
Automated proof ids

Positive: parser.key.composite, schema.key.serialization, engine.key.composite_unique, catalog.key_constraints, ado.schema.defaults_checks_keys, direct.schema.constraints, rest.schema.constraints, grpc.schema.constraints, archive.schema.constraints

First supported version: 4.0.4 · Related documentation

DEFAULT markers and DEFAULT VALUES in INSERT

dml.insert.default_keyword · Defaults and constraints
partial roadmap: 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.
Automated proof ids

Positive: parser.insert.default_values, parser.insert.default_markers, engine.default.apply, ef.insert.default_values

Negative: parser.default_check.unsupported

First supported version: 4.0.4 · Related documentation

NOT NULL write enforcement

schema.not_null.enforcement · Defaults and constraints
partial roadmap: 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.
Automated proof ids

Positive: parser.create_table.basic, engine.check.enforcement, engine.not_null.direct_batch, catalog.core, ef.migration.basic

Negative: engine.not_null.rejected

First supported version: 4.0.4 · Related documentation

Persisted literal column DEFAULT

schema.default.column · Defaults and constraints
partial roadmap: shipped
status TEXT DEFAULT 'new'
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationpartial

Limitations

  • 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.
Automated proof ids

Positive: parser.default_check.create, schema.default_check.serialization, engine.default.apply, engine.default_check.reopen, catalog.default_check, engine.default_check.rename, ado.schema.defaults_checks_keys, grpc.ado.schema.defaults_checks_keys, direct.schema.constraints, rest.schema.constraints, grpc.schema.constraints, archive.schema.constraints, ef.schema.literal_defaults_checks

Negative: parser.default_check.unsupported

First supported version: 4.0.4 · Related documentation

Table CHECK constraint

schema.check.table · Defaults and constraints
partial roadmap: shipped
CONSTRAINT ck_total CHECK (total >= 0)
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationpartial

Limitations

  • 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.
Automated proof ids

Positive: parser.default_check.create, schema.default_check.serialization, engine.check.enforcement, engine.check.update_atomic, engine.default_check.reopen, catalog.default_check, engine.default_check.rename, engine.alter.named_check, engine.three_valued.truth_tables, ado.schema.defaults_checks_keys, direct.schema.constraints, rest.schema.constraints, grpc.schema.constraints, ef.schema.literal_defaults_checks

Negative: parser.default_check.unsupported

First supported version: 4.0.4 · Related documentation

Double-quoted identifiers

identifiers.quoted · Dialect foundation
partial roadmap: shipped
CREATE TABLE "order details" ("order id" INTEGER)
Parsersupported
Executionsupported
Persistencepartial
Catalogpartial
Embedded ADO.NETpartial
REST statelesspartial
REST sessionpartial
gRPC unarypartial
gRPC sessionpartial
EF querypartial
EF migrationpartial

Limitations

  • 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.
Automated proof ids

Positive: parser.identifier.quoted, engine.identifier.quoted_reserved, engine.identifier.quoted_escape, ef.identifier.quoted_helper

Negative: parser.identifier.quoted_unterminated

First supported version: 4.0.4 · Related documentation

Unquoted simple identifiers

identifiers.unquoted_simple · Dialect foundation
supported roadmap: shipped
CREATE TABLE customer_orders (order_id INTEGER PRIMARY KEY)
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querysupported
EF migrationsupported

Limitations

  • 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.
Automated proof ids

Positive: parser.create_table.basic, engine.create_and_query, engine.persistence.reopen, catalog.core, ado.crud, rest.sql, rest.session, grpc.sql, grpc.session, ef.crud, ef.migration.basic

Negative: parser.identifier.max_length

First supported version: 4.0.4 · Related documentation

SQL three-valued comparison and logical semantics

expressions.three_valued_logic · Expressions
partial roadmap: shipped
NULL = 1; 1 AND NULL; 0 OR NULL
Parsersupported
Executionsupported
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETpartial
REST statelesspartial
REST sessionpartial
gRPC unarypartial
gRPC sessionpartial
EF querypartial
EF migrationnot applicable

Limitations

  • 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.
Automated proof ids

Positive: parser.three_valued.expressions, engine.three_valued.truth_tables

Negative: engine.three_valued.unknown_cases

First supported version: 4.0.4 · Related documentation

Composite foreign key

schema.foreign_key.composite · Foreign keys
partial roadmap: shipped
FOREIGN KEY (order_id, line_no) REFERENCES lines(order_id, line_no)
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationunsupported

Limitations

  • 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.
Automated proof ids

Positive: parser.fk.table_composite, engine.fk.composite, schema.fk.composite_reopen, schema.fk.composite_vacuum, catalog.fk.composite_pairs, engine.fk.composite_dependencies, ado.fk.composite_metadata, direct.fk.composite_metadata, rest.fk.composite_metadata, grpc.fk.composite_metadata, archive.schema.constraints, devops.fk.composite_metadata

Negative: engine.fk.composite_validation, ef.composite_fk.rejected

First supported version: 4.0.4 · Related documentation

Immediate ON DELETE CASCADE behavior

schema.foreign_key.on_delete_cascade · Foreign keys
partial roadmap: shipped
parent_id INTEGER REFERENCES parents(id) ON DELETE CASCADE
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationpartial

Limitations

  • CASCADE is immediate for scalar and composite keys. Deferred constraints and standalone EF foreign-key changes are not supported.
Automated proof ids

Positive: parser.fk.column, parser.fk.table_composite, engine.fk.cascade, engine.fk.composite, schema.fk.composite_reopen, catalog.fk.composite_pairs, ado.fk.composite_metadata, rest.fk.composite_metadata, rest.session, grpc.fk.composite_metadata, grpc.session

Negative: ef.fk.standalone.rejected

First supported version: 4.0.4 · Related documentation

Immediate ON DELETE RESTRICT behavior

schema.foreign_key.on_delete_restrict · Foreign keys
partial roadmap: shipped
parent_id INTEGER REFERENCES parents(id)
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationpartial

Limitations

  • RESTRICT is immediate for scalar and composite keys. Deferred constraints and standalone EF foreign-key changes are not supported.

Intentional deviations

  • Omitting ON DELETE selects immediate RESTRICT.
Automated proof ids

Positive: parser.fk.column, parser.fk.table_composite, engine.fk.restrict, engine.fk.composite, schema.fk.composite_reopen, catalog.fk.composite_pairs, ado.fk.composite_metadata, rest.sql, rest.session, grpc.fk.composite_metadata, grpc.session

Negative: ef.fk.standalone.rejected

First supported version: 4.0.4 · Related documentation

ON UPDATE CASCADE

schema.foreign_key.on_update_cascade · Foreign keys
unsupported roadmap: planned
REFERENCES parents(id) ON UPDATE CASCADE
Parserunsupported
Executionunsupported
Persistenceunsupported
Catalogunsupported
Embedded ADO.NETunsupported
REST statelessunsupported
REST sessionunsupported
gRPC unaryunsupported
gRPC sessionunsupported
EF querynot applicable
EF migrationunsupported

Limitations

  • Every ON UPDATE action is rejected.
Automated proof ids

Negative: parser.fk.on_update.rejected

First supported version: not supported · Related documentation

Single-column column-level foreign key

schema.foreign_key.column_single · Foreign keys
partial roadmap: shipped
parent_id INTEGER REFERENCES parents(id)
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationpartial

Limitations

  • 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.
Automated proof ids

Positive: parser.fk.column, engine.fk.enforcement, schema.fk.serialization, catalog.fk, ado.schema.fk, direct.fk.composite_metadata, rest.sql, rest.session, grpc.fk.metadata, grpc.session

Negative: ef.fk.standalone.rejected

First supported version: 4.0.4 · Related documentation

Table-level FOREIGN KEY clause

schema.foreign_key.table_level · Foreign keys
partial roadmap: shipped
FOREIGN KEY (parent_id) REFERENCES parents(id)
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationpartial

Limitations

  • 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.
Automated proof ids

Positive: parser.fk.table_composite, engine.fk.composite, schema.fk.composite_reopen, catalog.fk.composite_pairs, ado.fk.composite_metadata, direct.fk.composite_metadata, rest.fk.composite_metadata, grpc.fk.composite_metadata

Negative: ef.composite_fk.rejected

First supported version: 4.0.4 · Related documentation

Basic EF Core migrations

provider.ef_migration.basic · Generated SQL
supported roadmap: shipped
dotnet ef database update
Parsernot applicable
Executionnot applicable
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETnot applicable
REST statelessnot applicable
REST sessionnot applicable
gRPC unarynot applicable
gRPC sessionnot applicable
EF querynot applicable
EF migrationsupported

Limitations

  • The supported operation set is create/drop table, add/drop/rename column, rename table, and create/drop index within the provider's schema restrictions.
Automated proof ids

Positive: ef.migration.basic

First supported version: 4.0.4 · Related documentation

EF Core embedded CRUD and basic query translation

provider.ef_query.crud · Generated SQL
supported roadmap: shipped
db.Users.Where(u => u.Id == id).ToListAsync()
Parsernot applicable
Executionnot applicable
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETnot applicable
REST statelessnot applicable
REST sessionnot applicable
gRPC unarynot applicable
gRPC sessionnot applicable
EF querysupported
EF migrationnot applicable

Limitations

  • The first-party provider is embedded/direct only and supports a deliberately bounded EF Core 10 relational subset.
Automated proof ids

Positive: ef.crud

First supported version: 4.0.4 · Related documentation

Idempotent EF migration scripts

provider.ef_migration.idempotent · Generated SQL
unsupported roadmap: out of scope
IMigrator.GenerateScript(options: Idempotent)
Parsernot applicable
Executionnot applicable
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETnot applicable
REST statelessnot applicable
REST sessionnot applicable
gRPC unarynot applicable
gRPC sessionnot applicable
EF querynot applicable
EF migrationunsupported

Limitations

  • The provider throws a clear NotSupportedException for idempotent scripts; a migration-history and locking design is not part of the first compatibility release.
Automated proof ids

Negative: ef.migration.idempotent.rejected

First supported version: not supported · Related documentation

ADO.NET GetSchema core collections

metadata.ado_getschema.core · Metadata
supported roadmap: shipped
connection.GetSchema("Columns")
Parsernot applicable
Executionnot applicable
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETsupported
REST statelessnot applicable
REST sessionnot applicable
gRPC unarysupported
gRPC sessionnot applicable
EF querynot applicable
EF migrationnot applicable

Limitations

  • Supported collections are MetaDataCollections, Restrictions, DataSourceInformation, DataTypes, ReservedWords, Tables, Columns, Indexes, IndexColumns, Views, ViewColumns, ForeignKeys, Defaults, CheckConstraints, KeyConstraints, and KeyColumns. Collection-specific restrictions are documented by the Restrictions collection.
Automated proof ids

Positive: ado.schema.core, ado.schema.fk, ado.schema.defaults_checks_keys, ado.schema.restrictions, grpc.ado.schema.defaults_checks_keys

First supported version: 4.0.4 · Related documentation

Core sys tables, columns, indexes, views, and triggers catalogs

metadata.catalog.core · Metadata
supported roadmap: shipped
SELECT * FROM sys.columns
Parsersupported
Executionsupported
Persistencenot applicable
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationnot applicable

Limitations

  • This row covers the existing core catalogs, not information_schema or future generalized constraint catalogs.

Intentional deviations

  • CSharpDB uses sys.* virtual catalogs and selected underscored aliases.
Automated proof ids

Positive: parser.select.basic, engine.catalog.core, catalog.core, ado.crud, rest.sql, rest.session, grpc.sql, grpc.session

First supported version: 4.0.4 · Related documentation

DbDataReader.GetSchemaTable provenance and constraint detail

metadata.reader.schema_provenance · Metadata
partial roadmap: 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.
Automated proof ids

Positive: ado.reader.schema.basic

Negative: ado.reader.schema.lineage_limited

First supported version: 4.0.4 · Related documentation

Normalized built-in and callback function catalog

metadata.catalog.functions · Metadata
supported roadmap: shipped
SELECT * FROM sys.functions
Parsersupported
Executionsupported
Persistencenot applicable
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationnot applicable

Limitations

  • 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.
Automated proof ids

Positive: catalog.functions, engine.functions.catalog_query, rest.sql, rest.session, grpc.sql, grpc.session

First supported version: 4.0.4 · Related documentation

Basic SELECT with projection and filter

query.select.basic · Queries
supported roadmap: shipped
SELECT id, name FROM users WHERE id = @id
Parsersupported
Executionsupported
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querysupported
EF migrationnot applicable

Limitations

  • Advanced expressions and generated provider shapes are qualified separately.
Automated proof ids

Positive: parser.select.basic, engine.create_and_query, ado.crud, rest.sql, rest.session, grpc.sql, grpc.session, ef.crud

First supported version: 4.0.4 · Related documentation

Hand-written INNER JOIN with an equality predicate

query.join.inner_handwritten · Queries
supported roadmap: shipped
SELECT o.id, c.name FROM orders o JOIN customers c ON o.customer_id = c.id
Parsersupported
Executionsupported
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationnot applicable

Limitations

  • This row does not qualify every join type, predicate shape, or EF-generated join.
Automated proof ids

Positive: parser.join.inner, engine.join.inner, ado.crud, rest.sql, rest.session, grpc.sql, grpc.session

First supported version: 4.0.4 · Related documentation

Hand-written non-recursive common table expression

query.cte.non_recursive_handwritten · Queries
supported roadmap: shipped
WITH active AS (SELECT id FROM users WHERE enabled = 1) SELECT * FROM active
Parsersupported
Executionsupported
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationnot applicable

Limitations

  • Recursive evaluation is not claimed by this row.
Automated proof ids

Positive: parser.cte.non_recursive, engine.cte.non_recursive, ado.crud, rest.sql, rest.session, grpc.sql, grpc.session

First supported version: 4.0.4 · Related documentation

ANALYZE statistics collection

diagnostics.analyze.statistics · Query diagnostics
supported roadmap: shipped
ANALYZE orders
Parsersupported
Executionsupported
Persistencesupported
Catalogsupported
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationnot applicable

Limitations

  • Temporary tables are excluded in the current version.

Intentional deviations

  • ANALYZE collects planner statistics; it does not show or execute a query plan.
Automated proof ids

Positive: parser.analyze, engine.analyze.execution, catalog.analyze.results, catalog.analyze.reopen, ado.crud, direct.explain.estimate, rest.explain, rest.session, grpc.sql, grpc.session

First supported version: 4.0.4 · Related documentation

Estimate-input diagnostics

diagnostics.explain.estimate · Query diagnostics
supported roadmap: shipped
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.
Automated proof ids

Positive: parser.explain.estimate, engine.explain.estimate, engine.explain.read_only_transaction, engine.explain.reader_session, direct.explain.estimate, ado.crud, ado.explain.prepared_parameters, rest.explain, rest.session, grpc.sql, grpc.session

Negative: parser.explain.mutation.rejected

First supported version: 4.0.4 · Related documentation

EXPLAIN ANALYZE for read-only queries

diagnostics.explain.analyze_read_only · Query diagnostics
unsupported roadmap: planned
EXPLAIN ANALYZE SELECT * FROM orders
Parserunsupported
Executionunsupported
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETunsupported
REST statelessunsupported
REST sessionunsupported
gRPC unaryunsupported
gRPC sessionunsupported
EF querynot applicable
EF migrationnot applicable

Limitations

  • Per-operator actual rows, loops, timings, memory, and stop states are not instrumented or exposed.

First supported version: not supported · Related documentation

Physical EXPLAIN plan

diagnostics.explain.physical · Query diagnostics
unsupported roadmap: planned
EXPLAIN SELECT * FROM orders WHERE customer_id = 42
Parserunsupported
Executionunsupported
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETunsupported
REST statelessunsupported
REST sessionunsupported
gRPC unaryunsupported
gRPC sessionunsupported
EF querynot applicable
EF migrationnot applicable

Limitations

  • The runtime does not yet expose one shared physical-plan descriptor for every execution path.

First supported version: not supported · Related documentation

Hand-written UNION with distinct semantics

query.set.union_distinct_handwritten · Set operations
supported roadmap: shipped
SELECT id FROM current_users UNION SELECT id FROM archived_users
Parsersupported
Executionsupported
Persistencenot applicable
Catalognot applicable
Embedded ADO.NETsupported
REST statelesssupported
REST sessionsupported
gRPC unarysupported
gRPC sessionsupported
EF querynot applicable
EF migrationnot applicable

Limitations

  • Current execution materializes both inputs before duplicate elimination.

Intentional deviations

  • UNION removes duplicates; duplicate-preserving UNION ALL is qualified separately.
Automated proof ids

Positive: parser.union.distinct, engine.union.distinct, ado.crud, rest.sql, rest.session, grpc.sql, grpc.session

First supported version: 4.0.4 · Related documentation

UNION ALL duplicate-preserving append

query.set.union_all · Set operations
partial roadmap: shipped
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.
Automated proof ids

Positive: parser.union.all, parser.union.all.contextual, engine.union_all.duplicates, engine.union_all.numeric_promotion, engine.union_all.parenthesized, engine.union_all.view, operator.union_all.outer_limit, operator.union_all.cancellation, admin.union_all.paging

Negative: parser.union.all.non_union_rejected, engine.union_all.incompatible_types

First supported version: 4.0.4 · Related documentation

Experimental ranking and aggregate window slice

query.window.row_number · Window functions
partial roadmap: shipped
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.
Automated proof ids

Positive: parser.window.experimental, parser.window.mixed_star_projection, engine.window.ranking, engine.window.aggregate_default_frames, engine.window.star_projection, engine.window.cancellation

Negative: engine.window.experimental_rejections

First supported version: 4.0.4 · Related documentation