]> granicus.if.org Git - postgresql/commitdiff
Partial support for mixed case in PL/pgSQL.
authorJan Wieck <JanWieck@Yahoo.com>
Thu, 28 Jan 1999 11:48:31 +0000 (11:48 +0000)
committerJan Wieck <JanWieck@Yahoo.com>
Thu, 28 Jan 1999 11:48:31 +0000 (11:48 +0000)
Left are identifiers that contain non-alnum/_ chars.
So e.g. whitespaces in identifiers are still not
supported.

Jan

src/pl/plpgsql/src/gram.y
src/pl/plpgsql/src/pl_comp.c
src/pl/plpgsql/src/pl_funcs.c
src/pl/plpgsql/src/scan.l

index 30bc55f69e7f419cd7af2df6d1975b090178a8c4..a9488eda388d997c85a566e892e4b0dc0fbb5d43 100644 (file)
@@ -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);
                    }
                ;
 
index a5a29878af19ab4f53586a17d7be600497974e5c..08176cb280a16bde70202d642a2160ee77bc9a40 100644 (file)
@@ -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';
 
index 5cb2b7002bbd2f5417fcb6b5e85d8406b93db2b8..d8dd645a26dc8848225af89794e5534fe462f022 100644 (file)
@@ -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;
 }
 
 
index 6575bdd77b879467e85ec165016e3f08e39c7276..b408b5139b49511534e84ff3721398938771c910 100644 (file)
@@ -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