This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.0 by this push:
new f14950c2f20 branch-4.0: [fix](DecimalV2)keep the original precision
and scale in get_data_type_with_default_argument #56821 (#56923)
f14950c2f20 is described below
commit f14950c2f204b48e65e7ce59171b625fa3280fe6
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Oct 14 18:08:37 2025 +0800
branch-4.0: [fix](DecimalV2)keep the original precision and scale in
get_data_type_with_default_argument #56821 (#56923)
Cherry-picked from #56821
Co-authored-by: Mryange <[email protected]>
---
be/src/vec/data_types/data_type_decimal.cpp | 16 ++++--
.../decimalv2/test_decimalv2_rqg.groovy | 59 ++++++++++++++++++++++
2 files changed, 72 insertions(+), 3 deletions(-)
diff --git a/be/src/vec/data_types/data_type_decimal.cpp
b/be/src/vec/data_types/data_type_decimal.cpp
index 75dee568f3c..01eca424c49 100644
--- a/be/src/vec/data_types/data_type_decimal.cpp
+++ b/be/src/vec/data_types/data_type_decimal.cpp
@@ -55,10 +55,20 @@ namespace doris::vectorized {
DataTypePtr get_data_type_with_default_argument(DataTypePtr type) {
auto transform = [&](DataTypePtr t) -> DataTypePtr {
if (t->get_primitive_type() == PrimitiveType::TYPE_DECIMALV2) {
- auto res = DataTypeFactory::instance().create_data_type(
- TYPE_DECIMALV2, t->is_nullable(),
BeConsts::MAX_DECIMALV2_PRECISION,
- BeConsts::MAX_DECIMALV2_SCALE);
+ auto not_nullable_t = remove_nullable(t);
+ const auto* real_type_t = assert_cast<const
DataTypeDecimalV2*>(not_nullable_t.get());
+ // should keep the original precision and scale
+ DataTypePtr res = std::make_shared<DataTypeDecimalV2>(
+ BeConsts::MAX_DECIMALV2_PRECISION,
BeConsts::MAX_DECIMALV2_SCALE,
+ real_type_t->get_original_precision(),
real_type_t->get_original_scale());
+
+ // keep nullable property
+ if (t->is_nullable()) {
+ res = make_nullable(res);
+ }
+
DCHECK_EQ(res->get_scale(), BeConsts::MAX_DECIMALV2_SCALE);
+
return res;
} else if (t->get_primitive_type() == PrimitiveType::TYPE_BINARY ||
t->get_primitive_type() ==
PrimitiveType::TYPE_LAMBDA_FUNCTION) {
diff --git
a/regression-test/suites/datatype_p0/decimalv2/test_decimalv2_rqg.groovy
b/regression-test/suites/datatype_p0/decimalv2/test_decimalv2_rqg.groovy
new file mode 100644
index 00000000000..f5c9615740a
--- /dev/null
+++ b/regression-test/suites/datatype_p0/decimalv2/test_decimalv2_rqg.groovy
@@ -0,0 +1,59 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("test_decimalv2_rqg") {
+
+
+ sql """ADMIN SET FRONTEND CONFIG ('disable_decimalv2' = 'false')"""
+
+ sql """
+ CREATE TABLE IF NOT EXISTS TEMPDATA(id INT, data INT) DISTRIBUTED BY
HASH(id) BUCKETS 1 PROPERTIES ('replication_num' = '1');
+ """
+ sql """
+ INSERT INTO TEMPDATA values(1, 1);
+ """
+
+ sql """CREATE TABLE IF NOT EXISTS
DECIMALV2_10_0_DATA_NOT_EMPTY_NOT_NULLABLE(id INT, data DECIMALV2(10,0) NOT
NULL) DISTRIBUTED BY HASH(id) BUCKETS 1 PROPERTIES ('replication_num' = '1');"""
+
+ sql """
+ INSERT INTO DECIMALV2_10_0_DATA_NOT_EMPTY_NOT_NULLABLE values (0,
1234567890);"""
+ sql """
+ INSERT INTO DECIMALV2_10_0_DATA_NOT_EMPTY_NOT_NULLABLE values (1,
9999999999);"""
+ sql """
+ INSERT INTO DECIMALV2_10_0_DATA_NOT_EMPTY_NOT_NULLABLE values (2,
1000000000);"""
+ sql """
+ INSERT INTO DECIMALV2_10_0_DATA_NOT_EMPTY_NOT_NULLABLE values (3,
1111111111);"""
+ sql """
+ INSERT INTO DECIMALV2_10_0_DATA_NOT_EMPTY_NOT_NULLABLE values (4,
-1234567890);"""
+ sql """
+ INSERT INTO DECIMALV2_10_0_DATA_NOT_EMPTY_NOT_NULLABLE values (5,
-9999999999);"""
+ sql """
+ INSERT INTO DECIMALV2_10_0_DATA_NOT_EMPTY_NOT_NULLABLE values (6,
-1000000000);"""
+ sql """
+ INSERT INTO DECIMALV2_10_0_DATA_NOT_EMPTY_NOT_NULLABLE values (7,
-1111111111);"""
+ sql """
+ INSERT INTO DECIMALV2_10_0_DATA_NOT_EMPTY_NOT_NULLABLE values (8, 1);"""
+ sql """
+ INSERT INTO DECIMALV2_10_0_DATA_NOT_EMPTY_NOT_NULLABLE values (9, 0);"""
+ sql """
+ INSERT INTO DECIMALV2_10_0_DATA_NOT_EMPTY_NOT_NULLABLE values (10, -1);"""
+
+
+ sql """
+ SELECT CEIL(ARG0,CAST(-1 AS INT)) FROM (SELECT TEMPDATA . data,
TABLE0.ARG0 FROM TEMPDATA CROSS JOIN (SELECT data AS ARG0 FROM
DECIMALV2_10_0_DATA_NOT_EMPTY_NOT_NULLABLE ) AS TABLE0) t ;
+ """
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]