This is an automated email from the ASF dual-hosted git repository.
yiguolei 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 9ea5400b504 [fix](function) fix some functions make core problem by
wrong parameters (#54972)
9ea5400b504 is described below
commit 9ea5400b504c46f2a56366e6fe59415052963dc0
Author: dwdwqfwe <[email protected]>
AuthorDate: Thu Sep 11 17:54:37 2025 +0800
[fix](function) fix some functions make core problem by wrong parameters
(#54972)
### What problem does this PR solve?
*** Query id: 159794e69f35488b-b9f10c347027c262 ***
*** is nereids: 0 ***
*** tablet id: 0 ***
*** Aborted at 1755220554 (unix time) try "date -d @1755220554" if you
are using GNU date ***
*** Current BE git commitID: ee5ba3c9de ***
*** SIGABRT unknown detail explain (@0x24b354) received by PID 2405204
(TID 2405975 OR 0x7b389fb12640) from PID 2405204; stack trace: ***
@ (nil) (unknown)
@ 0x564d4d078cf0 execute_native_thread_routine
@ 0x564d2b08ad27 asan_thread_start()
@ 0x7f3cd533eac3 (unknown)
@ 0x564d2f43602f doris::WorkThreadPool<>::work_thread()
@ 0x564d426de8df doris::vectorized::VectorizedFnCall::open()
@ 0x7f3cd53d0850 (unknown)
@ 0x564d427891dc doris::vectorized::VExprContext::open()
@ 0x564d2f4739ec doris::FoldConstantExecutor::fold_constant_vexpr()
@ 0x564d2f3f8be8 std::_Function_handler<>::_M_invoke()
@ (nil) (unknown)
@ 0x564d426e1c24 doris::vectorized::VectorizedFnCall::execute()
@ 0x564d4d078cf0 execute_native_thread_routine
@ 0x564d2b08ad27 asan_thread_start()
@ 0x564d445f0267 doris::vectorized::PreparedFunctionImpl::execute()
@ 0x7f3cd533eac3 (unknown)
@ 0x564d4d078cf0 execute_native_thread_routine
@ 0x564d2b08ad27 asan_thread_start()
@ 0x7f3cd53d0850 (unknown)
@ 0x564d427891dc doris::vectorized::VExprContext::open()
@ 0x564d2f47ffa2 doris::FoldConstantExecutor::_prepare_and_open<>()
@ 0x7f3cd533eac3 (unknown)
@ (nil) (unknown)
@ 0x564d2f43602f doris::WorkThreadPool<>::work_thread()
@ 0x7f3cd53d0850 (unknown)
@ (nil) (unknown)
@ 0x564d426ff978 doris::vectorized::VExpr::get_const_col()
@ 0x564d2f4739ec doris::FoldConstantExecutor::fold_constant_vexpr()
@ 0x564d2ea2a045 doris::vectorized::IFunctionBase::execute()
@ 0x564d2f3f8be8 std::_Function_handler<>::_M_invoke()
@ 0x564d2f47ffa2 doris::FoldConstantExecutor::_prepare_and_open<>()
@ 0x564d4d078cf0 execute_native_thread_routine
@ 0x564d2b08ad27 asan_thread_start()
@ 0x7f3cd533eac3 (unknown)
@ 0x7f3cd53d0850 (unknown)
@ 0x564d2f43602f doris::WorkThreadPool<>::work_thread()
@ (nil) (unknown)
@ 0x564d2f4739ec doris::FoldConstantExecutor::fold_constant_vexpr()
@ 0x564d2f3f8be8 std::_Function_handler<>::_M_invoke()
@ 0x564d426de8df doris::vectorized::VectorizedFnCall::open()
@ 0x564d426e075e doris::vectorized::VectorizedFnCall::_do_execute()
@ 0x564d4d078cf0 execute_native_thread_routine
@ 0x564d2b08ad27 asan_thread_start()
@ 0x7f3cd533eac3 (unknown)
@ 0x564d2f43602f doris::WorkThreadPool<>::work_thread()
@ 0x7f3cd53d0850 (unknown)
@ (nil) (unknown)
@ 0x564d427891dc doris::vectorized::VExprContext::open()
@ 0x564d4d078cf0 execute_native_thread_routine
@ 0x564d2b08ad27 asan_thread_start()
@ 0x7f3cd533eac3 (unknown)
@ 0x7f3cd53d0850 (unknown) @ (nil) (unknown)
0# doris::signal::(anonymous namespace)::FailureSignalHandler(int,
siginfo_t*, void*) at
/home/zcp/repo_center/doris_master/doris/be/src/common/signal_handler.h:420
1# 0x00007F3CD52EC520 in /lib/x86_64-linux-gnu/libc.so.6
2# pthread_kill at ./nptl/pthread_kill.c:89
3# raise at ../sysdeps/posix/raise.c:27
4# abort at ./stdlib/abort.c:81
5# 0x0000564D49BBCBC5 in /mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be
6# 0x0000564D49BAE47A in /mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be
7# google::LogMessage::SendToLog() in
/mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be
8# google::LogMessage::Flush() in
/mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be
9# google::LogMessageFatal::~LogMessageFatal() in
/mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be
10#
doris::vectorized::FunctionMask::execute_impl(doris::FunctionContext*,
doris::vectorized::Block&, std::vector<unsigned int,
std::allocator<unsigned int> > const&, unsigned int, unsigned long)
const at
/home/zcp/repo_center/doris_master/doris/be/src/vec/functions/function_string.h:502
11#
doris::vectorized::DefaultExecutable::execute_impl(doris::FunctionContext*,
doris::vectorized::Block&, std::vector<unsigned int,
std::allocator<unsigned int> > const&, unsigned int, unsigned long)
const at
/home/zcp/repo_center/doris_master/doris/be/src/vec/functions/function.h:438
12#
doris::vectorized::PreparedFunctionImpl::_execute_skipped_constant_deal(doris::FunctionContext*,
doris::vectorized::Block&, std::vector<unsigned int,
std::allocator<unsigned int> > const&, unsigned int, unsigned long,
bool) const in /mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be
13#
doris::vectorized::PreparedFunctionImpl::default_implementation_for_constant_arguments(doris::FunctionContext*,
doris::vectorized::Block&, std::vector<unsigned int,
std::allocator<unsigned int> > const&, unsigned int, unsigned long,
bool, bool*) const at
/home/zcp/repo_center/doris_master/doris/be/src/vec/functions/function.cpp:169
14#
doris::vectorized::PreparedFunctionImpl::execute_without_low_cardinality_columns(doris::FunctionContext*,
doris::vectorized::Block&, std::vector<unsigned int,
std::allocator<unsigned int> > const&, unsigned int, unsigned long,
bool) const at
/home/zcp/repo_center/doris_master/doris/be/src/vec/functions/function.cpp:238
15#
doris::vectorized::PreparedFunctionImpl::execute(doris::FunctionContext*,
doris::vectorized::Block&, std::vector<unsigned int,
std::allocator<unsigned int> > const&, unsigned int, unsigned long,
bool) const at
/home/zcp/repo_center/doris_master/doris/be/src/vec/functions/function.cpp:250
16# doris::vectorized::IFunctionBase::execute(doris::FunctionContext*,
doris::vectorized::Block&, std::vector<unsigned int,
std::allocator<unsigned int> > const&, unsigned int, unsigned long,
bool) const at
/home/zcp/repo_center/doris_master/doris/be/src/vec/functions/function.h:188
17#
doris::vectorized::VectorizedFnCall::_do_execute(doris::vectorized::VExprContext*,
doris::vectorized::Block*, int*, std::vector<unsigned int,
std::allocator<unsigned int> >&) at
/home/zcp/repo_center/doris_master/doris/be/src/vec/exprs/vectorized_fn_call.cpp:210
18#
doris::vectorized::VectorizedFnCall::execute(doris::vectorized::VExprContext*,
doris::vectorized::Block*, int*) at
/home/zcp/repo_center/doris_master/doris/be/src/vec/exprs/vectorized_fn_call.cpp:245
19#
doris::vectorized::VExpr::get_const_col(doris::vectorized::VExprContext*,
std::shared_ptr<doris::ColumnPtrWrapper>*) at
/home/zcp/repo_center/doris_master/doris/be/src/vec/exprs/vexpr.cpp:563
20# doris::vectorized::VectorizedFnCall::open(doris::RuntimeState*,
doris::vectorized::VExprContext*,
doris::FunctionContext::FunctionStateScope) at
/home/zcp/repo_center/doris_master/doris/be/src/vec/exprs/vectorized_fn_call.cpp:143
21# doris::vectorized::VExprContext::open(doris::RuntimeState*) at
/home/zcp/repo_center/doris_master/doris/be/src/vec/exprs/vexpr_context.cpp:92
22# doris::Status
doris::FoldConstantExecutor::_prepare_and_open<doris::vectorized::VExprContext>(doris::vectorized::VExprContext*)
in /mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be
23#
doris::FoldConstantExecutor::fold_constant_vexpr(doris::TFoldConstantParams
const&, doris::PConstantExprResult*) at
/home/zcp/repo_center/doris_master/doris/be/src/runtime/fold_constant_executor.cpp:95
24# std::_Function_handler<void (),
doris::PInternalService::fold_constant_expr(google::protobuf::RpcController*,
doris::PConstantExprRequest const*, doris::PConstantExprResult*,
google::protobuf::Closure*)::$_0>::_M_invoke(std::_Any_data const&) at
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_function.h:292
25# doris::WorkThreadPool<false>::work_thread(int) in
/mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be
26# execute_native_thread_routine in
/mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be
27# asan_thread_start(void*) in
/mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be
28# start_thread at ./nptl/pthread_create.c:442
29# 0x00007F3CD53D0850 at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:83
---
.../functions/scalar/AesCryptoFunction.java | 5 ++++
.../trees/expressions/functions/scalar/Mask.java | 30 ++++++++++++++--------
.../correctness_p0/test_mask_function.groovy | 23 +++++++++++++++++
.../test_encryption_function.groovy | 12 +++++++++
.../suites/nereids_syntax_p0/mask_function.groovy | 2 +-
5 files changed, 61 insertions(+), 11 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesCryptoFunction.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesCryptoFunction.java
index bff74e90453..4d9eb16679c 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesCryptoFunction.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesCryptoFunction.java
@@ -88,6 +88,11 @@ public abstract class AesCryptoFunction extends
CryptoFunction {
return encryptionMode;
}
+ @Override
+ public void checkLegalityBeforeTypeCoercion() {
+ checkLegalityAfterRewrite();
+ }
+
@Override
public void checkLegalityAfterRewrite() {
if (arity() >= 4 && child(3) instanceof StringLikeLiteral) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Mask.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Mask.java
index 547bb70886e..57393ec91ab 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Mask.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Mask.java
@@ -36,8 +36,23 @@ import java.util.List;
*/
public class Mask extends ScalarFunction implements
ExplicitlyCastableSignature, PropagateNullable {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
-
FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT).varArgs(VarcharType.SYSTEM_DEFAULT),
-
FunctionSignature.ret(StringType.INSTANCE).varArgs(StringType.INSTANCE)
+ FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT)
+ .args(VarcharType.SYSTEM_DEFAULT),
+ FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT)
+ .args(VarcharType.SYSTEM_DEFAULT,
VarcharType.SYSTEM_DEFAULT),
+ FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT)
+ .args(VarcharType.SYSTEM_DEFAULT,
VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT),
+ FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT)
+ .args(VarcharType.SYSTEM_DEFAULT,
VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT,
+ VarcharType.SYSTEM_DEFAULT),
+ FunctionSignature.ret(StringType.INSTANCE)
+ .args(StringType.INSTANCE),
+ FunctionSignature.ret(StringType.INSTANCE)
+ .args(StringType.INSTANCE, StringType.INSTANCE),
+ FunctionSignature.ret(StringType.INSTANCE)
+ .args(StringType.INSTANCE, StringType.INSTANCE,
StringType.INSTANCE),
+ FunctionSignature.ret(StringType.INSTANCE)
+ .args(StringType.INSTANCE, StringType.INSTANCE,
StringType.INSTANCE, StringType.INSTANCE)
);
/**
@@ -57,17 +72,12 @@ public class Mask extends ScalarFunction implements
ExplicitlyCastableSignature,
*/
@Override
public Mask withChildren(List<Expression> children) {
- Preconditions.checkArgument(!children.isEmpty());
+ Preconditions.checkArgument(!children.isEmpty()
+ && arity() >= 1
+ && arity() <= 4);
return new Mask(getFunctionParams(children));
}
- @Override
- public void checkLegalityAfterRewrite() {
- if (arity() > 4) {
- throw new IllegalArgumentException("mask function only supports 1
to 4 arguments, but got: " + arity());
- }
- }
-
@Override
public List<FunctionSignature> getSignatures() {
return SIGNATURES;
diff --git a/regression-test/suites/correctness_p0/test_mask_function.groovy
b/regression-test/suites/correctness_p0/test_mask_function.groovy
index c1116e633d2..27ebf5fabb1 100644
--- a/regression-test/suites/correctness_p0/test_mask_function.groovy
+++ b/regression-test/suites/correctness_p0/test_mask_function.groovy
@@ -97,6 +97,10 @@ suite("test_mask_function") {
exception "Argument at index 3 for function mask must be constant"
}
+ sql """
+ set enable_fold_constant_by_be=true;
+ """
+
test {
sql """ select mask_last_n("12345", -100); """
exception "function mask_last_n only accept non-negative input for 2nd
argument but got -100"
@@ -113,4 +117,23 @@ suite("test_mask_function") {
sql """ select mask_first_n("12345", id) from table_mask_test; """
exception "mask_first_n must accept literal for 2nd argument"
}
+
+ test {
+ sql """
+ SELECT mask('Ivy', 'G', 'g', '0', ')') AS result;
+ """
+ exception "Can not find the compatibility function signature:
mask(VARCHAR(3), VARCHAR(1), VARCHAR(1), VARCHAR(1), VARCHAR(1))"
+ }
+
+ test {
+ sql """ SELECT mask() AS result;
+ """
+ exception "Can not found function 'mask' which has 0 arity. Candidate
functions are: [mask(Expression, Expression...)]"
+ }
+
+ test {
+ sql """ SELECT mask('Ivy', 'G', 'g', '0', ')','ss','ada') AS result;
+ """
+ exception "Can not find the compatibility function signature:
mask(VARCHAR(3), VARCHAR(1), VARCHAR(1), VARCHAR(1), VARCHAR(1), VARCHAR(2),
VARCHAR(3))"
+ }
}
diff --git
a/regression-test/suites/nereids_p0/sql_functions/encryption_digest/test_encryption_function.groovy
b/regression-test/suites/nereids_p0/sql_functions/encryption_digest/test_encryption_function.groovy
index a2a2e4f5618..e7c95ccfc9c 100644
---
a/regression-test/suites/nereids_p0/sql_functions/encryption_digest/test_encryption_function.groovy
+++
b/regression-test/suites/nereids_p0/sql_functions/encryption_digest/test_encryption_function.groovy
@@ -96,4 +96,16 @@ suite("test_encryption_function") {
qt_sql_empty3 "select hex(aes_encrypt(rpad('', 17, ''), 'securekey456'));"
qt_sql_empty4 "select hex(sm4_encrypt('', 'securekey456'));"
qt_sql_empty5 "select
sm4_decrypt(unhex('0D56319E329CDA9ABDF5870B9D5ACA57'), 'securekey456');"
+
+ test {
+ sql """set enable_fold_constant_by_be=true """
+ sql """select aes_encrypt('Constant',
'0123456789abcdef0123456789abcdef', 'AES_128_ECB', '1234567890abcdef');"""
+ exception """mode 1234567890ABCDEF is not supported"""
+ }
+
+ test {
+ sql """set enable_fold_constant_by_be=true """
+ sql """select aes_decrypt('Constant',
'0123456789abcdef0123456789abcdef', 'AES_128_ECB', '1234567890abcdef');"""
+ exception """mode 1234567890ABCDEF is not supported"""
+ }
}
diff --git a/regression-test/suites/nereids_syntax_p0/mask_function.groovy
b/regression-test/suites/nereids_syntax_p0/mask_function.groovy
index 94aaa913f97..5f0f784d2fc 100644
--- a/regression-test/suites/nereids_syntax_p0/mask_function.groovy
+++ b/regression-test/suites/nereids_syntax_p0/mask_function.groovy
@@ -46,7 +46,7 @@ suite("test_mask_function") {
(6, 'Meimei Han', '13556780000')
;
"""
-
+
qt_select_all """
select * from table_mask_test order by id;
"""
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]