expression_tree_walker() and primitive node types

Started by Neil Conwayover 18 years ago2 messagesbugs
Jump to latest
#1Neil Conway
neilc@samurai.com

I wouldn't call this behavior buggy, but I found it somewhat surprising.

expression_tree_walker() assumes that the walker has already been
invoked on the current node (the node that a given recursive call of
expression_tree_walker() has been invoked on). Therefore, calling
expression_tree_walker() on a primitive node type, such as a Var, is a
no-op.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Neil Conway (#1)
Re: expression_tree_walker() and primitive node types

Neil Conway <neilc@samurai.com> writes:

I wouldn't call this behavior buggy, but I found it somewhat surprising.
expression_tree_walker() assumes that the walker has already been
invoked on the current node (the node that a given recursive call of
expression_tree_walker() has been invoked on). Therefore, calling
expression_tree_walker() on a primitive node type, such as a Var, is a
no-op.

The documented usage method is to call the walker itself at the top
level of recursion. The walker calls expression_tree_walker (after
doing its thing on the node); other code should not call
expression_tree_walker directly.

regards, tom lane