summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/path/indxpath.c7
-rw-r--r--src/test/regress/expected/join.out6
-rw-r--r--src/test/regress/sql/join.sql4
3 files changed, 9 insertions, 8 deletions
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index da4d7c52845..49ab3666b93 100644
--- a/src/backend/optimizer/path/indxpath.c
+++ b/src/backend/optimizer/path/indxpath.c
@@ -1886,7 +1886,7 @@ get_loop_count(PlannerInfo *root, Index cur_relid, Relids outer_relids)
if (outer_relids == NULL)
return 1.0;
- result = 1.0;
+ result = 0.0;
outer_relid = -1;
while ((outer_relid = bms_next_member(outer_relids, outer_relid)) >= 0)
{
@@ -1915,10 +1915,11 @@ get_loop_count(PlannerInfo *root, Index cur_relid, Relids outer_relids)
outer_rel->rows);
/* Remember smallest row count estimate among the outer rels */
- if (result == 1.0 || result > rowcount)
+ if (result == 0.0 || result > rowcount)
result = rowcount;
}
- return result;
+ /* Return 1.0 if we found no valid relations (shouldn't happen) */
+ return (result > 0.0) ? result : 1.0;
}
/*
diff --git a/src/test/regress/expected/join.out b/src/test/regress/expected/join.out
index 1e3fe073504..8c17ef41b92 100644
--- a/src/test/regress/expected/join.out
+++ b/src/test/regress/expected/join.out
@@ -3074,14 +3074,14 @@ select f1, unique2, case when unique2 is null then f1 else 0 end
explain (costs off)
select a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)
from tenk1 a left join tenk1 b on b.thousand = a.unique1 left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand)
- where a.unique2 = 5530 and coalesce(b.twothousand, a.twothousand) = 44;
+ where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44;
QUERY PLAN
---------------------------------------------------------------------------------------------
Nested Loop Left Join
-> Nested Loop Left Join
Filter: (COALESCE(b.twothousand, a.twothousand) = 44)
-> Index Scan using tenk1_unique2 on tenk1 a
- Index Cond: (unique2 = 5530)
+ Index Cond: (unique2 < 10)
-> Bitmap Heap Scan on tenk1 b
Recheck Cond: (thousand = a.unique1)
-> Bitmap Index Scan on tenk1_thous_tenthous
@@ -3092,7 +3092,7 @@ select a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)
select a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)
from tenk1 a left join tenk1 b on b.thousand = a.unique1 left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand)
- where a.unique2 = 5530 and coalesce(b.twothousand, a.twothousand) = 44;
+ where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44;
unique1 | unique1 | unique1 | coalesce
---------+---------+---------+----------
(0 rows)
diff --git a/src/test/regress/sql/join.sql b/src/test/regress/sql/join.sql
index 7a08bdff7bf..db7aefee283 100644
--- a/src/test/regress/sql/join.sql
+++ b/src/test/regress/sql/join.sql
@@ -880,11 +880,11 @@ select f1, unique2, case when unique2 is null then f1 else 0 end
explain (costs off)
select a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)
from tenk1 a left join tenk1 b on b.thousand = a.unique1 left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand)
- where a.unique2 = 5530 and coalesce(b.twothousand, a.twothousand) = 44;
+ where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44;
select a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)
from tenk1 a left join tenk1 b on b.thousand = a.unique1 left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand)
- where a.unique2 = 5530 and coalesce(b.twothousand, a.twothousand) = 44;
+ where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44;
--
-- check handling of join aliases when flattening multiple levels of subquery