summaryrefslogtreecommitdiff
path: root/src/pl/plpgsql
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-06-19 23:22:40 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-06-19 23:22:40 +0000
commit1bd22f55cf1e5e80ab0b7704adf9678cacaca69b (patch)
treed5e2f96c458ef93fa9ee93c4419bdbaf333f4787 /src/pl/plpgsql
parent8902aaaa6cbe0776a3214b4ae88602263b2a150e (diff)
downloadpostgresql-1bd22f55cf1e5e80ab0b7704adf9678cacaca69b.tar.gz
Disallow dollar sign in operator names, instead allow it as a non-first
character in identifiers. The first change eliminates the current need to put spaces around parameter references, as in "x<=$2". The second change improves compatibility with Oracle and some other RDBMSes. This was discussed and agreed to back in January, but did not get done.
Diffstat (limited to 'src/pl/plpgsql')
-rw-r--r--src/pl/plpgsql/src/scan.l26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/pl/plpgsql/src/scan.l b/src/pl/plpgsql/src/scan.l
index 27dcdc2590..2203cdd6b4 100644
--- a/src/pl/plpgsql/src/scan.l
+++ b/src/pl/plpgsql/src/scan.l
@@ -4,7 +4,7 @@
* procedural language
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.l,v 1.27 2003/06/17 04:35:03 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.l,v 1.28 2003/06/19 23:22:40 tgl Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -72,12 +72,14 @@ int plpgsql_SpaceScanned = 0;
%x IN_STRING IN_COMMENT
digit [0-9]
-letter [\200-\377_A-Za-z]
-letter_or_digit [\200-\377_A-Za-z0-9]
+ident_start [A-Za-z\200-\377_]
+ident_cont [A-Za-z\200-\377_0-9\$]
quoted_ident (\"[^\"]*\")+
-identifier ({letter}{letter_or_digit}*|{quoted_ident})
+identifier ({ident_start}{ident_cont}*|{quoted_ident})
+
+param \${digit}+
space [ \t\n\r\f]
@@ -197,28 +199,28 @@ dump { return O_DUMP; }
{identifier}{space}*\.{space}*{identifier}{space}*%ROWTYPE {
plpgsql_error_lineno = plpgsql_scanner_lineno();
return plpgsql_parse_dblwordrowtype(yytext); }
-\${digit}+ {
+{param} {
plpgsql_error_lineno = plpgsql_scanner_lineno();
return plpgsql_parse_word(yytext); }
-\${digit}+{space}*\.{space}*{identifier} {
+{param}{space}*\.{space}*{identifier} {
plpgsql_error_lineno = plpgsql_scanner_lineno();
return plpgsql_parse_dblword(yytext); }
-\${digit}+{space}*\.{space}*{identifier}{space}*\.{space}*{identifier} {
+{param}{space}*\.{space}*{identifier}{space}*\.{space}*{identifier} {
plpgsql_error_lineno = plpgsql_scanner_lineno();
return plpgsql_parse_tripword(yytext); }
-\${digit}+{space}*%TYPE {
+{param}{space}*%TYPE {
plpgsql_error_lineno = plpgsql_scanner_lineno();
return plpgsql_parse_wordtype(yytext); }
-\${digit}+{space}*\.{space}*{identifier}{space}*%TYPE {
+{param}{space}*\.{space}*{identifier}{space}*%TYPE {
plpgsql_error_lineno = plpgsql_scanner_lineno();
return plpgsql_parse_dblwordtype(yytext); }
-\${digit}+{space}*\.{space}*{identifier}{space}*\.{space}*{identifier}{space}*%TYPE {
+{param}{space}*\.{space}*{identifier}{space}*\.{space}*{identifier}{space}*%TYPE {
plpgsql_error_lineno = plpgsql_scanner_lineno();
return plpgsql_parse_tripwordtype(yytext); }
-\${digit}+{space}*%ROWTYPE {
+{param}{space}*%ROWTYPE {
plpgsql_error_lineno = plpgsql_scanner_lineno();
return plpgsql_parse_wordrowtype(yytext); }
-\${digit}+{space}*\.{space}*{identifier}{space}*%ROWTYPE {
+{param}{space}*\.{space}*{identifier}{space}*%ROWTYPE {
plpgsql_error_lineno = plpgsql_scanner_lineno();
return plpgsql_parse_dblwordrowtype(yytext); }