This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch branch-1.2-lts
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-1.2-lts by this push:
new 9670b3a6b5 [round](decimalv2) round decimalv2 to precision value
(#22162)
9670b3a6b5 is described below
commit 9670b3a6b5152a501ce32b549e595ede66b01be8
Author: Gabriel <[email protected]>
AuthorDate: Wed Jul 26 00:28:16 2023 +0800
[round](decimalv2) round decimalv2 to precision value (#22162)
pick #22138
---
be/src/vec/functions/round.h | 7 ++++---
.../org/apache/doris/analysis/FunctionCallExpr.java | 1 +
gensrc/script/doris_builtins_functions.py | 19 +++++++++++++++++++
.../sql_functions/math_functions/test_round.out | 14 +++++++++++++-
.../sql_functions/math_functions/test_round.groovy | 11 +++++++++++
5 files changed, 48 insertions(+), 4 deletions(-)
diff --git a/be/src/vec/functions/round.h b/be/src/vec/functions/round.h
index 298d956c12..226d453686 100644
--- a/be/src/vec/functions/round.h
+++ b/be/src/vec/functions/round.h
@@ -147,6 +147,7 @@ private:
public:
static NO_INLINE void apply(const Container& in, UInt32 in_scale,
Container& out,
Int16 out_scale) {
+ constexpr bool is_decimalv2 = IsDecimalV2<T>;
Int16 scale_arg = in_scale - out_scale;
if (scale_arg > 0) {
size_t scale = int_exp10(scale_arg);
@@ -156,15 +157,15 @@ public:
NativeType* __restrict p_out =
reinterpret_cast<NativeType*>(out.data());
if (out_scale < 0) {
- size_t target_scale = int_exp10(-out_scale);
while (p_in < end_in) {
- Op::compute(p_in, scale, p_out, target_scale);
+ Op::compute(p_in, scale, p_out,
+ is_decimalv2 ? int_exp10(9 - out_scale) :
int_exp10(-out_scale));
++p_in;
++p_out;
}
} else {
while (p_in < end_in) {
- Op::compute(p_in, scale, p_out, 1);
+ Op::compute(p_in, scale, p_out, is_decimalv2 ? scale : 1);
++p_in;
++p_out;
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
index 05474da81a..6c05c84b21 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
@@ -28,6 +28,7 @@ import org.apache.doris.catalog.DatabaseIf;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.Function;
import org.apache.doris.catalog.FunctionSet;
+import org.apache.doris.catalog.MapType;
import org.apache.doris.catalog.ScalarFunction;
import org.apache.doris.catalog.ScalarType;
import org.apache.doris.catalog.Type;
diff --git a/gensrc/script/doris_builtins_functions.py
b/gensrc/script/doris_builtins_functions.py
index 3538ecfa93..b6d8318299 100755
--- a/gensrc/script/doris_builtins_functions.py
+++ b/gensrc/script/doris_builtins_functions.py
@@ -1751,6 +1751,13 @@ visible_functions = [
'_ZN5doris13MathFunctions5floorEPN9doris_udf15FunctionContextERKNS1_9DoubleValE',
'', '', 'vec', ''],
[['round', 'dround'], 'DOUBLE', ['DOUBLE'],
'_ZN5doris13MathFunctions5roundEPN9doris_udf15FunctionContextERKNS1_9DoubleValE',
'', '', 'vec', ''],
+ [['ceil', 'ceiling', 'dceil'], 'DECIMALV2', ['DECIMALV2'],
+
'_ZN5doris13MathFunctions4ceilEPN9doris_udf15FunctionContextERKNS1_9DoubleValE',
'', '', 'vec', ''],
+ [['floor', 'dfloor'], 'DECIMALV2', ['DECIMALV2'],
+
'_ZN5doris13MathFunctions5floorEPN9doris_udf15FunctionContextERKNS1_9DoubleValE',
'', '', 'vec', ''],
+ [['round', 'dround'], 'DECIMALV2', ['DECIMALV2'],
+
'_ZN5doris13MathFunctions5roundEPN9doris_udf15FunctionContextERKNS1_9DoubleValE',
'', '', 'vec', ''],
+
[['ceil', 'ceiling', 'dceil'], 'DECIMAL32', ['DECIMAL32'],
'_ZN5doris13MathFunctions4ceilEPN9doris_udf15FunctionContextERKNS1_9DoubleValE',
'', '', 'vec', ''],
[['floor', 'dfloor'], 'DECIMAL32', ['DECIMAL32'],
@@ -1772,6 +1779,9 @@ visible_functions = [
[['round', 'dround'], 'DOUBLE', ['DOUBLE', 'INT'],
'_ZN5doris13MathFunctions11round_up_toEPN9doris_udf'
'15FunctionContextERKNS1_9DoubleValERKNS1_6IntValE', '', '',
'vec', ''],
+ [['round', 'dround'], 'DECIMALV2', ['DECIMALV2', 'INT'],
+ '_ZN5doris13MathFunctions11round_up_toEPN9doris_udf'
+ '15FunctionContextERKNS1_9DoubleValERKNS1_6IntValE', '', '',
'vec', ''],
[['round', 'dround'], 'DECIMAL32', ['DECIMAL32', 'INT'],
'_ZN5doris13MathFunctions11round_up_toEPN9doris_udf'
'15FunctionContextERKNS1_9DoubleValERKNS1_6IntValE', '', '',
'vec', ''],
@@ -1781,6 +1791,9 @@ visible_functions = [
[['round', 'dround'], 'DECIMAL128', ['DECIMAL128', 'INT'],
'_ZN5doris13MathFunctions11round_up_toEPN9doris_udf'
'15FunctionContextERKNS1_9DoubleValERKNS1_6IntValE', '', '',
'vec', ''],
+ [['floor', 'dfloor'], 'DECIMALV2', ['DECIMALV2', 'INT'],
+ '_ZN5doris13MathFunctions11round_up_toEPN9doris_udf'
+ '15FunctionContextERKNS1_9DoubleValERKNS1_6IntValE', '', '',
'vec', ''],
[['floor', 'dfloor'], 'DECIMAL32', ['DECIMAL32', 'INT'],
'_ZN5doris13MathFunctions11round_up_toEPN9doris_udf'
'15FunctionContextERKNS1_9DoubleValERKNS1_6IntValE', '', '',
'vec', ''],
@@ -1790,6 +1803,9 @@ visible_functions = [
[['floor', 'dfloor'], 'DECIMAL128', ['DECIMAL128', 'INT'],
'_ZN5doris13MathFunctions11round_up_toEPN9doris_udf'
'15FunctionContextERKNS1_9DoubleValERKNS1_6IntValE', '', '',
'vec', ''],
+ [['ceil', 'dceil'], 'DECIMALV2', ['DECIMALV2', 'INT'],
+ '_ZN5doris13MathFunctions11round_up_toEPN9doris_udf'
+ '15FunctionContextERKNS1_9DoubleValERKNS1_6IntValE', '', '',
'vec', ''],
[['ceil', 'dceil'], 'DECIMAL32', ['DECIMAL32', 'INT'],
'_ZN5doris13MathFunctions11round_up_toEPN9doris_udf'
'15FunctionContextERKNS1_9DoubleValERKNS1_6IntValE', '', '',
'vec', ''],
@@ -1802,6 +1818,9 @@ visible_functions = [
[['truncate'], 'DOUBLE', ['DOUBLE', 'INT'],
'_ZN5doris13MathFunctions8truncateEPN9doris_udf'
'15FunctionContextERKNS1_9DoubleValERKNS1_6IntValE', '', '',
'vec', ''],
+ [['truncate'], 'DECIMALV2', ['DECIMALV2', 'INT'],
+ '_ZN5doris13MathFunctions8truncateEPN9doris_udf'
+ '15FunctionContextERKNS1_9DoubleValERKNS1_6IntValE', '', '',
'vec', ''],
[['truncate'], 'DECIMAL32', ['DECIMAL32', 'INT'],
'_ZN5doris13MathFunctions11round_up_toEPN9doris_udf'
'15FunctionContextERKNS1_9DoubleValERKNS1_6IntValE', '', '',
'vec', ''],
diff --git
a/regression-test/data/query_p0/sql_functions/math_functions/test_round.out
b/regression-test/data/query_p0/sql_functions/math_functions/test_round.out
index c3dfffa26c..9a03815435 100644
--- a/regression-test/data/query_p0/sql_functions/math_functions/test_round.out
+++ b/regression-test/data/query_p0/sql_functions/math_functions/test_round.out
@@ -68,4 +68,16 @@
200.000 500.000 700.000
-- !query --
-0.000 0.000 0.000
\ No newline at end of file
+0.000 0.000 0.000
+
+-- !query --
+16.03
+
+-- !query --
+16.02
+
+-- !query --
+16.030000000
+
+-- !query --
+16.020000000
diff --git
a/regression-test/suites/query_p0/sql_functions/math_functions/test_round.groovy
b/regression-test/suites/query_p0/sql_functions/math_functions/test_round.groovy
index 86fc8ea6ad..5ddbde7813 100644
---
a/regression-test/suites/query_p0/sql_functions/math_functions/test_round.groovy
+++
b/regression-test/suites/query_p0/sql_functions/math_functions/test_round.groovy
@@ -116,4 +116,15 @@ suite("test_round") {
qt_query """ select cast(round(sum(d1), -2) as decimalv3(27, 3)),
cast(round(sum(d2), -2) as decimalv3(27, 3)), cast(round(sum(d3), -2) as
decimalv3(27, 3)) from ${tableName3} """
qt_query """ select cast(round(sum(d1), -4) as decimalv3(27, 3)),
cast(round(sum(d2), -4) as decimalv3(27, 3)), cast(round(sum(d3), -4) as
decimalv3(27, 3)) from ${tableName3} """
+ sql """ ADMIN SET FRONTEND CONFIG ("enable_decimal_conversion" = "false");
"""
+ sql """ ADMIN SET FRONTEND CONFIG ("disable_decimalv2" = "false"); """
+ sql """ set experimental_enable_nereids_planner=false; """
+ sql """ DROP TABLE IF EXISTS `test_decimalv2` """
+ sql """ CREATE TABLE `test_decimalv2` ( id int, decimal_col DECIMAL(19,5))
ENGINE=OLAP duplicate KEY (id) DISTRIBUTED BY HASH(id) BUCKETS 1 PROPERTIES (
"replication_allocation" = "tag.location.default: 1"); """
+ sql """ insert into test_decimalv2 values (1, 16.025); """
+ qt_query """ select round(decimal_col,2) from test_decimalv2; """
+ qt_query """ select truncate(decimal_col,2) from test_decimalv2; """
+ qt_query """ select ceil(decimal_col,2) from test_decimalv2; """
+ qt_query """ select floor(decimal_col,2) from test_decimalv2; """
+ sql """ ADMIN SET FRONTEND CONFIG ("enable_decimal_conversion" = "true");
"""
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]