Merge branch 'master' into dev
This commit is contained in:
commit
a49c17bff0
23
column.go
23
column.go
|
@ -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
|
||||||
|
|
|
@ -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
103
type.go
|
@ -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{})
|
||||||
|
|
Loading…
Reference in New Issue