This is an automated email from the ASF dual-hosted git repository.

dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 1083cb0d440cc4ffdfe5bd70c6a65d7e6d2706ac
Author: LiBinfeng <46676950+libinfeng...@users.noreply.github.com>
AuthorDate: Wed Aug 28 17:21:43 2024 +0800

    [Fix](Nerieds) insert into table with default not null but not included in 
insert schema (#39825)
    
    example:
    create table t(k1 int not null, k2 int not null);
    insert into t (k1) values (101);
    it should be failed because we don't know what value should k2 be
---
 .../src/main/java/org/apache/doris/analysis/NativeInsertStmt.java      | 3 ++-
 .../main/java/org/apache/doris/nereids/rules/analysis/BindSink.java    | 2 +-
 .../apache/doris/nereids/trees/plans/commands/insert/InsertUtils.java  | 2 +-
 .../src/test/java/org/apache/doris/nereids/util/ReadLockTest.java      | 3 ++-
 4 files changed, 6 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 db08e699793..132d2a86b22 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
@@ -923,7 +923,8 @@ public class NativeInsertStmt extends InsertStmt {
             Column col = targetColumns.get(i);
 
             if (expr instanceof DefaultValueExpr) {
-                if (targetColumns.get(i).getDefaultValue() == null && 
!targetColumns.get(i).isAllowNull()) {
+                if (targetColumns.get(i).getDefaultValue() == null && 
!targetColumns.get(i).isAllowNull()
+                        && !targetColumns.get(i).isAutoInc()) {
                     throw new AnalysisException("Column has no default value, 
column="
                             + targetColumns.get(i).getName());
                 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java
index f7ff692cdbe..c9e7f07f5d0 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java
@@ -337,7 +337,7 @@ public class BindSink implements AnalysisRuleFactory {
                 } 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 && !column.isAllowNull()) {
+                    if (!column.isAllowNull() && !column.isAutoInc()) {
                         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 a14539d148d..c5c2197faf0 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
@@ -427,7 +427,7 @@ public class InsertUtils {
                 return new Alias(new 
NullLiteral(DataType.fromCatalogType(column.getType())), column.getName());
             }
             if (column.getDefaultValue() == null) {
-                if (!column.isAllowNull()) {
+                if (!column.isAllowNull() && !column.isAutoInc()) {
                     throw new AnalysisException("Column has no default value, 
column=" + column.getName());
                 }
             }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ReadLockTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ReadLockTest.java
index 9283b286f41..e31fa98af11 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ReadLockTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ReadLockTest.java
@@ -109,7 +109,8 @@ public class ReadLockTest extends SSBTestBase {
 
     @Test
     public void testInserInto() {
-        String sql = "INSERT INTO supplier(s_suppkey) SELECT lo_orderkey FROM 
lineorder";
+        String sql = "INSERT INTO supplier(s_suppkey, s_name, s_address, 
s_city, s_nation, s_region, s_phone) "
+                + "SELECT lo_orderkey, '', '', '', '', '', '' FROM lineorder";
         StatementContext statementContext = 
MemoTestUtils.createStatementContext(connectContext, sql);
         InsertIntoTableCommand insertIntoTableCommand = 
(InsertIntoTableCommand) parser.parseSingle(sql);
         NereidsPlanner planner = new NereidsPlanner(statementContext);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to