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