diff options
Diffstat (limited to 'src/backend/optimizer/path/orindxpath.c')
-rw-r--r-- | src/backend/optimizer/path/orindxpath.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/backend/optimizer/path/orindxpath.c b/src/backend/optimizer/path/orindxpath.c index be5a0c3434f..10b12890dae 100644 --- a/src/backend/optimizer/path/orindxpath.c +++ b/src/backend/optimizer/path/orindxpath.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/path/orindxpath.c,v 1.75 2005/10/15 02:49:20 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/path/orindxpath.c,v 1.76 2005/11/14 23:54:18 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -90,13 +90,19 @@ create_or_index_quals(PlannerInfo *root, RelOptInfo *rel) ListCell *i; /* - * Find potentially interesting OR joinclauses. + * Find potentially interesting OR joinclauses. Note we must ignore any + * joinclauses that are marked outerjoin_delayed, because they cannot + * be pushed down to the per-relation level due to outer-join rules. + * (XXX in some cases it might be possible to allow this, but it would + * require substantially more bookkeeping about where the clause came + * from.) */ foreach(i, rel->joininfo) { RestrictInfo *rinfo = (RestrictInfo *) lfirst(i); - if (restriction_is_or_clause(rinfo)) + if (restriction_is_or_clause(rinfo) && + !rinfo->outerjoin_delayed) { /* * Use the generate_bitmap_or_paths() machinery to estimate the |