From 03d474642d30a0d9a51cbf9bc674e7cc903f4f0c Mon Sep 17 00:00:00 2001 From: Dirk Eddelbuettel Date: Fri, 23 Jul 2021 14:19:53 -0500 Subject: [PATCH 1/3] refactor array access in [] function --- R/TileDBArray.R | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/R/TileDBArray.R b/R/TileDBArray.R index a481462630..880f441833 100644 --- a/R/TileDBArray.R +++ b/R/TileDBArray.R @@ -153,6 +153,7 @@ tiledb_array <- function(uri, if (length(timestamp_end) > 0) { libtiledb_array_set_open_timestamp_end(array_xptr, timestamp_end) } + schema_xptr <- libtiledb_array_get_schema(array_xptr) is_sparse_status <- libtiledb_array_schema_sparse(schema_xptr) if (!is.na(is.sparse) && is.sparse != is_sparse_status) { @@ -431,32 +432,6 @@ setMethod("[", "tiledb_array", sparse <- libtiledb_array_schema_sparse(sch@ptr) - if (length(enckey) > 0) { - if (length(tstamp) > 0) { - x@ptr <- libtiledb_array_open_at_with_key(ctx@ptr, uri, "READ", enckey, tstamp) - } else { - x@ptr <- libtiledb_array_open_with_key(ctx@ptr, uri, "READ", enckey) - } - } else { - if (length(tstamp) > 0) { - x@ptr <- libtiledb_array_open_at(ctx@ptr, uri, "READ", tstamp) - } else { - x@ptr <- libtiledb_array_open(ctx@ptr, uri, "READ") - } - } - - if (length(x@timestamp_start) > 0) { - libtiledb_array_set_open_timestamp_start(x@ptr, x@timestamp_start) - } - if (length(x@timestamp_end) > 0) { - libtiledb_array_set_open_timestamp_end(x@ptr, x@timestamp_end) - } - if (length(x@timestamp_start) > 0 || length(x@timestamp_end) > 0) { - x@ptr <- libtiledb_array_reopen(x@ptr) - } - - on.exit(libtiledb_array_close(x@ptr)) - dims <- tiledb::dimensions(dom) dimnames <- sapply(dims, function(d) libtiledb_dim_get_name(d@ptr)) dimtypes <- sapply(dims, function(d) libtiledb_dim_get_datatype(d@ptr)) From de4ec366be6a1dde91f00352e1a9ee685b26b260 Mon Sep 17 00:00:00 2001 From: Dirk Eddelbuettel Date: Thu, 5 Aug 2021 11:16:40 -0500 Subject: [PATCH 2/3] when writing, do not reopen if already open for writing --- R/TileDBArray.R | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/R/TileDBArray.R b/R/TileDBArray.R index 880f441833..9c465a22e4 100644 --- a/R/TileDBArray.R +++ b/R/TileDBArray.R @@ -890,20 +890,24 @@ setMethod("[<-", "tiledb_array", if (all.equal(sort(allnames),sort(nm))) { - if (length(enckey) > 0) { - if (length(tstamp) > 0) { - arrptr <- libtiledb_array_open_at_with_key(ctx@ptr, uri, "WRITE", enckey, tstamp) - } else { - arrptr <- libtiledb_array_open_with_key(ctx@ptr, uri, "WRITE", enckey) - } - } else { - if (length(tstamp) > 0) { - arrptr <- libtiledb_array_open_at(ctx@ptr, uri, "WRITE", tstamp) + if (libtiledb_array_is_open_for_writing(x@ptr)) { # if open for writing + arrptr <- x@ptr # use array + } else { # else open appropriately + if (length(enckey) > 0) { + if (length(tstamp) > 0) { + arrptr <- libtiledb_array_open_at_with_key(ctx@ptr, uri, "WRITE", enckey, tstamp) + } else { + arrptr <- libtiledb_array_open_with_key(ctx@ptr, uri, "WRITE", enckey) + } } else { - arrptr <- libtiledb_array_open(ctx@ptr, uri, "WRITE") + if (length(tstamp) > 0) { + arrptr <- libtiledb_array_open_at(ctx@ptr, uri, "WRITE", tstamp) + } else { + arrptr <- libtiledb_array_open(ctx@ptr, uri, "WRITE") + } } - } + } qryptr <- libtiledb_query(ctx@ptr, arrptr, "WRITE") qryptr <- libtiledb_query_set_layout(qryptr, From 18c1d172a6fa383b66b8e643aa47870a61ddb447 Mon Sep 17 00:00:00 2001 From: Dirk Eddelbuettel Date: Thu, 5 Aug 2021 13:50:40 -0500 Subject: [PATCH 3/3] have fromDataFrame open for write before writing --- R/DataFrame.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/DataFrame.R b/R/DataFrame.R index a062659c2c..6c89a386f2 100644 --- a/R/DataFrame.R +++ b/R/DataFrame.R @@ -206,7 +206,7 @@ fromDataFrame <- function(obj, uri, col_index=NULL, sparse=FALSE, allows_dups=sp allows_dups(schema) <- allows_dups tiledb_array_create(uri, schema) - df <- tiledb_array(uri) + df <- tiledb_array(uri, query_type = "WRITE") ## when setting an index when likely want 'sparse write to dense array if (!is.null(col_index) && !sparse) query_layout(df) <- "UNORDERED" if (is.null(col_index) && sparse)