Re: Handling RestrictInfo in expression_tree_walker - Mailing list pgsql-hackers
From | Konstantin Knizhnik |
---|---|
Subject | Re: Handling RestrictInfo in expression_tree_walker |
Date | |
Msg-id | 8cab2118-e742-f416-0da7-6ffcfe6e2293@postgrespro.ru Whole thread Raw |
In response to | Re: Handling RestrictInfo in expression_tree_walker (Amit Langote <amitlangote09@gmail.com>) |
Responses |
Re: Handling RestrictInfo in expression_tree_walker
Re: Handling RestrictInfo in expression_tree_walker |
List | pgsql-hackers |
On 07.08.2019 10:42, Amit Langote wrote: > Hi Konstantin, > > On Wed, Aug 7, 2019 at 4:24 PM Konstantin Knizhnik > <k.knizhnik@postgrespro.ru> wrote: >> Hi hackers, >> >> I wonder if there is some particular reason for not handling >> T_RestrictInfo node tag in expression_tree_walker? >> There are many data structure in Postgres which contains lists of >> RestrictInfo or expression with RestrictInfo as parameter (for example >> orclause in RestrictInfo). >> To handle such cases now it is needed to write code performing list >> iteration and calling expression_tree_walker for each list element and >> handling RrestrictInfo in callback function: >> >> static bool >> change_varno_walker(Node *node, ChangeVarnoContext *context) >> { >> if (node == NULL) >> return false; >> >> if (IsA(node, Var) && ((Var *) node)->varno == context->oldRelid) >> { >> ((Var *) node)->varno = context->newRelid; >> ((Var *) node)->varnoold = context->newRelid; >> return false; >> } >> if (IsA(node, RestrictInfo)) >> { >> change_rinfo((RestrictInfo*)node, context->oldRelid, >> context->newRelid); >> return false; >> } >> return expression_tree_walker(node, change_varno_walker, context); >> } >> >> Are there any complaints against handling RestrictInfo in >> expression_tree_walker? > As I understand it, RestrictInfo is not something that appears in > query trees or plan trees, but only in the planner data structures as > means of caching some information about the clauses that they wrap. I > see this comment describing what expression_tree_walker() is supposed > to handle: > > * The node types handled by expression_tree_walker include all those > * normally found in target lists and qualifier clauses during the planning > * stage. > > You may also want to read this discussion: > > https://www.postgresql.org/message-id/553FC9BC.5060402%402ndquadrant.com > > Thanks, > Amit Thank you very much for response and pointing me to this thread. Unfortunately I do not understand from this thread how the problem was solved with pullvars - right now pull_varnos_walker and pull_varattnos_walker are not handling RestrictInfo. Also I do not completely understand the argument "RestrictInfo is not a general expression node and support for it has been deliberately omitted from expression_tree_walker()". If there is BoolOp expression which contains RestrictInfo expression as it arguments, then either this expression is not correct, either RestrictInfo should be considered as "expression node". Frankly speaking I do not see some good reasons for not handling RestrictInfo in expression_tree_worker. It can really simplify writing of mutators/walkers. And I do not think that reporting error instead of handling this tag adds some extra safety or error protection. -- Konstantin Knizhnik Postgres Professional: http://www.postgrespro.com The Russian Postgres Company
pgsql-hackers by date: