[fix](sequence-column) Fix sequence_col column used default expr insert failed (#18933)
This commit is contained in:
@ -70,6 +70,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Insert into is performed to load data from the result of query stmt.
|
||||
@ -715,29 +716,38 @@ public class InsertStmt extends DdlStmt {
|
||||
selectList.set(i, expr);
|
||||
exprByName.put(col.getName(), expr);
|
||||
}
|
||||
List<Pair<String, Expr>> resultExprByName = Lists.newArrayList();
|
||||
// reorder resultExprs in table column order
|
||||
for (Column col : targetTable.getFullSchema()) {
|
||||
if (exprByName.containsKey(col.getName())) {
|
||||
resultExprs.add(exprByName.get(col.getName()));
|
||||
resultExprByName.add(Pair.of(col.getName(), exprByName.get(col.getName())));
|
||||
} else {
|
||||
// process sequence col, map sequence column to other column
|
||||
if (targetTable instanceof OlapTable && ((OlapTable) targetTable).hasSequenceCol()
|
||||
&& col.getName().equals(Column.SEQUENCE_COL)
|
||||
&& ((OlapTable) targetTable).getSequenceMapCol() != null) {
|
||||
resultExprs.add(exprByName.get(((OlapTable) targetTable).getSequenceMapCol()));
|
||||
if (resultExprByName.stream().map(Pair::key)
|
||||
.anyMatch(key -> key.equals(((OlapTable) targetTable).getSequenceMapCol()))) {
|
||||
resultExprByName.add(Pair.of(Column.SEQUENCE_COL,
|
||||
resultExprByName.stream()
|
||||
.filter(p -> p.key().equals(((OlapTable) targetTable).getSequenceMapCol()))
|
||||
.map(Pair::value).findFirst().orElse(null)));
|
||||
}
|
||||
} else if (col.getDefaultValue() == null) {
|
||||
resultExprs.add(NullLiteral.create(col.getType()));
|
||||
resultExprByName.add(Pair.of(col.getName(), NullLiteral.create(col.getType())));
|
||||
} else {
|
||||
if (col.getDefaultValueExprDef() != null) {
|
||||
resultExprs.add(col.getDefaultValueExpr());
|
||||
resultExprByName.add(Pair.of(col.getName(), col.getDefaultValueExpr()));
|
||||
} else {
|
||||
StringLiteral defaultValueExpr;
|
||||
defaultValueExpr = new StringLiteral(col.getDefaultValue());
|
||||
resultExprs.add(defaultValueExpr.checkTypeCompatibility(col.getType()));
|
||||
resultExprByName.add(Pair.of(col.getName(),
|
||||
defaultValueExpr.checkTypeCompatibility(col.getType())));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
resultExprs.addAll(resultExprByName.stream().map(Pair::value).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
private DataSink createDataSink() throws AnalysisException {
|
||||
|
||||
Reference in New Issue
Block a user