Re: Doc patch--clarifying $1 in PL/PgSQL - Mailing list pgsql-patches
From | Jan Wieck |
---|---|
Subject | Re: Doc patch--clarifying $1 in PL/PgSQL |
Date | |
Msg-id | 3FE8F6D7.8@Yahoo.com Whole thread Raw |
In response to | Re: Doc patch--clarifying $1 in PL/PgSQL (Tom Lane <tgl@sss.pgh.pa.us>) |
Responses |
Re: Doc patch--clarifying $1 in PL/PgSQL
|
List | pgsql-patches |
Tom Lane wrote: > David Fetter <david@fetter.org> writes: >> On Mon, Dec 22, 2003 at 05:50:12PM -0500, Tom Lane wrote: >>> David Fetter <david@fetter.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@postgresql.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@Yahoo.com #
pgsql-patches by date: