You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.3 KiB

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)
}