From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | Michael Paquier <michael(at)paquier(dot)xyz> |
Cc: | Julien Rouhaud <rjuju123(at)gmail(dot)com>, Vik Fearing <vik(at)postgresfriends(dot)org>, Chapman Flack <chap(at)anastigmatix(dot)net>, Jack Christensen <jack(at)jncsoftware(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: pl/pgsql feature request: shorthand for argument and local variable references |
Date: | 2021-03-17 16:04:48 |
Message-ID: | CAFj8pRCQbt0pJDTy+qK0vRbemhi4WG77kV4f3K8DBGeOtn+irA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
st 17. 3. 2021 v 9:20 odesílatel Michael Paquier <michael(at)paquier(dot)xyz>
napsal:
> On Wed, Mar 17, 2021 at 02:06:57PM +0800, Julien Rouhaud wrote:
> > I also think that there should be a single usable top label, otherwise
> it will
> > lead to confusing code and it can be a source of bug.
>
> Okay, that's fine by me. Could it be possible to come up with an
> approach that does not hijack the namespace list contruction and the
> lookup logic as much as it does now? I get it that the patch is done
> this way because of the ordering of operations done for the initial ns
> list creation and the grammar parsing that adds the routine label on
> top of the root one, but I'd like to believe that there are more solid
> ways to achieve that, like for example something that decouples the
> root label and its alias, or something that associates an alias
> directly with its PLpgSQL_nsitem entry?
>
I am checking it now, and I don't see any easy solution. The namespace is a
one direction tree - only backward iteration from leafs to roots is
supported. At the moment, when I try to replace the name of root ns_item,
this root ns_item is referenced by the function's arguments (NS_TYPE_VAR
type). So anytime I need some helper ns_item node, that can be a
persistent target for these nodes. In this case is a memory overhead of
just one ns_item.
orig_label <- argument1 <- argument2
The patch has to save the original orig_label because it can be referenced
from argument1 or by "FOUND" variable. New graphs looks like
new_label <- invalidated orig_label <- argument1 <- ...
This tree has a different direction than is usual, and then replacing the
root node is not simple.
Second solution (significantly more simple) is an additional pointer in
ns_item structure. In almost all cases this pointer will not be used.
Because ns_item uses a flexible array, then union cannot be used. I
implemented this in a patch marked as "alias-implementation".
What do you think about it?
Pavel
> --
> Michael
>
Attachment | Content-Type | Size |
---|---|---|
plpgsql-routine-label-option-alias-implementation.patch | text/x-patch | 9.1 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Tomas Vondra | 2021-03-17 16:12:17 | Re: WIP: WAL prefetch (another approach) |
Previous Message | Tom Lane | 2021-03-17 16:01:38 | Re: Feature improvement: can we add queryId for pg_catalog.pg_stat_activity view? |