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 <gabrielleeb...@gmail.com> 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: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org