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