Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit c42b959

Browse files
Jan WieckJan Wieck
Jan Wieck
authored and
Jan Wieck
committed
Partial support for mixed case in PL/pgSQL.
Left are identifiers that contain non-alnum/_ chars. So e.g. whitespaces in identifiers are still not supported. Jan
1 parent b946244 commit c42b959

File tree

4 files changed

+48
-21
lines changed

4 files changed

+48
-21
lines changed

src/pl/plpgsql/src/gram.y

Lines changed: 3 additions & 3 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.1 1998/08/24 19:14:47 momjian Exp $
7+
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.2 1999/01/28 11:48:30 wieck Exp $
88
*
99
* This software is copyrighted by Jan Wieck - Hamburg.
1010
*
@@ -344,7 +344,7 @@ decl_aliasitem : T_WORD
344344
char *name;
345345

346346
plpgsql_ns_setlocal(false);
347-
name = plpgsql_tolower(pstrdup(yytext));
347+
name = plpgsql_tolower(yytext);
348348
if (name[0] != '$') {
349349
elog(ERROR, "can only alias positional parameters");
350350
}
@@ -374,7 +374,7 @@ decl_varname : T_WORD
374374

375375
decl_renname : T_WORD
376376
{
377-
$$ = plpgsql_tolower(pstrdup(yytext));
377+
$$ = plpgsql_tolower(yytext);
378378
}
379379
;
380380

src/pl/plpgsql/src/pl_comp.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* procedural language
44
*
55
* IDENTIFICATION
6-
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.4 1998/11/27 20:07:22 vadim Exp $
6+
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.5 1999/01/28 11:48:31 wieck Exp $
77
*
88
* This software is copyrighted by Jan Wieck - Hamburg.
99
*
@@ -537,7 +537,7 @@ plpgsql_parse_word(char *word)
537537
* We do our lookups case insensitive
538538
* ----------
539539
*/
540-
cp = plpgsql_tolower(pstrdup(word));
540+
cp = plpgsql_tolower(word);
541541

542542
/* ----------
543543
* Special handling when compiling triggers
@@ -657,7 +657,7 @@ plpgsql_parse_dblword(char *string)
657657
* Convert to lower case and separate the words
658658
* ----------
659659
*/
660-
word1 = plpgsql_tolower(pstrdup(string));
660+
word1 = plpgsql_tolower(string);
661661
word2 = strchr(word1, '.');
662662
*word2++ = '\0';
663663

@@ -783,7 +783,7 @@ plpgsql_parse_tripword(char *string)
783783
* Convert to lower case and separate the words
784784
* ----------
785785
*/
786-
word1 = plpgsql_tolower(pstrdup(string));
786+
word1 = plpgsql_tolower(string);
787787
word2 = strchr(word1, '.');
788788
*word2++ = '\0';
789789
word3 = strchr(word2, '.');
@@ -893,7 +893,7 @@ plpgsql_parse_wordtype(char *word)
893893
* We do our lookups case insensitive
894894
* ----------
895895
*/
896-
cp = plpgsql_tolower(pstrdup(word));
896+
cp = plpgsql_tolower(word);
897897
*(strchr(cp, '%')) = '\0';
898898

899899
/* ----------
@@ -988,7 +988,7 @@ plpgsql_parse_dblwordtype(char *string)
988988
* Convert to lower case and separate the words
989989
* ----------
990990
*/
991-
word1 = plpgsql_tolower(pstrdup(string));
991+
word1 = plpgsql_tolower(string);
992992
word2 = strchr(word1, '.');
993993
*word2++ = '\0';
994994
*(strchr(word2, '%')) = '\0';
@@ -1123,7 +1123,7 @@ plpgsql_parse_wordrowtype(char *string)
11231123
* Get the word in lower case and fetch the pg_class tuple.
11241124
* ----------
11251125
*/
1126-
word1 = plpgsql_tolower(pstrdup(string));
1126+
word1 = plpgsql_tolower(string);
11271127
cp = strchr(word1, '%');
11281128
*cp = '\0';
11291129

src/pl/plpgsql/src/pl_funcs.c

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* procedural language
44
*
55
* IDENTIFICATION
6-
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_funcs.c,v 1.2 1998/09/01 04:40:24 momjian Exp $
6+
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_funcs.c,v 1.3 1999/01/28 11:48:31 wieck Exp $
77
*
88
* This software is copyrighted by Jan Wieck - Hamburg.
99
*
@@ -189,6 +189,7 @@ plpgsql_ns_additem(int itemtype, int itemno, char *name)
189189

190190
if (name == NULL)
191191
name = "";
192+
name = plpgsql_tolower(name);
192193

193194
if (ns->items_used == ns->items_alloc)
194195
{
@@ -320,22 +321,48 @@ plpgsql_ns_rename(char *oldname, char *newname)
320321

321322

322323
/* ----------
323-
* plpgsql_tolower Translate a string in place to
324-
* lower case
324+
* plpgsql_tolower Translate a string to lower case
325+
* but honor "" escaping.
325326
* ----------
326327
*/
327328
char *
328329
plpgsql_tolower(char *s)
329330
{
330-
char *cp;
331+
char *ret;
332+
char *cp;
331333

332-
for (cp = s; *cp; cp++)
334+
ret = palloc(strlen(s) + 1);
335+
cp = ret;
336+
337+
while (*s)
333338
{
334-
if (isupper(*cp))
335-
*cp = tolower(*cp);
339+
if (*s == '"')
340+
{
341+
s++;
342+
while (*s)
343+
{
344+
if (*s == '"')
345+
break;
346+
*cp++ = *s++;
347+
}
348+
if (*s != '"')
349+
{
350+
plpgsql_comperrinfo();
351+
elog(ERROR, "unterminated \"");
352+
}
353+
s++;
354+
}
355+
else
356+
{
357+
if (isupper(*s))
358+
*cp++ = tolower(*s++);
359+
else
360+
*cp++ = *s++;
361+
}
336362
}
363+
*cp = '\0';
337364

338-
return s;
365+
return ret;
339366
}
340367

341368

src/pl/plpgsql/src/scan.l

Lines changed: 3 additions & 3 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/Attic/scan.l,v 1.1 1998/08/24 19:14:49 momjian Exp $
7+
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.l,v 1.2 1999/01/28 11:48:31 wieck Exp $
88
*
99
* This software is copyrighted by Jan Wieck - Hamburg.
1010
*
@@ -46,8 +46,8 @@ static void plpgsql_input(char *buf, int *result, int max);
4646
#define YY_INPUT(buf,res,max) plpgsql_input(buf, &res, max)
4747
%}
4848

49-
WS [[:alpha:]_]
50-
WC [[:alnum:]_]
49+
WS [[:alpha:]_"]
50+
WC [[:alnum:]_"]
5151

5252
%x IN_STRING IN_COMMENT
5353

0 commit comments

Comments
 (0)