mirror of
https://github.com/gohouse/gorose.git
synced 2025-12-24 12:47:55 +08:00
57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
package gorose
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
type Bindings struct {
|
|
sql4prepare string
|
|
err error
|
|
bindings []any
|
|
}
|
|
type IDriver interface {
|
|
ToSql(c *Context) (sql4prepare string, binds []any, err error)
|
|
ToSqlIncDec(c *Context, symbol string, data map[string]any) (sql4prepare string, values []any, err error)
|
|
ToSqlSelect(c *Context) (sql4prepare string, binds []any)
|
|
ToSqlTable(c *Context) (sql4prepare string, values []any, err error)
|
|
ToSqlJoin(c *Context) (sql4prepare string, binds []any, err error)
|
|
ToSqlWhere(c *Context) (sql4prepare string, values []any, err error)
|
|
ToSqlOrderBy(c *Context) (sql4prepare string)
|
|
ToSqlLimitOffset(c *Context) (sqlSegment string, binds []any)
|
|
ToSqlInsert(c *Context, obj any, ignore string, onDuplicateKeys []string, mustFields ...string) (sqlSegment string, binds []any, err error)
|
|
ToSqlUpdate(c *Context, obj any, mustFields ...string) (sqlSegment string, binds []any, err error)
|
|
ToSqlDelete(c *Context, obj any) (sqlSegment string, binds []any, err error)
|
|
}
|
|
|
|
type Driver struct {
|
|
IDriver
|
|
}
|
|
|
|
func NewDriver(d IDriver) *Driver {
|
|
return &Driver{IDriver: d}
|
|
}
|
|
|
|
var driverMap = map[string]IDriver{}
|
|
var driverLock sync.RWMutex
|
|
|
|
func Register(driver string, parser IDriver) {
|
|
driverLock.Lock()
|
|
defer driverLock.Unlock()
|
|
driverMap[driver] = parser
|
|
}
|
|
|
|
func GetDriver(driver string) IDriver {
|
|
driverLock.RLock()
|
|
defer driverLock.RUnlock()
|
|
return driverMap[driver]
|
|
}
|
|
|
|
func DriverList() (dr []string) {
|
|
driverLock.RLock()
|
|
defer driverLock.RUnlock()
|
|
for d := range driverMap {
|
|
dr = append(dr, d)
|
|
}
|
|
return
|
|
}
|