Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expose tiledb_array_upgrade_version #675

Merged
merged 2 commits into from Mar 18, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions NAMESPACE
Expand Up @@ -114,6 +114,7 @@ export(tiledb_array_schema_set_enumeration_empty)
export(tiledb_array_schema_set_offsets_filter_list)
export(tiledb_array_schema_set_validity_filter_list)
export(tiledb_array_schema_version)
export(tiledb_array_upgrade_version)
export(tiledb_arrow_array_del)
export(tiledb_arrow_array_ptr)
export(tiledb_arrow_schema_del)
Expand Down
17 changes: 16 additions & 1 deletion R/Array.R
@@ -1,6 +1,6 @@
# MIT License
#
# Copyright (c) 2017-2023 TileDB Inc.
# Copyright (c) 2017-2024 TileDB Inc.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
Expand Down Expand Up @@ -211,3 +211,18 @@ tiledb_array_apply_aggregate <- function(array, attrname,

libtiledb_query_apply_aggregate(query@ptr, attrname, operation, nullable)
}

##' Upgrade an Array to the current TileDB Array Schema Format
##'
##' @param array A TileDB Array object
##' @param config A TileDB Configuration (optional, default NULL)
##' @param ctx A tiledb_ctx object (optional)
##' @return Nothing is returned as the function is invoked for its side effect
##' @export
tiledb_array_upgrade_version <- function(array, config = NULL, ctx = tiledb_get_context()) {
stopifnot("The 'array' argument must be a TileDB Array object" = is(array, "tiledb_array"),
"The 'config' argument must be NULL or a TileDB Config" =
is.null(config) || is(config, "tiledb_config"))
libtiledb_array_upgrade_version(ctx@ptr, array@ptr, array@uri,
if (is.null(config)) NULL else config@ptr)
}
4 changes: 4 additions & 0 deletions R/RcppExports.R
Expand Up @@ -630,6 +630,10 @@ libtiledb_array_has_enumeration_vector <- function(ctx, array) {
.Call(`_tiledb_libtiledb_array_has_enumeration_vector`, ctx, array)
}

libtiledb_array_upgrade_version <- function(ctx, array, uri, cfg = NULL) {
invisible(.Call(`_tiledb_libtiledb_array_upgrade_version`, ctx, array, uri, cfg))
}

libtiledb_query <- function(ctx, array, type) {
.Call(`_tiledb_libtiledb_query`, ctx, array, type)
}
Expand Down
16 changes: 16 additions & 0 deletions inst/tinytest/test_tiledbarray.R
Expand Up @@ -1580,3 +1580,19 @@ res <- arr[]
expect_true(tiledb_array_is_open(arr))
arr <- tiledb_array_close(arr)
expect_false(tiledb_array_is_open(arr))

## tiledb_array_upgrade_version, re-using an old array as an upgrade candidate
tdir <- tempfile()
tgzfile <- system.file("sampledata", "legacy_write.tar.gz", package="tiledb")
untar(tarfile = tgzfile, exdir = tdir)
uri <- file.path(tdir, "legacy_write", "penguins")
oldarr <- tiledb_array(uri)
oldsch <- tiledb::schema(oldarr) # explicit namespace to not get arrow::schema
oldver <- tiledb_array_schema_version(oldsch)
expect_silent(tiledb_array_upgrade_version(oldarr))
rc <- tiledb_array_close(oldarr)
newarr <- tiledb_array(uri)
newsch <- tiledb::schema(newarr) # explicit namespace to not get arrow::schema
newver <- tiledb_array_schema_version(newsch)
rc <- tiledb_array_close(newarr)
expect_true(newver > oldver)
21 changes: 21 additions & 0 deletions man/tiledb_array_upgrade_version.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions src/RcppExports.cpp
Expand Up @@ -1847,6 +1847,19 @@ BEGIN_RCPP
return rcpp_result_gen;
END_RCPP
}
// libtiledb_array_upgrade_version
void libtiledb_array_upgrade_version(XPtr<tiledb::Context> ctx, XPtr<tiledb::Array> array, std::string& uri, Rcpp::Nullable<XPtr<tiledb::Config>> cfg);
RcppExport SEXP _tiledb_libtiledb_array_upgrade_version(SEXP ctxSEXP, SEXP arraySEXP, SEXP uriSEXP, SEXP cfgSEXP) {
BEGIN_RCPP
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< XPtr<tiledb::Context> >::type ctx(ctxSEXP);
Rcpp::traits::input_parameter< XPtr<tiledb::Array> >::type array(arraySEXP);
Rcpp::traits::input_parameter< std::string& >::type uri(uriSEXP);
Rcpp::traits::input_parameter< Rcpp::Nullable<XPtr<tiledb::Config>> >::type cfg(cfgSEXP);
libtiledb_array_upgrade_version(ctx, array, uri, cfg);
return R_NilValue;
END_RCPP
}
// libtiledb_query
XPtr<tiledb::Query> libtiledb_query(XPtr<tiledb::Context> ctx, XPtr<tiledb::Array> array, std::string type);
RcppExport SEXP _tiledb_libtiledb_query(SEXP ctxSEXP, SEXP arraySEXP, SEXP typeSEXP) {
Expand Down Expand Up @@ -3737,6 +3750,7 @@ static const R_CallMethodDef CallEntries[] = {
{"_tiledb_libtiledb_array_has_enumeration", (DL_FUNC) &_tiledb_libtiledb_array_has_enumeration, 3},
{"_tiledb_libtiledb_array_get_enumeration", (DL_FUNC) &_tiledb_libtiledb_array_get_enumeration, 3},
{"_tiledb_libtiledb_array_has_enumeration_vector", (DL_FUNC) &_tiledb_libtiledb_array_has_enumeration_vector, 2},
{"_tiledb_libtiledb_array_upgrade_version", (DL_FUNC) &_tiledb_libtiledb_array_upgrade_version, 4},
{"_tiledb_libtiledb_query", (DL_FUNC) &_tiledb_libtiledb_query, 3},
{"_tiledb_libtiledb_query_type", (DL_FUNC) &_tiledb_libtiledb_query_type, 1},
{"_tiledb_libtiledb_query_set_layout", (DL_FUNC) &_tiledb_libtiledb_query_set_layout, 2},
Expand Down
15 changes: 15 additions & 0 deletions src/libtiledb.cpp
Expand Up @@ -2818,6 +2818,21 @@ Rcpp::LogicalVector libtiledb_array_has_enumeration_vector(XPtr<tiledb::Context>
return has_enum;
}

// [[Rcpp::export]]
void libtiledb_array_upgrade_version(XPtr<tiledb::Context> ctx,
XPtr<tiledb::Array> array,
std::string& uri,
Rcpp::Nullable<XPtr<tiledb::Config>> cfg = R_NilValue) {
check_xptr_tag<tiledb::Context>(ctx);
check_xptr_tag<tiledb::Array>(array);
if (cfg.isNull()) {
array->upgrade_version(*ctx.get(), uri);
} else {
XPtr<tiledb::Config> config(cfg);
array->upgrade_version(*ctx.get(), uri, config.get());
}
}


/**
* Query
Expand Down