From bfb3ff80b8d5767574d834f795306690f4e78f90 Mon Sep 17 00:00:00 2001 From: Paul Hoffman Date: Tue, 7 Jan 2025 17:08:49 -0500 Subject: [PATCH] Allow `parse_query_condition()` to work on dimensions Remove check that limits `parse_query_condition()` to attribute queries when `ta` is provided [SC-61458](https://app.shortcut.com/tiledb-inc/story/61458) resolves #793 --- R/QueryCondition.R | 8 -------- inst/tinytest/test_querycondition.R | 26 +++++++++++++++++++++++--- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/R/QueryCondition.R b/R/QueryCondition.R index 31c3e3d604..2f89d5e3fd 100644 --- a/R/QueryCondition.R +++ b/R/QueryCondition.R @@ -163,10 +163,6 @@ parse_query_condition <- function(expr, ta = NULL, debug = FALSE, strict = TRUE, .errorFunction("No attribute '", attr, "' present.", call. = FALSE) return(NULL) } - if (ta@sil$status[ind] != 2) { - .errorFunction("Argument '", attr, "' is not an attribute.", call. = FALSE) - return(NULL) - } ind } .getType <- function(x, tp, use_int64 = FALSE) { @@ -259,10 +255,6 @@ parse_query_condition <- function(expr, ta = NULL, debug = FALSE, strict = TRUE, .errorFunction("No attribute '", attr, "' present.", call. = FALSE) return(NULL) } - if (ta@sil$status[ind] != 2) { - .errorFunction("Argument '", attr, "' is not an attribute.", call. = FALSE) - return(NULL) - } dtype <- ta@sil$types[ind] is_enum <- ta@sil$enum[ind] } diff --git a/inst/tinytest/test_querycondition.R b/inst/tinytest/test_querycondition.R index 39442a5987..c1d2f38eb9 100644 --- a/inst/tinytest/test_querycondition.R +++ b/inst/tinytest/test_querycondition.R @@ -11,8 +11,7 @@ if (Sys.getenv("CI") != "") set_allocation_size_preference(1024*1024*5) ctx <- tiledb_ctx(limitTileDBCores()) ## simple data.frame to test against -D <- data.frame(a=1:20, - b=seq(101,120)+0.5) +D <- data.frame(a = 1:20, b = seq(101, 120) + 0.5) uri <- tempfile() fromDataFrame(D, uri, sparse=TRUE) arr <- tiledb_array(uri) @@ -201,7 +200,28 @@ if (tiledb_version(TRUE) >= "2.17.0") { expect_true(all(res$body_mass_g > 3500)) } -unlink(uri, recursive=TRUE) +unlink(uri, recursive = TRUE) + +# Check that query conditions works on dimensions +uri <- tempfile() +fromDataFrame(infert, uri, col_index = "education", sparse = TRUE) +arr <- tiledb_array(uri) +qc <- parse_query_condition(education == "0-5yrs", ta = arr) +res <- tiledb_array(uri, query_condition = qc, return_as = "data.frame")[] +expect_equal(nrow(res), sum(infert$education == "0-5yrs")) +expect_identical(unique(res$education), "0-5yrs") + +if (tiledb_version(TRUE) >= "2.17.0") { + qc2 <- parse_query_condition( + education %in% c("0-5yrs", "12+ yrs"), + ta = arr + ) + res <- tiledb_array(uri, query_condition = qc2, return_as = "data.frame")[] + expect_equal(nrow(res), sum(infert$education %in% c("0-5yrs", "12+ yrs"))) + expect_true(all(res$education %in% c("0-5yrs", "12+ yrs"))) +} + +unlink(uri, recursive = TRUE) ## (some) r-universe builds are/were breaking here if (Sys.getenv("MY_UNIVERSE", "") != "") exit_file("Skip remainder at r-universe")