diff --git a/fe/fe-core/src/main/java/com/starrocks/sql/ast/UpdateStmt.java b/fe/fe-core/src/main/java/com/starrocks/sql/ast/UpdateStmt.java index 596d5faa954d6..c14f8273f4ffa 100644 --- a/fe/fe-core/src/main/java/com/starrocks/sql/ast/UpdateStmt.java +++ b/fe/fe-core/src/main/java/com/starrocks/sql/ast/UpdateStmt.java @@ -50,7 +50,7 @@ public UpdateStmt(TableName tableName, List assignments, List< this.fromRelations = fromRelations; this.wherePredicate = wherePredicate; this.commonTableExpressions = commonTableExpressions; - this.assignmentColumns = Sets.newHashSet(); + this.assignmentColumns = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER); for (ColumnAssignment each : assignments) { this.assignmentColumns.add(each.getColumn()); } diff --git a/fe/fe-core/src/test/java/com/starrocks/sql/plan/UpdatePlanTest.java b/fe/fe-core/src/test/java/com/starrocks/sql/plan/UpdatePlanTest.java index 9cf109551fa5a..b289f82bc11b5 100644 --- a/fe/fe-core/src/test/java/com/starrocks/sql/plan/UpdatePlanTest.java +++ b/fe/fe-core/src/test/java/com/starrocks/sql/plan/UpdatePlanTest.java @@ -50,6 +50,18 @@ public void testUpdate() throws Exception { testExplain("explain costs update tprimary set v2 = v2 + 1 where v1 = 'aaa'"); } + @Test + public void testColumnPartialUpdate() throws Exception { + String oldVal = connectContext.getSessionVariable().getPartialUpdateMode(); + connectContext.getSessionVariable().setPartialUpdateMode("column"); + testExplain("explain update tprimary set v2 = v2 + 1 where v1 = 'aaa'"); + testExplain("explain update tprimary set v2 = DEFAULT where v1 = 'aaa'"); + testExplain("explain update tprimary_auto_increment set v2 = DEFAULT where v1 = '123'"); + testExplain("explain verbose update tprimary set v2 = v2 + 1 where v1 = 'aaa'"); + testExplain("explain costs update tprimary set v2 = v2 + 1 where v1 = 'aaa'"); + connectContext.getSessionVariable().setPartialUpdateMode(oldVal); + } + private void testExplain(String explainStmt) throws Exception { connectContext.setQueryId(UUIDUtil.genUUID()); connectContext.setExecutionId(UUIDUtil.toTUniqueId(connectContext.getQueryId())); diff --git a/test/sql/test_partial_update_column_mode/R/test_upper_case_partial_update b/test/sql/test_partial_update_column_mode/R/test_upper_case_partial_update new file mode 100644 index 0000000000000..f443625ae2b1a --- /dev/null +++ b/test/sql/test_partial_update_column_mode/R/test_upper_case_partial_update @@ -0,0 +1,49 @@ +-- name: test_upper_case_partial_update +show backends; +CREATE table tab1 ( + k1 INTEGER, + k2 VARCHAR(50), + V1 INTEGER, + v2 INTEGER, + v3 INTEGER, + v4 varchar(50), + v5 varchar(50) +) +ENGINE=OLAP +PRIMARY KEY(`k1`,`k2`) +DISTRIBUTED BY HASH(`k1`) BUCKETS 10 +PROPERTIES ( + "replication_num" = "1" +); +-- result: +-- !result +insert into tab1 values (100, "k2_100", 100, 100, 100, "v4_100", "v5_100"); +-- result: +-- !result +insert into tab1 values (200, "k2_200", 200, 200, 200, "v4_200", "v5_200"); +-- result: +-- !result +insert into tab1 values (300, "k3_300", 300, 300, 300, "v4_300", "v5_300"); +-- result: +-- !result +select * from tab1; +-- result: +300 k3_300 300 300 300 v4_300 v5_300 +100 k2_100 100 100 100 v4_100 v5_100 +200 k2_200 200 200 200 v4_200 v5_200 +-- !result +set partial_update_mode = 'column'; +-- result: +-- !result +update tab1 set V1 = 101 where k1 = 100 and k2 = "k2_100"; +-- result: +-- !result +update tab1 set v1 = 202 where k1 = 200 and k2 = "k2_200"; +-- result: +-- !result +select * from tab1; +-- result: +300 k3_300 300 300 300 v4_300 v5_300 +100 k2_100 101 100 100 v4_100 v5_100 +200 k2_200 202 200 200 v4_200 v5_200 +-- !result \ No newline at end of file diff --git a/test/sql/test_partial_update_column_mode/T/test_upper_case_partial_update b/test/sql/test_partial_update_column_mode/T/test_upper_case_partial_update new file mode 100644 index 0000000000000..bfe009cd3f3b7 --- /dev/null +++ b/test/sql/test_partial_update_column_mode/T/test_upper_case_partial_update @@ -0,0 +1,27 @@ +-- name: test_upper_case_partial_update +show backends; +CREATE table tab1 ( + k1 INTEGER, + k2 VARCHAR(50), + V1 INTEGER, + v2 INTEGER, + v3 INTEGER, + v4 varchar(50), + v5 varchar(50) +) +ENGINE=OLAP +PRIMARY KEY(`k1`,`k2`) +DISTRIBUTED BY HASH(`k1`) BUCKETS 10 +PROPERTIES ( + "replication_num" = "1" +); + +insert into tab1 values (100, "k2_100", 100, 100, 100, "v4_100", "v5_100"); +insert into tab1 values (200, "k2_200", 200, 200, 200, "v4_200", "v5_200"); +insert into tab1 values (300, "k3_300", 300, 300, 300, "v4_300", "v5_300"); +select * from tab1; + +set partial_update_mode = 'column'; +update tab1 set V1 = 101 where k1 = 100 and k2 = "k2_100"; +update tab1 set v1 = 202 where k1 = 200 and k2 = "k2_200"; +select * from tab1; \ No newline at end of file