diff --git a/DESCRIPTION b/DESCRIPTION index f77259b375..447e9776ad 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: tiledb Type: Package -Version: 0.31.0.3 +Version: 0.31.0.4 Title: Modern Database Engine for Complex Data Based on Multi-Dimensional Arrays Authors@R: c( person("TileDB, Inc.", role = c("aut", "cph")), diff --git a/NAMESPACE b/NAMESPACE index 7c0686cb93..29f1cb29ba 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -97,6 +97,8 @@ export(tiledb_array_has_enumeration) export(tiledb_array_is_heterogeneous) export(tiledb_array_is_homogeneous) export(tiledb_array_is_open) +export(tiledb_array_is_open_for_reading) +export(tiledb_array_is_open_for_writing) export(tiledb_array_open) export(tiledb_array_open_at) export(tiledb_array_schema) diff --git a/NEWS.md b/NEWS.md index 2217402a1c..cc54b13a95 100644 --- a/NEWS.md +++ b/NEWS.md @@ -3,6 +3,7 @@ * Allow `parse_query_condition()` to work on dimensions when an array is passed * Add `tiledb_vfs_copy_dir()`, a wrapper for the `vfs_copy_dir()` function * Print values for `tiledb_schema_get_types()` and `tiledb_schema_get_names()` [#805](https://github.com/TileDB-Inc/TileDB-R/issues/805) +* Add `tiledb_array_is_open_for_reading()/writing()` [#806](https://github.com/TileDB-Inc/TileDB-R/issues/806) # tiledb 0.31.0 diff --git a/R/Array.R b/R/Array.R index debcada0ee..138ccf7737 100644 --- a/R/Array.R +++ b/R/Array.R @@ -136,6 +136,28 @@ tiledb_array_is_open <- function(arr) { libtiledb_array_is_open(arr@ptr) } +##' Test if TileDB Array is open for reading +##' +##' @param arr A TileDB Array object as for example returned by `tiledb_array()` +##' @return A boolean indicating whether the TileDB Array object is open, and +##' the mode is "READ". +##' @export +tiledb_array_is_open_for_reading <- function(arr) { + stopifnot("The 'arr' argument must be a tiledb_array object" = .isArray(arr)) + return(libtiledb_array_is_open_for_reading(arr@ptr)) +} + +##' Test if TileDB Array is open for writing +##' +##' @param arr A TileDB Array object as for example returned by `tiledb_array()` +##' @return A boolean indicating whether the TileDB Array object is open, and +##' the mode is "WRITE". +##' @export +tiledb_array_is_open_for_writing <- function(arr) { + stopifnot("The 'arr' argument must be a tiledb_array object" = .isArray(arr)) + return(libtiledb_array_is_open_for_writing(arr@ptr)) +} + ##' Check for Homogeneous Domain ##' ##' @param arr A TileDB Array object diff --git a/inst/tinytest/test_tiledbarray.R b/inst/tinytest/test_tiledbarray.R index e50d8720c5..cf42a8cd51 100644 --- a/inst/tinytest/test_tiledbarray.R +++ b/inst/tinytest/test_tiledbarray.R @@ -976,8 +976,12 @@ data <- c(1L, 2L, 3L) arr <- tiledb_array(uri = tmp) arr[I, J] <- data expect_false(tiledb_array_is_open(arr)) +expect_false(tiledb_array_is_open_for_reading(arr)) +expect_false(tiledb_array_is_open_for_writing(arr)) arr <- tiledb_array_open(arr) expect_true(tiledb_array_is_open(arr)) +expect_true(tiledb_array_is_open_for_reading(arr)) +expect_false(tiledb_array_is_open_for_writing(arr)) expect_equal(tiledb_array_get_non_empty_domain_from_index(arr, 1), c(1, 3)) expect_equal(tiledb_array_get_non_empty_domain_from_name(arr, "d1"), c(1, 3)) expect_equal(tiledb_array_get_non_empty_domain_from_index(arr, 2), c("a", "c")) @@ -1124,6 +1128,9 @@ schema <- tiledb_array_schema(tiledb_domain(dims=c(tiledb_dim("d1", c(1L, N), ti attrs=tiledb_attr("x", type="FLOAT64")) tiledb_array_create(uri, schema) obj <- tiledb_array(uri, attrs="x", query_type="WRITE") +# No tiledb_array_open yet, so, both false +expect_false(tiledb_array_is_open_for_reading(obj)) +expect_false(tiledb_array_is_open_for_writing(obj)) M <- matrix(runif(N*K), N, K) obj[] <- M # prior to #246 this write had a write data type chk <- tiledb_array(uri, return_as="matrix") @@ -1578,6 +1585,8 @@ expect_false(tiledb_array_is_open(arr)) arr <- tiledb_array(uri, keep_open=TRUE) res <- arr[] expect_true(tiledb_array_is_open(arr)) +expect_true(tiledb_array_is_open_for_reading(arr)) +expect_false(tiledb_array_is_open_for_writing(arr)) arr <- tiledb_array_close(arr) expect_false(tiledb_array_is_open(arr)) diff --git a/man/tiledb_array_is_open_for_reading.Rd b/man/tiledb_array_is_open_for_reading.Rd new file mode 100644 index 0000000000..0bdeb9d596 --- /dev/null +++ b/man/tiledb_array_is_open_for_reading.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/Array.R +\name{tiledb_array_is_open_for_reading} +\alias{tiledb_array_is_open_for_reading} +\title{Test if TileDB Array is open for reading} +\usage{ +tiledb_array_is_open_for_reading(arr) +} +\arguments{ +\item{arr}{A TileDB Array object as for example returned by \code{tiledb_array()}} +} +\value{ +A boolean indicating whether the TileDB Array object is open, and +the mode is "READ". +} +\description{ +Test if TileDB Array is open for reading +} diff --git a/man/tiledb_array_is_open_for_writing.Rd b/man/tiledb_array_is_open_for_writing.Rd new file mode 100644 index 0000000000..4ec0b1720d --- /dev/null +++ b/man/tiledb_array_is_open_for_writing.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/Array.R +\name{tiledb_array_is_open_for_writing} +\alias{tiledb_array_is_open_for_writing} +\title{Test if TileDB Array is open for writing} +\usage{ +tiledb_array_is_open_for_writing(arr) +} +\arguments{ +\item{arr}{A TileDB Array object as for example returned by \code{tiledb_array()}} +} +\value{ +A boolean indicating whether the TileDB Array object is open, and +the mode is "WRITE". +} +\description{ +Test if TileDB Array is open for writing +}