MCPcopy
hub / github.com/pingcap/tidb / ColumnInfos2ColumnsAndNames

Function ColumnInfos2ColumnsAndNames

pkg/expression/expression.go:1070–1125  ·  view source on GitHub ↗

ColumnInfos2ColumnsAndNames converts the ColumnInfo to the *Column and NameSlice.

(ctx BuildContext, dbName, tblName pmodel.CIStr, colInfos []*model.ColumnInfo, tblInfo *model.TableInfo)

Source from the content-addressed store, hash-verified

1068
1069// ColumnInfos2ColumnsAndNames converts the ColumnInfo to the *Column and NameSlice.
1070func ColumnInfos2ColumnsAndNames(ctx BuildContext, dbName, tblName pmodel.CIStr, colInfos []*model.ColumnInfo, tblInfo *model.TableInfo) ([]*Column, types.NameSlice, error) {
1071 columns := make([]*Column, 0, len(colInfos))
1072 names := make([]*types.FieldName, 0, len(colInfos))
1073 for i, col := range colInfos {
1074 names = append(names, &types.FieldName{
1075 OrigTblName: tblName,
1076 OrigColName: col.Name,
1077 DBName: dbName,
1078 TblName: tblName,
1079 ColName: col.Name,
1080 })
1081 newCol := &Column{
1082 RetType: col.FieldType.Clone(),
1083 ID: col.ID,
1084 UniqueID: ctx.AllocPlanColumnID(),
1085 Index: col.Offset,
1086 OrigName: names[i].String(),
1087 IsHidden: col.Hidden,
1088 }
1089 columns = append(columns, newCol)
1090 }
1091 // Resolve virtual generated column.
1092 mockSchema := NewSchema(columns...)
1093
1094 truncateIgnored := false
1095 for i, col := range colInfos {
1096 if col.IsVirtualGenerated() {
1097 if !truncateIgnored {
1098 // Ignore redundant warning here.
1099 ctx = exprctx.CtxWithHandleTruncateErrLevel(ctx, errctx.LevelIgnore)
1100 truncateIgnored = true
1101 }
1102
1103 expr, err := generatedexpr.ParseExpression(col.GeneratedExprString)
1104 if err != nil {
1105 return nil, nil, errors.Trace(err)
1106 }
1107 expr, err = generatedexpr.SimpleResolveName(expr, tblInfo)
1108 if err != nil {
1109 return nil, nil, errors.Trace(err)
1110 }
1111 e, err := BuildSimpleExpr(ctx, expr, WithInputSchemaAndNames(mockSchema, names, tblInfo), WithAllowCastArray(true))
1112 if err != nil {
1113 return nil, nil, errors.Trace(err)
1114 }
1115 if e != nil {
1116 columns[i].VirtualExpr = e.Clone()
1117 }
1118 columns[i].VirtualExpr, err = columns[i].VirtualExpr.ResolveIndices(mockSchema)
1119 if err != nil {
1120 return nil, nil, errors.Trace(err)
1121 }
1122 }
1123 }
1124 return columns, names, nil
1125}
1126
1127// NewValuesFunc creates a new values function.

Callers 13

TestBuildExpressionFunction · 0.92
prepareBenchCtxFunction · 0.92
prepareTestCtxFunction · 0.92
buildSimpleExprFunction · 0.92
newPartitionExprFunction · 0.92
buildIndexedValuesMethod · 0.92
buildAnalyzeMethod · 0.92
makeupDecodeColMapFunction · 0.92
NewCopContextBaseFunction · 0.92
makeRowDecoderFunction · 0.92

Calls 11

ParseExpressionFunction · 0.92
SimpleResolveNameFunction · 0.92
NewSchemaFunction · 0.85
WithInputSchemaAndNamesFunction · 0.85
WithAllowCastArrayFunction · 0.85
IsVirtualGeneratedMethod · 0.80
CloneMethod · 0.65
AllocPlanColumnIDMethod · 0.65
StringMethod · 0.65
ResolveIndicesMethod · 0.65

Tested by 4

TestBuildExpressionFunction · 0.74
prepareBenchCtxFunction · 0.74
prepareTestCtxFunction · 0.74