gorm/crate.go
André Martins 0b21fdde50 Implementing crate dialect
Signed-off-by: André Martins <martins@noironetworks.com>
2015-05-15 23:00:39 +01:00

63 lines
1.6 KiB
Go

package gorm
import (
"fmt"
"reflect"
"time"
)
type crate struct {
commonDialect
}
func (crate) SupportLastInsertId() bool {
return false
}
func (crate) SqlTag(value reflect.Value, size int, autoIncrease bool) string {
//Crate doesn't support autoIncrease
switch value.Kind() {
case reflect.Bool:
return "boolean"
case reflect.Int8, reflect.Int16, reflect.Uint8, reflect.Uint16:
return "short"
case reflect.Int, reflect.Int32, reflect.Uint, reflect.Uint32, reflect.Uintptr:
return "integer"
case reflect.Int64, reflect.Uint64:
return "double"
case reflect.Float32, reflect.Float64:
return "float"
case reflect.String:
return "string"
case reflect.Struct:
if _, ok := value.Interface().(time.Time); ok {
return "timestamp NULL"
}
default:
if _, ok := value.Interface().([]byte); ok {
return "object"
}
}
panic(fmt.Sprintf("invalid sql type %s (%s) for mysql", value.Type().Name(), value.Kind().String()))
}
func (c crate) HasTable(scope *Scope, tableName string) bool {
var count int
scope.NewDB().Raw("SELECT count(*) FROM INFORMATION_SCHEMA.TABLES WHERE table_name = ? AND schema_name = 'doc'", tableName).Row().Scan(&count)
return count > 0
}
func (c crate) HasColumn(scope *Scope, tableName string, columnName string) bool {
var count int
scope.NewDB().Raw("SELECT count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE schema_name = 'doc' AND table_name = ? AND column_name = ?", tableName, columnName).Row().Scan(&count)
return count > 0
}
func (crate) Quote(key string) string {
return fmt.Sprintf(`"%s"`, key)
}
func (crate) QueryTerminator() string {
return ""
}