diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java index 2014aa1756..02b6e40f14 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java @@ -529,7 +529,7 @@ public class NativeInsertStmt extends InsertStmt { final List resultExprs = queryStmt.getResultExprs(); Preconditions.checkState(resultExprs.isEmpty(), "result exprs should be empty."); for (int i = 0; i < rowSize; i++) { - resultExprs.add(new IntLiteral(1)); + resultExprs.add(new StringLiteral(SelectStmt.DEFAULT_VALUE)); final DefaultValueExpr defaultValueExpr = new DefaultValueExpr(); valueList.getFirstRow().add(defaultValueExpr); colLabels.add(defaultValueExpr.toColumnLabel()); @@ -545,11 +545,15 @@ public class NativeInsertStmt extends InsertStmt { // Check if all columns mentioned is enough checkColumnCoverage(mentionedColumns, targetTable.getBaseSchema()); - realTargetColumnNames = targetColumns.stream().map(column -> column.getName()).collect(Collectors.toList()); + realTargetColumnNames = targetColumns.stream().map(Column::getName).collect(Collectors.toList()); Map slotToIndex = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER); for (int i = 0; i < queryStmt.getResultExprs().size(); i++) { - slotToIndex.put(realTargetColumnNames.get(i), queryStmt.getResultExprs().get(i) - .checkTypeCompatibility(targetTable.getColumn(realTargetColumnNames.get(i)).getType())); + Expr expr = queryStmt.getResultExprs().get(i); + if (!(expr instanceof StringLiteral && ((StringLiteral) expr).getValue() + .equals(SelectStmt.DEFAULT_VALUE))) { + slotToIndex.put(realTargetColumnNames.get(i), queryStmt.getResultExprs().get(i) + .checkTypeCompatibility(targetTable.getColumn(realTargetColumnNames.get(i)).getType())); + } } for (Column column : targetTable.getBaseSchema()) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java index da9fca26c9..80ac94b688 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java @@ -80,6 +80,7 @@ import java.util.stream.Collectors; */ public class SelectStmt extends QueryStmt { private static final Logger LOG = LogManager.getLogger(SelectStmt.class); + public static final String DEFAULT_VALUE = "__DEFAULT_VALUE__"; private UUID id = UUID.randomUUID(); // /////////////////////////////////////// @@ -575,7 +576,7 @@ public class SelectStmt extends QueryStmt { } for (Expr expr : valueList.getFirstRow()) { if (expr instanceof DefaultValueExpr) { - resultExprs.add(new IntLiteral(1)); + resultExprs.add(new StringLiteral(DEFAULT_VALUE)); } else { resultExprs.add(rewriteQueryExprByMvColumnExpr(expr, analyzer)); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/InsertStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/InsertStmtTest.java index bd181345bc..bfb34d7a3b 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/InsertStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/InsertStmtTest.java @@ -161,9 +161,9 @@ public class InsertStmtTest { ConnectContext ctx = UtFrameUtils.createDefaultCtx(); String sql = "values(1,'a',2,'b')"; - SqlScanner input = new SqlScanner(new StringReader(sql), + org.apache.doris.analysis.SqlScanner input = new org.apache.doris.analysis.SqlScanner(new StringReader(sql), ctx.getSessionVariable().getSqlMode()); - SqlParser parser = new SqlParser(input); + org.apache.doris.analysis.SqlParser parser = new org.apache.doris.analysis.SqlParser(input); Analyzer analyzer = new Analyzer(ctx.getEnv(), ctx); StatementBase statementBase = null; try { @@ -233,9 +233,9 @@ public class InsertStmtTest { ConnectContext ctx = UtFrameUtils.createDefaultCtx(); String sql = "select kk1, kk2, kk3, kk4 from db.tbl"; - SqlScanner input = new SqlScanner(new StringReader(sql), + org.apache.doris.analysis.SqlScanner input = new org.apache.doris.analysis.SqlScanner(new StringReader(sql), ctx.getSessionVariable().getSqlMode()); - SqlParser parser = new SqlParser(input); + org.apache.doris.analysis.SqlParser parser = new org.apache.doris.analysis.SqlParser(input); Analyzer analyzer = new Analyzer(ctx.getEnv(), ctx); StatementBase statementBase = null; try {