dbx Dialect
dialect
Dialect abstraction for dbx and sqltmplx. Capabilities are layered; implement only what you need.
Capability layers
| Layer | Interface | Required | Used by |
|---|---|---|---|
| Contract | Name(), BindVar(n) | Yes | sqltmplx render, dbx render, validate |
| Dialect | Contract + QuoteIdent, RenderLimitOffset | Yes for query DSL | dbx query build |
| QueryFeaturesProvider | QueryFeatures() | Optional | dbx render (upsert, RETURNING, excluded ref). Fallback: DefaultQueryFeatures(name) for known dialects |
| SchemaDialect | Dialect + DDL/inspect (in dbx) | Optional | schema migrate, AutoMigrate |
Adding a new dialect
- Implement
dialect.Dialect(Contract + QuoteIdent + RenderLimitOffset). - Implement
dialect.QueryFeaturesProviderto declare upsert/returning support (or rely onDefaultQueryFeaturesif your dialect matches a known one). - For schema migration: implement
dbx.SchemaDialect(BuildCreateTable, InspectTable, etc.) or rely on Atlas when supported. - For sqltmplx validation: register a parser via
validate.Register(dialectName, factory).
No need to add dialect branches in render.go, schema_migrate_atlas.go, or sqltmplx—capabilities are declared via interfaces.