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