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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list