From 021fdb28e4285f8e42f6e61d9175c4fa0c3b8b5a Mon Sep 17 00:00:00 2001 From: chenxiaobin19 <1025221611@qq.com> Date: Thu, 15 Aug 2024 14:38:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dinsertrow=E4=B8=AD=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E7=94=A8=E6=88=B7=E5=8F=98=E9=87=8F=E6=97=B6=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/backend/nodes/nodeFuncs.cpp | 3 +-- src/gausskernel/optimizer/util/clauses.cpp | 3 +++ .../regress/input/set_user_defined_variables_test.source | 6 +++++- .../regress/output/set_user_defined_variables_test.source | 3 +++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/common/backend/nodes/nodeFuncs.cpp b/src/common/backend/nodes/nodeFuncs.cpp index e0e79ff3ed..0ecffd31b3 100644 --- a/src/common/backend/nodes/nodeFuncs.cpp +++ b/src/common/backend/nodes/nodeFuncs.cpp @@ -2108,8 +2108,7 @@ bool expression_tree_walker(Node* node, bool (*walker)(), void* context) case T_PrefixKey: return p2walker(((PrefixKey*)node)->arg, context); case T_UserSetElem: { - p2walker(((UserSetElem*)node)->val, context); - return true; + return p2walker(((UserSetElem*)node)->val, context); } case T_PriorExpr: return p2walker(((PriorExpr*)node)->node, context); diff --git a/src/gausskernel/optimizer/util/clauses.cpp b/src/gausskernel/optimizer/util/clauses.cpp index d61ff1e127..f910103eca 100644 --- a/src/gausskernel/optimizer/util/clauses.cpp +++ b/src/gausskernel/optimizer/util/clauses.cpp @@ -1191,6 +1191,9 @@ static bool contain_specified_functions_walker(Node* node, check_function_contex } else if (IsA(node, Query) && context->deep) { /* Recurse into subselects */ return query_tree_walker((Query*)node, (bool (*)())contain_specified_functions_walker, context, 0); + } else if (IsA(node, UserSetElem)) { + /* UserSetElem is volatile */ + return context->checktype == CONTAIN_VOLATILE_FUNTION; } return expression_tree_walker(node, (bool (*)())contain_specified_functions_walker, context); } diff --git a/src/test/regress/input/set_user_defined_variables_test.source b/src/test/regress/input/set_user_defined_variables_test.source index 544038e8cc..fe4086f7a6 100644 --- a/src/test/regress/input/set_user_defined_variables_test.source +++ b/src/test/regress/input/set_user_defined_variables_test.source @@ -789,8 +789,12 @@ SELECT stat_id, @pids := id FROM account_instance_stats where id >= @pids; drop table account_instance_stats; set enable_seqscan = default; set enable_bitmapscan = default; -set enable_set_variable_b_format = default; +CREATE TABLE userset_t1 (a VARCHAR(500) CHARACTER SET UTF8); +SET @num=1000; +INSERT INTO userset_t1 VALUES (CONCAT((@num:=@num+1), 'a')); + +set enable_set_variable_b_format = default; \c regression drop database if exists test_set; diff --git a/src/test/regress/output/set_user_defined_variables_test.source b/src/test/regress/output/set_user_defined_variables_test.source index 19ab1926ab..bfe3ef55d3 100644 --- a/src/test/regress/output/set_user_defined_variables_test.source +++ b/src/test/regress/output/set_user_defined_variables_test.source @@ -1541,6 +1541,9 @@ SELECT stat_id, @pids := id FROM account_instance_stats where id >= @pids; drop table account_instance_stats; set enable_seqscan = default; set enable_bitmapscan = default; +CREATE TABLE userset_t1 (a VARCHAR(500) CHARACTER SET UTF8); +SET @num=1000; +INSERT INTO userset_t1 VALUES (CONCAT((@num:=@num+1), 'a')); set enable_set_variable_b_format = default; \c regression drop database if exists test_set; -- Gitee