]> granicus.if.org Git - postgresql/commitdiff
Tweak distribute_qual_to_rels so that when we decide a pseudoconstant qual
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 6 May 2009 20:31:18 +0000 (20:31 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 6 May 2009 20:31:18 +0000 (20:31 +0000)
can be pushed to the top of the join tree, we update both the relids and
qualscope variables to keep them in sync.  This prevents a possible later
failure of an Assert clause, and affects nothing else since qualscope isn't
used later except for that Assert.  At the moment the Assert shouldn't be
reachable when we've pushed the qual up; but this is cheap insurance, and
it's more sensible anyway in terms of the overall logic of the routine.
Per analysis of a bug report from Stefan Huehner.

I'm not back-patching this since it's just future-proofing; but if anyone
gets tempted to change check_outerjoin_delay again in the back branches,
this might be needed.

src/backend/optimizer/plan/initsplan.c

index dd73beb759f1df23df8bc36384c637954b39ac35..b31ffa81cc1de4cb4faab9ce0ba36bebc6ba6359 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/optimizer/plan/initsplan.c,v 1.151 2009/04/19 19:46:33 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/optimizer/plan/initsplan.c,v 1.152 2009/05/06 20:31:18 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -818,9 +818,12 @@ distribute_qual_to_rels(PlannerInfo *root, Node *clause,
                                root->hasPseudoConstantQuals = true;
                                /* if not below outer join, push it to top of tree */
                                if (!below_outer_join)
+                               {
                                        relids =
                                                get_relids_in_jointree((Node *) root->parse->jointree,
                                                                                           false);
+                                       qualscope = bms_copy(relids);
+                               }
                        }
                }
        }