Database Support Database and source support matrix with dialect differences and important boundaries. reference reference reference/database-support reference/database-support.md

Database Support

Database and source support matrix with dialect differences and important boundaries.

Core support

SourceStatusNotes
PostgreSQLSupportedBroadest SQL feature coverage
MySQL / MariaDBSupportedLinear mutation strategy
SQLiteSupportedLocal/dev and embedded use
SQL ServerSupportedDialect-specific limit/offset and JSON handling
OracleSupportedBoolean/function return types need care
MongoDBSupportedJSON DSL to aggregation pipeline
SnowflakeSupportedWarehouse dialect surface
RedshiftSupportedAnalytics-oriented SQL
ClickHouseConfigured sourceUse with feature-specific validation
FilesystemsSupportedLocal/S3/GCS virtual tables
OpenAPISupported for selected GETsRemote fields and joins
CodeSQLSupportedSource-code index tables

Dialect rule

Do not rely on implicit ordering. If a test or API response depends on order, specify order_by.

GraphQL
query {
  products(limit: 5, order_by: { id: asc }) {
    id
    name
  }
}

This is not a style preference. SQL result ordering is undefined without ORDER BY, so adding implicit ordering in a dialect would add cost and hide a client/test bug.

Feature boundaries

Some features differ by dialect: JSON aggregation, recursive CTE syntax, boolean representation, function return types, and MongoDB aggregation support.

FeatureImportant boundary
JSON aggregationSQL dialects render different aggregate functions; MongoDB uses native documents and a JSON DSL.
Recursive relationshipsPostgreSQL/MySQL/SQLite use WITH RECURSIVE; Oracle/MSSQL do not use the RECURSIVE keyword.
Boolean valuesOracle and SQL Server may need JSON conversion or explicit return-type config for boolean-like function results.
Geo filtersPostGIS-style SQL and MongoDB near have different backend operators.
Analytics directivesWindow rendering is dialect-specific and unsupported dialects should fail clearly.
Cursor paginationCursor fields are root-level synthetic fields and cursor strings are opaque.

Verified by TestAnalytics_DialectUnsupported core/internal/psql/window_test.go:106
Verified by TestQueryDSLParsing mongodriver/driver_test.go:17

Test command map

Shell
./scripts/test-postgres.sh
./scripts/test-mysql.sh
./scripts/test-sqlite.sh
./scripts/test-mongo.sh
./scripts/test-snowflake.sh

Docs-only edits do not need the full dialect matrix, but compiler or shared query-planning changes should run the affected dialect scripts.

Docs