aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Wieck <JanWieck@Yahoo.com>1999-01-28 11:48:31 +0000
committerJan Wieck <JanWieck@Yahoo.com>1999-01-28 11:48:31 +0000
commitc42b959fb318637b43ab245da10035d4ec3cb4d3 (patch)
tree0f8a74cf3f8e5ac451d637e54b6e36cb79aeb313
parentb946244c1c809e1786fa23c9fa098d0842ef5c96 (diff)
downloadpostgresql-c42b959fb318637b43ab245da10035d4ec3cb4d3.tar.gz
postgresql-c42b959fb318637b43ab245da10035d4ec3cb4d3.zip
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
-rw-r--r--src/pl/plpgsql/src/gram.y6
-rw-r--r--src/pl/plpgsql/src/pl_comp.c14
-rw-r--r--src/pl/plpgsql/src/pl_funcs.c43
-rw-r--r--src/pl/plpgsql/src/scan.l6
4 files changed, 48 insertions, 21 deletions
diff --git a/src/pl/plpgsql/src/gram.y b/src/pl/plpgsql/src/gram.y
index 30bc55f69e7..a9488eda388 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.1 1998/08/24 19:14:47 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.2 1999/01/28 11:48:30 wieck Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -344,7 +344,7 @@ decl_aliasitem : T_WORD
char *name;
plpgsql_ns_setlocal(false);
- name = plpgsql_tolower(pstrdup(yytext));
+ name = plpgsql_tolower(yytext);
if (name[0] != '$') {
elog(ERROR, "can only alias positional parameters");
}
@@ -374,7 +374,7 @@ decl_varname : T_WORD
decl_renname : T_WORD
{
- $$ = plpgsql_tolower(pstrdup(yytext));
+ $$ = plpgsql_tolower(yytext);
}
;
diff --git a/src/pl/plpgsql/src/pl_comp.c b/src/pl/plpgsql/src/pl_comp.c
index a5a29878af1..08176cb280a 100644
--- a/src/pl/plpgsql/src/pl_comp.c
+++ b/src/pl/plpgsql/src/pl_comp.c
@@ -3,7 +3,7 @@
* procedural language
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.4 1998/11/27 20:07:22 vadim Exp $
+ * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.5 1999/01/28 11:48:31 wieck Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -537,7 +537,7 @@ plpgsql_parse_word(char *word)
* We do our lookups case insensitive
* ----------
*/
- cp = plpgsql_tolower(pstrdup(word));
+ cp = plpgsql_tolower(word);
/* ----------
* Special handling when compiling triggers
@@ -657,7 +657,7 @@ plpgsql_parse_dblword(char *string)
* Convert to lower case and separate the words
* ----------
*/
- word1 = plpgsql_tolower(pstrdup(string));
+ word1 = plpgsql_tolower(string);
word2 = strchr(word1, '.');
*word2++ = '\0';
@@ -783,7 +783,7 @@ plpgsql_parse_tripword(char *string)
* Convert to lower case and separate the words
* ----------
*/
- word1 = plpgsql_tolower(pstrdup(string));
+ word1 = plpgsql_tolower(string);
word2 = strchr(word1, '.');
*word2++ = '\0';
word3 = strchr(word2, '.');
@@ -893,7 +893,7 @@ plpgsql_parse_wordtype(char *word)
* We do our lookups case insensitive
* ----------
*/
- cp = plpgsql_tolower(pstrdup(word));
+ cp = plpgsql_tolower(word);
*(strchr(cp, '%')) = '\0';
/* ----------
@@ -988,7 +988,7 @@ plpgsql_parse_dblwordtype(char *string)
* Convert to lower case and separate the words
* ----------
*/
- word1 = plpgsql_tolower(pstrdup(string));
+ word1 = plpgsql_tolower(string);
word2 = strchr(word1, '.');
*word2++ = '\0';
*(strchr(word2, '%')) = '\0';
@@ -1123,7 +1123,7 @@ plpgsql_parse_wordrowtype(char *string)
* Get the word in lower case and fetch the pg_class tuple.
* ----------
*/
- word1 = plpgsql_tolower(pstrdup(string));
+ word1 = plpgsql_tolower(string);
cp = strchr(word1, '%');
*cp = '\0';
diff --git a/src/pl/plpgsql/src/pl_funcs.c b/src/pl/plpgsql/src/pl_funcs.c
index 5cb2b7002bb..d8dd645a26d 100644
--- a/src/pl/plpgsql/src/pl_funcs.c
+++ b/src/pl/plpgsql/src/pl_funcs.c
@@ -3,7 +3,7 @@
* procedural language
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_funcs.c,v 1.2 1998/09/01 04:40:24 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_funcs.c,v 1.3 1999/01/28 11:48:31 wieck Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -189,6 +189,7 @@ plpgsql_ns_additem(int itemtype, int itemno, char *name)
if (name == NULL)
name = "";
+ name = plpgsql_tolower(name);
if (ns->items_used == ns->items_alloc)
{
@@ -320,22 +321,48 @@ plpgsql_ns_rename(char *oldname, char *newname)
/* ----------
- * plpgsql_tolower Translate a string in place to
- * lower case
+ * plpgsql_tolower Translate a string to lower case
+ * but honor "" escaping.
* ----------
*/
char *
plpgsql_tolower(char *s)
{
- char *cp;
+ char *ret;
+ char *cp;
- for (cp = s; *cp; cp++)
+ ret = palloc(strlen(s) + 1);
+ cp = ret;
+
+ while (*s)
{
- if (isupper(*cp))
- *cp = tolower(*cp);
+ if (*s == '"')
+ {
+ s++;
+ while (*s)
+ {
+ if (*s == '"')
+ break;
+ *cp++ = *s++;
+ }
+ if (*s != '"')
+ {
+ plpgsql_comperrinfo();
+ elog(ERROR, "unterminated \"");
+ }
+ s++;
+ }
+ else
+ {
+ if (isupper(*s))
+ *cp++ = tolower(*s++);
+ else
+ *cp++ = *s++;
+ }
}
+ *cp = '\0';
- return s;
+ return ret;
}
diff --git a/src/pl/plpgsql/src/scan.l b/src/pl/plpgsql/src/scan.l
index 6575bdd77b8..b408b5139b4 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.1 1998/08/24 19:14:49 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.l,v 1.2 1999/01/28 11:48:31 wieck Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -46,8 +46,8 @@ static void plpgsql_input(char *buf, int *result, int max);
#define YY_INPUT(buf,res,max) plpgsql_input(buf, &res, max)
%}
-WS [[:alpha:]_]
-WC [[:alnum:]_]
+WS [[:alpha:]_"]
+WC [[:alnum:]_"]
%x IN_STRING IN_COMMENT