package mysql
import (
"database/sql"
"reflect"
)
func (mf *mysqlField ) typeDatabaseName () string {
switch mf .fieldType {
case fieldTypeBit :
return "BIT"
case fieldTypeBLOB :
if mf .charSet != collations [binaryCollation ] {
return "TEXT"
}
return "BLOB"
case fieldTypeDate :
return "DATE"
case fieldTypeDateTime :
return "DATETIME"
case fieldTypeDecimal :
return "DECIMAL"
case fieldTypeDouble :
return "DOUBLE"
case fieldTypeEnum :
return "ENUM"
case fieldTypeFloat :
return "FLOAT"
case fieldTypeGeometry :
return "GEOMETRY"
case fieldTypeInt24 :
return "MEDIUMINT"
case fieldTypeJSON :
return "JSON"
case fieldTypeLong :
if mf .flags &flagUnsigned != 0 {
return "UNSIGNED INT"
}
return "INT"
case fieldTypeLongBLOB :
if mf .charSet != collations [binaryCollation ] {
return "LONGTEXT"
}
return "LONGBLOB"
case fieldTypeLongLong :
if mf .flags &flagUnsigned != 0 {
return "UNSIGNED BIGINT"
}
return "BIGINT"
case fieldTypeMediumBLOB :
if mf .charSet != collations [binaryCollation ] {
return "MEDIUMTEXT"
}
return "MEDIUMBLOB"
case fieldTypeNewDate :
return "DATE"
case fieldTypeNewDecimal :
return "DECIMAL"
case fieldTypeNULL :
return "NULL"
case fieldTypeSet :
return "SET"
case fieldTypeShort :
if mf .flags &flagUnsigned != 0 {
return "UNSIGNED SMALLINT"
}
return "SMALLINT"
case fieldTypeString :
if mf .charSet == collations [binaryCollation ] {
return "BINARY"
}
return "CHAR"
case fieldTypeTime :
return "TIME"
case fieldTypeTimestamp :
return "TIMESTAMP"
case fieldTypeTiny :
if mf .flags &flagUnsigned != 0 {
return "UNSIGNED TINYINT"
}
return "TINYINT"
case fieldTypeTinyBLOB :
if mf .charSet != collations [binaryCollation ] {
return "TINYTEXT"
}
return "TINYBLOB"
case fieldTypeVarChar :
if mf .charSet == collations [binaryCollation ] {
return "VARBINARY"
}
return "VARCHAR"
case fieldTypeVarString :
if mf .charSet == collations [binaryCollation ] {
return "VARBINARY"
}
return "VARCHAR"
case fieldTypeYear :
return "YEAR"
default :
return ""
}
}
var (
scanTypeFloat32 = reflect .TypeOf (float32 (0 ))
scanTypeFloat64 = reflect .TypeOf (float64 (0 ))
scanTypeInt8 = reflect .TypeOf (int8 (0 ))
scanTypeInt16 = reflect .TypeOf (int16 (0 ))
scanTypeInt32 = reflect .TypeOf (int32 (0 ))
scanTypeInt64 = reflect .TypeOf (int64 (0 ))
scanTypeNullFloat = reflect .TypeOf (sql .NullFloat64 {})
scanTypeNullInt = reflect .TypeOf (sql .NullInt64 {})
scanTypeNullTime = reflect .TypeOf (sql .NullTime {})
scanTypeUint8 = reflect .TypeOf (uint8 (0 ))
scanTypeUint16 = reflect .TypeOf (uint16 (0 ))
scanTypeUint32 = reflect .TypeOf (uint32 (0 ))
scanTypeUint64 = reflect .TypeOf (uint64 (0 ))
scanTypeRawBytes = reflect .TypeOf (sql .RawBytes {})
scanTypeUnknown = reflect .TypeOf (new (interface {}))
)
type mysqlField struct {
tableName string
name string
length uint32
flags fieldFlag
fieldType fieldType
decimals byte
charSet uint8
}
func (mf *mysqlField ) scanType () reflect .Type {
switch mf .fieldType {
case fieldTypeTiny :
if mf .flags &flagNotNULL != 0 {
if mf .flags &flagUnsigned != 0 {
return scanTypeUint8
}
return scanTypeInt8
}
return scanTypeNullInt
case fieldTypeShort , fieldTypeYear :
if mf .flags &flagNotNULL != 0 {
if mf .flags &flagUnsigned != 0 {
return scanTypeUint16
}
return scanTypeInt16
}
return scanTypeNullInt
case fieldTypeInt24 , fieldTypeLong :
if mf .flags &flagNotNULL != 0 {
if mf .flags &flagUnsigned != 0 {
return scanTypeUint32
}
return scanTypeInt32
}
return scanTypeNullInt
case fieldTypeLongLong :
if mf .flags &flagNotNULL != 0 {
if mf .flags &flagUnsigned != 0 {
return scanTypeUint64
}
return scanTypeInt64
}
return scanTypeNullInt
case fieldTypeFloat :
if mf .flags &flagNotNULL != 0 {
return scanTypeFloat32
}
return scanTypeNullFloat
case fieldTypeDouble :
if mf .flags &flagNotNULL != 0 {
return scanTypeFloat64
}
return scanTypeNullFloat
case fieldTypeDecimal , fieldTypeNewDecimal , fieldTypeVarChar ,
fieldTypeBit , fieldTypeEnum , fieldTypeSet , fieldTypeTinyBLOB ,
fieldTypeMediumBLOB , fieldTypeLongBLOB , fieldTypeBLOB ,
fieldTypeVarString , fieldTypeString , fieldTypeGeometry , fieldTypeJSON ,
fieldTypeTime :
return scanTypeRawBytes
case fieldTypeDate , fieldTypeNewDate ,
fieldTypeTimestamp , fieldTypeDateTime :
return scanTypeNullTime
default :
return scanTypeUnknown
}
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .