From c2124a135a22b594d9ef7286072b1ac45e89b581 Mon Sep 17 00:00:00 2001 From: Laishenghao Date: Fri, 4 Nov 2022 14:45:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B5=8B=E8=AF=95=E7=94=A8?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../expected/a_outerjoin_conversion.out | 35 +++++++++++++++++++ .../regress/sql/a_outerjoin_conversion.sql | 31 ++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/src/test/regress/expected/a_outerjoin_conversion.out b/src/test/regress/expected/a_outerjoin_conversion.out index 9b5d117d7..7afa87f93 100644 --- a/src/test/regress/expected/a_outerjoin_conversion.out +++ b/src/test/regress/expected/a_outerjoin_conversion.out @@ -1493,6 +1493,41 @@ select * from t_a a,t_b b where b.id=a.id(+) and a.code(+) + 1 * 2 + a.code(+) I 1 | tom | 3 | 1 | bat | 6 (1 row) +-- test join on nestloop +create table join_nestloop_bugfix_t1(c1 int, c2 text); +create table join_nestloop_bugfix_t2(c1 int, c2 text); +insert into join_nestloop_bugfix_t1 values (generate_series(1,10), 'hello'); +insert into join_nestloop_bugfix_t2 values (generate_series(1,10), 'world'); +create index idx_join_nestloop_bugfix_t2_c1 on join_nestloop_bugfix_t2(c1); +create view join_nestloop_bugfix_v as +select join_nestloop_bugfix_t1.c1 cc1, join_nestloop_bugfix_t1.c2 cc2, + case when join_nestloop_bugfix_t1.c1 = 1 then 1 when join_nestloop_bugfix_t1.c1 = 2 then 2 + else join_nestloop_bugfix_t2.c1 end cc3, join_nestloop_bugfix_t2.c2 cc4 + from join_nestloop_bugfix_t1 + left join join_nestloop_bugfix_t2 on join_nestloop_bugfix_t1.c1 = join_nestloop_bugfix_t2.c1; +set enable_mergejoin to off; +set enable_hashjoin to off; +set enable_seqscan to off; +set enable_index_nestloop to on; +select * from join_nestloop_bugfix_v where cc3 = 2 order by cc3; + cc1 | cc2 | cc3 | cc4 +-----+-------+-----+------- + 2 | hello | 2 | world +(1 row) + +select * from join_nestloop_bugfix_v where cc3 = 2; + cc1 | cc2 | cc3 | cc4 +-----+-------+-----+------- + 2 | hello | 2 | world +(1 row) + +drop view join_nestloop_bugfix_v; +drop table join_nestloop_bugfix_t1; +drop table join_nestloop_bugfix_t2; +reset enable_mergejoin; +reset enable_hashjoin; +reset enable_seqscan; +reset enable_index_nestloop; drop view plus_v; drop function plus_join_test_1(); drop table t1; diff --git a/src/test/regress/sql/a_outerjoin_conversion.sql b/src/test/regress/sql/a_outerjoin_conversion.sql index 13ecbddc0..229c6c89a 100644 --- a/src/test/regress/sql/a_outerjoin_conversion.sql +++ b/src/test/regress/sql/a_outerjoin_conversion.sql @@ -368,6 +368,37 @@ select t11.c1, t12.c2, t13.c2 from t11, t12, t13 where t11.c2 = t12.c3(+) and t1 select t11.c1, t12.c2, t13.c2 from t11, t12, t13 where t11.c2 = t12.c3(+) and t11.c3 = t13.c1(+) and (t13.c2(+) > t12.c1)::bool; select * from t_a a,t_b b where b.id=a.id(+) and a.code(+) + 1 * 2 + a.code(+) IS NOT NULL ; +-- test join on nestloop +create table join_nestloop_bugfix_t1(c1 int, c2 text); +create table join_nestloop_bugfix_t2(c1 int, c2 text); + +insert into join_nestloop_bugfix_t1 values (generate_series(1,10), 'hello'); +insert into join_nestloop_bugfix_t2 values (generate_series(1,10), 'world'); +create index idx_join_nestloop_bugfix_t2_c1 on join_nestloop_bugfix_t2(c1); +create view join_nestloop_bugfix_v as +select join_nestloop_bugfix_t1.c1 cc1, join_nestloop_bugfix_t1.c2 cc2, + case when join_nestloop_bugfix_t1.c1 = 1 then 1 when join_nestloop_bugfix_t1.c1 = 2 then 2 + else join_nestloop_bugfix_t2.c1 end cc3, join_nestloop_bugfix_t2.c2 cc4 + from join_nestloop_bugfix_t1 + left join join_nestloop_bugfix_t2 on join_nestloop_bugfix_t1.c1 = join_nestloop_bugfix_t2.c1; + +set enable_mergejoin to off; +set enable_hashjoin to off; +set enable_seqscan to off; +set enable_index_nestloop to on; + +select * from join_nestloop_bugfix_v where cc3 = 2 order by cc3; +select * from join_nestloop_bugfix_v where cc3 = 2; + +drop view join_nestloop_bugfix_v; +drop table join_nestloop_bugfix_t1; +drop table join_nestloop_bugfix_t2; + +reset enable_mergejoin; +reset enable_hashjoin; +reset enable_seqscan; +reset enable_index_nestloop; + drop view plus_v; drop function plus_join_test_1(); drop table t1;