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

Reply via email to