Skip to content

Commit

Permalink
Fix bug where we did not set compression filters when creating TileDB…
Browse files Browse the repository at this point in the history
… Array's in C++ (#436)
  • Loading branch information
jparismorgan authored and cainamisir committed Jul 23, 2024
1 parent 53410b6 commit b57ae8d
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 23 deletions.
39 changes: 20 additions & 19 deletions src/include/detail/linalg/tdb_io.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,10 @@ void create_empty_for_matrix(
size_t cols,
size_t row_extent,
size_t col_extent,
std::optional<tiledb_filter_type_t> filter = std::nullopt) {
tiledb_filter_type_t filter) {
tiledb::FilterList filter_list(ctx);
filter_list.add_filter({ctx, filter});

tiledb::Domain domain(ctx);
domain
.add_dimensions(tiledb::Dimension::create<int>(
Expand All @@ -137,18 +140,13 @@ void create_empty_for_matrix(
ctx, "cols", {{0, std::max(0, (int)cols - 1)}}, col_extent));

tiledb::ArraySchema schema(ctx, TILEDB_DENSE);

auto order = std::is_same_v<LayoutPolicy, stdx::layout_right> ?
TILEDB_ROW_MAJOR :
TILEDB_COL_MAJOR;
schema.set_domain(domain).set_order({{order, order}});
schema.add_attribute(tiledb::Attribute::create<T>(ctx, "values"));

if (filter) {
tiledb::FilterList fl(ctx);
fl.add_filter(tiledb::Filter(ctx, *filter));
schema.set_coords_filter_list(fl);
}
schema.add_attribute(
tiledb::Attribute::create<T>(ctx, "values", filter_list));
schema.set_coords_filter_list(filter_list);

tiledb::Array::create(uri, schema);
}
Expand All @@ -161,7 +159,7 @@ void create_matrix(
const tiledb::Context& ctx,
const Matrix<T, LayoutPolicy, I>& A,
const std::string& uri,
std::optional<tiledb_filter_type_t> filter = std::nullopt) {
tiledb_filter_type_t filter) {
// @todo: make this a parameter
size_t num_parts = 10;

Expand Down Expand Up @@ -201,7 +199,7 @@ void write_matrix(
scoped_timer _{tdb_func__ + " " + std::string{uri}};

if (create) {
create_matrix<T, LayoutPolicy, I>(ctx, A, uri);
create_matrix<T, LayoutPolicy, I>(ctx, A, uri, TILEDB_FILTER_NONE);
}

if (A.num_rows() == 0 || A.num_cols() == 0) {
Expand Down Expand Up @@ -252,17 +250,20 @@ void create_empty_for_vector(
const tiledb::Context& ctx,
const std::string& uri,
size_t rows,
size_t row_extent,
std::optional<tiledb_filter_type_t> filter = std::nullopt) {
int32_t row_extent,
tiledb_filter_type_t filter) {
tiledb::FilterList filter_list(ctx);
filter_list.add_filter({ctx, filter});

tiledb::Domain domain(ctx);
domain.add_dimensions(tiledb::Dimension::create<int>(
domain.add_dimensions(tiledb::Dimension::create<int32_t>(
ctx, "rows", {{0, std::max(0, (int)rows - 1)}}, row_extent));

// The array will be dense.
tiledb::ArraySchema schema(ctx, TILEDB_DENSE);
schema.set_domain(domain).set_order({{TILEDB_COL_MAJOR, TILEDB_COL_MAJOR}});

schema.add_attribute(tiledb::Attribute::create<feature_type>(ctx, "values"));
schema.add_attribute(
tiledb::Attribute::create<feature_type>(ctx, "values", filter_list));
schema.set_coords_filter_list(filter_list);

tiledb::Array::create(uri, schema);
}
Expand All @@ -279,7 +280,7 @@ void create_vector(
const tiledb::Context& ctx,
const V& v,
const std::string& uri,
std::optional<tiledb_filter_type_t> filter = std::nullopt) {
tiledb_filter_type_t filter) {
using value_type = std::ranges::range_value_t<V>;

size_t num_parts = 10;
Expand Down Expand Up @@ -313,7 +314,7 @@ void write_vector(
using value_type = std::remove_const_t<std::ranges::range_value_t<V>>;

if (create) {
create_vector(ctx, v, uri);
create_vector(ctx, v, uri, TILEDB_FILTER_NONE);
}

if (size(v) == 0) {
Expand Down
8 changes: 7 additions & 1 deletion src/include/test/unit_api_feature_vector_array.cc
Original file line number Diff line number Diff line change
Expand Up @@ -541,7 +541,13 @@ TEST_CASE("load empty matrix", "[api][index]") {
}

create_empty_for_matrix<float, stdx::layout_left>(
ctx, tmp_matrix_uri, dimension, domain, dimension, tile_extent);
ctx,
tmp_matrix_uri,
dimension,
domain,
dimension,
tile_extent,
TILEDB_FILTER_NONE);

auto X = FeatureVectorArray(ctx, tmp_matrix_uri);
}
Expand Down
3 changes: 2 additions & 1 deletion src/include/test/unit_tdb_matrix.cc
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,8 @@ TEST_CASE("empty matrix", "[tdb_matrix]") {
matrix_dimension,
matrix_domain,
matrix_dimension,
tile_extent);
tile_extent,
TILEDB_FILTER_NONE);

{
// No rows and no cols.
Expand Down
5 changes: 3 additions & 2 deletions src/include/test/unit_tdb_matrix_with_ids.cc
Original file line number Diff line number Diff line change
Expand Up @@ -260,9 +260,10 @@ TEST_CASE("empty matrix", "[tdb_matrix_with_ids]") {
matrix_dimension,
matrix_domain,
matrix_dimension,
tile_extent);
tile_extent,
TILEDB_FILTER_NONE);
create_empty_for_vector<uint64_t>(
ctx, tmp_ids_uri, matrix_domain, tile_extent);
ctx, tmp_ids_uri, matrix_domain, tile_extent, TILEDB_FILTER_NONE);

{
// Empty.
Expand Down

0 comments on commit b57ae8d

Please sign in to comment.