This is an automated email from the ASF dual-hosted git repository.

lihaopeng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 7d5a10e1af [bug](function) fix mask_first_n function can't handle 
const value (#16308)
7d5a10e1af is described below

commit 7d5a10e1af3178e1b7c076e0fc5d4b6bf542005e
Author: zhangstar333 <[email protected]>
AuthorDate: Fri Feb 3 10:32:42 2023 +0800

    [bug](function) fix mask_first_n function can't handle const value (#16308)
---
 be/src/vec/functions/function_string.h             |  6 +--
 .../nereids_function_p0/scalar_function/L-Q.out    | 63 ++++++++++++++++++++++
 .../nereids_function_p0/scalar_function/L-Q.groovy | 11 ++--
 3 files changed, 71 insertions(+), 9 deletions(-)

diff --git a/be/src/vec/functions/function_string.h 
b/be/src/vec/functions/function_string.h
index 2a50b609e1..2e3eacf031 100644
--- a/be/src/vec/functions/function_string.h
+++ b/be/src/vec/functions/function_string.h
@@ -420,8 +420,8 @@ public:
         int n = -1;
 
         auto res = ColumnString::create();
-        const ColumnString& source_column =
-                assert_cast<const 
ColumnString&>(*block.get_by_position(arguments[0]).column);
+        auto col = 
block.get_by_position(arguments[0]).column->convert_to_full_column_if_const();
+        const ColumnString& source_column = assert_cast<const 
ColumnString&>(*col);
 
         if (arguments.size() == 2) {
             auto& col = *block.get_by_position(arguments[1]).column;
@@ -435,7 +435,7 @@ public:
             FunctionMask::vector_mask(source_column, *res, 
FunctionMask::DEFAULT_UPPER_MASK,
                                       FunctionMask::DEFAULT_LOWER_MASK,
                                       FunctionMask::DEFAULT_NUMBER_MASK);
-        } else if (n > 0) {
+        } else if (n >= 0) {
             vector(source_column, n, *res);
         }
 
diff --git a/regression-test/data/nereids_function_p0/scalar_function/L-Q.out 
b/regression-test/data/nereids_function_p0/scalar_function/L-Q.out
index 5702404b0f..9626ce8e16 100644
--- a/regression-test/data/nereids_function_p0/scalar_function/L-Q.out
+++ b/regression-test/data/nereids_function_p0/scalar_function/L-Q.out
@@ -524,6 +524,39 @@ xxxxxxn
 xxxxxxn
 xxxxxxn
 
+-- !sql --
+\N
+xarchar11
+xarchar11
+xxxchar11
+xxxxxxxnn
+xarchar12
+xarchar12
+xxxchar12
+xxxchar12
+xxxchar13
+xxxxxxr13
+xxxchar13
+xxxxxxxnn
+
+-- !sql --
+\N
+xtring1
+xtring1
+xxxing1
+xxxxxxn
+xtring2
+xtring2
+xxxing2
+xxxing2
+xxxing3
+xxxxxx3
+xxxing3
+xxxxxxn
+
+-- !sql_mask_const --
+xxxnnn
+
 -- !sql --
 xxxx
 xxxxxxxnn
@@ -554,6 +587,36 @@ xxxxxxn
 xxxxxxn
 xxxxxxn
 
+-- !sql --
+\N
+varchar1n
+varchar1n
+varchaxnn
+xxxxxxxnn
+varchar1n
+varchar1n
+varchaxnn
+varchaxnn
+varchaxnn
+varxxxxnn
+varchaxnn
+xxxxxxxnn
+
+-- !sql --
+\N
+stringn
+stringn
+strixxn
+xxxxxxn
+stringn
+stringn
+strixxn
+strixxn
+strixxn
+sxxxxxn
+strixxn
+xxxxxxn
+
 -- !sql --
 37a6259cc0c1dae299a7866489dff0bd
 8507af7854a1ef7feca8e5cdbce5e613
diff --git 
a/regression-test/suites/nereids_function_p0/scalar_function/L-Q.groovy 
b/regression-test/suites/nereids_function_p0/scalar_function/L-Q.groovy
index e340c4a025..16f0708ce7 100644
--- a/regression-test/suites/nereids_function_p0/scalar_function/L-Q.groovy
+++ b/regression-test/suites/nereids_function_p0/scalar_function/L-Q.groovy
@@ -65,14 +65,13 @@ suite("nereids_scalar_fn_3") {
     qt_sql "select mask(kstr) from fn_test order by kstr"
     qt_sql "select mask_first_n(kvchrs1) from fn_test order by kvchrs1"
     qt_sql "select mask_first_n(kstr) from fn_test order by kstr"
-    // core
-    // qt_sql "select mask_first_n(kvchrs1, kint) from fn_test order by 
kvchrs1, kint"
-    // qt_sql "select mask_first_n(kstr, kint) from fn_test order by kstr, 
kint"
+    qt_sql "select mask_first_n(kvchrs1, kint) from fn_test order by kvchrs1, 
kint"
+    qt_sql "select mask_first_n(kstr, kint) from fn_test order by kstr, kint"
+    qt_sql_mask_const "select mask_first_n('asd123', 54);"
     qt_sql "select mask_last_n(kvchrs1) from fn_test order by kvchrs1"
     qt_sql "select mask_last_n(kstr) from fn_test order by kstr"
-    // core
-    // qt_sql "select mask_last_n(kvchrs1, kint) from fn_test order by 
kvchrs1, kint"
-    // qt_sql "select mask_last_n(kstr, kint) from fn_test order by kstr, kint"
+    qt_sql "select mask_last_n(kvchrs1, kint) from fn_test order by kvchrs1, 
kint"
+    qt_sql "select mask_last_n(kstr, kint) from fn_test order by kstr, kint"
     qt_sql "select md5(kvchrs1) from fn_test order by kvchrs1"
     qt_sql "select md5(kstr) from fn_test order by kstr"
     // cannot find function


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to