On 04/29/15 18:33, Tomas Vondra wrote:
OK, I do understand that. So what about pull_varnos_walker and pull_varattnos_walker - what about teaching them about RestrictInfos?
Attached is a patch fixing the issue by handling RestrictInfo in pull_varnos_walker and pull_varattnos_walker.
-- Tomas Vondra http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
>From 2dc79b914c759d31becd8ae670b37b79663a595f Mon Sep 17 00:00:00 2001 From: Tomas Vondra <to...@pgaddict.com> Date: Tue, 28 Apr 2015 19:56:33 +0200 Subject: [PATCH 1/6] teach pull_(varno|varattno)_walker about RestrictInfo otherwise pull_varnos fails when processing OR clauses --- src/backend/optimizer/util/var.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/backend/optimizer/util/var.c b/src/backend/optimizer/util/var.c index 773e7b2..221b031 100644 --- a/src/backend/optimizer/util/var.c +++ b/src/backend/optimizer/util/var.c @@ -197,6 +197,13 @@ pull_varnos_walker(Node *node, pull_varnos_context *context) context->sublevels_up--; return result; } + if (IsA(node, RestrictInfo)) + { + RestrictInfo *rinfo = (RestrictInfo*)node; + context->varnos = bms_add_members(context->varnos, + rinfo->clause_relids); + return false; + } return expression_tree_walker(node, pull_varnos_walker, (void *) context); } @@ -245,6 +252,15 @@ pull_varattnos_walker(Node *node, pull_varattnos_context *context) return false; } + if (IsA(node, RestrictInfo)) + { + RestrictInfo *rinfo = (RestrictInfo *)node; + + return expression_tree_walker((Node*)rinfo->clause, + pull_varattnos_walker, + (void*) context); + } + /* Should not find an unplanned subquery */ Assert(!IsA(node, Query)); -- 1.9.3
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers