Re: Doc patch--clarifying $1 in PL/PgSQL

From: Jan Wieck <JanWieck(at)Yahoo(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: David Fetter <david(at)fetter(dot)org>, PostgreSQL Patches <pgsql-patches(at)postgresql(dot)org>
Subject: Re: Doc patch--clarifying $1 in PL/PgSQL
Date: 2003-12-24 02:15:51
Message-ID: 3FE8F6D7.8@Yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches

Tom Lane wrote:

> David Fetter <david(at)fetter(dot)org> writes:
>> On Mon, Dec 22, 2003 at 05:50:12PM -0500, Tom Lane wrote:
>>> David Fetter <david(at)fetter(dot)org> writes:
>> + Note that it is not possible to assign function arguments during
>> + a <literal>DECLARE</> block.
>>>
>>> Seems to me this is a bug that should be fixed, not documented.
>
>> I got the impression from Jan Wieck that it wasn't fixable, or at
>> least not without a major rewrite of the plpgsql engine. I'm sure
>> somebody will correct me if I got a mistaken impression, though :)
>
> Not that hard ... just requires replacing some special-purpose code with
> general-purpose code ...

Does that code cause the variables value to change from function call to
function call (what most users would expect if they give it a default
value based on a call argument), or will remember the value from the
first function call for the lifetime of the backend?

Jan

>
> regards, tom lane
>
>
> *** src/pl/plpgsql/src/gram.y.orig Sat Nov 29 14:52:12 2003
> --- src/pl/plpgsql/src/gram.y Mon Dec 22 18:50:35 2003
> ***************
> *** 628,679 ****
> { $$ = NULL; }
> | decl_defkey
> {
> ! int tok;
> ! int lno;
> ! PLpgSQL_dstring ds;
> ! PLpgSQL_expr *expr;
> !
> ! lno = plpgsql_scanner_lineno();
> ! expr = malloc(sizeof(PLpgSQL_expr));
> ! plpgsql_dstring_init(&ds);
> ! plpgsql_dstring_append(&ds, "SELECT ");
> !
> ! expr->dtype = PLPGSQL_DTYPE_EXPR;
> ! expr->plan = NULL;
> ! expr->nparams = 0;
> !
> ! tok = yylex();
> ! switch (tok)
> ! {
> ! case 0:
> ! yyerror("unexpected end of function");
> ! case K_NULL:
> ! if (yylex() != ';')
> ! yyerror("expected \";\" after \"NULL\"");
> !
> ! free(expr);
> ! plpgsql_dstring_free(&ds);
> !
> ! $$ = NULL;
> ! break;
> !
> ! default:
> ! plpgsql_dstring_append(&ds, yytext);
> ! while ((tok = yylex()) != ';')
> ! {
> ! if (tok == 0)
> ! yyerror("unterminated default value");
> !
> ! if (plpgsql_SpaceScanned)
> ! plpgsql_dstring_append(&ds, " ");
> ! plpgsql_dstring_append(&ds, yytext);
> ! }
> ! expr->query = strdup(plpgsql_dstring_get(&ds));
> ! plpgsql_dstring_free(&ds);
> !
> ! $$ = expr;
> ! break;
> ! }
> }
> ;
>
> --- 628,636 ----
> { $$ = NULL; }
> | decl_defkey
> {
> ! plpgsql_ns_setlocal(false);
> ! $$ = plpgsql_read_expression(';', ";");
> ! plpgsql_ns_setlocal(true);
> }
> ;
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
> message can get through to the mailing list cleanly

--
#======================================================================#
# 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 Christopher Kings-Lynne 2003-12-24 02:34:08 Re: [GENERAL] Temporary tables and miscellaneous schemas
Previous Message Bruce Momjian 2003-12-23 23:13:00 Fix for \dn and temp schemas