Patch from Ian Lance Taylor fixing multiple cursor arguments
authorJan Wieck <[email protected]>
Wed, 6 Jun 2001 18:54:41 +0000 (18:54 +0000)
committerJan Wieck <[email protected]>
Wed, 6 Jun 2001 18:54:41 +0000 (18:54 +0000)
and buffer zero termination.

Jan

src/pl/plpgsql/src/gram.y

index 0bec5a8f2cf977347a691ef18ad66b418b8d4a25..14f32c278fe2113c52621edbceffb692ef690ec9 100644 (file)
@@ -4,7 +4,7 @@
  *                                               procedural language
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.20 2001/05/31 17:15:40 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.21 2001/06/06 18:54:41 wieck Exp $
  *
  *       This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -385,7 +385,8 @@ decl_statement      : decl_varname decl_const decl_datatype decl_notnull decl_defval
                                                                *cp2++ = '\\';
                                                        *cp2++ = *cp1++;
                                                }
-                                               strcat(buf, "'");
+                                               *cp2++ = '\'';
+                                               *cp2 = '\0';
                                                curname_def->query = strdup(buf);
                                                new->default_val = curname_def;
 
@@ -1404,6 +1405,8 @@ stmt_open         : K_OPEN lno cursor_varptr
                                                {
                                                        if ($3->cursor_explicit_argrow >= 0)
                                                        {
+                                                               char   *cp;
+
                                                                tok = yylex();
 
                                                                if (tok != '(')
@@ -1412,7 +1415,20 @@ stmt_open                : K_OPEN lno cursor_varptr
                                                                        elog(ERROR, "cursor %s has arguments", $3->refname);
                                                                }
 
-                                                               new->argquery = read_sqlstmt(';', ";", "SELECT (");
+                                                               new->argquery = read_sqlstmt(';', ";", "SELECT ");
+                                                               /* Remove the trailing right paren,
+                                 * because we want "select 1, 2", not
+                                 * "select (1, 2)".
+                                                                */
+                                                               cp = new->argquery->query;
+                                                               cp += strlen(cp);
+                                                               --cp;
+                                                               if (*cp != ')')
+                                                               {
+                                                                       plpgsql_comperrinfo();
+                                                                       elog(ERROR, "missing )");
+                                                               }
+                                                               *cp = '\0';
                                                        }
                                                        else
                                                        {