aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJan Wieck <JanWieck@Yahoo.com>2001-06-06 18:54:41 +0000
committerJan Wieck <JanWieck@Yahoo.com>2001-06-06 18:54:41 +0000
commitce62c8b10eea517baf47d6b895c5f47392bf1dd2 (patch)
treee0845e1354b41dc79411286ccba78cfa55935c8d /src
parent1173344e74f7b0eccb9bf3ad2307c82e12cb4fd8 (diff)
downloadpostgresql-ce62c8b10eea517baf47d6b895c5f47392bf1dd2.tar.gz
postgresql-ce62c8b10eea517baf47d6b895c5f47392bf1dd2.zip
Patch from Ian Lance Taylor fixing multiple cursor arguments
and buffer zero termination. Jan
Diffstat (limited to 'src')
-rw-r--r--src/pl/plpgsql/src/gram.y22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/pl/plpgsql/src/gram.y b/src/pl/plpgsql/src/gram.y
index 0bec5a8f2cf..14f32c278fe 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.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
{