Re: pltcl - "Cache lookup for attribute" error - version

From: Jan Wieck <JanWieck(at)Yahoo(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Patrick Samson <p_samson(at)Yahoo(dot)com>, pgsql-patches(at)postgresql(dot)org
Subject: Re: pltcl - "Cache lookup for attribute" error - version
Date: 2004-01-23 17:37:52
Message-ID: 40115BF0.7010505@Yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches

Tom Lane wrote:

> Patrick Samson <p_samson(at)yahoo(dot)com> writes:
>> Attribute names beginning with a dot are filtered
>> just in one place, in pltcl_trigger_handler().
>> (version 7.3.5)
>
> I am not sure why that code is there. It is *not* there to prevent the
> loop from touching dropped attributes, because the same code is in the
> original 1.1 version of pltcl.c, long before we could drop attributes.
> Jan, do you remember why you put this into pltcl_trigger_handler()?
>
> /************************************************************
> * Ignore pseudo elements with a dot name
> ************************************************************/
> if (*(ret_values[i]) == '.') {
> i += 2;
> continue;
> }
>
> It's not documented behavior that I can see, and it doesn't seem to have
> any use other than making pltcl triggers fail if a user chooses a field
> name starting with a dot :-(

right, this is documented nowhere :-(

When assigning a tuple to an array, PL/Tcl creates one extra array
element .tupno telling the SPI_tuptable index of the result tuple. I
think I originally planned to have more of these critters ... but
probably never really needed them. It is in there since 6.3!

Bottom line is, if one has a trigger, and inside the trigger he does an
SPI_exec, fetches a tuple into an array and then returns [array get x]
instead of new or old ... so from the back through the right chest into
the left eye ... then it will fail if the .tupno isn't filtered out.

Jan

>
>> Attached is a patch to :
>> - Add a filter in two other places, in relation
>> with the mentioned error message:
>> pltcl_set_tuple_values()
>> pltcl_build_tuple_argument()
>
> This is already done in 7.4, although for some reason
> pltcl_trigger_handler got overlooked - I will fix that.
>
>> - Add the same filter in the build of TG_relatts.
>> This will prevent a tcl script which loops on
>> TG_relattrs to fail in trying to use a dropped
>> column.
>
> This is deliberately *not* done in 7.4, because it would break the
> documented behavior of TG_relatts:
>
> $TG_relatts
>
> A Tcl list of the table column names, prefixed with an empty list
> element. So looking up a column name in the list with
> Tcl's lsearch command returns the element's number starting with 1
> for the first column, the same way the
> columns are customarily numbered in PostgreSQL.
>
> I think we need to preserve the relationship to column numbers. People
> who just want a list of the live columns can get it from the OLD or NEW
> arrays.
>
> regards, tom lane

--
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me. #
#================================================== JanWieck(at)Yahoo(dot)com #

In response to

Responses

Browse pgsql-patches by date

  From Date Subject
Next Message Tom Lane 2004-01-23 19:38:51 Re: pltcl - "Cache lookup for attribute" error - version 2
Previous Message Mark Cave-Ayland 2004-01-23 16:54:06 ANALYZE patch for review