[tarantool-patches] [PATCH 4/4] sql: fix SAVEPOINT RELEASE statement
Nikita Pettik
korablev at tarantool.org
Thu May 3 21:49:25 MSK 2018
Before this patch SAVEPOINT RELEASE statement always raised error,
due to SQLite's obsolete code. Now it has been removed, and
SAVEPOINT RELEASE works as desired.
Closes #3379
---
src/box/sql/vdbe.c | 7 -----
test/sql/gh-3379-release-savepoints.result | 40 ++++++++++++++++++++++++++++
test/sql/gh-3379-release-savepoints.test.lua | 26 ++++++++++++++++++
3 files changed, 66 insertions(+), 7 deletions(-)
create mode 100644 test/sql/gh-3379-release-savepoints.result
create mode 100644 test/sql/gh-3379-release-savepoints.test.lua
diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c
index 6ea04901c..62f393de4 100644
--- a/src/box/sql/vdbe.c
+++ b/src/box/sql/vdbe.c
@@ -2901,13 +2901,6 @@ case OP_Savepoint: {
if (!pSavepoint) {
sqlite3VdbeError(p, "no such savepoint: %s", zName);
rc = SQLITE_ERROR;
- } else if (p1==SAVEPOINT_RELEASE) {
- /* It is not possible to release (commit) a savepoint if there are
- * active write statements.
- */
- sqlite3VdbeError(p, "cannot release savepoint - "
- "SQL statements in progress");
- rc = SQLITE_BUSY;
} else {
/* Determine whether or not this is a transaction savepoint. If so,
diff --git a/test/sql/gh-3379-release-savepoints.result b/test/sql/gh-3379-release-savepoints.result
new file mode 100644
index 000000000..5f5804b66
--- /dev/null
+++ b/test/sql/gh-3379-release-savepoints.result
@@ -0,0 +1,40 @@
+test_run = require('test_run').new()
+---
+...
+test_run:cmd("setopt delimiter ';'")
+---
+- true
+...
+-- These tests check that release of SQL savepoints works as desired.
+--
+-- box.cfg()
+release_sv = function()
+ box.begin()
+ box.sql.execute('SAVEPOINT t1;')
+ box.sql.execute('RELEASE SAVEPOINT t1;')
+end;
+---
+...
+release_sv();
+---
+...
+box.commit();
+---
+...
+release_sv_fail = function()
+ box.begin()
+ box.sql.execute('SAVEPOINT t1;')
+ box.sql.execute('SAVEPOINT t2;')
+ box.sql.execute('RELEASE SAVEPOINT t2;')
+ box.sql.execute('RELEASE SAVEPOINT t1;')
+ box.sql.execute('ROLLBACK TO t1;')
+end;
+---
+...
+release_sv_fail();
+---
+- error: 'no such savepoint: T1'
+...
+box.commit();
+---
+...
diff --git a/test/sql/gh-3379-release-savepoints.test.lua b/test/sql/gh-3379-release-savepoints.test.lua
new file mode 100644
index 000000000..6b299045d
--- /dev/null
+++ b/test/sql/gh-3379-release-savepoints.test.lua
@@ -0,0 +1,26 @@
+test_run = require('test_run').new()
+test_run:cmd("setopt delimiter ';'")
+
+-- These tests check that release of SQL savepoints works as desired.
+--
+
+-- box.cfg()
+
+release_sv = function()
+ box.begin()
+ box.sql.execute('SAVEPOINT t1;')
+ box.sql.execute('RELEASE SAVEPOINT t1;')
+end;
+release_sv();
+box.commit();
+
+release_sv_fail = function()
+ box.begin()
+ box.sql.execute('SAVEPOINT t1;')
+ box.sql.execute('SAVEPOINT t2;')
+ box.sql.execute('RELEASE SAVEPOINT t2;')
+ box.sql.execute('RELEASE SAVEPOINT t1;')
+ box.sql.execute('ROLLBACK TO t1;')
+end;
+release_sv_fail();
+box.commit();
--
2.15.1
More information about the Tarantool-patches
mailing list