Skip to main content
Version: 0.7.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.