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