diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2004-07-27 05:11:48 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2004-07-27 05:11:48 +0000 |
commit | cc813fc2b8d9293bbd4d0e0d6a6f3b9cf02fe32f (patch) | |
tree | 9f7e6635c94bb61cb9d6340c3647c429dca9504b /src/backend/parser | |
parent | b1ee93884d528672fbce446a38659954a86219e1 (diff) | |
download | postgresql-cc813fc2b8d9293bbd4d0e0d6a6f3b9cf02fe32f.tar.gz postgresql-cc813fc2b8d9293bbd4d0e0d6a6f3b9cf02fe32f.zip |
Replace nested-BEGIN syntax for subtransactions with spec-compliant
SAVEPOINT/RELEASE/ROLLBACK-TO syntax. (Alvaro)
Cause COMMIT of a failed transaction to report ROLLBACK instead of
COMMIT in its command tag. (Tom)
Fix a few loose ends in the nested-transactions stuff.
Diffstat (limited to 'src/backend/parser')
-rw-r--r-- | src/backend/parser/gram.y | 36 | ||||
-rw-r--r-- | src/backend/parser/keywords.c | 4 |
2 files changed, 34 insertions, 6 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 519bcce7184..1c7faa2c99d 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.467 2004/07/12 05:37:44 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.468 2004/07/27 05:10:55 tgl Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -386,11 +386,11 @@ static void doNegateFloat(Value *v); QUOTE - READ REAL RECHECK REFERENCES REINDEX RELATIVE_P RENAME REPEATABLE REPLACE - RESET RESTART RESTRICT RETURNS REVOKE RIGHT ROLLBACK ROW ROWS - RULE + READ REAL RECHECK REFERENCES REINDEX RELATIVE_P RELEASE RENAME + REPEATABLE REPLACE RESET RESTART RESTRICT RETURNS REVOKE RIGHT + ROLLBACK ROW ROWS RULE - SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE + SAVEPOINT SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE SERIALIZABLE SESSION SESSION_USER SET SETOF SHARE SHOW SIMILAR SIMPLE SMALLINT SOME STABLE START STATEMENT STATISTICS STDIN STDOUT STORAGE STRICT_P SUBSTRING SYSID @@ -3961,6 +3961,30 @@ TransactionStmt: n->options = NIL; $$ = (Node *)n; } + | SAVEPOINT ColId + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_SAVEPOINT; + n->options = list_make1(makeDefElem("savepoint_name", + (Node *)makeString($2))); + $$ = (Node *)n; + } + | RELEASE ColId + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_RELEASE; + n->options = list_make1(makeDefElem("savepoint_name", + (Node *)makeString($2))); + $$ = (Node *)n; + } + | ROLLBACK TO ColId + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_ROLLBACK_TO; + n->options = list_make1(makeDefElem("savepoint_name", + (Node *)makeString($3))); + $$ = (Node *)n; + } ; opt_transaction: WORK {} @@ -7688,6 +7712,7 @@ unreserved_keyword: | RECHECK | REINDEX | RELATIVE_P + | RELEASE | RENAME | REPEATABLE | REPLACE @@ -7699,6 +7724,7 @@ unreserved_keyword: | ROLLBACK | ROWS | RULE + | SAVEPOINT | SCHEMA | SCROLL | SECOND_P diff --git a/src/backend/parser/keywords.c b/src/backend/parser/keywords.c index cae1ed159b0..80ae597feb5 100644 --- a/src/backend/parser/keywords.c +++ b/src/backend/parser/keywords.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/keywords.c,v 1.151 2004/07/12 05:37:44 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/parser/keywords.c,v 1.152 2004/07/27 05:10:55 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -254,6 +254,7 @@ static const ScanKeyword ScanKeywords[] = { {"references", REFERENCES}, {"reindex", REINDEX}, {"relative", RELATIVE_P}, + {"release", RELEASE}, {"rename", RENAME}, {"repeatable", REPEATABLE}, {"replace", REPLACE}, @@ -267,6 +268,7 @@ static const ScanKeyword ScanKeywords[] = { {"row", ROW}, {"rows", ROWS}, {"rule", RULE}, + {"savepoint", SAVEPOINT}, {"schema", SCHEMA}, {"scroll", SCROLL}, {"second", SECOND_P}, |