You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2023/07/24 04:08:50 UTC
[doris] branch master updated: [Fix](Nereids)fix insert into default value exception (#21924)
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 <41...@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-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org