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

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: David Fetter <david(at)fetter(dot)org>
Cc: PostgreSQL Patches <pgsql-patches(at)postgresql(dot)org>
Subject: Re: Doc patch--clarifying $1 in PL/PgSQL
Date: 2003-12-23 00:03:11
Message-ID: 28628.1072137791@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches

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 ...

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);
}
;

In response to

Responses

Browse pgsql-patches by date

  From Date Subject
Next Message Tom Lane 2003-12-23 00:13:43 Re: Alpha test
Previous Message Bruce Momjian 2003-12-22 23:55:43 Re: Alpha test