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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]