diff --git a/src/common/backend/nodes/nodeFuncs.cpp b/src/common/backend/nodes/nodeFuncs.cpp index 17a9d9512..25d40d65e 100644 --- a/src/common/backend/nodes/nodeFuncs.cpp +++ b/src/common/backend/nodes/nodeFuncs.cpp @@ -2098,8 +2098,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 b447c3ecf..2568542f7 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 f9f9e8075..dd770ef73 100644 --- a/src/test/regress/input/set_user_defined_variables_test.source +++ b/src/test/regress/input/set_user_defined_variables_test.source @@ -774,6 +774,13 @@ END WHILE label_1; end; / SELECT TRIM(TRAILING ', ' FROM @sequence); + +set enable_set_variable_b_format = 1; +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 032412d9c..b5f693d4c 100644 --- a/src/test/regress/output/set_user_defined_variables_test.source +++ b/src/test/regress/output/set_user_defined_variables_test.source @@ -1520,6 +1520,11 @@ SELECT TRIM(TRAILING ', ' FROM @sequence); 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 (1 row) +set enable_set_variable_b_format = 1; +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; \! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1 -c "enable_set_variable_b_format=off" >/dev/null 2>&1