This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new ea35437c44 [Fix](Nereids)fix insert into default value exception (#21924) ea35437c44 is described below commit ea35437c446cc8ff0cc36e54150c2d0d802db98d Author: mch_ucchi <41606806+sohardforan...@users.noreply.github.com> AuthorDate: Mon Jul 24 12:08:43 2023 +0800 [Fix](Nereids)fix insert into default value exception (#21924) default value in the first cell of values when rise a cast exception, we filter it when check the types of values in insert, when the literal is string and value is the specific default value string, we skip type check. --- .../java/org/apache/doris/analysis/NativeInsertStmt.java | 12 ++++++++---- .../src/main/java/org/apache/doris/analysis/SelectStmt.java | 3 ++- .../test/java/org/apache/doris/analysis/InsertStmtTest.java | 8 ++++---- 3 files changed, 14 insertions(+), 9 deletions(-) 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<Expr> 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<String, Expr> 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 { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org