From 527f5a275f73ac28725f336295c7b9b2b7b2a61e Mon Sep 17 00:00:00 2001 From: nnuanyang Date: Mon, 18 Dec 2023 04:48:51 -0800 Subject: [PATCH 1/2] WITH RECURSIVE bug --- src/common/backend/nodes/nodeFuncs.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/common/backend/nodes/nodeFuncs.cpp b/src/common/backend/nodes/nodeFuncs.cpp index fc3d82fd0a..4e1fa407a3 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)))); -- Gitee From 916f7113fa7c4219c3d3f495f0372c72edfe48f5 Mon Sep 17 00:00:00 2001 From: nnuanyang Date: Wed, 3 Jan 2024 03:01:00 -0800 Subject: [PATCH 2/2] add test example --- .../set_user_defined_variables_test.source | 24 ++++++++++++++ .../set_user_defined_variables_test.source | 31 +++++++++++++++++++ 2 files changed, 55 insertions(+) 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 44d23115a4..d0f0164484 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 b25f0073e7..4702f730fa 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 -- Gitee