Re: what's up with IDENTIFIER_LOOKUP_EXPR?

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Robert Haas <robertmhaas(at)gmail(dot)com>
Cc: "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: what's up with IDENTIFIER_LOOKUP_EXPR?
Date: 2017-05-05 16:29:54
Message-ID: 20007.1494001794@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Robert Haas <robertmhaas(at)gmail(dot)com> writes:
> On Thu, May 4, 2017 at 6:05 PM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
>> PLpgSQL_datum is really a symbol table entry. The conflict against what
>> we mean by "Datum" elsewhere is pretty unfortunate.

> Yeah. That's particularly bad because datum is a somewhat vague word
> under the best of circumstances (like "thing"). Maybe I'm missing
> something, but isn't it more like a parse tree than a symbol table
> entry? The symbol table entries seem to be based on
> PLpgSQL_nsitem_type, not PLpgSQL_datum, and they only come in the
> flavors you'd expect to find in a symbol table: label, var, row, rec.

Right, there's this separate name lookup table that maps from names to
PLpgSQL_datums. I personally wouldn't call the PLpgSQL_datum items
parse trees, since they're mostly pretty flat. But if you want to
think of them that way I can't stop you.

One other important, and unfortunate, thing is that the PLpgSQL_datums
aren't (usually) read-only --- they not only hold static symbol-table-like
info but also the actual current values, for those datums that correspond
directly to a stored variable value (VAR and REC, but not ROW or RECFIELD
or ARRAYELEM). This seems messy to me, and it forces a rather expensive
copy step during plpgsql function startup. I'd like to see those duties
separated, so that the actual r/w state is just arrays of Datum/isnull
that we can trivially initialize during function start.

>> So, this representation is great for speed of access and modification
>> of individual fields of the composite variable. It sucks when you
>> want to assign to the composite as a whole or retrieve its value as
>> a whole, because you have to deconstruct or reconstruct a tuple to
>> do that. (The REC/RECFIELD approach has approximately the opposite
>> strengths and weaknesses.) Also, dealing with changes in the named
>> composite type is a complete fail, because we've built its structure
>> into the function's symbol table at parse time.

> It would probably be possible to come up with a representation that
> allowed both things to be efficient,

Yeah, perhaps. It would be good to take two steps back and reconsider
the whole data structure.

> I'm not volunteering to do the work, though.

It's not at the top of my priority list either, but I'd like to see it
happen sometime.

regards, tom lane

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2017-05-05 16:47:07 Re: compiler warning with VS 2017
Previous Message Andres Freund 2017-05-05 16:18:52 Re: snapbuild woes