summaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorTom Lane2004-08-12 19:12:21 +0000
committerTom Lane2004-08-12 19:12:21 +0000
commita583675108e60c55d0d4947d6c474bb9cb166d1a (patch)
tree4042917b4f51c18a0803673ec58e7dfad74c689d /src/backend
parent10249abfa19a53e9e158396333400ae66ae1c02b (diff)
Allow optional SAVEPOINT keyword in RELEASE and ROLLBACK TO, for greater
compliance with SQL2003 spec syntax. Oliver Jowett
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/parser/gram.y22
-rw-r--r--src/backend/tcop/utility.c6
2 files changed, 22 insertions, 6 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index eddfb6e80d2..6a27714b05e 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.469 2004/08/02 04:26:35 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.470 2004/08/12 19:12:21 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -3982,6 +3982,14 @@ TransactionStmt:
(Node *)makeString($2)));
$$ = (Node *)n;
}
+ | RELEASE SAVEPOINT ColId
+ {
+ TransactionStmt *n = makeNode(TransactionStmt);
+ n->kind = TRANS_STMT_RELEASE;
+ n->options = list_make1(makeDefElem("savepoint_name",
+ (Node *)makeString($3)));
+ $$ = (Node *)n;
+ }
| RELEASE ColId
{
TransactionStmt *n = makeNode(TransactionStmt);
@@ -3990,12 +3998,20 @@ TransactionStmt:
(Node *)makeString($2)));
$$ = (Node *)n;
}
- | ROLLBACK TO ColId
+ | ROLLBACK opt_transaction TO SAVEPOINT ColId
{
TransactionStmt *n = makeNode(TransactionStmt);
n->kind = TRANS_STMT_ROLLBACK_TO;
n->options = list_make1(makeDefElem("savepoint_name",
- (Node *)makeString($3)));
+ (Node *)makeString($5)));
+ $$ = (Node *)n;
+ }
+ | ROLLBACK opt_transaction TO ColId
+ {
+ TransactionStmt *n = makeNode(TransactionStmt);
+ n->kind = TRANS_STMT_ROLLBACK_TO;
+ n->options = list_make1(makeDefElem("savepoint_name",
+ (Node *)makeString($4)));
$$ = (Node *)n;
}
;
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index b9c50d7d81c..89ac4843ba8 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.223 2004/08/02 01:30:45 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.224 2004/08/12 19:12:21 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -388,12 +388,12 @@ ProcessUtility(Node *parsetree,
break;
case TRANS_STMT_RELEASE:
- RequireTransactionChain((void *)stmt, "RELEASE");
+ RequireTransactionChain((void *)stmt, "RELEASE SAVEPOINT");
ReleaseSavepoint(stmt->options);
break;
case TRANS_STMT_ROLLBACK_TO:
- RequireTransactionChain((void *)stmt, "ROLLBACK TO");
+ RequireTransactionChain((void *)stmt, "ROLLBACK TO SAVEPOINT");
RollbackToSavepoint(stmt->options);
/*
* CommitTransactionCommand is in charge