Changeset: 662a7aa0abc7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=662a7aa0abc7
Modified Files:
        tools/embedded/embedded.c
        tools/embedded/rpackage/R/monetdb.R
Branch: embedded
Log Message:

Transaction simulation


diffs (54 lines):

diff --git a/tools/embedded/embedded.c b/tools/embedded/embedded.c
--- a/tools/embedded/embedded.c
+++ b/tools/embedded/embedded.c
@@ -95,14 +95,30 @@ cleanup:
 
 // TODO: This does stop working on the first failing query, do something about 
this
 char* monetdb_query(char* query, void** result) {
-       str res;
+       str res = MAL_SUCCEED;
        Client c = &mal_clients[0];
+       mvc* m = ((backend *) c->sqlcontext)->mvc;
        if (!monetdb_embedded_initialized) {
                fprintf(stderr, "Embedded MonetDB is not started.\n");
                return NULL;
        }
-       res = (*SQLstatementIntern_ptr)(c, &query, "name", 1, 0, (res_table **) 
result);
-       //SQLautocommit(c, ((backend *) c->sqlcontext)->mvc); ??
+
+       while (query == ' ' || query == '\t') query++;
+       if (strncasecmp(query, "START", 5) == 0) { // START TRANSACTION
+               m->session->auto_commit = 0;
+       }
+       else if (strncasecmp(query, "ROLLBACK", 8) == 0) {
+               m->session->status = -1;
+               m->session->auto_commit = 1;
+       }
+       else if (strncasecmp(query, "COMMIT", 6) == 0) {
+               m->session->auto_commit = 1;
+       }
+       else {
+               res = (*SQLstatementIntern_ptr)(c, &query, "name", 1, 0, 
(res_table **) result);
+       }
+
+       SQLautocommit(c, m);
        return res;
 }
 
diff --git a/tools/embedded/rpackage/R/monetdb.R 
b/tools/embedded/rpackage/R/monetdb.R
--- a/tools/embedded/rpackage/R/monetdb.R
+++ b/tools/embedded/rpackage/R/monetdb.R
@@ -15,9 +15,12 @@ monetdb_embedded_startup <- function(dir
                stop("Cannot write to ", dir)
        }
        res <- .Call("monetdb_startup_R", dir, quiet)
-       if (res < 0) {
+       if (res < -1) {
                stop("Failed to initialize embedded MonetDB.")
        }
+       if (res == -1) {
+               warning("monetdb_embedded_startup() was already called. 
Ignoring this invocation.")
+       }
        invisible(TRUE)
 }
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to