You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2024/04/10 08:32:18 UTC

(doris) 01/30: [fix](txn insert) Fix txn insert into values for sequence column or column name is keyword (#33336)

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

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

commit 4079a7b6abf45fe690e67df5a56d3fae8a5ade37
Author: meiyi <my...@gmail.com>
AuthorDate: Mon Apr 8 00:13:04 2024 +0800

     [fix](txn insert) Fix txn insert into values for sequence column or column name is keyword (#33336)
---
 .../apache/doris/analysis/NativeInsertStmt.java    |  5 +++++
 .../java/org/apache/doris/qe/StmtExecutor.java     | 24 ++++++++--------------
 .../data_model_p0/unique/test_unique_table.out     |  2 +-
 .../unique/test_unique_table_new_sequence.out      |  4 ++--
 .../data_model_p0/unique/test_unique_table.groovy  |  8 ++++----
 .../unique/test_unique_table_new_sequence.groovy   | 14 +++++++------
 .../unique/test_unique_table_sequence.groovy       | 16 ++++++++-------
 7 files changed, 37 insertions(+), 36 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 b9e74557cd2..efe14a00cfa 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
@@ -1326,4 +1326,9 @@ public class NativeInsertStmt extends InsertStmt {
             slotDesc.setIsNullable(col.isAllowNull());
         }
     }
+
+    public boolean containTargetColumnName(String columnName) {
+        return targetColumnNames != null && targetColumnNames.stream()
+                .anyMatch(col -> col.equalsIgnoreCase(columnName));
+    }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
index 6236009a7ad..604c0c652b9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -1838,13 +1838,11 @@ public class StmtExecutor {
             int schemaSize = tbl.getBaseSchema(false).size();
             if (parsedStmt instanceof NativeInsertStmt
                     && ((NativeInsertStmt) parsedStmt).getTargetColumnNames() != null) {
-
-                if (((NativeInsertStmt) parsedStmt).getTargetColumnNames()
-                        .contains(Column.SEQUENCE_COL)) {
+                NativeInsertStmt nativeInsertStmt = (NativeInsertStmt) parsedStmt;
+                if (nativeInsertStmt.containTargetColumnName(Column.SEQUENCE_COL)) {
                     schemaSize++;
                 }
-                if (((NativeInsertStmt) parsedStmt).getTargetColumnNames()
-                        .contains(Column.DELETE_SIGN)) {
+                if (nativeInsertStmt.containTargetColumnName(Column.DELETE_SIGN)) {
                     schemaSize++;
                 }
             }
@@ -1922,19 +1920,13 @@ public class StmtExecutor {
                 .setExecMemLimit(maxExecMemByte).setTimeout((int) timeoutSecond)
                 .setTimezone(timeZone).setSendBatchParallelism(sendBatchParallelism).setTrimDoubleQuotes(true);
         if (parsedStmt instanceof NativeInsertStmt && ((NativeInsertStmt) parsedStmt).getTargetColumnNames() != null) {
-            List<String> targetColumnNames = ((NativeInsertStmt) parsedStmt).getTargetColumnNames();
-            if (targetColumnNames.contains(Column.SEQUENCE_COL) || targetColumnNames.contains(Column.DELETE_SIGN)) {
-                if (targetColumnNames.contains(Column.SEQUENCE_COL)) {
+            NativeInsertStmt nativeInsertStmt = (NativeInsertStmt) parsedStmt;
+            if (nativeInsertStmt.containTargetColumnName(Column.SEQUENCE_COL)
+                    || nativeInsertStmt.containTargetColumnName(Column.DELETE_SIGN)) {
+                if (nativeInsertStmt.containTargetColumnName(Column.SEQUENCE_COL)) {
                     request.setSequenceCol(Column.SEQUENCE_COL);
                 }
-                StringBuilder allCols = new StringBuilder();
-                for (String col : ((NativeInsertStmt) parsedStmt).getTargetColumnNames()) {
-                    allCols.append(col);
-                    allCols.append(",");
-                }
-                allCols.deleteCharAt(allCols.length() - 1);
-                request.setColumns(String.valueOf(allCols));
-                request.setColumnSeparator(",");
+                request.setColumns("`" + String.join("`,`", nativeInsertStmt.getTargetColumnNames()) + "`");
             }
         }
 
diff --git a/regression-test/data/data_model_p0/unique/test_unique_table.out b/regression-test/data/data_model_p0/unique/test_unique_table.out
index 50266833ec8..d888313de27 100644
--- a/regression-test/data/data_model_p0/unique/test_unique_table.out
+++ b/regression-test/data/data_model_p0/unique/test_unique_table.out
@@ -13,7 +13,7 @@ k1	INT	Yes	true	\N
 v1	TINYINT	Yes	false	\N	NONE
 v2	INT	Yes	false	\N	NONE
 v3	INT	Yes	false	\N	NONE
-v4	INT	Yes	false	\N	NONE
+or	INT	Yes	false	\N	NONE
 __DORIS_DELETE_SIGN__	TINYINT	No	false	0	NONE
 __DORIS_VERSION_COL__	BIGINT	No	false	0	NONE
 
diff --git a/regression-test/data/data_model_p0/unique/test_unique_table_new_sequence.out b/regression-test/data/data_model_p0/unique/test_unique_table_new_sequence.out
index 2e8ddff65bb..4a895d81517 100644
--- a/regression-test/data/data_model_p0/unique/test_unique_table_new_sequence.out
+++ b/regression-test/data/data_model_p0/unique/test_unique_table_new_sequence.out
@@ -75,7 +75,7 @@ k1	INT	Yes	true	\N
 v1	TINYINT	Yes	false	\N	REPLACE
 v2	INT	Yes	false	\N	REPLACE
 v3	INT	Yes	false	\N	REPLACE
-v4	INT	Yes	false	\N	REPLACE
+or	INT	Yes	false	\N	REPLACE
 __DORIS_DELETE_SIGN__	TINYINT	No	false	0	REPLACE
 __DORIS_VERSION_COL__	BIGINT	No	false	0	REPLACE
 __DORIS_SEQUENCE_COL__	INT	Yes	false	\N	REPLACE
@@ -156,7 +156,7 @@ k1	INT	Yes	true	\N
 v1	TINYINT	Yes	false	\N	REPLACE
 v2	INT	Yes	false	\N	REPLACE
 v3	INT	Yes	false	\N	REPLACE
-v4	INT	Yes	false	\N	REPLACE
+or	INT	Yes	false	\N	REPLACE
 __DORIS_DELETE_SIGN__	TINYINT	No	false	0	REPLACE
 __DORIS_VERSION_COL__	BIGINT	No	false	0	REPLACE
 __DORIS_SEQUENCE_COL__	INT	Yes	false	\N	REPLACE
diff --git a/regression-test/suites/data_model_p0/unique/test_unique_table.groovy b/regression-test/suites/data_model_p0/unique/test_unique_table.groovy
index efa4f1d3409..f6d5613c4e8 100644
--- a/regression-test/suites/data_model_p0/unique/test_unique_table.groovy
+++ b/regression-test/suites/data_model_p0/unique/test_unique_table.groovy
@@ -50,7 +50,7 @@ suite("test_unique_table") {
           `v1` tinyint NULL,
           `v2` int,
           `v3` int,
-          `v4` int
+          `or` int
         ) ENGINE=OLAP
         UNIQUE KEY(k1)
         DISTRIBUTED BY HASH(`k1`) BUCKETS 3
@@ -61,19 +61,19 @@ suite("test_unique_table") {
     sql "SET show_hidden_columns=true"
     qt_0 "desc ${tbName}"
     sql "begin;"
-    sql "insert into ${tbName} (k1, v1, v2, v3, v4, __DORIS_DELETE_SIGN__) values (1,1,1,1,1,0),(2,2,2,2,2,0),(3,3,3,3,3,0);"
+    sql "insert into ${tbName} (k1, v1, v2, v3, `or`, __doris_delete_sign__) values (1,1,1,1,1,0),(2,2,2,2,2,0),(3,3,3,3,3,0);"
     sql "commit;"
 
     qt_1 "select * from ${tbName} order by k1;"
 
     sql "begin;"
-    sql "insert into ${tbName} (k1, v1, v2, v3, v4, __DORIS_DELETE_SIGN__) values (2,20,20,20,20,0);"
+    sql "insert into ${tbName} (k1, v1, v2, v3, `or`, __DORIS_DELETE_SIGN__) values (2,20,20,20,20,0);"
     sql "commit;"
 
     qt_2 "select * from ${tbName} order by k1;"
 
     sql "begin;"
-    sql "insert into ${tbName} (k1, v1, v2, v3, v4, __DORIS_DELETE_SIGN__) values (3,30,30,30,30,1);"
+    sql "insert into ${tbName} (k1, v1, v2, v3, `or`, __DORIS_DELETE_SIGN__) values (3,30,30,30,30,1);"
     sql "commit;"
 
     qt_3 "select * from ${tbName} order by k1"
diff --git a/regression-test/suites/data_model_p0/unique/test_unique_table_new_sequence.groovy b/regression-test/suites/data_model_p0/unique/test_unique_table_new_sequence.groovy
index af8f5c3171e..be8b4291e3a 100644
--- a/regression-test/suites/data_model_p0/unique/test_unique_table_new_sequence.groovy
+++ b/regression-test/suites/data_model_p0/unique/test_unique_table_new_sequence.groovy
@@ -16,7 +16,7 @@
 // under the License.
 
 suite("test_unique_table_new_sequence") {
-    for (def enable_fall_back : [false, true]) {
+    for (def enable_nereids_planner : [false, true]) {
         def tableName = "test_uniq_new_sequence"
         sql """ DROP TABLE IF EXISTS ${tableName} """
         sql """
@@ -36,7 +36,9 @@ suite("test_unique_table_new_sequence") {
         "light_schema_change" = "true"
         );
         """
-        sql "set enable_fallback_to_original_planner=${enable_fall_back}"
+        sql """ set enable_nereids_dml = ${enable_nereids_planner}; """
+        sql """ set enable_nereids_planner=${enable_nereids_planner}; """
+        sql "set enable_fallback_to_original_planner=false; "
         // test streamload with seq col
         streamLoad {
             table "${tableName}"
@@ -141,13 +143,13 @@ suite("test_unique_table_new_sequence") {
           `v1` tinyint NULL,
           `v2` int,
           `v3` int,
-          `v4` int
+          `or` int
         ) ENGINE=OLAP
         UNIQUE KEY(k1)
         DISTRIBUTED BY HASH(`k1`) BUCKETS 3
         PROPERTIES (
         "enable_unique_key_merge_on_write" = "false",
-        "function_column.sequence_col" = "v4",
+        "function_column.sequence_col" = "or",
         "replication_allocation" = "tag.location.default: 1",
         "light_schema_change" = "true"
         );
@@ -170,13 +172,13 @@ suite("test_unique_table_new_sequence") {
         qt_1 "select * from ${tableName} order by k1;"
 
         sql "begin;"
-        sql "insert into ${tableName} (k1, v1, v2, v3, v4) values (2,20,20,20,20);"
+        sql "insert into ${tableName} (k1, v1, v2, v3, `OR`) values (2,20,20,20,20);"
         sql "commit;"
 
         qt_2 "select * from ${tableName} order by k1;"
 
         sql "begin;"
-        sql "insert into ${tableName} (k1, v1, v2, v3, v4) values (3,30,30,30,1);"
+        sql "insert into ${tableName} (k1, v1, v2, v3, `or`) values (3,30,30,30,1);"
         sql "commit;"
 
         qt_3 "select * from ${tableName} order by k1"
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 61d9069199c..db4df6c9e34 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
@@ -16,7 +16,7 @@
 // under the License.
 
 suite("test_unique_table_sequence") {
-    for (def enable_fall_back : [false, true]) {
+    for (def enable_nereids_planner : [false, true]) {
         def tableName = "test_uniq_sequence"
         sql "DROP TABLE IF EXISTS ${tableName}"
         sql """
@@ -34,7 +34,9 @@ suite("test_unique_table_sequence") {
             "replication_allocation" = "tag.location.default: 1"
             );
         """
-        sql "set enable_fallback_to_original_planner=${enable_fall_back}"
+        sql """ set enable_nereids_dml = ${enable_nereids_planner}; """
+        sql """ set enable_nereids_planner=${enable_nereids_planner}; """
+        sql "set enable_fallback_to_original_planner=false; "
         // test streamload with seq col
         streamLoad {
             table "${tableName}"
@@ -145,7 +147,7 @@ suite("test_unique_table_sequence") {
               `v1` tinyint NULL,
               `v2` int,
               `v3` int,
-              `v4` int
+              `or` int
             ) ENGINE=OLAP
             UNIQUE KEY(k1)
             DISTRIBUTED BY HASH(`k1`) BUCKETS 3
@@ -166,25 +168,25 @@ suite("test_unique_table_sequence") {
         // test insert into with column list, in begin/commit
         sql "begin;"
         test {
-            sql "INSERT INTO ${tableName} (k1, v1, v2, v3, v4) values(15, 8, 19, 20, 21)"
+            sql "INSERT INTO ${tableName} (k1, v1, v2, v3, `or`) values(15, 8, 19, 20, 21)"
             exception "Table ${tableName} has sequence column, need to specify the sequence column"
         }
         sql "commit;"
 
         sql "begin;"
-        sql "insert into ${tableName} (k1, v1, v2, v3, v4, __DORIS_SEQUENCE_COL__) values (1,1,1,1,1,1),(2,2,2,2,2,2),(3,3,3,3,3,3);"
+        sql "insert into ${tableName} (k1, v1, v2, v3, `or`, __doris_sequence_col__) values (1,1,1,1,1,1),(2,2,2,2,2,2),(3,3,3,3,3,3);"
         sql "commit;"
 
         qt_1 "select * from ${tableName} order by k1;"
 
         sql "begin;"
-        sql "insert into ${tableName} (k1, v1, v2, v3, v4, __DORIS_SEQUENCE_COL__) values (2,20,20,20,20,20);"
+        sql "insert into ${tableName} (k1, v1, v2, v3, `or`, __DORIS_SEQUENCE_COL__) values (2,20,20,20,20,20);"
         sql "commit;"
 
         qt_2 "select * from ${tableName} order by k1;"
 
         sql "begin;"
-        sql "insert into ${tableName} (k1, v1, v2, v3, v4, __DORIS_SEQUENCE_COL__) values (3,30,30,30,30,1);"
+        sql "insert into ${tableName} (k1, v1, v2, v3, `or`, __DORIS_SEQUENCE_COL__) values (3,30,30,30,30,1);"
         sql "commit;"
 
         qt_3 "select * from ${tableName} order by k1"


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