This is an automated email from the ASF dual-hosted git repository. starocean999 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 dbe86ca0b1c [fix](planner)decimalv3 literal's precision and scale is not correctly set (#32432) dbe86ca0b1c is described below commit dbe86ca0b1c09be92431fbe074c3ce7df43a5165 Author: starocean999 <40539150+starocean...@users.noreply.github.com> AuthorDate: Tue Mar 19 14:37:02 2024 +0800 [fix](planner)decimalv3 literal's precision and scale is not correctly set (#32432) --- .../java/org/apache/doris/analysis/DecimalLiteral.java | 3 +++ .../rewrite/ExtractCommonFactorsRuleFunctionTest.java | 4 ++-- .../datatype_p0/decimalv3/test_decimalv3_where.out | 6 ++++++ .../datatype_p0/decimalv3/test_decimalv3_where.groovy | 18 ++++++++++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java index ae0a31c2f43..3a3a8f8f66a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DecimalLiteral.java @@ -306,6 +306,9 @@ public class DecimalLiteral extends LiteralExpr { int integerPart = Math.max(this.value.precision() - this.value.scale(), type.getPrecision() - ((ScalarType) type).decimalScale()); this.type = ScalarType.createDecimalV3Type(integerPart + scale, scale); + BigDecimal adjustedValue = value.scale() < 0 ? value + : value.setScale(scale, RoundingMode.HALF_UP); + this.value = Objects.requireNonNull(adjustedValue); } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/rewrite/ExtractCommonFactorsRuleFunctionTest.java b/fe/fe-core/src/test/java/org/apache/doris/rewrite/ExtractCommonFactorsRuleFunctionTest.java index 1fcffc4fa5c..3c55d248544 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/rewrite/ExtractCommonFactorsRuleFunctionTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/rewrite/ExtractCommonFactorsRuleFunctionTest.java @@ -259,8 +259,8 @@ public class ExtractCommonFactorsRuleFunctionTest { Assert.assertTrue(planString.contains("`l_partkey` = `p_partkey`")); Assert.assertTrue(planString.contains("`l_shipmode` IN ('AIR', 'AIR REG')")); Assert.assertTrue(planString.contains("`l_shipinstruct` = 'DELIVER IN PERSON'")); - Assert.assertTrue(planString.contains("`l_quantity` >= 9 AND `l_quantity` <= 19 " - + "OR `l_quantity` >= 20 AND `l_quantity` <= 36")); + Assert.assertTrue(planString.contains("`l_quantity` >= 9.00 AND `l_quantity` <= 19.00 " + + "OR `l_quantity` >= 20.00 AND `l_quantity` <= 36.00")); Assert.assertTrue(planString.contains("`p_size` >= 1")); Assert.assertTrue(planString.contains("`p_brand` IN ('Brand#11', 'Brand#21', 'Brand#32')")); Assert.assertTrue(planString.contains("`p_size` <= 15")); diff --git a/regression-test/data/datatype_p0/decimalv3/test_decimalv3_where.out b/regression-test/data/datatype_p0/decimalv3/test_decimalv3_where.out index 36084d4d211..bd3a5c0a98a 100644 --- a/regression-test/data/datatype_p0/decimalv3/test_decimalv3_where.out +++ b/regression-test/data/datatype_p0/decimalv3/test_decimalv3_where.out @@ -4,3 +4,9 @@ 2 spark 10 96 1 doris 20 324 +-- !select -- +1.00100 2.00200 + +-- !select_after_update -- +1.00100 0.00010 + diff --git a/regression-test/suites/datatype_p0/decimalv3/test_decimalv3_where.groovy b/regression-test/suites/datatype_p0/decimalv3/test_decimalv3_where.groovy index 287a77cbd10..2f83e07729d 100644 --- a/regression-test/suites/datatype_p0/decimalv3/test_decimalv3_where.groovy +++ b/regression-test/suites/datatype_p0/decimalv3/test_decimalv3_where.groovy @@ -23,4 +23,22 @@ suite("test_decimalv3_where") { sql """CREATE TABLE ${tableName} ( `id` varchar(11) NULL COMMENT '唯一标识', `name` varchar(10) NULL COMMENT '采集时间', `age` int(11) NULL, `dr` decimalv3(10, 0) ) ENGINE=OLAP UNIQUE KEY(`id`) COMMENT 'test' DISTRIBUTED BY HASH(`id`) BUCKETS 10 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "in_memory" = "false", "storage_format" = "V2", "light_schema_change" = "true", "disable_auto_compaction" = "false" );""" sql """insert into ${tableName} values (1,'doris',20,324.10),(2,'spark',10,95.5),(3,'flink',9,20)""" qt_decimalv3 "select * from ${tableName} where dr != 1 order by age;" + + sql """set enable_nereids_planner=false;""" + sql """drop table if exists test_sys_update_basic_test_update_decimal_tb""" + sql """CREATE TABLE test_sys_update_basic_test_update_decimal_tb ( + k1 DECIMAL(10, 5) NULL, + v1 DECIMAL(10, 5) NULL + ) UNIQUE KEY(k1) DISTRIBUTED BY HASH(k1) BUCKETS 5 PROPERTIES ( + "replication_allocation" = "tag.location.default: 1" + );""" + sql """insert into test_sys_update_basic_test_update_decimal_tb values + (1.001, 2.002), (1.002, 0.00000002), (1.003, 0.100000001), (1.004, 0.100044001), (1.005, 0.100045001);""" + qt_select """select * from test_sys_update_basic_test_update_decimal_tb where k1 = 1.001;""" + sql """ + UPDATE test_sys_update_basic_test_update_decimal_tb SET v1=0.0001 WHERE k1 = 1.001; + """ + qt_select_after_update """ + select * from test_sys_update_basic_test_update_decimal_tb where k1 = 1.001; + """ } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org