FIX : teach expression walker about RestrictInfo

From: Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com>
To: Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: FIX : teach expression walker about RestrictInfo
Date: 2015-04-28 17:56:12
Message-ID: 553FC9BC.5060402@2ndquadrant.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi there,

the attached trivial patch adds handling of RestrictInfo nodes into
expression_tree_walker(). This is needed for example when calling
pull_varnos or (or other functions using the expression walker) in
clausesel.c, for example. An example of a query causing errors with
pull_varnos is

select * from t where (a >= 10 and a <= 20) or (b >= 15 and b <= 20);

which gets translated into an expression tree like this:

BoolExpr [OR_EXPR]
BoolExpr [AND_EXPR]
RestrictInfo
OpExpr [Var >= Const]
RestrictInfo
OpExpr [Var <= Const]
BoolExpr [AND_EXPR]
RestrictInfo
OpExpr [Var >= Const]
RestrictInfo
OpExpr [Var <= Const]

and the nested RestrictInfo nodes make the walker fail because of
unrecognized node.

It's possible that expression walker is not supposed to know about
RestrictInfo, but I don't really see why would that be the case.

regards

--
Tomas Vondra http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Attachment Content-Type Size
expression-walker-fix.patch text/x-patch 564 bytes

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Pavel Stehule 2015-04-28 17:58:15 Re: cache invalidation for PL/pgsql functions
Previous Message Jim Nasby 2015-04-28 17:53:38 Re: Freeze avoidance of very large table.