aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Meskes <meskes@postgresql.org>2011-02-18 11:16:16 +0100
committerMichael Meskes <meskes@postgresql.org>2011-02-18 11:16:16 +0100
commitbc423879cc2db964231f1d4c912961f3e35a6ece (patch)
treefc4d1e53ccb1067e3eca7fcb99ef8fd4f0ec86f8 /src
parent5c63982af2a5d2da90259e878efb43f16ee13ce3 (diff)
downloadpostgresql-bc423879cc2db964231f1d4c912961f3e35a6ece.tar.gz
postgresql-bc423879cc2db964231f1d4c912961f3e35a6ece.zip
Applied a patch by Zoltán Böszörményi that makes ecpg's parser accept dynamic cursornames even in WHERE CURRENT OF clauses.
Diffstat (limited to 'src')
-rw-r--r--src/backend/parser/gram.y2
-rw-r--r--src/interfaces/ecpg/preproc/ecpg.addons5
2 files changed, 6 insertions, 1 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 3857205ef9b..077a10532eb 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -9031,7 +9031,7 @@ where_clause:
/* variant for UPDATE and DELETE */
where_or_current_clause:
WHERE a_expr { $$ = $2; }
- | WHERE CURRENT_P OF name
+ | WHERE CURRENT_P OF cursor_name
{
CurrentOfExpr *n = makeNode(CurrentOfExpr);
/* cvarno is filled in by parse analysis */
diff --git a/src/interfaces/ecpg/preproc/ecpg.addons b/src/interfaces/ecpg/preproc/ecpg.addons
index c14b2f302e7..a689dbc70e6 100644
--- a/src/interfaces/ecpg/preproc/ecpg.addons
+++ b/src/interfaces/ecpg/preproc/ecpg.addons
@@ -192,6 +192,11 @@ ECPG: stmtViewStmt rule
output_simple_statement($1);
}
+ECPG: where_or_current_clauseWHERECURRENT_POFcursor_name block
+ {
+ char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4;
+ $$ = cat_str(2,mm_strdup("where current of"), cursor_marker);
+ }
ECPG: CopyStmtCOPYopt_binaryqualified_nameopt_column_listopt_oidscopy_fromcopy_file_namecopy_delimiteropt_withcopy_options addon
if (strcmp($6, "to") == 0 && strcmp($7, "stdin") == 0)
mmerror(PARSE_ERROR, ET_ERROR, "COPY TO STDIN is not possible");