Skip to content

Commit 66dbcd4

Browse files
committed
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.
1 parent fb55fa0 commit 66dbcd4

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

src/pl/plpgsql/src/gram.y

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* procedural language
55
*
66
* IDENTIFICATION
7-
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.7 1999/08/16 19:57:21 momjian Exp $
7+
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.8 1999/11/28 22:02:17 tgl Exp $
88
*
99
* This software is copyrighted by Jan Wieck - Hamburg.
1010
*
@@ -776,19 +776,19 @@ fori_lower :
776776
switch (tok) {
777777
case T_VARIABLE:
778778
params[nparams] = yylval.var->varno;
779-
sprintf(buf, "$%d", ++nparams);
779+
sprintf(buf, " $%d ", ++nparams);
780780
plpgsql_dstring_append(&ds, buf);
781781
break;
782782

783783
case T_RECFIELD:
784784
params[nparams] = yylval.recfield->rfno;
785-
sprintf(buf, "$%d", ++nparams);
785+
sprintf(buf, " $%d ", ++nparams);
786786
plpgsql_dstring_append(&ds, buf);
787787
break;
788788

789789
case T_TGARGV:
790790
params[nparams] = yylval.trigarg->dno;
791-
sprintf(buf, "$%d", ++nparams);
791+
sprintf(buf, " $%d ", ++nparams);
792792
plpgsql_dstring_append(&ds, buf);
793793
break;
794794

@@ -1118,19 +1118,19 @@ read_sqlstmt (int until, char *s, char *sqlstart)
11181118
switch (tok) {
11191119
case T_VARIABLE:
11201120
params[nparams] = yylval.var->varno;
1121-
sprintf(buf, "$%d", ++nparams);
1121+
sprintf(buf, " $%d ", ++nparams);
11221122
plpgsql_dstring_append(&ds, buf);
11231123
break;
11241124

11251125
case T_RECFIELD:
11261126
params[nparams] = yylval.recfield->rfno;
1127-
sprintf(buf, "$%d", ++nparams);
1127+
sprintf(buf, " $%d ", ++nparams);
11281128
plpgsql_dstring_append(&ds, buf);
11291129
break;
11301130

11311131
case T_TGARGV:
11321132
params[nparams] = yylval.trigarg->dno;
1133-
sprintf(buf, "$%d", ++nparams);
1133+
sprintf(buf, " $%d ", ++nparams);
11341134
plpgsql_dstring_append(&ds, buf);
11351135
break;
11361136

@@ -1205,19 +1205,19 @@ make_select_stmt()
12051205
switch (tok) {
12061206
case T_VARIABLE:
12071207
params[nparams] = yylval.var->varno;
1208-
sprintf(buf, "$%d", ++nparams);
1208+
sprintf(buf, " $%d ", ++nparams);
12091209
plpgsql_dstring_append(&ds, buf);
12101210
break;
12111211

12121212
case T_RECFIELD:
12131213
params[nparams] = yylval.recfield->rfno;
1214-
sprintf(buf, "$%d", ++nparams);
1214+
sprintf(buf, " $%d ", ++nparams);
12151215
plpgsql_dstring_append(&ds, buf);
12161216
break;
12171217

12181218
case T_TGARGV:
12191219
params[nparams] = yylval.trigarg->dno;
1220-
sprintf(buf, "$%d", ++nparams);
1220+
sprintf(buf, " $%d ", ++nparams);
12211221
plpgsql_dstring_append(&ds, buf);
12221222
break;
12231223

@@ -1338,19 +1338,19 @@ make_select_stmt()
13381338
switch (tok) {
13391339
case T_VARIABLE:
13401340
params[nparams] = yylval.var->varno;
1341-
sprintf(buf, "$%d", ++nparams);
1341+
sprintf(buf, " $%d ", ++nparams);
13421342
plpgsql_dstring_append(&ds, buf);
13431343
break;
13441344

13451345
case T_RECFIELD:
13461346
params[nparams] = yylval.recfield->rfno;
1347-
sprintf(buf, "$%d", ++nparams);
1347+
sprintf(buf, " $%d ", ++nparams);
13481348
plpgsql_dstring_append(&ds, buf);
13491349
break;
13501350

13511351
case T_TGARGV:
13521352
params[nparams] = yylval.trigarg->dno;
1353-
sprintf(buf, "$%d", ++nparams);
1353+
sprintf(buf, " $%d ", ++nparams);
13541354
plpgsql_dstring_append(&ds, buf);
13551355
break;
13561356

@@ -1385,19 +1385,19 @@ make_select_stmt()
13851385
switch (tok) {
13861386
case T_VARIABLE:
13871387
params[nparams] = yylval.var->varno;
1388-
sprintf(buf, "$%d", ++nparams);
1388+
sprintf(buf, " $%d ", ++nparams);
13891389
plpgsql_dstring_append(&ds, buf);
13901390
break;
13911391

13921392
case T_RECFIELD:
13931393
params[nparams] = yylval.recfield->rfno;
1394-
sprintf(buf, "$%d", ++nparams);
1394+
sprintf(buf, " $%d ", ++nparams);
13951395
plpgsql_dstring_append(&ds, buf);
13961396
break;
13971397

13981398
case T_TGARGV:
13991399
params[nparams] = yylval.trigarg->dno;
1400-
sprintf(buf, "$%d", ++nparams);
1400+
sprintf(buf, " $%d ", ++nparams);
14011401
plpgsql_dstring_append(&ds, buf);
14021402
break;
14031403

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy