Changeset: 2a1b841583d9 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2a1b841583d9
Modified Files:
tools/embedded/Tests/dbi.R
tools/embedded/Tests/lowlevel.R
tools/embedded/embedded.c
Branch: embedded
Log Message:
Fix for transaction start immediately after rollback
diffs (83 lines):
diff --git a/tools/embedded/Tests/dbi.R b/tools/embedded/Tests/dbi.R
--- a/tools/embedded/Tests/dbi.R
+++ b/tools/embedded/Tests/dbi.R
@@ -1,8 +1,9 @@
basedir <- Sys.getenv("TSTTRGDIR")
-if (basedir == "") {
- stop("Need TSTTRGDIR environment vars")
+if (basedir != "") {
+ library(MonetDBLite, quietly=T, lib.loc=file.path(basedir, "rlibdir"))
+} else {
+ library(MonetDBLite)
}
-library(MonetDBLite, quietly=T, lib.loc=file.path(basedir, "rlibdir"))
library(MonetDB.R)
library(testthat)
@@ -258,7 +259,7 @@ test_that("dis/re-connect", {
expect_false(dbIsValid(con))
expect_error(dbSendQuery(con, "SELECT 1"))
# this throws a warning because we cannot re-initialize embedded monetdb
- expect_warning(con <- dbConnect(MonetDB.R::MonetDB.R(),
embedded=tempdir()))
+ expect_warning(con <- dbConnect(MonetDB.R::MonetDB.R(),
embedded="/tmp"))
res <- dbSendQuery(con, "SELECT 1")
expect_true(dbIsValid(res))
})
diff --git a/tools/embedded/Tests/lowlevel.R b/tools/embedded/Tests/lowlevel.R
--- a/tools/embedded/Tests/lowlevel.R
+++ b/tools/embedded/Tests/lowlevel.R
@@ -1,9 +1,11 @@
+library(testthat)
+
basedir <- Sys.getenv("TSTTRGDIR")
-if (basedir == "") {
- stop("Need TSTTRGDIR environment vars")
+if (basedir != "") {
+ library(MonetDBLite, quietly=T, lib.loc=file.path(basedir, "rlibdir"))
+} else {
+ library(MonetDBLite)
}
-library(MonetDBLite, quietly=T, lib.loc=file.path(basedir, "rlibdir"))
-library(testthat)
test_that("db starts up", {
expect_error(monetdb_embedded_startup("/dev/null"))
@@ -79,6 +81,18 @@ test_that("rollback with errors", {
monetdb_embedded_disconnect(con)
})
+test_that("transaction immediately after rollback", {
+ con <- monetdb_embedded_connect()
+ monetdb_embedded_query(con, "START TRANSACTION")
+ res <- monetdb_embedded_query(con, "SELECT 42")
+ expect_equal(res$type, 1)
+ monetdb_embedded_query(con, "ROLLBACK")
+ monetdb_embedded_query(con, "START TRANSACTION")
+ res <- monetdb_embedded_query(con, "SELECT 42")
+ expect_equal(res$type, 1)
+ monetdb_embedded_disconnect(con)
+})
+
test_that("pointless rollback/commit", {
con <- monetdb_embedded_connect()
expect_equal(monetdb_embedded_query(con, "SELECT 1")$type, 1)
diff --git a/tools/embedded/embedded.c b/tools/embedded/embedded.c
--- a/tools/embedded/embedded.c
+++ b/tools/embedded/embedded.c
@@ -174,6 +174,7 @@ char* monetdb_query(void* conn, char* qu
while (*query == ' ' || *query == '\t') query++;
if (strncasecmp(query, "START", 5) == 0) { // START TRANSACTION
m->session->auto_commit = 0;
+ m->session->status = 0;
}
else if (strncasecmp(query, "ROLLBACK", 8) == 0) {
m->session->status = -1;
@@ -185,7 +186,7 @@ char* monetdb_query(void* conn, char* qu
else if (strncasecmp(query, "SHIBBOLEET", 10) == 0) {
res =
GDKstrdup("\x46\x6f\x72\x20\x69\x6d\x6d\x65\x64\x69\x61\x74\x65\x20\x74\x65\x63\x68\x6e\x69\x63\x61\x6c\x20\x73\x75\x70\x70\x6f\x72\x74\x20\x63\x61\x6c\x6c\x20\x2b\x33\x31\x20\x32\x30\x20\x35\x39\x32\x20\x34\x30\x33\x39");
}
- else if (m->session->status < 0 && m->session->auto_commit ==0){
+ else if (m->session->status < 0 && m->session->auto_commit == 0){
res = GDKstrdup("Current transaction is aborted (please
ROLLBACK)");
} else {
res = (*SQLstatementIntern_ptr)(c, &query, "name", 1, 0,
(res_table **) result);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list