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