]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix incorrect usage of non-strict OR joinclauses in appendrel indexscans.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 28 Sep 2010 20:13:09 +0000 (16:13 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 28 Sep 2010 20:13:09 +0000 (16:13 -0400)
By chance I happened to notice that bug #5076 was still broken in the
8.3 branch, though it worked everywhere else.  The reason is that 8.3's
version of adjust_appendrel_attrs_mutator neglected to adjust
RestrictInfo.nullable_relids.  This was an oversight in my patch of
2009-04-16, which I apparently corrected in the later branches on
2009-08-13 without realizing that it affected the 8.3 branch as well.
By the time the bug report was filed, it was not reproducible in 8.4.
I don't recall if I wrote it off as already fixed, or it just fell through
the cracks; but anyway it's been a live bug in 8.3 for a year.

src/backend/optimizer/prep/prepunion.c

index 2779da74d0aa250be782f5f19388f7f2271b9b7c..687677e960cd25190e358579e6e917643242cc64 100644 (file)
@@ -1207,6 +1207,9 @@ adjust_appendrel_attrs_mutator(Node *node, AppendRelInfo *context)
                newinfo->required_relids = adjust_relid_set(oldinfo->required_relids,
                                                                                                        context->parent_relid,
                                                                                                        context->child_relid);
+               newinfo->nullable_relids = adjust_relid_set(oldinfo->nullable_relids,
+                                                                                                       context->parent_relid,
+                                                                                                       context->child_relid);
                newinfo->left_relids = adjust_relid_set(oldinfo->left_relids,
                                                                                                context->parent_relid,
                                                                                                context->child_relid);