Dew

Dialects

Supported SQL dialects and placeholder styles.

Dew supports multiple SQL dialects. A dialect controls how query placeholders are rendered.

Available dialects

DialectStructPlaceholdersExample
PostgreSQLdew.PostgreSQLDialect{}$1, $2, $3WHERE id = $1
MySQLdew.MySQLDialect{}?, ?, ?WHERE id = ?
SQLitedew.SQLiteDialect{}?, ?, ?WHERE id = ?
MSSQLdew.MSSQLDialect{}@p1, @p2, @p3WHERE id = @p1

Usage

Pass a dialect when opening a connection:

db, err := dew.Open("postgres", dsn, dew.PostgreSQLDialect{})

And when defining schemas:

var Users = dew.DefineSchema("users", dew.PostgreSQLDialect{}, func(t dew.Table[User]) struct {
    // ...
})

The Dialect interface

type Dialect interface {
    Placeholder(index int) string
}

The index is zero-based. PostgreSQL's Placeholder(0) returns "$1", Placeholder(1) returns "$2", etc.

Custom dialects

Implement the Dialect interface to support other databases:

type OracleDialect struct{}

func (d OracleDialect) Placeholder(index int) string {
    return fmt.Sprintf(":p%d", index+1)
}

Then use it like any built-in dialect:

db, err := dew.Open("oracle", dsn, OracleDialect{})

On this page