gorm/dialect.go

51 lines
1.6 KiB
Go
Raw Normal View History

package gorm
2013-11-14 13:35:17 +04:00
2014-03-16 05:28:43 +04:00
import (
2014-07-02 13:47:30 +04:00
"fmt"
2014-03-16 05:28:43 +04:00
"reflect"
)
2016-01-19 06:53:53 +03:00
// Dialect interface contains behaviors that differ across SQL database
2013-11-14 13:35:17 +04:00
type Dialect interface {
2016-01-19 06:53:53 +03:00
// BindVar return the placeholder for actual values in SQL statements, in many dbs it is "?", Postgres using $1
BindVar(i int) string
// Quote quotes field name to avoid SQL parsing exceptions by using a reserved word as a field name
Quote(key string) string
2016-01-19 06:53:53 +03:00
// DataTypeOf return data's sql type
2016-01-19 15:58:38 +03:00
DataTypeOf(value reflect.Value, tagSettings map[string]string) string
2016-01-18 15:32:52 +03:00
2016-01-19 06:53:53 +03:00
// HasIndex check has index or not
HasIndex(scope *Scope, tableName string, indexName string) bool
2016-01-19 06:53:53 +03:00
// RemoveIndex remove index
RemoveIndex(scope *Scope, indexName string)
2016-01-19 06:53:53 +03:00
// HasTable check has table or not
2016-01-18 15:32:52 +03:00
HasTable(scope *Scope, tableName string) bool
2016-01-19 06:53:53 +03:00
// HasColumn check has column or not
2016-01-18 15:32:52 +03:00
HasColumn(scope *Scope, tableName string, columnName string) bool
2016-01-19 06:53:53 +03:00
// LimitAndOffsetSQL return generate SQL with limit and offset, as mssql has special case
2016-01-18 15:32:52 +03:00
LimitAndOffsetSQL(limit, offset int) string
2016-01-19 06:53:53 +03:00
// SelectFromDummyTable return select values, for most dbs, `SELECT values` just works, mysql needs `SELECT value FROM DUAL`
2016-01-18 15:32:52 +03:00
SelectFromDummyTable() string
2016-01-19 06:53:53 +03:00
// LastInsertIdReturningSuffix most dbs support LastInsertId, but postgres needs to use `RETURNING`
LastInsertIdReturningSuffix(tableName, columnName string) string
2013-11-14 13:35:17 +04:00
}
func NewDialect(driver string) Dialect {
2013-11-14 13:35:17 +04:00
var d Dialect
switch driver {
case "postgres":
2013-11-14 14:59:11 +04:00
d = &postgres{}
2013-11-14 13:35:17 +04:00
case "mysql":
2013-11-14 14:59:11 +04:00
d = &mysql{}
2013-11-14 13:35:17 +04:00
case "sqlite3":
2013-11-14 14:59:11 +04:00
d = &sqlite3{}
2014-09-17 01:49:29 +04:00
case "mssql":
d = &mssql{}
2014-07-02 13:47:30 +04:00
default:
fmt.Printf("`%v` is not officially supported, running under compatibility mode.\n", driver)
d = &commonDialect{}
2013-11-14 13:35:17 +04:00
}
2013-11-14 14:59:11 +04:00
return d
2013-11-14 13:35:17 +04:00
}