Skip to main content
Version: 1.1.0

Dialects API Reference

Dialects isolate database-specific SQL generation.

Built-In Constructors​

postgres := quark.PostgreSQL()
mysql := quark.MySQL()
mariadb := quark.MariaDB()
sqlite := quark.SQLite()
mssql := quark.MSSQL()
oracle := quark.Oracle()
ConstructorName()
quark.PostgreSQL()postgres
quark.MySQL()mysql
quark.MariaDB()mariadb
quark.SQLite()sqlite
quark.MSSQL()mssql
quark.Oracle()oracle

Interface​

type Dialect interface {
Name() string
Placeholder(index int) string
Quote(identifier string) string
Placeholders(n int) []string
LimitOffset(limit, offset int) string
SupportsReturning() bool
Returning(columns ...string) string
SupportsLastInsertID() bool
LastInsertIDQuery(table, pkColumn string) string
CurrentTimestamp() string
BuildRoutineQuery(routine string, argCount int) string
BuildProcedureCall(procedure string, argCount int) string
JSONExtract(column, path string) string
AlterTableAddColumn(table, column, dataType string) string
AlterTableDropColumn(table, column string) string
AlterTableAlterColumn(table, column, newDataType string) string
RenameColumn(table, oldName, newName string) string
RenameTable(oldName, newName string) string
SupportsTransactionalDDL() bool
UpsertSQL(conflictCols, updateCols []string, argOffset int) string
}

Placeholder Examples​

DialectPlaceholder
PostgreSQL$1, $2
MySQL / MariaDB?
SQLite?
SQL Server@p1, @p2
Oracle:1, :2

Returning and Insert IDs​

DialectPreferred generated-ID path
PostgreSQLRETURNING
SQLiteRETURNING
MariaDBRETURNING
MySQLLastInsertId
SQL ServerSCOPE_IDENTITY()
OracleRETURNING ... INTO handling in Quark write path

Upsert​

DialectShape
PostgreSQLON CONFLICT (...) DO UPDATE SET ...
SQLiteON CONFLICT (...) DO UPDATE SET ...
MySQL / MariaDBON DUPLICATE KEY UPDATE ...
SQL ServerMERGE built by Quark's CRUD layer.
OracleMERGE built by Quark's CRUD layer.

Detection​

d, err := quark.DetectDialect("postgres")
d, err = quark.DetectDialectByName("mariadb")

DetectDialectByName first checks custom dialect registrations, then falls back to built-in detection.

Custom Dialects​

quark.RegisterDialect("cockroach", myDialect)

d, err := quark.DetectDialectByName("cockroach")
if err != nil {
return err
}

client, err := quark.New("pgx", dsn, quark.WithDialect(d))

Custom dialects must implement the full Dialect interface. A partial dialect will fail at compile time if assigned to a quark.Dialect variable.