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

Reply via email to