mirror of https://github.com/VinGarcia/ksql.git
105 lines
2.0 KiB
Go
105 lines
2.0 KiB
Go
package sqldialect
|
|
|
|
import (
|
|
"strconv"
|
|
)
|
|
|
|
type InsertMethod int
|
|
|
|
const (
|
|
InsertWithReturning InsertMethod = iota
|
|
InsertWithOutput
|
|
InsertWithLastInsertID
|
|
InsertWithNoIDRetrieval
|
|
)
|
|
|
|
var SupportedDialects = map[string]Provider{
|
|
"postgres": &PostgresDialect{},
|
|
"sqlite3": &Sqlite3Dialect{},
|
|
"mysql": &MysqlDialect{},
|
|
"sqlserver": &SqlserverDialect{},
|
|
}
|
|
|
|
// Provider or dialect.Provider represents one particular
|
|
// way of writing SQL queries.
|
|
//
|
|
// Different DBAdapters will use require different dialects to work.
|
|
type Provider interface {
|
|
InsertMethod() InsertMethod
|
|
Escape(str string) string
|
|
Placeholder(idx int) string
|
|
DriverName() string
|
|
}
|
|
|
|
type PostgresDialect struct{}
|
|
|
|
func (PostgresDialect) DriverName() string {
|
|
return "postgres"
|
|
}
|
|
|
|
func (PostgresDialect) InsertMethod() InsertMethod {
|
|
return InsertWithReturning
|
|
}
|
|
|
|
func (PostgresDialect) Escape(str string) string {
|
|
return `"` + str + `"`
|
|
}
|
|
|
|
func (PostgresDialect) Placeholder(idx int) string {
|
|
return "$" + strconv.Itoa(idx+1)
|
|
}
|
|
|
|
type Sqlite3Dialect struct{}
|
|
|
|
func (Sqlite3Dialect) DriverName() string {
|
|
return "sqlite3"
|
|
}
|
|
|
|
func (Sqlite3Dialect) InsertMethod() InsertMethod {
|
|
return InsertWithLastInsertID
|
|
}
|
|
|
|
func (Sqlite3Dialect) Escape(str string) string {
|
|
return "`" + str + "`"
|
|
}
|
|
|
|
func (Sqlite3Dialect) Placeholder(idx int) string {
|
|
return "?"
|
|
}
|
|
|
|
type MysqlDialect struct{}
|
|
|
|
func (MysqlDialect) DriverName() string {
|
|
return "mysql"
|
|
}
|
|
|
|
func (MysqlDialect) InsertMethod() InsertMethod {
|
|
return InsertWithLastInsertID
|
|
}
|
|
|
|
func (MysqlDialect) Escape(str string) string {
|
|
return "`" + str + "`"
|
|
}
|
|
|
|
func (MysqlDialect) Placeholder(idx int) string {
|
|
return "?"
|
|
}
|
|
|
|
type SqlserverDialect struct{}
|
|
|
|
func (SqlserverDialect) DriverName() string {
|
|
return "sqlserver"
|
|
}
|
|
|
|
func (SqlserverDialect) InsertMethod() InsertMethod {
|
|
return InsertWithOutput
|
|
}
|
|
|
|
func (SqlserverDialect) Escape(str string) string {
|
|
return `[` + str + `]`
|
|
}
|
|
|
|
func (SqlserverDialect) Placeholder(idx int) string {
|
|
return "@p" + strconv.Itoa(idx+1)
|
|
}
|