Skip to content

Commit 7d5a10e

Browse files
authored
[bug](function) fix mask_first_n function can't handle const value (#16308)
1 parent 4fc0715 commit 7d5a10e

3 files changed

Lines changed: 71 additions & 9 deletions

File tree

be/src/vec/functions/function_string.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -420,8 +420,8 @@ class FunctionMaskPartial : public IFunction {
420420
int n = -1;
421421

422422
auto res = ColumnString::create();
423-
const ColumnString& source_column =
424-
assert_cast<const ColumnString&>(*block.get_by_position(arguments[0]).column);
423+
auto col = block.get_by_position(arguments[0]).column->convert_to_full_column_if_const();
424+
const ColumnString& source_column = assert_cast<const ColumnString&>(*col);
425425

426426
if (arguments.size() == 2) {
427427
auto& col = *block.get_by_position(arguments[1]).column;
@@ -435,7 +435,7 @@ class FunctionMaskPartial : public IFunction {
435435
FunctionMask::vector_mask(source_column, *res, FunctionMask::DEFAULT_UPPER_MASK,
436436
FunctionMask::DEFAULT_LOWER_MASK,
437437
FunctionMask::DEFAULT_NUMBER_MASK);
438-
} else if (n > 0) {
438+
} else if (n >= 0) {
439439
vector(source_column, n, *res);
440440
}
441441

regression-test/data/nereids_function_p0/scalar_function/L-Q.out

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,39 @@ xxxxxxn
524524
xxxxxxn
525525
xxxxxxn
526526

527+
-- !sql --
528+
\N
529+
xarchar11
530+
xarchar11
531+
xxxchar11
532+
xxxxxxxnn
533+
xarchar12
534+
xarchar12
535+
xxxchar12
536+
xxxchar12
537+
xxxchar13
538+
xxxxxxr13
539+
xxxchar13
540+
xxxxxxxnn
541+
542+
-- !sql --
543+
\N
544+
xtring1
545+
xtring1
546+
xxxing1
547+
xxxxxxn
548+
xtring2
549+
xtring2
550+
xxxing2
551+
xxxing2
552+
xxxing3
553+
xxxxxx3
554+
xxxing3
555+
xxxxxxn
556+
557+
-- !sql_mask_const --
558+
xxxnnn
559+
527560
-- !sql --
528561
xxxx
529562
xxxxxxxnn
@@ -554,6 +587,36 @@ xxxxxxn
554587
xxxxxxn
555588
xxxxxxn
556589

590+
-- !sql --
591+
\N
592+
varchar1n
593+
varchar1n
594+
varchaxnn
595+
xxxxxxxnn
596+
varchar1n
597+
varchar1n
598+
varchaxnn
599+
varchaxnn
600+
varchaxnn
601+
varxxxxnn
602+
varchaxnn
603+
xxxxxxxnn
604+
605+
-- !sql --
606+
\N
607+
stringn
608+
stringn
609+
strixxn
610+
xxxxxxn
611+
stringn
612+
stringn
613+
strixxn
614+
strixxn
615+
strixxn
616+
sxxxxxn
617+
strixxn
618+
xxxxxxn
619+
557620
-- !sql --
558621
37a6259cc0c1dae299a7866489dff0bd
559622
8507af7854a1ef7feca8e5cdbce5e613

regression-test/suites/nereids_function_p0/scalar_function/L-Q.groovy

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,13 @@ suite("nereids_scalar_fn_3") {
6565
qt_sql "select mask(kstr) from fn_test order by kstr"
6666
qt_sql "select mask_first_n(kvchrs1) from fn_test order by kvchrs1"
6767
qt_sql "select mask_first_n(kstr) from fn_test order by kstr"
68-
// core
69-
// qt_sql "select mask_first_n(kvchrs1, kint) from fn_test order by kvchrs1, kint"
70-
// qt_sql "select mask_first_n(kstr, kint) from fn_test order by kstr, kint"
68+
qt_sql "select mask_first_n(kvchrs1, kint) from fn_test order by kvchrs1, kint"
69+
qt_sql "select mask_first_n(kstr, kint) from fn_test order by kstr, kint"
70+
qt_sql_mask_const "select mask_first_n('asd123', 54);"
7171
qt_sql "select mask_last_n(kvchrs1) from fn_test order by kvchrs1"
7272
qt_sql "select mask_last_n(kstr) from fn_test order by kstr"
73-
// core
74-
// qt_sql "select mask_last_n(kvchrs1, kint) from fn_test order by kvchrs1, kint"
75-
// qt_sql "select mask_last_n(kstr, kint) from fn_test order by kstr, kint"
73+
qt_sql "select mask_last_n(kvchrs1, kint) from fn_test order by kvchrs1, kint"
74+
qt_sql "select mask_last_n(kstr, kint) from fn_test order by kstr, kint"
7675
qt_sql "select md5(kvchrs1) from fn_test order by kvchrs1"
7776
qt_sql "select md5(kstr) from fn_test order by kstr"
7877
// cannot find function

0 commit comments

Comments
 (0)