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

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


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 9a9eaa77497 [enhancement](sequence col) add session variable to skip 
sequence column check while INSERT INTO (#41655) (#41732)
9a9eaa77497 is described below

commit 9a9eaa77497367f005c9aff9682ae989ec1bcb71
Author: zhannngchen <48427519+zhannngc...@users.noreply.github.com>
AuthorDate: Sat Oct 12 15:29:17 2024 +0800

    [enhancement](sequence col) add session variable to skip sequence column 
check while INSERT INTO (#41655) (#41732)
    
    cherry-pick #41655
---
 .../apache/doris/analysis/NativeInsertStmt.java    |  3 +-
 .../doris/nereids/rules/analysis/BindSink.java     |  3 +-
 .../java/org/apache/doris/qe/SessionVariable.java  | 17 +++++++++++
 .../unique/test_unique_table_sequence.out          |  8 +++++-
 .../unique/test_unique_table_sequence.groovy       | 33 ++++++++++++++++++++++
 5 files changed, 61 insertions(+), 3 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 8b5f6f9aa3b..b7aa7b73968 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
@@ -450,7 +450,8 @@ public class NativeInsertStmt extends InsertStmt {
                 }
 
                 if (!haveInputSeqCol && !isPartialUpdate && 
!isFromDeleteOrUpdateStmt
-                        && 
!analyzer.getContext().getSessionVariable().isEnableUniqueKeyPartialUpdate()) {
+                        && 
!analyzer.getContext().getSessionVariable().isEnableUniqueKeyPartialUpdate()
+                        && 
analyzer.getContext().getSessionVariable().isRequireSequenceInInsert()) {
                     if (!seqColInTable.isPresent() || 
seqColInTable.get().getDefaultValue() == null
                             || 
!seqColInTable.get().getDefaultValue().equals(DefaultValue.CURRENT_TIMESTAMP)) {
                         throw new AnalysisException("Table " + 
olapTable.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 d5c4a50ab75..995b0a11969 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
@@ -146,7 +146,8 @@ public class BindSink implements AnalysisRuleFactory {
                                         }
                                     }
 
-                                    if (!haveInputSeqCol && !isPartialUpdate) {
+                                    if (!haveInputSeqCol && !isPartialUpdate 
&& (!sink.isFromNativeInsertStmt()
+                                            || 
ConnectContext.get().getSessionVariable().isRequireSequenceInInsert())) {
                                         if (!seqColInTable.isPresent() || 
seqColInTable.get().getDefaultValue() == null
                                                 || 
!seqColInTable.get().getDefaultValue()
                                                 
.equals(DefaultValue.CURRENT_TIMESTAMP)) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index 8a5c3a85055..129bf172e3e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -481,6 +481,8 @@ public class SessionVariable implements Serializable, 
Writable {
     public static final String ENABLE_MATCH_WITHOUT_INVERTED_INDEX = 
"enable_match_without_inverted_index";
     public static final String ENABLE_FALLBACK_ON_MISSING_INVERTED_INDEX = 
"enable_fallback_on_missing_inverted_index";
 
+    public static final String REQUIRE_SEQUENCE_IN_INSERT = 
"require_sequence_in_insert";
+
     /**
      * If set false, user couldn't submit analyze SQL and FE won't allocate 
any related resources.
      */
@@ -1501,6 +1503,13 @@ public class SessionVariable implements Serializable, 
Writable {
         this.enableESShardScroll = enableESShardScroll;
     }
 
+    @VariableMgr.VarAttr(name = REQUIRE_SEQUENCE_IN_INSERT, needForward = 
true, description = {
+            "该变量用于控制,使用了sequence列的unique key表,insert 
into操作是否要求必须提供每一行的sequence列的值",
+            "This variable controls whether the INSERT INTO operation on 
unique key tables with a sequence"
+                    + " column requires a sequence column to be provided for 
each row"
+    })
+    public boolean requireSequenceInInsert = true;
+
     public boolean isEnableESShardScroll() {
         return enableESShardScroll;
     }
@@ -2593,6 +2602,14 @@ public class SessionVariable implements Serializable, 
Writable {
         this.enableUniqueKeyPartialUpdate = enableUniqueKeyPartialUpdate;
     }
 
+    public void setRequireSequenceInInsert(boolean value) {
+        this.requireSequenceInInsert = value;
+    }
+
+    public boolean isRequireSequenceInInsert() {
+        return this.requireSequenceInInsert;
+    }
+
     /**
      * Serialize to thrift object.
      * Used for rest api.
diff --git 
a/regression-test/data/data_model_p0/unique/test_unique_table_sequence.out 
b/regression-test/data/data_model_p0/unique/test_unique_table_sequence.out
index 4f1d633250d..d6a6879b117 100644
--- a/regression-test/data/data_model_p0/unique/test_unique_table_sequence.out
+++ b/regression-test/data/data_model_p0/unique/test_unique_table_sequence.out
@@ -41,10 +41,16 @@
 
 -- !all --
 1      10      15      16      17      0       4       15
-15     8       19      20      21      0       7       3
+15     8       19      20      21      0       9       3
 2      5       14      13      14      0       5       12
 3      6       11      14      15      0       6       13
 
+-- !all_clone_table --
+1      10      15      16      17      0       2       \N
+15     8       19      20      21      0       2       \N
+2      5       14      13      14      0       2       \N
+3      6       11      14      15      0       2       \N
+
 -- !1 --
 1      1       1       1       1       0       2       1
 2      2       2       2       2       0       2       2
diff --git 
a/regression-test/suites/data_model_p0/unique/test_unique_table_sequence.groovy 
b/regression-test/suites/data_model_p0/unique/test_unique_table_sequence.groovy
index c5898480f0d..c04b50bb55c 100644
--- 
a/regression-test/suites/data_model_p0/unique/test_unique_table_sequence.groovy
+++ 
b/regression-test/suites/data_model_p0/unique/test_unique_table_sequence.groovy
@@ -119,6 +119,15 @@ suite("test_unique_table_sequence") {
         exception "Table ${tableName} has sequence column, need to specify the 
sequence column"
     }
 
+    // with `require_sequence_in_insert=false`, previous insert operation 
should success
+    sql "SET require_sequence_in_insert=false"
+
+    sql "INSERT INTO ${tableName} values(15, 8, 19, 20, 21)"
+
+    sql "INSERT INTO ${tableName} (k1, v1, v2, v3, v4) values(15, 8, 19, 20, 
21)"
+
+    sql "SET require_sequence_in_insert=true"
+
     // correct way of insert into with seq col
     sql "INSERT INTO ${tableName} (k1, v1, v2, v3, v4, __DORIS_SEQUENCE_COL__) 
values(15, 8, 19, 20, 21, 3)"
 
@@ -134,7 +143,31 @@ suite("test_unique_table_sequence") {
 
     order_qt_all "SELECT * from ${tableName}"
 
+    sql "SET show_hidden_columns=false"
+
+    def tableNameClone = tableName + "_clone"
+    sql "DROP TABLE IF EXISTS ${tableNameClone}"
+    sql "create table ${tableNameClone} like ${tableName}"
+
+    // test insert into select *
+    test {
+        sql "INSERT INTO ${tableNameClone} select * from ${tableName}"
+        exception "Table ${tableNameClone} has sequence column, need to 
specify the sequence column"
+    }
+
+    // with `require_sequence_in_insert=true`, previous insert operation 
should success
+    sql "SET require_sequence_in_insert=false"
+
+    sql "INSERT INTO ${tableNameClone} select * from ${tableName}"
+
+    sql "SET require_sequence_in_insert=true"
+
+    sql "SET show_hidden_columns=true"
+
+    order_qt_all_clone_table "SELECT * from ${tableNameClone}"
+
     sql "DROP TABLE ${tableName}"
+    sql "DROP TABLE ${tableNameClone}"
 
     sql "DROP TABLE IF EXISTS ${tableName}"
     sql """


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

Reply via email to