Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
a5836751
G
Gpdb
项目概览
Greenplum
/
Gpdb
通知
7
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gpdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a5836751
编写于
8月 12, 2004
作者:
T
Tom Lane
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Allow optional SAVEPOINT keyword in RELEASE and ROLLBACK TO, for greater
compliance with SQL2003 spec syntax. Oliver Jowett
上级
10249abf
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
118 addition
and
94 deletion
+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
未找到文件。
doc/src/sgml/ref/allfiles.sgml
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录