From 1ba5117653638d78d126f002ef8c121a7c4a4e52 Mon Sep 17 00:00:00 2001 From: ganyang Date: Fri, 25 Nov 2022 17:51:40 +0800 Subject: [PATCH] fix fulljoin rewrite for expression alias --- .../optimizer/prep/prepjointree.cpp | 1 + .../regress/expected/fulljoin_rewrite.out | 31 ++++++++++++++++ src/test/regress/parallel_schedule0 | 1 + src/test/regress/sql/fulljoin_rewrite.sql | 35 +++++++++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 src/test/regress/expected/fulljoin_rewrite.out create mode 100644 src/test/regress/sql/fulljoin_rewrite.sql diff --git a/src/gausskernel/optimizer/prep/prepjointree.cpp b/src/gausskernel/optimizer/prep/prepjointree.cpp index e7252c5f5..75a6fc8ec 100755 --- a/src/gausskernel/optimizer/prep/prepjointree.cpp +++ b/src/gausskernel/optimizer/prep/prepjointree.cpp @@ -3556,6 +3556,7 @@ static Node* reduce_inequality_fulljoins_jointree_recurse(PlannerInfo* root, Nod } break; default: oldvar = (Node*)copyObject(node); + oldvar = eval_const_expressions(root, oldvar); break; } diff --git a/src/test/regress/expected/fulljoin_rewrite.out b/src/test/regress/expected/fulljoin_rewrite.out new file mode 100644 index 000000000..c386b024f --- /dev/null +++ b/src/test/regress/expected/fulljoin_rewrite.out @@ -0,0 +1,31 @@ +create table fulljoin_test(w_zip text); +create table fulljoin_test2(w_name varchar(20),w_tax int,w_street_2 varchar(50)); +create table fulljoin_test3(d_id int); +create table fulljoin_test4(w_id int,w_ytd numeric(6,2)); +SELECT + fulljoin_test3.d_id +FROM +( + SELECT + alias2.w_name alias6 , + alias2.w_tax alias7, + MOD(fulljoin_test4.w_id, + fulljoin_test4.w_ytd + 10) alias8 + FROM + fulljoin_test alias1 + FULL JOIN fulljoin_test2 alias2 ON + alias1.w_zip = alias2.w_street_2, + fulljoin_test4)alias9 +FULL JOIN fulljoin_test3 ON + alias9.alias7 != fulljoin_test3.d_id +WHERE + alias9.alias8 = 2 + OR alias9.alias7 = 2; + d_id +------ +(0 rows) + +drop table fulljoin_test; +drop table fulljoin_test2; +drop table fulljoin_test3; +drop table fulljoin_test4; diff --git a/src/test/regress/parallel_schedule0 b/src/test/regress/parallel_schedule0 index 96641c37a..d01a2d769 100644 --- a/src/test/regress/parallel_schedule0 +++ b/src/test/regress/parallel_schedule0 @@ -1012,3 +1012,4 @@ test: rename_table # debug instrument test: test_debug5 +test: fulljoin_rewrite \ No newline at end of file diff --git a/src/test/regress/sql/fulljoin_rewrite.sql b/src/test/regress/sql/fulljoin_rewrite.sql new file mode 100644 index 000000000..6d4f0018f --- /dev/null +++ b/src/test/regress/sql/fulljoin_rewrite.sql @@ -0,0 +1,35 @@ +create table fulljoin_test(w_zip text); + +create table fulljoin_test2(w_name varchar(20),w_tax int,w_street_2 varchar(50)); + +create table fulljoin_test3(d_id int); + +create table fulljoin_test4(w_id int,w_ytd numeric(6,2)); + +SELECT + fulljoin_test3.d_id +FROM +( + SELECT + alias2.w_name alias6 , + alias2.w_tax alias7, + MOD(fulljoin_test4.w_id, + fulljoin_test4.w_ytd + 10) alias8 + FROM + fulljoin_test alias1 + FULL JOIN fulljoin_test2 alias2 ON + alias1.w_zip = alias2.w_street_2, + fulljoin_test4)alias9 +FULL JOIN fulljoin_test3 ON + alias9.alias7 != fulljoin_test3.d_id +WHERE + alias9.alias8 = 2 + OR alias9.alias7 = 2; + +drop table fulljoin_test; + +drop table fulljoin_test2; + +drop table fulljoin_test3; + +drop table fulljoin_test4;