57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
|
package column
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"reflect"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type ErrUnexpectedType struct {
|
||
|
Column Column
|
||
|
T interface{}
|
||
|
}
|
||
|
|
||
|
func (err *ErrUnexpectedType) Error() string {
|
||
|
return fmt.Sprintf("%s: unexpected type %T", err.Column, err.T)
|
||
|
}
|
||
|
|
||
|
var baseTypes = map[interface{}]reflect.Value{
|
||
|
int8(0): reflect.ValueOf(int8(0)),
|
||
|
int16(0): reflect.ValueOf(int16(0)),
|
||
|
int32(0): reflect.ValueOf(int32(0)),
|
||
|
int64(0): reflect.ValueOf(int64(0)),
|
||
|
uint8(0): reflect.ValueOf(uint8(0)),
|
||
|
uint16(0): reflect.ValueOf(uint16(0)),
|
||
|
uint32(0): reflect.ValueOf(uint32(0)),
|
||
|
uint64(0): reflect.ValueOf(uint64(0)),
|
||
|
float32(0): reflect.ValueOf(float32(0)),
|
||
|
float64(0): reflect.ValueOf(float64(0)),
|
||
|
string(""): reflect.ValueOf(string("")),
|
||
|
time.Time{}: reflect.ValueOf(time.Time{}),
|
||
|
}
|
||
|
|
||
|
type base struct {
|
||
|
name, chType string
|
||
|
valueOf reflect.Value
|
||
|
}
|
||
|
|
||
|
func (base *base) Name() string {
|
||
|
return base.name
|
||
|
}
|
||
|
|
||
|
func (base *base) CHType() string {
|
||
|
return base.chType
|
||
|
}
|
||
|
|
||
|
func (base *base) ScanType() reflect.Type {
|
||
|
return base.valueOf.Type()
|
||
|
}
|
||
|
|
||
|
func (base *base) defaultValue() interface{} {
|
||
|
return base.valueOf.Interface()
|
||
|
}
|
||
|
|
||
|
func (base *base) String() string {
|
||
|
return fmt.Sprintf("%s (%s)", base.name, base.chType)
|
||
|
}
|