From 3fb7457983cb3472f615274dad88e85ea989e011 Mon Sep 17 00:00:00 2001 From: LiBinfeng <46676950+LiBinfeng-01@users.noreply.github.com> Date: Mon, 12 Aug 2024 16:32:44 +0800 Subject: [PATCH] [fix](Nereids) fix insert into table with null literal default value (#39122) Problem: when use insert with default value null, it can not be insert successfully Solved: when column is allow to be null, it can be null in create table with null default value --- .../java/org/apache/doris/analysis/NativeInsertStmt.java | 8 ++++++-- .../src/main/java/org/apache/doris/catalog/Column.java | 3 +++ .../org/apache/doris/nereids/rules/analysis/BindSink.java | 2 +- .../nereids/trees/plans/commands/insert/InsertUtils.java | 4 +++- 4 files changed, 13 insertions(+), 4 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 3f948aefa75085..e9d9c152aa1289 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 @@ -920,11 +920,15 @@ private void analyzeRow(Analyzer analyzer, List targetColumns, List getColumnToOutput( } else if (column.getDefaultValue() == null) { // throw exception if explicitly use Default value but no default value present // insert into table t values(DEFAULT) - if (columnToChildOutput.get(column) instanceof DefaultValueSlot) { + if (columnToChildOutput.get(column) instanceof DefaultValueSlot && !column.isAllowNull()) { throw new AnalysisException("Column has no default value," + " column=" + column.getName()); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertUtils.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertUtils.java index 34c43b3ec84b6d..6a283ca023a837 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertUtils.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertUtils.java @@ -397,7 +397,9 @@ public static TableIf getTargetTable(Plan plan, ConnectContext ctx) { private static NamedExpression generateDefaultExpression(Column column) { try { if (column.getDefaultValue() == null) { - throw new AnalysisException("Column has no default value, column=" + column.getName()); + if (!column.isAllowNull()) { + throw new AnalysisException("Column has no default value, column=" + column.getName()); + } } if (column.getDefaultValueExpr() != null) { Expression defualtValueExpression = new NereidsParser().parseExpression(