sqldriver/data.go (222 lines of code) (raw):

package sqldriver import ( "database/sql" "reflect" "github.com/pkg/errors" "github.com/aliyun/aliyun-odps-go-sdk/odps/data" ) type ( NullBool sql.NullBool NullFloat64 sql.NullFloat64 NullInt32 sql.NullInt32 NullInt64 sql.NullInt64 NullString sql.NullString NullDate sql.NullTime NullDateTime sql.NullTime NullTimeStamp sql.NullTime NullTimeStampNtz sql.NullTime Binary sql.RawBytes Decimal data.Decimal Map data.Map Array data.Array Struct data.Struct Json data.Json ) type NullInt8 struct { Int8 int8 Valid bool // Valid is true if Int16 is not NULL } type NullInt16 struct { Int16 int16 Valid bool // Valid is true if Int16 is not NULL } func (n *NullBool) Scan(value interface{}) error { return (*sql.NullBool)(n).Scan(value) } func (n *NullFloat64) Scan(value interface{}) error { return (*sql.NullFloat64)(n).Scan(value) } func (n *NullInt32) Scan(value interface{}) error { return (*sql.NullInt32)(n).Scan(value) } func (n *NullInt64) Scan(value interface{}) error { return (*sql.NullInt64)(n).Scan(value) } func (n *NullString) Scan(value interface{}) error { return (*sql.NullString)(n).Scan(value) } func (n *NullDate) Scan(value interface{}) error { return (*sql.NullTime)(n).Scan(value) } func (n *NullDateTime) Scan(value interface{}) error { return (*sql.NullTime)(n).Scan(value) } func (n *NullTimeStamp) Scan(value interface{}) error { return (*sql.NullTime)(n).Scan(value) } func (n *NullTimeStampNtz) Scan(value interface{}) error { return (*sql.NullTime)(n).Scan(value) } func (n *Decimal) Scan(value interface{}) error { return (*data.Decimal)(n).Scan(value) } func (n *Map) Scan(value interface{}) error { return (*data.Map)(n).Scan(value) } func (n *Array) Scan(value interface{}) error { return (*data.Array)(n).Scan(value) } func (n *Struct) Scan(value interface{}) error { return (*data.Struct)(n).Scan(value) } func (n *Json) Scan(value interface{}) error { return (*data.Json)(n).Scan(value) } func (n *NullInt16) Scan(value interface{}) error { if value == nil { n.Int16, n.Valid = 0, false return nil } n.Valid = true v, ok := value.(int16) if !ok { return newConvertError(value, *n) } n.Int16 = v return nil } func (n *NullInt8) Scan(value interface{}) error { if value == nil { n.Int8, n.Valid = 0, false return nil } n.Valid = true v, ok := value.(int8) if !ok { return newConvertError(value, *n) } n.Int8 = v return nil } type NullFloat32 struct { Float32 float32 Valid bool } func (n *NullFloat32) Scan(value interface{}) error { if value == nil { n.Float32, n.Valid = 0, false return nil } n.Valid = true v, ok := value.(float32) if !ok { return newConvertError(value, *n) } n.Float32 = v return nil } func (n *Binary) Scan(value interface{}) error { if value == nil { *n = nil return nil } d, ok := value.([]byte) if !ok { srcT := reflect.TypeOf(value) return errors.Errorf("cannt convert %s to sqldriver.Binary", srcT.Name()) } *n = d return nil } type NullAble interface { IsNull() bool } func (n NullInt8) IsNull() bool { return !n.Valid } func (n NullInt16) IsNull() bool { return !n.Valid } func (n NullInt32) IsNull() bool { return !n.Valid } func (n NullInt64) IsNull() bool { return !n.Valid } func (n NullFloat32) IsNull() bool { return !n.Valid } func (n NullFloat64) IsNull() bool { return !n.Valid } func (n NullDate) IsNull() bool { return !n.Valid } func (n NullDateTime) IsNull() bool { return !n.Valid } func (n NullTimeStamp) IsNull() bool { return !n.Valid } func (n NullTimeStampNtz) IsNull() bool { return !n.Valid } func (n NullBool) IsNull() bool { return !n.Valid } func (n Binary) IsNull() bool { return []byte(n) == nil } func (n NullString) IsNull() bool { return !n.Valid } func (n Decimal) IsNull() bool { return !n.Valid } func (n Map) IsNull() bool { return !n.Valid } func (n Array) IsNull() bool { return !n.Valid } func (n Struct) IsNull() bool { return !n.Valid } func (n Json) IsNull() bool { return !n.Valid } func (n NullDate) String() string { return data.Date(n.Time).String() } func (n NullDateTime) String() string { return data.DateTime(n.Time).String() } func (n NullTimeStamp) String() string { return data.Timestamp(n.Time).String() } func (n NullTimeStampNtz) String() string { return data.TimestampNtz(n.Time).String() } func (n Decimal) String() string { return data.Decimal(n).String() } func (n Map) String() string { return data.Map(n).String() } func (n Array) String() string { return data.Array(n).String() } func (n Struct) String() string { return data.Struct(n).String() } func (n Json) String() string { return data.Json(n).String() } func (n Binary) String() string { return data.Binary(n).String() } func newConvertError(src interface{}, dst interface{}) error { srcT := reflect.TypeOf(src) dstT := reflect.TypeOf(dst) return errors.Errorf("cannot convert %s to %s", srcT.Name(), dstT.Name()) }