Partial support for mixed case in PL/pgSQL.
authorJan Wieck
Thu, 28 Jan 1999 11:48:31 +0000 (11:48 +0000)
committerJan Wieck
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