Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
a5836751
Commit
a5836751
authored
Aug 12, 2004
by
Tom Lane
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Allow optional SAVEPOINT keyword in RELEASE and ROLLBACK TO, for greater
compliance with SQL2003 spec syntax. Oliver Jowett
parent
10249abf
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
118 additions
and
94 deletions
+118
-94
doc/src/sgml/ref/allfiles.sgml
doc/src/sgml/ref/allfiles.sgml
+2
-2
doc/src/sgml/ref/release_savepoint.sgml
doc/src/sgml/ref/release_savepoint.sgml
+14
-12
doc/src/sgml/ref/rollback_to.sgml
doc/src/sgml/ref/rollback_to.sgml
+20
-14
doc/src/sgml/ref/savepoint.sgml
doc/src/sgml/ref/savepoint.sgml
+8
-8
src/backend/parser/gram.y
src/backend/parser/gram.y
+19
-3
src/backend/tcop/utility.c
src/backend/tcop/utility.c
+3
-3
src/test/regress/expected/transactions.out
src/test/regress/expected/transactions.out
+27
-27
src/test/regress/sql/transactions.sql
src/test/regress/sql/transactions.sql
+25
-25
No files found.
doc/src/sgml/ref/allfiles.sgml
View file @
a5836751
<!--
$PostgreSQL: pgsql/doc/src/sgml/ref/allfiles.sgml,v 1.6
0 2004/08/01 17:32:13
tgl Exp $
$PostgreSQL: pgsql/doc/src/sgml/ref/allfiles.sgml,v 1.6
1 2004/08/12 19:12:21
tgl Exp $
PostgreSQL documentation
Complete list of usable sgml source files in this directory.
-->
...
...
@@ -88,7 +88,7 @@ Complete list of usable sgml source files in this directory.
<!entity notify system "notify.sgml">
<!entity prepare system "prepare.sgml">
<!entity reindex system "reindex.sgml">
<!entity releaseSavepoint system "release.sgml">
<!entity releaseSavepoint system "release
_savepoint
.sgml">
<!entity reset system "reset.sgml">
<!entity revoke system "revoke.sgml">
<!entity rollback system "rollback.sgml">
...
...
doc/src/sgml/ref/release.sgml
→
doc/src/sgml/ref/release
_savepoint
.sgml
View file @
a5836751
<!--
$PostgreSQL: pgsql/doc/src/sgml/ref/release
.sgml,v 1.1 2004/08/01 17:32:13
tgl Exp $
$PostgreSQL: pgsql/doc/src/sgml/ref/release
_savepoint.sgml,v 1.1 2004/08/12 19:12:21
tgl Exp $
PostgreSQL documentation
-->
<refentry id="SQL-RELEASE">
<refentry id="SQL-RELEASE
-SAVEPOINT
">
<refmeta>
<refentrytitle id="SQL-RELEASE-
TITLE">RELEASE
</refentrytitle>
<refentrytitle id="SQL-RELEASE-
SAVEPOINT-TITLE">RELEASE SAVEPOINT
</refentrytitle>
<refmiscinfo>SQL - Language Statements</refmiscinfo>
</refmeta>
<refnamediv>
<refname>RELEASE</refname>
<refname>RELEASE
SAVEPOINT
</refname>
<refpurpose>destroy a previously defined savepoint</refpurpose>
</refnamediv>
<indexterm zone="sql-release">
<primary>RELEASE</primary>
<indexterm zone="sql-release
-savepoint
">
<primary>RELEASE
SAVEPOINT
</primary>
</indexterm>
<indexterm zone="sql-release">
<indexterm zone="sql-release
-savepoint
">
<primary>savepoints</primary>
<secondary>releasing</secondary>
</indexterm>
<refsynopsisdiv>
<synopsis>
RELEASE <replaceable>savepoint_name</replaceable>
RELEASE
[ SAVEPOINT ]
<replaceable>savepoint_name</replaceable>
</synopsis>
</refsynopsisdiv>
...
...
@@ -33,7 +33,7 @@ RELEASE <replaceable>savepoint_name</replaceable>
<title>Description</title>
<para>
<command>RELEASE</command> destroys a savepoint previously defined
<command>RELEASE
SAVEPOINT
</command> destroys a savepoint previously defined
in the current transaction.
</para>
...
...
@@ -48,7 +48,7 @@ RELEASE <replaceable>savepoint_name</replaceable>
</para>
<para>
<command>RELEASE</command> also destroys all savepoints that were
<command>RELEASE
SAVEPOINT
</command> also destroys all savepoints that were
established after the named savepoint was established.
</para>
</refsect1>
...
...
@@ -97,7 +97,7 @@ BEGIN;
INSERT INTO table VALUES (3);
SAVEPOINT my_savepoint;
INSERT INTO table VALUES (4);
RELEASE my_savepoint;
RELEASE
SAVEPOINT
my_savepoint;
COMMIT;
</programlisting>
The above transaction will insert both 3 and 4.
...
...
@@ -108,7 +108,9 @@ COMMIT;
<title>Compatibility</title>
<para>
RELEASE is fully conforming to the SQL standard.
The SQL2003 standard specifies that the keyword SAVEPOINT is mandatory.
<productname>PostgreSQL</productname> allows the SAVEPOINT keyword to be
omitted. Otherwise, this command is fully conforming.
</para>
</refsect1>
...
...
doc/src/sgml/ref/rollback_to.sgml
View file @
a5836751
<!--
$PostgreSQL: pgsql/doc/src/sgml/ref/rollback_to.sgml,v 1.
1 2004/08/01 17:32:13
tgl Exp $
$PostgreSQL: pgsql/doc/src/sgml/ref/rollback_to.sgml,v 1.
2 2004/08/12 19:12:21
tgl Exp $
PostgreSQL documentation
-->
<refentry id="SQL-ROLLBACK-TO">
<refmeta>
<refentrytitle id="SQL-ROLLBACK-TO-TITLE">ROLLBACK TO</refentrytitle>
<refentrytitle id="SQL-ROLLBACK-TO-TITLE">ROLLBACK TO
SAVEPOINT
</refentrytitle>
<refmiscinfo>SQL - Language Statements</refmiscinfo>
</refmeta>
<refnamediv>
<refname>ROLLBACK TO</refname>
<refname>ROLLBACK TO
SAVEPOINT
</refname>
<refpurpose>roll back to a savepoint</refpurpose>
</refnamediv>
<indexterm zone="sql-rollback-to">
<primary>ROLLBACK TO</primary>
<primary>ROLLBACK TO
SAVEPOINT
</primary>
</indexterm>
<indexterm zone="sql-rollback-to">
...
...
@@ -25,7 +25,7 @@ PostgreSQL documentation
<refsynopsisdiv>
<synopsis>
ROLLBACK
TO
<replaceable>savepoint_name</replaceable>
ROLLBACK
[ WORK | TRANSACTION ] TO [ SAVEPOINT ]
<replaceable>savepoint_name</replaceable>
</synopsis>
</refsynopsisdiv>
...
...
@@ -39,7 +39,7 @@ ROLLBACK TO <replaceable>savepoint_name</replaceable>
</para>
<para>
<command>ROLLBACK TO</> implicitly destroys all savepoints that
<command>ROLLBACK TO
SAVEPOINT
</> implicitly destroys all savepoints that
were established after the named savepoint.
</para>
</refsect1>
...
...
@@ -63,9 +63,9 @@ ROLLBACK TO <replaceable>savepoint_name</replaceable>
<title>Notes</title>
<para>
Use <xref linkend="SQL-RELEASE
" endterm="SQL-RELEASE-TITLE"> to
destroy a savepoint without discarding the effects of commands executed
after it was established.
Use <xref linkend="SQL-RELEASE
-SAVEPOINT"
endterm="SQL-RELEASE-SAVEPOINT-TITLE"> to destroy a savepoint without
discarding the effects of commands executed
after it was established.
</para>
<para>
...
...
@@ -81,7 +81,7 @@ ROLLBACK TO <replaceable>savepoint_name</replaceable>
left it pointing to (that is, <command>FETCH</> is not rolled back).
A cursor whose execution causes a transaction to abort is put in a
can't-execute state, so while the transaction can be restored using
<command>ROLLBACK TO</>, the cursor can no longer be used.
<command>ROLLBACK TO
SAVEPOINT
</>, the cursor can no longer be used.
</para>
</refsect1>
...
...
@@ -92,7 +92,7 @@ ROLLBACK TO <replaceable>savepoint_name</replaceable>
To undo the effects of the commands executed after <literal>my_savepoint</literal>
was established:
<programlisting>
ROLLBACK TO my_savepoint;
ROLLBACK TO
SAVEPOINT
my_savepoint;
</programlisting>
</para>
...
...
@@ -110,7 +110,7 @@ FETCH 1 FROM foo;
----------
1
ROLLBACK TO foo;
ROLLBACK TO
SAVEPOINT
foo;
FETCH 1 FROM foo;
?column?
...
...
@@ -128,7 +128,13 @@ COMMIT;
<title>Compatibility</title>
<para>
This command is fully SQL standard conforming.
The SQL2003 standard specifies that the keyword SAVEPOINT is mandatory.
<productname>PostgreSQL</productname> and <productname>Oracle</productname>
allow the SAVEPOINT keyword to be omitted. SQL2003 allows only
WORK, not TRANSACTION, as a noise word after ROLLBACK. Also, SQL2003
has an optional clause AND [ NO ] CHAIN which is not currently supported
by <productname>PostgreSQL</productname>. Otherwise, this command is
fully conforming.
</para>
</refsect1>
...
...
@@ -139,7 +145,7 @@ COMMIT;
<member><xref linkend="sql-begin" endterm="sql-begin-title"></member>
<member><xref linkend="sql-commit" endterm="sql-commit-title"></member>
<member><xref linkend="sql-savepoint" endterm="sql-savepoint-title"></member>
<member><xref linkend="sql-release
" endterm="sql-release
-title"></member>
<member><xref linkend="sql-release
-savepoint" endterm="sql-release-savepoint
-title"></member>
<member><xref linkend="sql-rollback" endterm="sql-rollback-title"></member>
</simplelist>
</refsect1>
...
...
doc/src/sgml/ref/savepoint.sgml
View file @
a5836751
<!--
$PostgreSQL: pgsql/doc/src/sgml/ref/savepoint.sgml,v 1.
1 2004/08/01 17:32:13
tgl Exp $
$PostgreSQL: pgsql/doc/src/sgml/ref/savepoint.sgml,v 1.
2 2004/08/12 19:12:21
tgl Exp $
PostgreSQL documentation
-->
...
...
@@ -64,8 +64,8 @@ SAVEPOINT <replaceable>savepoint_name</replaceable>
<para>
Use <xref linkend="SQL-ROLLBACK-TO" endterm="SQL-ROLLBACK-TO-TITLE"> to
rollback to a savepoint. Use <xref linkend="SQL-RELEASE"
endterm="SQL-RELEASE-TITLE"> to destroy a savepoint, keeping
rollback to a savepoint. Use <xref linkend="SQL-RELEASE
-SAVEPOINT
"
endterm="SQL-RELEASE-
SAVEPOINT-
TITLE"> to destroy a savepoint, keeping
the effects of commands executed after it was established.
</para>
...
...
@@ -86,7 +86,7 @@ BEGIN;
INSERT INTO table VALUES (1);
SAVEPOINT my_savepoint;
INSERT INTO table VALUES (2);
ROLLBACK TO my_savepoint;
ROLLBACK TO
SAVEPOINT
my_savepoint;
INSERT INTO table VALUES (3);
COMMIT;
</programlisting>
...
...
@@ -100,7 +100,7 @@ BEGIN;
INSERT INTO table VALUES (3);
SAVEPOINT my_savepoint;
INSERT INTO table VALUES (4);
RELEASE my_savepoint;
RELEASE
SAVEPOINT
my_savepoint;
COMMIT;
</programlisting>
The above transaction will insert both 3 and 4.
...
...
@@ -116,8 +116,8 @@ COMMIT;
<productname>PostgreSQL</>, the old savepoint is kept, though only the more
recent one will be used when rolling back or releasing. (Releasing the
newer savepoint will cause the older one to again become accessible to
<command>ROLLBACK TO
</> and <command>RELEASE
</>.)
Other
than that
, <command>SAVEPOINT</command> is fully SQL conforming.
<command>ROLLBACK TO
SAVEPOINT</> and <command>RELEASE SAVEPOINT
</>.)
Other
wise
, <command>SAVEPOINT</command> is fully SQL conforming.
</para>
</refsect1>
...
...
@@ -128,7 +128,7 @@ COMMIT;
<member><xref linkend="sql-begin" endterm="sql-begin-title"></member>
<member><xref linkend="sql-rollback" endterm="sql-rollback-title"></member>
<member><xref linkend="sql-rollback-to" endterm="sql-rollback-to-title"></member>
<member><xref linkend="sql-release
" endterm="sql-release
-title"></member>
<member><xref linkend="sql-release
-savepoint" endterm="sql-release-savepoint
-title"></member>
<member><xref linkend="sql-commit" endterm="sql-commit-title"></member>
</simplelist>
</refsect1>
...
...
src/backend/parser/gram.y
View file @
a5836751
...
...
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.4
69 2004/08/02 04:26:35
tgl Exp $
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.4
70 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;
}
;
...
...
src/backend/tcop/utility.c
View file @
a5836751
...
...
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.22
3 2004/08/02 01:30:45
tgl Exp $
* $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.22
4 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
...
...
src/test/regress/expected/transactions.out
View file @
a5836751
...
...
@@ -77,11 +77,11 @@ BEGIN;
SAVEPOINT one;
DROP TABLE foo;
CREATE TABLE bar (a int);
ROLLBACK TO one;
RELEASE one;
ROLLBACK TO
SAVEPOINT
one;
RELEASE
SAVEPOINT
one;
SAVEPOINT two;
CREATE TABLE baz (a int);
RELEASE two;
RELEASE
SAVEPOINT
two;
drop TABLE foobar;
CREATE TABLE barbaz (a int);
COMMIT;
...
...
@@ -110,16 +110,16 @@ BEGIN;
INSERT into bar VALUES (1);
ERROR: relation "bar" does not exist
ROLLBACK TO one;
RELEASE one;
RELEASE
SAVEPOINT
one;
SAVEPOINT two;
INSERT into barbaz VALUES (1);
RELEASE two;
SAVEPOINT three;
SAVEPOINT four;
INSERT INTO foo VALUES (2);
RELEASE four;
ROLLBACK TO three;
RELEASE three;
RELEASE
SAVEPOINT
four;
ROLLBACK TO
SAVEPOINT
three;
RELEASE
SAVEPOINT
three;
INSERT INTO foo VALUES (3);
COMMIT;
SELECT * FROM foo; -- should have 1 and 3
...
...
@@ -140,8 +140,8 @@ BEGIN;
SAVEPOINT one;
SELECT foo;
ERROR: column "foo" does not exist
ROLLBACK TO one;
RELEASE one;
ROLLBACK TO
SAVEPOINT
one;
RELEASE
SAVEPOINT
one;
SAVEPOINT two;
CREATE TABLE savepoints (a int);
SAVEPOINT three;
...
...
@@ -150,7 +150,7 @@ ERROR: column "foo" does not exist
INSERT INTO savepoints VALUES (2);
SAVEPOINT five;
INSERT INTO savepoints VALUES (3);
ROLLBACK TO five;
ROLLBACK TO
SAVEPOINT
five;
COMMIT;
COMMIT; -- should not be in a transaction block
WARNING: there is no transaction in progress
...
...
@@ -165,7 +165,7 @@ SELECT * FROM savepoints;
BEGIN;
SAVEPOINT one;
DELETE FROM savepoints WHERE a=1;
RELEASE one;
RELEASE
SAVEPOINT
one;
SAVEPOINT two;
DELETE FROM savepoints WHERE a=1;
SAVEPOINT three;
...
...
@@ -200,7 +200,7 @@ BEGIN;
INSERT INTO savepoints VALUES (6);
SAVEPOINT one;
INSERT INTO savepoints VALUES (7);
RELEASE one;
RELEASE
SAVEPOINT
one;
INSERT INTO savepoints VALUES (8);
COMMIT;
-- rows 6 and 8 should have been created by the same xact
...
...
@@ -221,7 +221,7 @@ BEGIN;
INSERT INTO savepoints VALUES (9);
SAVEPOINT one;
INSERT INTO savepoints VALUES (10);
ROLLBACK TO one;
ROLLBACK TO
SAVEPOINT
one;
INSERT INTO savepoints VALUES (11);
COMMIT;
SELECT a FROM savepoints WHERE a in (9, 10, 11);
...
...
@@ -244,7 +244,7 @@ BEGIN;
INSERT INTO savepoints VALUES (13);
SAVEPOINT two;
INSERT INTO savepoints VALUES (14);
ROLLBACK TO one;
ROLLBACK TO
SAVEPOINT
one;
INSERT INTO savepoints VALUES (15);
SAVEPOINT two;
INSERT INTO savepoints VALUES (16);
...
...
@@ -266,9 +266,9 @@ BEGIN;
INSERT INTO savepoints VALUES (19);
SAVEPOINT two;
INSERT INTO savepoints VALUES (20);
ROLLBACK TO one;
ROLLBACK TO
SAVEPOINT
one;
INSERT INTO savepoints VALUES (21);
ROLLBACK TO one;
ROLLBACK TO
SAVEPOINT
one;
INSERT INTO savepoints VALUES (22);
COMMIT;
SELECT a FROM savepoints WHERE a BETWEEN 18 AND 22;
...
...
@@ -282,10 +282,10 @@ DROP TABLE savepoints;
-- only in a transaction block:
SAVEPOINT one;
ERROR: SAVEPOINT may only be used in transaction blocks
ROLLBACK TO one;
ERROR: ROLLBACK TO may only be used in transaction blocks
RELEASE one;
ERROR: RELEASE may only be used in transaction blocks
ROLLBACK TO
SAVEPOINT
one;
ERROR: ROLLBACK TO
SAVEPOINT
may only be used in transaction blocks
RELEASE
SAVEPOINT
one;
ERROR: RELEASE
SAVEPOINT
may only be used in transaction blocks
-- Only "rollback to" allowed in aborted state
BEGIN;
SAVEPOINT one;
...
...
@@ -293,9 +293,9 @@ BEGIN;
ERROR: division by zero
SAVEPOINT two; -- ignored till the end of ...
ERROR: current transaction is aborted, commands ignored until end of transaction block
RELEASE one; -- ignored till the end of ...
RELEASE
SAVEPOINT
one; -- ignored till the end of ...
ERROR: current transaction is aborted, commands ignored until end of transaction block
ROLLBACK TO one;
ROLLBACK TO
SAVEPOINT
one;
SELECT 1;
?column?
----------
...
...
@@ -328,7 +328,7 @@ BEGIN;
9
(10 rows)
ROLLBACK TO one;
ROLLBACK TO
SAVEPOINT
one;
FETCH 10 FROM c;
unique2
---------
...
...
@@ -344,7 +344,7 @@ BEGIN;
19
(10 rows)
RELEASE one;
RELEASE
SAVEPOINT
one;
FETCH 10 FROM c;
unique2
---------
...
...
@@ -365,12 +365,12 @@ BEGIN;
SAVEPOINT two;
FETCH 10 FROM c;
ERROR: division by zero
ROLLBACK TO two;
ROLLBACK TO
SAVEPOINT
two;
-- c is now dead to the world ...
FETCH 10 FROM c;
ERROR: portal "c" cannot be run
ROLLBACK TO two;
RELEASE two;
ROLLBACK TO
SAVEPOINT
two;
RELEASE
SAVEPOINT
two;
FETCH 10 FROM c;
ERROR: portal "c" cannot be run
COMMIT;
...
...
src/test/regress/sql/transactions.sql
View file @
a5836751
...
...
@@ -64,11 +64,11 @@ BEGIN;
SAVEPOINT
one
;
DROP
TABLE
foo
;
CREATE
TABLE
bar
(
a
int
);
ROLLBACK
TO
one
;
RELEASE
one
;
ROLLBACK
TO
SAVEPOINT
one
;
RELEASE
SAVEPOINT
one
;
SAVEPOINT
two
;
CREATE
TABLE
baz
(
a
int
);
RELEASE
two
;
RELEASE
SAVEPOINT
two
;
drop
TABLE
foobar
;
CREATE
TABLE
barbaz
(
a
int
);
COMMIT
;
...
...
@@ -84,16 +84,16 @@ BEGIN;
SAVEPOINT
one
;
INSERT
into
bar
VALUES
(
1
);
ROLLBACK
TO
one
;
RELEASE
one
;
RELEASE
SAVEPOINT
one
;
SAVEPOINT
two
;
INSERT
into
barbaz
VALUES
(
1
);
RELEASE
two
;
SAVEPOINT
three
;
SAVEPOINT
four
;
INSERT
INTO
foo
VALUES
(
2
);
RELEASE
four
;
ROLLBACK
TO
three
;
RELEASE
three
;
RELEASE
SAVEPOINT
four
;
ROLLBACK
TO
SAVEPOINT
three
;
RELEASE
SAVEPOINT
three
;
INSERT
INTO
foo
VALUES
(
3
);
COMMIT
;
SELECT
*
FROM
foo
;
-- should have 1 and 3
...
...
@@ -103,8 +103,8 @@ SELECT * FROM barbaz; -- should have 1
BEGIN
;
SAVEPOINT
one
;
SELECT
foo
;
ROLLBACK
TO
one
;
RELEASE
one
;
ROLLBACK
TO
SAVEPOINT
one
;
RELEASE
SAVEPOINT
one
;
SAVEPOINT
two
;
CREATE
TABLE
savepoints
(
a
int
);
SAVEPOINT
three
;
...
...
@@ -113,7 +113,7 @@ BEGIN;
INSERT
INTO
savepoints
VALUES
(
2
);
SAVEPOINT
five
;
INSERT
INTO
savepoints
VALUES
(
3
);
ROLLBACK
TO
five
;
ROLLBACK
TO
SAVEPOINT
five
;
COMMIT
;
COMMIT
;
-- should not be in a transaction block
SELECT
*
FROM
savepoints
;
...
...
@@ -122,7 +122,7 @@ SELECT * FROM savepoints;
BEGIN
;
SAVEPOINT
one
;
DELETE
FROM
savepoints
WHERE
a
=
1
;
RELEASE
one
;
RELEASE
SAVEPOINT
one
;
SAVEPOINT
two
;
DELETE
FROM
savepoints
WHERE
a
=
1
;
SAVEPOINT
three
;
...
...
@@ -145,7 +145,7 @@ BEGIN;
INSERT
INTO
savepoints
VALUES
(
6
);
SAVEPOINT
one
;
INSERT
INTO
savepoints
VALUES
(
7
);
RELEASE
one
;
RELEASE
SAVEPOINT
one
;
INSERT
INTO
savepoints
VALUES
(
8
);
COMMIT
;
-- rows 6 and 8 should have been created by the same xact
...
...
@@ -157,7 +157,7 @@ BEGIN;
INSERT
INTO
savepoints
VALUES
(
9
);
SAVEPOINT
one
;
INSERT
INTO
savepoints
VALUES
(
10
);
ROLLBACK
TO
one
;
ROLLBACK
TO
SAVEPOINT
one
;
INSERT
INTO
savepoints
VALUES
(
11
);
COMMIT
;
SELECT
a
FROM
savepoints
WHERE
a
in
(
9
,
10
,
11
);
...
...
@@ -170,7 +170,7 @@ BEGIN;
INSERT
INTO
savepoints
VALUES
(
13
);
SAVEPOINT
two
;
INSERT
INTO
savepoints
VALUES
(
14
);
ROLLBACK
TO
one
;
ROLLBACK
TO
SAVEPOINT
one
;
INSERT
INTO
savepoints
VALUES
(
15
);
SAVEPOINT
two
;
INSERT
INTO
savepoints
VALUES
(
16
);
...
...
@@ -185,9 +185,9 @@ BEGIN;
INSERT
INTO
savepoints
VALUES
(
19
);
SAVEPOINT
two
;
INSERT
INTO
savepoints
VALUES
(
20
);
ROLLBACK
TO
one
;
ROLLBACK
TO
SAVEPOINT
one
;
INSERT
INTO
savepoints
VALUES
(
21
);
ROLLBACK
TO
one
;
ROLLBACK
TO
SAVEPOINT
one
;
INSERT
INTO
savepoints
VALUES
(
22
);
COMMIT
;
SELECT
a
FROM
savepoints
WHERE
a
BETWEEN
18
AND
22
;
...
...
@@ -196,16 +196,16 @@ DROP TABLE savepoints;
-- only in a transaction block:
SAVEPOINT
one
;
ROLLBACK
TO
one
;
RELEASE
one
;
ROLLBACK
TO
SAVEPOINT
one
;
RELEASE
SAVEPOINT
one
;
-- Only "rollback to" allowed in aborted state
BEGIN
;
SAVEPOINT
one
;
SELECT
0
/
0
;
SAVEPOINT
two
;
-- ignored till the end of ...
RELEASE
one
;
-- ignored till the end of ...
ROLLBACK
TO
one
;
RELEASE
SAVEPOINT
one
;
-- ignored till the end of ...
ROLLBACK
TO
SAVEPOINT
one
;
SELECT
1
;
COMMIT
;
SELECT
1
;
-- this should work
...
...
@@ -215,19 +215,19 @@ BEGIN;
DECLARE
c
CURSOR
FOR
SELECT
unique2
FROM
tenk1
;
SAVEPOINT
one
;
FETCH
10
FROM
c
;
ROLLBACK
TO
one
;
ROLLBACK
TO
SAVEPOINT
one
;
FETCH
10
FROM
c
;
RELEASE
one
;
RELEASE
SAVEPOINT
one
;
FETCH
10
FROM
c
;
CLOSE
c
;
DECLARE
c
CURSOR
FOR
SELECT
unique2
/
0
FROM
tenk1
;
SAVEPOINT
two
;
FETCH
10
FROM
c
;
ROLLBACK
TO
two
;
ROLLBACK
TO
SAVEPOINT
two
;
-- c is now dead to the world ...
FETCH
10
FROM
c
;
ROLLBACK
TO
two
;
RELEASE
two
;
ROLLBACK
TO
SAVEPOINT
two
;
RELEASE
SAVEPOINT
two
;
FETCH
10
FROM
c
;
COMMIT
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment