Re: Adding OLD/NEW support to RETURNING - Mailing list pgsql-hackers

From Dean Rasheed
Subject Re: Adding OLD/NEW support to RETURNING
Date
Msg-id CAEZATCU5fDmry9U6GWo8WUG5+qw=D8-PcYACm3No0r1Uxu5O7w@mail.gmail.com
Whole thread Raw
In response to Re: Adding OLD/NEW support to RETURNING  (jian he <jian.universality@gmail.com>)
List pgsql-hackers
On Mon, 14 Oct 2024 at 16:34, jian he <jian.universality@gmail.com> wrote:
>
> typedef struct ReturningOption
> {
>     NodeTag        type;
>     ReturningOptionKind option; /* specified option */
>     char       *value;            /* option's value */
>     ParseLoc    location;        /* token location, or -1 if unknown */
> } ReturningOption;
>
> @@ -4304,6 +4332,16 @@ raw_expression_tree_walker_impl(Node *no
>   return true;
>   }
>   break;
> + case T_ReturningClause:
> + {
> + ReturningClause *returning = (ReturningClause *) node;
> +
> + if (WALK(returning->options))
> + return true;
> + if (WALK(returning->exprs))
> + return true;
> + }
> + break;
>
> + if (WALK(returning->options))
> + return true;
> T_ReturningOption is primitive, so we only need to
> "if (WALK(returning->exprs))"?

No, it still needs to walk the options so that it will call the
callback for each option. The fact that T_ReturningOption is primitive
doesn't change that, it just means that there is no more structure
*below* a ReturningOption that needs to be traversed. The
ReturningOption itself still needs to be traversed. For example,
imagine you wanted to use raw_expression_tree_walker() to print out
the whole structure of a raw parse tree. You'd want your printing
callback to be called for every node, including the ReturningOption
nodes.

Regards,
Dean



pgsql-hackers by date:

Previous
From: jian he
Date:
Subject: Re: Adding OLD/NEW support to RETURNING
Next
From: Alena Rybakina
Date:
Subject: Re: Check for tuplestorestate nullness before dereferencing