From 66dbcd47ed3c5f8ca7ae8748fa6eed540ebfd18d Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 28 Nov 1999 22:02:17 +0000 Subject: [PATCH] Fix "Unable to identify an operator =$" problem that occurred when pgsql expressions were written without spaces between operators and operands. Problem was that something like "if new.f1=new.f2 then" would be translated to "if $1=$2 then", and the Postgres lexer would tokenize that the wrong way. Fix is to emit spaces around $paramno constructs to ensure they are seen as separate tokens. --- src/pl/plpgsql/src/gram.y | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/pl/plpgsql/src/gram.y b/src/pl/plpgsql/src/gram.y index 22f28c575e..0a435b5914 100644 --- a/src/pl/plpgsql/src/gram.y +++ b/src/pl/plpgsql/src/gram.y @@ -4,7 +4,7 @@ * procedural language * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.7 1999/08/16 19:57:21 momjian Exp $ + * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.8 1999/11/28 22:02:17 tgl Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -776,19 +776,19 @@ fori_lower : switch (tok) { case T_VARIABLE: params[nparams] = yylval.var->varno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break; case T_RECFIELD: params[nparams] = yylval.recfield->rfno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break; case T_TGARGV: params[nparams] = yylval.trigarg->dno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break; @@ -1118,19 +1118,19 @@ read_sqlstmt (int until, char *s, char *sqlstart) switch (tok) { case T_VARIABLE: params[nparams] = yylval.var->varno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break; case T_RECFIELD: params[nparams] = yylval.recfield->rfno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break; case T_TGARGV: params[nparams] = yylval.trigarg->dno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break; @@ -1205,19 +1205,19 @@ make_select_stmt() switch (tok) { case T_VARIABLE: params[nparams] = yylval.var->varno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break; case T_RECFIELD: params[nparams] = yylval.recfield->rfno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break; case T_TGARGV: params[nparams] = yylval.trigarg->dno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break; @@ -1338,19 +1338,19 @@ make_select_stmt() switch (tok) { case T_VARIABLE: params[nparams] = yylval.var->varno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break; case T_RECFIELD: params[nparams] = yylval.recfield->rfno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break; case T_TGARGV: params[nparams] = yylval.trigarg->dno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break; @@ -1385,19 +1385,19 @@ make_select_stmt() switch (tok) { case T_VARIABLE: params[nparams] = yylval.var->varno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break; case T_RECFIELD: params[nparams] = yylval.recfield->rfno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break; case T_TGARGV: params[nparams] = yylval.trigarg->dno; - sprintf(buf, "$%d", ++nparams); + sprintf(buf, " $%d ", ++nparams); plpgsql_dstring_append(&ds, buf); break;