package db import "fmt" type DialectType int const ( DialectSQLite DialectType = iota DialectMySQL DialectType = iota ) func (d DialectType) Column(name string, t ColumnType, size OptionalInt) *Column { switch d { case DialectSQLite: return &Column{Dialect: DialectSQLite, Name: name, Type: t, Size: size} case DialectMySQL: return &Column{Dialect: DialectMySQL, Name: name, Type: t, Size: size} default: panic(fmt.Sprintf("unexpected dialect: %d", d)) } } func (d DialectType) Table(name string) *CreateTableSqlBuilder { switch d { case DialectSQLite: return &CreateTableSqlBuilder{Dialect: DialectSQLite, Name: name} case DialectMySQL: return &CreateTableSqlBuilder{Dialect: DialectMySQL, Name: name} default: panic(fmt.Sprintf("unexpected dialect: %d", d)) } } func (d DialectType) AlterTable(name string) *AlterTableSqlBuilder { switch d { case DialectSQLite: return &AlterTableSqlBuilder{Dialect: DialectSQLite, Name: name} case DialectMySQL: return &AlterTableSqlBuilder{Dialect: DialectMySQL, Name: name} default: panic(fmt.Sprintf("unexpected dialect: %d", d)) } } func (d DialectType) CreateUniqueIndex(name, table string, columns ...string) *CreateIndexSqlBuilder { switch d { case DialectSQLite: return &CreateIndexSqlBuilder{Dialect: DialectSQLite, Name: name, Table: table, Unique: true, Columns: columns} case DialectMySQL: return &CreateIndexSqlBuilder{Dialect: DialectMySQL, Name: name, Table: table, Unique: true, Columns: columns} default: panic(fmt.Sprintf("unexpected dialect: %d", d)) } } func (d DialectType) CreateIndex(name, table string, columns ...string) *CreateIndexSqlBuilder { switch d { case DialectSQLite: return &CreateIndexSqlBuilder{Dialect: DialectSQLite, Name: name, Table: table, Unique: false, Columns: columns} case DialectMySQL: return &CreateIndexSqlBuilder{Dialect: DialectMySQL, Name: name, Table: table, Unique: false, Columns: columns} default: panic(fmt.Sprintf("unexpected dialect: %d", d)) } } func (d DialectType) DropIndex(name, table string) *DropIndexSqlBuilder { switch d { case DialectSQLite: return &DropIndexSqlBuilder{Dialect: DialectSQLite, Name: name, Table: table} case DialectMySQL: return &DropIndexSqlBuilder{Dialect: DialectMySQL, Name: name, Table: table} default: panic(fmt.Sprintf("unexpected dialect: %d", d)) } }