Changeset: b2832bd0d58c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b2832bd0d58c
Modified Files:
        clients/R/MonetDB.R/R/dbi.R
        tools/embedded/build-rpkg.sh
        tools/embedded/embedded.c
        tools/embedded/rpackage/tests/testthat/test_dbi.R
Branch: embedded
Log Message:

allow append within transaction


diffs (94 lines):

diff --git a/clients/R/MonetDB.R/R/dbi.R b/clients/R/MonetDB.R/R/dbi.R
--- a/clients/R/MonetDB.R/R/dbi.R
+++ b/clients/R/MonetDB.R/R/dbi.R
@@ -418,26 +418,35 @@ setMethod("dbWriteTable", "MonetDBConnec
     dbSendUpdate(conn, ct)
   }
   if (length(value[[1]])) {
-    # TODO: special handling for embedded mode
-
-    if (csvdump) {
-      tmp <- tempfile(fileext = ".csv")
-      write.table(value, tmp, sep = ",", quote = TRUE, row.names = FALSE, 
col.names = FALSE,na="")
-      dbSendQuery(conn, paste0("COPY ",format(nrow(value), scientific=FALSE)," 
RECORDS INTO ", qname,
-      " FROM '", tmp, "' USING DELIMITERS ',','\\n','\"' NULL AS ''"))
-      file.remove(tmp) 
-    } else {
-      vins <- paste("(", paste(rep("?", length(value)), collapse=', '), ")", 
sep='')
-      if (transaction) dbBegin(conn)
-      # chunk some inserts together so we do not need to do a round trip for 
every one
-      splitlen <- 0:(nrow(value)-1) %/% getOption("monetdb.insert.splitsize", 
1000)
-      lapply(split(value, splitlen), 
-        function(valueck) {
-        bvins <- c()
-        for (j in 1:length(valueck[[1]])) bvins <- 
c(bvins,.bindParameters(vins, as.list(valueck[j, ])))
-        dbSendUpdate(conn, paste0("INSERT INTO ", qname, " VALUES 
",paste0(bvins, collapse=", ")))
-      })
-      if (transaction) dbCommit(conn)
+    if (inherits(conn, "MonetDBEmbeddedConnection")) {
+      if (csvdump) {
+        warning("Ignoring csvdump setting in embedded mode")
+      }
+      insres <- monetdb_embedded_append(qname, value)
+      if (!is.logical(insres) && insres) {
+        stop("Failed to insert data: ", insres)
+      }
+    }
+    else {
+      if (csvdump) {
+        tmp <- tempfile(fileext = ".csv")
+        write.table(value, tmp, sep = ",", quote = TRUE, row.names = FALSE, 
col.names = FALSE,na="")
+        dbSendQuery(conn, paste0("COPY ",format(nrow(value), 
scientific=FALSE)," RECORDS INTO ", qname,
+        " FROM '", tmp, "' USING DELIMITERS ',','\\n','\"' NULL AS ''"))
+        file.remove(tmp) 
+      } else {
+        vins <- paste("(", paste(rep("?", length(value)), collapse=', '), ")", 
sep='')
+        if (transaction) dbBegin(conn)
+        # chunk some inserts together so we do not need to do a round trip for 
every one
+        splitlen <- 0:(nrow(value)-1) %/% 
getOption("monetdb.insert.splitsize", 1000)
+        lapply(split(value, splitlen), 
+          function(valueck) {
+          bvins <- c()
+          for (j in 1:length(valueck[[1]])) bvins <- 
c(bvins,.bindParameters(vins, as.list(valueck[j, ])))
+          dbSendUpdate(conn, paste0("INSERT INTO ", qname, " VALUES 
",paste0(bvins, collapse=", ")))
+        })
+        if (transaction) dbCommit(conn)
+      }
     }
   }
   return(invisible(TRUE))
diff --git a/tools/embedded/build-rpkg.sh b/tools/embedded/build-rpkg.sh
--- a/tools/embedded/build-rpkg.sh
+++ b/tools/embedded/build-rpkg.sh
@@ -42,7 +42,9 @@ R CMD build rpackage
 
 scp $RPKG cwi:WWW/R
 
-# install.packages("MonetDB", repos="http://homepages.cwi.nl/~hannes/R/";, 
type="source")
+echo
+echo 'install.packages("MonetDB", repos="http://homepages.cwi.nl/~hannes/R/";, 
type="source")'
+echo
 
 # OSX 10.10 check (check vanilla!)
 # ubuntu 14.04.02: needs bison libssl-dev libxml2-dev
diff --git a/tools/embedded/embedded.c b/tools/embedded/embedded.c
--- a/tools/embedded/embedded.c
+++ b/tools/embedded/embedded.c
@@ -187,7 +187,7 @@ char* monetdb_append(const char* schema,
        stk->stk[4].vtype = TYPE_str;
        stk->stk[5].vtype = TYPE_bat;
        mb.var[5] = &bat_varrec;
-       (*mvc_trans_ptr)(m);
+       if (!m->session->active) (*mvc_trans_ptr)(m);
        for (i=0; i < col_ct; i++) {
                append_data ad = data[i];
                stk->stk[4].val.sval = ad.colname;
diff --git a/tools/embedded/rpackage/tests/testthat/test_dbi.R 
b/tools/embedded/rpackage/tests/testthat/test_dbi.R
--- a/tools/embedded/rpackage/tests/testthat/test_dbi.R
+++ b/tools/embedded/rpackage/tests/testthat/test_dbi.R
@@ -1,5 +1,4 @@
 library(testthat)
-library(MonetDB)
 library(MonetDB.R)
 
 tname <- "monetdbtest"
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to