diff --git a/src/common/backend/nodes/nodeFuncs.cpp b/src/common/backend/nodes/nodeFuncs.cpp index fc3d82fd0aed1ed5e4acfff23f5c7a7541a04766..4e1fa407a3d16b638c21fc8df95addba1ecb6ca5 100644 --- a/src/common/backend/nodes/nodeFuncs.cpp +++ b/src/common/backend/nodes/nodeFuncs.cpp @@ -3422,6 +3422,9 @@ bool raw_expression_tree_walker(Node* node, bool (*walker)(), void* context) return p2walker(((CommonTableExpr*)node)->ctequery, context); case T_AutoIncrement: return p2walker(((AutoIncrement*)node)->expr, context); + case T_UserVar: + /* @var do not need recursion */ + break; default: ereport(ERROR, (errcode(ERRCODE_UNRECOGNIZED_NODE_TYPE), errmsg("unrecognized node type: %d", (int)nodeTag(node)))); 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 44d23115a4f6abe2ad0d71454e6bae9cb34278d5..d0f0164484ba48d6468121ff2a84c74634a4b585 100644 --- a/src/test/regress/input/set_user_defined_variables_test.source +++ b/src/test/regress/input/set_user_defined_variables_test.source @@ -733,6 +733,30 @@ my_table h WHERE @r<> 0; SELECT (SELECT @r:= parent_id FROM my_table WHERE id = @r) AS parent_id1 FROM my_table h WHERE @r<> 0; +drop table my_table_1162670; +create table my_table_1162670( +col_1 varchar(50), +col_2 date, +col_3 varchar(50) default 'default col_3' +); +insert into my_table_1162670 values(NULL, '2023-1-23'), +('bbbb', '2020-1-23'), +('cccc', '2021-2-23'), +('dddd', '2023-3-23'), +('eeee', NULL); +SET @date_threshold = '2022-01-01'; +WITH RECURSIVE recursive_query AS ( +SELECT col_1, col_2, col_3 +FROM my_table_1162670 +WHERE col_2 >= @date_threshold +UNION ALL +SELECT e.col_1, e.col_2, e.col_3 +FROM my_table_1162670 e +INNER JOIN recursive_query r ON e.col_2 = (r.col_2 + INTERVAL '1year') +) +SELECT col_1, col_2, col_3 +FROM recursive_query +ORDER BY col_2 ASC; \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 b25f0073e7c1cbf3c0ef61e8599ec3f0b2f60d54..4702f730fab0f85d15c7ce4d059c94848e63004e 100644 --- a/src/test/regress/output/set_user_defined_variables_test.source +++ b/src/test/regress/output/set_user_defined_variables_test.source @@ -1466,6 +1466,37 @@ my_table h WHERE @r<> 0; ------------ (0 rows) +drop table my_table_1162670; +ERROR: table "my_table_1162670" does not exist +create table my_table_1162670( +col_1 varchar(50), +col_2 date, +col_3 varchar(50) default 'default col_3' +); +insert into my_table_1162670 values(NULL, '2023-1-23'), +('bbbb', '2020-1-23'), +('cccc', '2021-2-23'), +('dddd', '2023-3-23'), +('eeee', NULL); +SET @date_threshold = '2022-01-01'; +WITH RECURSIVE recursive_query AS ( +SELECT col_1, col_2, col_3 +FROM my_table_1162670 +WHERE col_2 >= @date_threshold +UNION ALL +SELECT e.col_1, e.col_2, e.col_3 +FROM my_table_1162670 e +INNER JOIN recursive_query r ON e.col_2 = (r.col_2 + INTERVAL '1year') +) +SELECT col_1, col_2, col_3 +FROM recursive_query +ORDER BY col_2 ASC; + col_1 | col_2 | col_3 +-------+------------+--------------- + | 01-23-2023 | default col_3 + dddd | 03-23-2023 | default col_3 +(2 rows) + \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