!4648 支持@variable 变量-实现递归查询-字符串和日期带NULL-WITH RECURSIVE-报错unrecognized node type:5017缺陷修改

Merge pull request !4648 from 暖阳/varbug
This commit is contained in:
opengauss_bot
2024-01-26 01:43:04 +00:00
committed by Gitee
3 changed files with 58 additions and 0 deletions

View File

@ -3443,6 +3443,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))));

View File

@ -737,6 +737,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;

View File

@ -1471,6 +1471,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