From e0fa489a95d7b95d771c73cd32b40dd33a9e4c86 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 17 Jul 2009 23:19:59 +0000 Subject: Repair bug #4926 "too few pathkeys for mergeclauses". This example shows that the sanity checking I added to create_mergejoin_plan() in 8.3 was a few bricks shy of a load: the mergeclauses could reference pathkeys in a noncanonical order such as x,y,x, not only cases like x,x,y which is all that the code had allowed for. The odd cases only turn up when using redundant clauses in an outer join condition, which is why no one had noticed before. --- src/test/regress/expected/join.out | 15 +++++++++++++++ src/test/regress/sql/join.sql | 17 +++++++++++++++++ 2 files changed, 32 insertions(+) (limited to 'src/test') diff --git a/src/test/regress/expected/join.out b/src/test/regress/expected/join.out index 8e6fc13bb38..a7b7b73ad6f 100644 --- a/src/test/regress/expected/join.out +++ b/src/test/regress/expected/join.out @@ -2352,3 +2352,18 @@ execute foo(false); 10000 (1 row) +-- +-- test for sane behavior with noncanonical merge clauses, per bug #4926 +-- +begin; +set enable_mergejoin = 1; +set enable_hashjoin = 0; +set enable_nestloop = 0; +create temp table a (i integer); +create temp table b (x integer, y integer); +select * from a left join b on i = x and i = y and x = i; + i | x | y +---+---+--- +(0 rows) + +rollback; diff --git a/src/test/regress/sql/join.sql b/src/test/regress/sql/join.sql index 149530e14db..29992ced0c2 100644 --- a/src/test/regress/sql/join.sql +++ b/src/test/regress/sql/join.sql @@ -505,3 +505,20 @@ prepare foo(bool) as (select 1 from tenk1 c where c.thousand = b.unique2 and $1)); execute foo(true); execute foo(false); + +-- +-- test for sane behavior with noncanonical merge clauses, per bug #4926 +-- + +begin; + +set enable_mergejoin = 1; +set enable_hashjoin = 0; +set enable_nestloop = 0; + +create temp table a (i integer); +create temp table b (x integer, y integer); + +select * from a left join b on i = x and i = y and x = i; + +rollback; -- cgit v1.2.3