package grmi
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
)
|
|
|
|
type ColumnField struct {
|
|
Name string
|
|
ColumnName string
|
|
FullName string
|
|
UrlParameterName string
|
|
IsKey bool
|
|
Source Source
|
|
GoType GoType
|
|
Type reflect.Type
|
|
ParameterInfo *ParameterInfo
|
|
ValueParser func(string) (interface{}, error)
|
|
PredicateType func(Predicate) (string, error)
|
|
}
|
|
|
|
func NewColumnField(tableName string, name string, columnName string, urlParameterName string, isKey bool, source Source, goType GoType, predicateType func(Predicate) (string, error)) *ColumnField {
|
|
basicType, ok := basicTypes[goType]
|
|
if !ok {
|
|
panic("找不到类型!")
|
|
}
|
|
valueParser, ok := valueParsers[goType]
|
|
if !ok {
|
|
panic("找不到值解析器!")
|
|
}
|
|
parameterParserBuilder, ok := parameterParserBuilders[goType]
|
|
if !ok {
|
|
panic("找不到Url参数解析器!")
|
|
}
|
|
parameterInfo := &ParameterInfo{
|
|
Type: basicType,
|
|
Parser: parameterParserBuilder(urlParameterName),
|
|
}
|
|
return &ColumnField{name, columnName, fmt.Sprintf("%s.%s", tableName, columnName), urlParameterName, isKey, source, goType, basicType, parameterInfo, valueParser, predicateType}
|
|
}
|
|
|
|
func (field *ColumnField) NewPredicate(predicateType func(Predicate) (string, error), values ...interface{}) *Predicate {
|
|
return NewPredicate(field.ColumnName, predicateType, values)
|
|
}
|