@@ -1059,25 +1059,36 @@ func ExpandVirtualColumn(columns []*model.ColumnInfo, schema *expression.Schema,
1059
1059
1060
1060
oldNumColumns := len (schema .Columns )
1061
1061
numExtraColumns := 0
1062
+ ordinaryColumnExists := false
1062
1063
for i := oldNumColumns - 1 ; i >= 0 ; i -- {
1063
1064
cid := schema .Columns [i ].ID
1064
1065
// Move extra columns to the end.
1065
1066
// ExtraRowChecksumID is ignored here since it's treated as an ordinary column.
1066
1067
// https://github.com/pingcap/tidb/blob/3c407312a986327bc4876920e70fdd6841b8365f/pkg/util/rowcodec/decoder.go#L206-L222
1067
1068
if cid != model .ExtraHandleID && cid != model .ExtraPhysTblID {
1069
+ ordinaryColumnExists = true
1068
1070
break
1069
1071
}
1070
1072
numExtraColumns ++
1071
1073
}
1074
+ if ordinaryColumnExists && numExtraColumns > 0 {
1075
+ extraColumns := make ([]* expression.Column , numExtraColumns )
1076
+ copy (extraColumns , schema .Columns [oldNumColumns - numExtraColumns :])
1077
+ schema .Columns = schema .Columns [:oldNumColumns - numExtraColumns ]
1072
1078
1073
- extraColumns := make ([]* expression. Column , numExtraColumns )
1074
- copy (extraColumns , schema . Columns [ oldNumColumns - numExtraColumns :])
1075
- schema . Columns = schema . Columns [: oldNumColumns - numExtraColumns ]
1079
+ extraColumnModels := make ([]* model. ColumnInfo , numExtraColumns )
1080
+ copy (extraColumnModels , copyColumn [ len ( copyColumn ) - numExtraColumns :])
1081
+ copyColumn = copyColumn [: len ( copyColumn ) - numExtraColumns ]
1076
1082
1077
- extraColumnModels := make ([]* model.ColumnInfo , numExtraColumns )
1078
- copy (extraColumnModels , copyColumn [len (copyColumn )- numExtraColumns :])
1079
- copyColumn = copyColumn [:len (copyColumn )- numExtraColumns ]
1083
+ copyColumn = expandVirtualColumn (schema , copyColumn , colsInfo )
1084
+ schema .Columns = append (schema .Columns , extraColumns ... )
1085
+ copyColumn = append (copyColumn , extraColumnModels ... )
1086
+ return copyColumn
1087
+ }
1088
+ return expandVirtualColumn (schema , copyColumn , colsInfo )
1089
+ }
1080
1090
1091
+ func expandVirtualColumn (schema * expression.Schema , copyColumn []* model.ColumnInfo , colsInfo []* model.ColumnInfo ) []* model.ColumnInfo {
1081
1092
schemaColumns := schema .Columns
1082
1093
for _ , col := range schemaColumns {
1083
1094
if col .VirtualExpr == nil {
@@ -1092,9 +1103,6 @@ func ExpandVirtualColumn(columns []*model.ColumnInfo, schema *expression.Schema,
1092
1103
}
1093
1104
}
1094
1105
}
1095
-
1096
- schema .Columns = append (schema .Columns , extraColumns ... )
1097
- copyColumn = append (copyColumn , extraColumnModels ... )
1098
1106
return copyColumn
1099
1107
}
1100
1108
0 commit comments