Merge branch 'master' into dev

This commit is contained in:
Lunny Xiao 2014-05-07 15:02:58 +08:00
commit a49c17bff0
3 changed files with 89 additions and 42 deletions

View File

@ -31,11 +31,30 @@ type Column struct {
IsVersion bool IsVersion bool
fieldPath []string fieldPath []string
DefaultIsEmpty bool DefaultIsEmpty bool
EnumOptions map[string]int
} }
func NewColumn(name, fieldName string, sqlType SQLType, len1, len2 int, nullable bool) *Column { func NewColumn(name, fieldName string, sqlType SQLType, len1, len2 int, nullable bool) *Column {
return &Column{name, fieldName, sqlType, len1, len2, nullable, "", make(map[string]bool), false, false, return &Column{
TWOSIDES, false, false, false, false, nil, false} Name: name,
FieldName: fieldName,
SQLType: sqlType,
Length: len1,
Length2: len2,
Nullable: nullable,
Default: "",
Indexes: make(map[string]bool),
IsPrimaryKey: false,
IsAutoIncrement: false,
MapType: TWOSIDES,
IsCreated: false,
IsUpdated: false,
IsCascade: false,
IsVersion: false,
fieldPath: nil,
DefaultIsEmpty: false,
EnumOptions: make(map[string]int),
}
} }
// generate column description string according dialect // generate column description string according dialect

View File

@ -29,6 +29,7 @@ type Dialect interface {
DB() *DB DB() *DB
DBType() DbType DBType() DbType
SqlType(*Column) string SqlType(*Column) string
FormatBytes(b []byte) string
DriverName() string DriverName() string
DataSourceName() string DataSourceName() string
@ -100,6 +101,10 @@ func (b *Base) DBType() DbType {
return b.Uri.DbType return b.Uri.DbType
} }
func (b *Base) FormatBytes(bs []byte) string {
return fmt.Sprintf("0x%x", bs)
}
func (b *Base) DriverName() string { func (b *Base) DriverName() string {
return b.driverName return b.driverName
} }

103
type.go
View File

@ -22,15 +22,35 @@ type SQLType struct {
DefaultLength2 int DefaultLength2 int
} }
const (
UNKNOW_TYPE = iota
TEXT_TYPE
BLOB_TYPE
TIME_TYPE
NUMERIC_TYPE
)
func (s *SQLType) IsType(st int) bool {
if t, ok := SqlTypes[s.Name]; ok && t == st {
return true
}
return false
}
func (s *SQLType) IsText() bool { func (s *SQLType) IsText() bool {
return s.Name == Char || s.Name == Varchar || s.Name == TinyText || return s.IsType(TEXT_TYPE)
s.Name == Text || s.Name == MediumText || s.Name == LongText
} }
func (s *SQLType) IsBlob() bool { func (s *SQLType) IsBlob() bool {
return (s.Name == TinyBlob) || (s.Name == Blob) || return s.IsType(BLOB_TYPE)
s.Name == MediumBlob || s.Name == LongBlob || }
s.Name == Binary || s.Name == VarBinary || s.Name == Bytea
func (s *SQLType) IsTime() bool {
return s.IsType(TIME_TYPE)
}
func (s *SQLType) IsNumeric() bool {
return s.IsType(NUMERIC_TYPE)
} }
var ( var (
@ -42,6 +62,7 @@ var (
Integer = "INTEGER" Integer = "INTEGER"
BigInt = "BIGINT" BigInt = "BIGINT"
Enum = "ENUM"
Char = "CHAR" Char = "CHAR"
Varchar = "VARCHAR" Varchar = "VARCHAR"
TinyText = "TINYTEXT" TinyText = "TINYTEXT"
@ -75,46 +96,48 @@ var (
Serial = "SERIAL" Serial = "SERIAL"
BigSerial = "BIGSERIAL" BigSerial = "BIGSERIAL"
SqlTypes = map[string]bool{ SqlTypes = map[string]int{
Bit: true, Bit: NUMERIC_TYPE,
TinyInt: true, TinyInt: NUMERIC_TYPE,
SmallInt: true, SmallInt: NUMERIC_TYPE,
MediumInt: true, MediumInt: NUMERIC_TYPE,
Int: true, Int: NUMERIC_TYPE,
Integer: true, Integer: NUMERIC_TYPE,
BigInt: true, BigInt: NUMERIC_TYPE,
Char: true, Enum: TEXT_TYPE,
Varchar: true, Char: TEXT_TYPE,
TinyText: true, Varchar: TEXT_TYPE,
Text: true, TinyText: TEXT_TYPE,
MediumText: true, Text: TEXT_TYPE,
LongText: true, MediumText: TEXT_TYPE,
LongText: TEXT_TYPE,
Date: true, Date: TIME_TYPE,
DateTime: true, DateTime: TIME_TYPE,
Time: true, Time: TIME_TYPE,
TimeStamp: true, TimeStamp: TIME_TYPE,
TimeStampz: true, TimeStampz: TIME_TYPE,
Decimal: true, Decimal: NUMERIC_TYPE,
Numeric: true, Numeric: NUMERIC_TYPE,
Real: NUMERIC_TYPE,
Float: NUMERIC_TYPE,
Double: NUMERIC_TYPE,
Binary: true, Binary: BLOB_TYPE,
VarBinary: true, VarBinary: BLOB_TYPE,
Real: true,
Float: true,
Double: true,
TinyBlob: true,
Blob: true,
MediumBlob: true,
LongBlob: true,
Bytea: true,
Bool: true, TinyBlob: BLOB_TYPE,
Blob: BLOB_TYPE,
MediumBlob: BLOB_TYPE,
LongBlob: BLOB_TYPE,
Bytea: BLOB_TYPE,
Serial: true, Bool: NUMERIC_TYPE,
BigSerial: true,
Serial: NUMERIC_TYPE,
BigSerial: NUMERIC_TYPE,
} }
intTypes = sort.StringSlice{"*int", "*int16", "*int32", "*int8"} intTypes = sort.StringSlice{"*int", "*int16", "*int32", "*int8"}
@ -272,7 +295,7 @@ func SQLType2Type(st SQLType) reflect.Type {
return reflect.TypeOf(float32(1)) return reflect.TypeOf(float32(1))
case Double: case Double:
return reflect.TypeOf(float64(1)) return reflect.TypeOf(float64(1))
case Char, Varchar, TinyText, Text, MediumText, LongText: case Char, Varchar, TinyText, Text, MediumText, LongText, Enum:
return reflect.TypeOf("") return reflect.TypeOf("")
case TinyBlob, Blob, LongBlob, Bytea, Binary, MediumBlob, VarBinary: case TinyBlob, Blob, LongBlob, Bytea, Binary, MediumBlob, VarBinary:
return reflect.TypeOf([]byte{}) return reflect.TypeOf([]byte{})