mirror of
https://github.com/geektutu/7days-golang.git
synced 2024-04-21 12:32:11 +00:00
46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
package dialect
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
"time"
|
|
)
|
|
|
|
type sqlite3 struct{}
|
|
|
|
var _ Dialect = (*sqlite3)(nil)
|
|
|
|
func init() {
|
|
RegisterDialect("sqlite3", &sqlite3{})
|
|
}
|
|
|
|
// Get Data Type for sqlite3 Dialect
|
|
func (s *sqlite3) DataTypeOf(typ reflect.Value) string {
|
|
switch typ.Kind() {
|
|
case reflect.Bool:
|
|
return "bool"
|
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32,
|
|
reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uintptr:
|
|
return "integer"
|
|
case reflect.Int64, reflect.Uint64:
|
|
return "bigint"
|
|
case reflect.Float32, reflect.Float64:
|
|
return "real"
|
|
case reflect.String:
|
|
return "text"
|
|
case reflect.Array, reflect.Slice:
|
|
return "blob"
|
|
case reflect.Struct:
|
|
if _, ok := typ.Interface().(time.Time); ok {
|
|
return "datetime"
|
|
}
|
|
}
|
|
panic(fmt.Sprintf("invalid sql type %s (%s)", typ.Type().Name(), typ.Kind()))
|
|
}
|
|
|
|
// TableExistSQL returns SQL that judge whether the table exists in database
|
|
func (s *sqlite3) TableExistSQL(tableName string) (string, []interface{}) {
|
|
args := []interface{}{tableName}
|
|
return "SELECT name FROM sqlite_master WHERE type='table' and name = ?", args
|
|
}
|