本文整理汇总了Golang中github.com/pingcap/tidb/field.ResultField类的典型用法代码示例。如果您正苦于以下问题:Golang ResultField类的具体用法?Golang ResultField怎么用?Golang ResultField使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ResultField类的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: ResolveSelectList
// ResolveSelectList gets fields and result fields from selectFields and srcFields,
// including field validity check and wildcard field processing.
func ResolveSelectList(selectFields []*field.Field, srcFields []*field.ResultField) (*SelectList, error) {
selectList := &SelectList{
Fields: make([]*field.Field, 0, len(selectFields)),
ResultFields: make([]*field.ResultField, 0, len(selectFields)),
AggFields: make(map[int]struct{}),
}
wildcardNum := 0
for _, v := range selectFields {
if err := expressions.CheckOneColumn(v.Expr); err != nil {
return nil, errors.Trace(err)
}
// Check metioned field.
names := expressions.MentionedColumns(v.Expr)
if len(names) == 0 {
selectList.AddField(v, nil)
continue
}
// Check wildcard field.
name := names[0]
table, ok, err := field.CheckWildcardField(name)
if err != nil {
return nil, err
}
if ok {
// Check unqualified wildcard field number,
// like `select *, * from t`.
if table == "" {
wildcardNum++
if wildcardNum > 1 {
return nil, errors.Errorf("wildcard field exist more than once")
}
}
selectList.updateFields(table, srcFields)
continue
}
var result *field.ResultField
if err = field.CheckAllFieldNames(names, srcFields, field.DefaultFieldFlag); err != nil {
return nil, errors.Trace(err)
}
if _, ok := v.Expr.(*expressions.Ident); ok {
// Field is ident.
if result, err = field.CloneFieldByName(name, srcFields, field.DefaultFieldFlag); err != nil {
return nil, errors.Trace(err)
}
// Maybe alias name or only column name.
if !expressions.IsQualified(v.Name) {
result.Name = v.Name
}
} else {
// The field is not an ident, maybe binary expression,
// like `select c1 + c2`, or `select c1 + 10`, etc.
result = &field.ResultField{Name: v.Name}
}
selectList.AddField(v, result)
}
selectList.HiddenFieldOffset = len(selectList.Fields)
selectList.resolveAggFields()
if selectList.HiddenFieldOffset == 0 {
return nil, errors.Errorf("invalid empty select fields")
}
return selectList, nil
}
示例2: ResolveSelectList
// ResolveSelectList gets fields and result fields from selectFields and srcFields,
// including field validity check and wildcard field processing.
func ResolveSelectList(selectFields []*field.Field, srcFields []*field.ResultField) (*SelectList, error) {
selectList := &SelectList{
Fields: make([]*field.Field, 0, len(selectFields)),
ResultFields: make([]*field.ResultField, 0, len(selectFields)),
AggFields: make(map[int]struct{}),
FromFields: srcFields,
}
wildcardNum := 0
for _, v := range selectFields {
// Check metioned field.
names := expression.MentionedColumns(v.Expr)
if len(names) == 0 {
selectList.AddField(v, nil)
continue
}
// Check wildcard field.
name := names[0]
table, ok, err := field.CheckWildcardField(name)
if err != nil {
return nil, err
}
if ok {
// Check unqualified wildcard field number,
// like `select *, * from t`.
if table == "" {
wildcardNum++
if wildcardNum > 1 {
return nil, errors.Errorf("wildcard field exist more than once")
}
}
selectList.updateFields(table, srcFields)
continue
}
var result *field.ResultField
for _, name := range names {
idx := field.GetResultFieldIndex(name, srcFields, field.DefaultFieldFlag)
if len(idx) > 1 {
return nil, errors.Errorf("ambiguous field %s", name)
}
// TODO: must check in outer query too.
if len(idx) == 0 {
return nil, errors.Errorf("unknown field %s", name)
}
}
if _, ok := v.Expr.(*expression.Ident); ok {
// Field is ident.
if result, err = field.CloneFieldByName(name, srcFields, field.DefaultFieldFlag); err != nil {
return nil, errors.Trace(err)
}
// Use alias name
if len(v.AsName) > 0 {
result.Name = v.AsName
} else {
// use field identifier name directly, but not contain qualified name.
// e.g, select t.c will only return c as the column name.
s := v.Expr.String()
n := strings.LastIndexByte(s, '.')
if n == -1 {
result.Name = s
} else {
result.Name = s[n+1:]
}
}
}
selectList.AddField(v, result)
}
selectList.HiddenFieldOffset = len(selectList.Fields)
selectList.resolveAggFields()
if selectList.HiddenFieldOffset == 0 {
return nil, errors.Errorf("invalid empty select fields")
}
return selectList, nil
}