mirror of
https://github.com/uptrace/go-clickhouse.git
synced 2025-06-08 23:26:11 +02:00
59 lines
1.0 KiB
Go
59 lines
1.0 KiB
Go
package chschema
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
)
|
|
|
|
const (
|
|
customTypeFlag = uint8(1) << iota
|
|
)
|
|
|
|
type Field struct {
|
|
Field reflect.StructField
|
|
Type reflect.Type
|
|
Index []int
|
|
|
|
GoName string // struct field name, e.g. Id
|
|
CHName string // SQL name, .e.g. id
|
|
Column Safe // escaped SQL name, e.g. "id"
|
|
CHType string
|
|
CHDefault Safe
|
|
|
|
NewColumn NewColumnFunc
|
|
appendValue AppenderFunc
|
|
|
|
IsPK bool
|
|
NotNull bool
|
|
|
|
flags uint8
|
|
}
|
|
|
|
func (f *Field) String() string {
|
|
return "field=" + f.GoName
|
|
}
|
|
|
|
func (f *Field) Value(strct reflect.Value) reflect.Value {
|
|
return fieldByIndexAlloc(strct, f.Index)
|
|
}
|
|
|
|
func (f *Field) AppendValue(fmter Formatter, b []byte, strct reflect.Value) []byte {
|
|
fv, ok := fieldByIndex(strct, f.Index)
|
|
if !ok {
|
|
return AppendNull(b)
|
|
}
|
|
|
|
if f.appendValue == nil {
|
|
return AppendError(b, fmt.Errorf("ch: AppendValue(unsupported %s)", fv.Type()))
|
|
}
|
|
return f.appendValue(fmter, b, fv)
|
|
}
|
|
|
|
func (f *Field) setFlag(flag uint8) {
|
|
f.flags |= flag
|
|
}
|
|
|
|
func (f *Field) hasFlag(flag uint8) bool {
|
|
return f.flags&flag != 0
|
|
}
|