Skip to content

Commit a6b7b23

Browse files
authored
Fix bug where we did not set compression filters when creating TileDB Array's in C++ (#436)
1 parent 4a1408c commit a6b7b23

File tree

4 files changed

+32
-23
lines changed

4 files changed

+32
-23
lines changed

src/include/detail/linalg/tdb_io.h

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,10 @@ void create_empty_for_matrix(
128128
size_t cols,
129129
size_t row_extent,
130130
size_t col_extent,
131-
std::optional<tiledb_filter_type_t> filter = std::nullopt) {
131+
tiledb_filter_type_t filter) {
132+
tiledb::FilterList filter_list(ctx);
133+
filter_list.add_filter({ctx, filter});
134+
132135
tiledb::Domain domain(ctx);
133136
domain
134137
.add_dimensions(tiledb::Dimension::create<int>(
@@ -137,18 +140,13 @@ void create_empty_for_matrix(
137140
ctx, "cols", {{0, std::max(0, (int)cols - 1)}}, col_extent));
138141

139142
tiledb::ArraySchema schema(ctx, TILEDB_DENSE);
140-
141143
auto order = std::is_same_v<LayoutPolicy, stdx::layout_right> ?
142144
TILEDB_ROW_MAJOR :
143145
TILEDB_COL_MAJOR;
144146
schema.set_domain(domain).set_order({{order, order}});
145-
schema.add_attribute(tiledb::Attribute::create<T>(ctx, "values"));
146-
147-
if (filter) {
148-
tiledb::FilterList fl(ctx);
149-
fl.add_filter(tiledb::Filter(ctx, *filter));
150-
schema.set_coords_filter_list(fl);
151-
}
147+
schema.add_attribute(
148+
tiledb::Attribute::create<T>(ctx, "values", filter_list));
149+
schema.set_coords_filter_list(filter_list);
152150

153151
tiledb::Array::create(uri, schema);
154152
}
@@ -161,7 +159,7 @@ void create_matrix(
161159
const tiledb::Context& ctx,
162160
const Matrix<T, LayoutPolicy, I>& A,
163161
const std::string& uri,
164-
std::optional<tiledb_filter_type_t> filter = std::nullopt) {
162+
tiledb_filter_type_t filter) {
165163
// @todo: make this a parameter
166164
size_t num_parts = 10;
167165

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

203201
if (create) {
204-
create_matrix<T, LayoutPolicy, I>(ctx, A, uri);
202+
create_matrix<T, LayoutPolicy, I>(ctx, A, uri, TILEDB_FILTER_NONE);
205203
}
206204

207205
if (A.num_rows() == 0 || A.num_cols() == 0) {
@@ -252,17 +250,20 @@ void create_empty_for_vector(
252250
const tiledb::Context& ctx,
253251
const std::string& uri,
254252
size_t rows,
255-
size_t row_extent,
256-
std::optional<tiledb_filter_type_t> filter = std::nullopt) {
253+
int32_t row_extent,
254+
tiledb_filter_type_t filter) {
255+
tiledb::FilterList filter_list(ctx);
256+
filter_list.add_filter({ctx, filter});
257+
257258
tiledb::Domain domain(ctx);
258-
domain.add_dimensions(tiledb::Dimension::create<int>(
259+
domain.add_dimensions(tiledb::Dimension::create<int32_t>(
259260
ctx, "rows", {{0, std::max(0, (int)rows - 1)}}, row_extent));
260261

261-
// The array will be dense.
262262
tiledb::ArraySchema schema(ctx, TILEDB_DENSE);
263263
schema.set_domain(domain).set_order({{TILEDB_COL_MAJOR, TILEDB_COL_MAJOR}});
264-
265-
schema.add_attribute(tiledb::Attribute::create<feature_type>(ctx, "values"));
264+
schema.add_attribute(
265+
tiledb::Attribute::create<feature_type>(ctx, "values", filter_list));
266+
schema.set_coords_filter_list(filter_list);
266267

267268
tiledb::Array::create(uri, schema);
268269
}
@@ -279,7 +280,7 @@ void create_vector(
279280
const tiledb::Context& ctx,
280281
const V& v,
281282
const std::string& uri,
282-
std::optional<tiledb_filter_type_t> filter = std::nullopt) {
283+
tiledb_filter_type_t filter) {
283284
using value_type = std::ranges::range_value_t<V>;
284285

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

315316
if (create) {
316-
create_vector(ctx, v, uri);
317+
create_vector(ctx, v, uri, TILEDB_FILTER_NONE);
317318
}
318319

319320
if (size(v) == 0) {

src/include/test/unit_api_feature_vector_array.cc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,13 @@ TEST_CASE("load empty matrix", "[api][index]") {
541541
}
542542

543543
create_empty_for_matrix<float, stdx::layout_left>(
544-
ctx, tmp_matrix_uri, dimension, domain, dimension, tile_extent);
544+
ctx,
545+
tmp_matrix_uri,
546+
dimension,
547+
domain,
548+
dimension,
549+
tile_extent,
550+
TILEDB_FILTER_NONE);
545551

546552
auto X = FeatureVectorArray(ctx, tmp_matrix_uri);
547553
}

src/include/test/unit_tdb_matrix.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,8 @@ TEST_CASE("empty matrix", "[tdb_matrix]") {
286286
matrix_dimension,
287287
matrix_domain,
288288
matrix_dimension,
289-
tile_extent);
289+
tile_extent,
290+
TILEDB_FILTER_NONE);
290291

291292
{
292293
// No rows and no cols.

src/include/test/unit_tdb_matrix_with_ids.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,9 +260,10 @@ TEST_CASE("empty matrix", "[tdb_matrix_with_ids]") {
260260
matrix_dimension,
261261
matrix_domain,
262262
matrix_dimension,
263-
tile_extent);
263+
tile_extent,
264+
TILEDB_FILTER_NONE);
264265
create_empty_for_vector<uint64_t>(
265-
ctx, tmp_ids_uri, matrix_domain, tile_extent);
266+
ctx, tmp_ids_uri, matrix_domain, tile_extent, TILEDB_FILTER_NONE);
266267

267268
{
268269
// Empty.

0 commit comments

Comments
 (0)