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