diff --git a/include/tiledb/api/c_api/current_domain/current_domain_api_enum.h b/include/tiledb/api/c_api/current_domain/current_domain_api_enum.h new file mode 100644 index 0000000..1d3154e --- /dev/null +++ b/include/tiledb/api/c_api/current_domain/current_domain_api_enum.h @@ -0,0 +1,34 @@ +/* + * The MIT License + * + * @copyright Copyright (c) 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 + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +/** + * NOTE: The values of these enums are serialized to the array schema and/or + * fragment metadata. Therefore, the values below should never change, + * otherwise backwards compatibility breaks. + */ + +// clang-format off +#ifdef TILEDB_CURRENT_DOMAIN_TYPE_ENUM + TILEDB_CURRENT_DOMAIN_TYPE_ENUM(NDRECTANGLE) = 0, +#endif diff --git a/include/tiledb/api/c_api/current_domain/current_domain_api_external_experimental.h b/include/tiledb/api/c_api/current_domain/current_domain_api_external_experimental.h new file mode 100644 index 0000000..cc3db79 --- /dev/null +++ b/include/tiledb/api/c_api/current_domain/current_domain_api_external_experimental.h @@ -0,0 +1,185 @@ +/** + * @file + * tiledb/api/c_api/current_domain/current_domain_api_external_experimental.h + * + * @section LICENSE + * + * The MIT License + * + * @copyright Copyright (c) 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 + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @section DESCRIPTION + * + * This file declares the current_domain experimental C API for TileDB. + */ + +#ifndef TILEDB_CAPI_CURRENT_DOMAIN_API_EXTERNAL_EXPERIMENTAL_H +#define TILEDB_CAPI_CURRENT_DOMAIN_API_EXTERNAL_EXPERIMENTAL_H + +#include "tiledb/api/c_api/api_external_common.h" +#include "tiledb/api/c_api/context/context_api_external.h" +#include "tiledb/api/c_api/ndrectangle/ndrectangle_api_external_experimental.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** The current domain type */ +typedef enum { +#define TILEDB_CURRENT_DOMAIN_TYPE_ENUM(id) TILEDB_##id +#include "tiledb/api/c_api/current_domain/current_domain_api_enum.h" +#undef TILEDB_CURRENT_DOMAIN_TYPE_ENUM +} tiledb_current_domain_type_t; + +typedef struct tiledb_current_domain_handle_t tiledb_current_domain_t; + +/** + * Create a current domain object + * + * **Example:** + * + * @code{.c} + * tiledb_current_domain_t *current_domain; + * tiledb_current_domain_create(ctx, ¤t_domain); + * tiledb_current_domain_free(¤t_domain); + * @endcode + * + * @param ctx The TileDB context + * @param current_domain The current domain to be allocated + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT capi_return_t tiledb_current_domain_create( + tiledb_ctx_t* ctx, + tiledb_current_domain_t** current_domain) TILEDB_NOEXCEPT; + +/** + * Free the resources associated with a current domain object + * + * **Example:** + * + * @code{.c} + * tiledb_current_domain_t *current_domain; + * tiledb_current_domain_create(ctx, ¤t_domain); + * tiledb_current_domain_free(¤t_domain); + * @endcode + * + * @param current_domain The current domain to be freed + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT capi_return_t tiledb_current_domain_free( + tiledb_current_domain_t** current_domain) TILEDB_NOEXCEPT; + +/** + * Set a N-dimensional rectangle representation on a current domain. + * Error if the current domain passed is not empty. + * + * **Example:** + * + * @code{.c} + * tiledb_current_domain_t *current_domain; + * tiledb_current_domain_create(ctx, ¤t_domain); + * tiledb_ndrectangle_t *ndr; + * tiledb_ndrectangle_alloc(ctx, domain, &ndr); + * + * tiledb_range_t range; + * range.min = &min; + * range.min_size = sizeof(min); + * range.max = &max; + * range.max_size = sizeof(max); + * tiledb_ndrectangle_set_range_for_name(ctx, ndr, "dim", &range); + * + * tiledb_current_domain_set_ndrectangle(current_domain, ndr); + * + * tiledb_ndrectangle_free(&ndr); + * tiledb_current_domain_free(¤t_domain); + * @endcode + * + * @param current_domain The current domain to modify + * @param ndr The N-dimensional rectangle to be set + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT capi_return_t tiledb_current_domain_set_ndrectangle( + tiledb_current_domain_t* current_domain, + tiledb_ndrectangle_t* ndr) TILEDB_NOEXCEPT; + +/** + * Get the N-dimensional rectangle associated with the current domain object. + * Error if the current domain is empty or a different representation is set. + * + * It is the responsability of the caller to free the resources associated + * with the ndrectangle when the handle isn't needed anymore. + * + * **Example:** + * + * @code{.c} + * tiledb_ndrectangle_t *ndr; + * tiledb_current_domain_get_ndrectangle(current_domain, &ndr); + * @endcode + * + * @param current_domain The current domain to query + * @param ndr The N-dimensional rectangle of the current domain + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT capi_return_t tiledb_current_domain_get_ndrectangle( + tiledb_current_domain_t* current_domain, + tiledb_ndrectangle_t** ndr) TILEDB_NOEXCEPT; + +/** + * Query if the current domain object is empty or not. + * + * **Example:** + * + * @code{.c} + * uint32_t empty = 0; + * tiledb_current_domain_get_is_empty(current_domain, &empty); + * @endcode + * + * @param current_domain The current domain to query + * @param is_empty True if nothing is set on the current domain + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT capi_return_t tiledb_current_domain_get_is_empty( + tiledb_current_domain_t* current_domain, + uint32_t* is_empty) TILEDB_NOEXCEPT; + +/** + * Query the type of current domain set on the object + * + * **Example:** + * + * @code{.c} + * tiledb_current_domain_type_t type; + * tiledb_current_domain_get_type(current_domain, &type); + * @endcode + * + * @param current_domain The current domain to query + * @param type The type of representation set on the current domain + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT capi_return_t tiledb_current_domain_get_type( + tiledb_current_domain_t* current_domain, + tiledb_current_domain_type_t* type) TILEDB_NOEXCEPT; + +#ifdef __cplusplus +} +#endif + +#endif // TILEDB_CAPI_CURRENT_DOMAIN_API_EXTERNAL_EXPERIMENTAL_H diff --git a/include/tiledb/api/c_api/ndrectangle/ndrectangle_api_external_experimental.h b/include/tiledb/api/c_api/ndrectangle/ndrectangle_api_external_experimental.h new file mode 100644 index 0000000..e0f80ea --- /dev/null +++ b/include/tiledb/api/c_api/ndrectangle/ndrectangle_api_external_experimental.h @@ -0,0 +1,205 @@ +/** + * @file + * tiledb/api/c_api/ndrectangle/ndrectangle_api_external_experimental.h + * + * @section LICENSE + * + * The MIT License + * + * @copyright Copyright (c) 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 + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @section DESCRIPTION + * + * This file declares the NDRectangle experimental C API for TileDB. + */ + +#ifndef TILEDB_CAPI_NDRECTANGLE_API_EXTERNAL_EXPERIMENTAL_H +#define TILEDB_CAPI_NDRECTANGLE_API_EXTERNAL_EXPERIMENTAL_H + +#include "tiledb/api/c_api/api_external_common.h" +#include "tiledb/api/c_api/context/context_api_external.h" +#include "tiledb/api/c_api/domain/domain_api_external.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** C API struct to specify the limits of a dimension for an ND rectangle. */ +typedef struct { + const void* min; + uint64_t min_size; + const void* max; + uint64_t max_size; +} tiledb_range_t; + +typedef struct tiledb_ndrectangle_handle_t tiledb_ndrectangle_t; + +/** + * Allocate an N-dimensional rectangle given a TileDB array schema domain. + * The resulted rectangle will maintain the same number of dimensions as the + * array schema domain. + * + * **Example:** + * + * @code{.c} + * tiledb_ndrectangle_t *ndr; + * tiledb_ndrectangle_alloc(ctx, domain, &ndr); + * tiledb_ndrectangle_free(&ndr); + * @endcode + * + * @param ctx The TileDB context + * @param domain The TileDB array schema domain + * @param ndr The n-dimensional rectangle to be allocated + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT capi_return_t tiledb_ndrectangle_alloc( + tiledb_ctx_t* ctx, + tiledb_domain_t* domain, + tiledb_ndrectangle_t** ndr) TILEDB_NOEXCEPT; + +/** + * Free the resources associated with the N-dimensional rectangle arg + * + * **Example:** + * + * @code{.c} + * tiledb_ndrectangle_t *ndr; + * tiledb_ndrectangle_alloc(ctx, domain, &ndr); + * tiledb_ndrectangle_free(&ndr); + * @endcode + * + * @param ndr The n-dimensional rectangle to be freed + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT capi_return_t tiledb_ndrectangle_free(tiledb_ndrectangle_t** ndr) + TILEDB_NOEXCEPT; + +/** + * Get the range set on an N-dimensional rectangle for a dimension name + * + * The pointers within the returned range struct point to resources tied to + * the lifetime of the `tiledb_ndrectangle_t` object, it is not the + * responsibility of the caller to free those resources, attempting + * to do so results in undefined behavior. + * + * **Example:** + * + * @code{.c} + * tiledb_range_t range; + * tiledb_ndrectangle_get_range_from_name(ctx, ndr, "dim", &range); + * @endcode + * + * @param ctx The TileDB context + * @param ndr The n-dimensional rectangle to be queried + * @param name The name of the dimension for which range should be returned + * @param range The range returned as output argument + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT capi_return_t tiledb_ndrectangle_get_range_from_name( + tiledb_ctx_t* ctx, + tiledb_ndrectangle_t* ndr, + const char* name, + tiledb_range_t* range) TILEDB_NOEXCEPT; + +/** + * Get the range set on an N-dimensional rectangle for a dimension index. + * + * The pointers within the returned range struct point to resources tied to + * the lifetime of the `tiledb_ndrectangle_t` object, it is not the + * responsibility of the caller to free those resources, attempting + * to do so results in undefined behavior. + * + * **Example:** + * + * @code{.c} + * tiledb_range_t range; + * tiledb_ndrectangle_get_range_from_name(ctx, ndr, 1, &range); + * @endcode + * + * @param ctx The TileDB context + * @param ndr The n-dimensional rectangle to be queried + * @param idx The index of the dimension for which range should be returned + * @param range The range returned as output argument + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT capi_return_t tiledb_ndrectangle_get_range( + tiledb_ctx_t* ctx, + tiledb_ndrectangle_t* ndr, + uint32_t idx, + tiledb_range_t* range) TILEDB_NOEXCEPT; + +/** + * Set the range on an N-dimensional rectangle for a dimension name + * + * **Example:** + * + * @code{.c} + * tiledb_range_t range; + * range.min = &min; + * range.min_size = sizeof(min); + * range.max = &max; + * range.max_size = sizeof(max); + * tiledb_ndrectangle_set_range_for_name(ctx, ndr, "dim", &range); + * @endcode + * + * @param ctx The TileDB context + * @param ndr The n-dimensional rectangle to be queried + * @param name The name of the dimension for which range should be set + * @param range The range to be set on the ND rectangle + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT capi_return_t tiledb_ndrectangle_set_range_for_name( + tiledb_ctx_t* ctx, + tiledb_ndrectangle_t* ndr, + const char* name, + tiledb_range_t* range) TILEDB_NOEXCEPT; + +/** + * Set the range on an N-dimensional rectangle for dimension at idx. + * + * **Example:** + * + * @code{.c} + * tiledb_range_t range; + * range.min = &min; + * range.min_size = sizeof(min); + * range.max = &max; + * range.max_size = sizeof(max); + * tiledb_ndrectangle_set_range(ctx, ndr, 1, &range); + * @endcode + * + * @param ctx The TileDB context + * @param ndr The n-dimensional rectangle to be queried + * @param idx The index of the dimension for which range should be set + * @param range The range to be set on the ND rectangle + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT capi_return_t tiledb_ndrectangle_set_range( + tiledb_ctx_t* ctx, + tiledb_ndrectangle_t* ndr, + uint32_t idx, + tiledb_range_t* range) TILEDB_NOEXCEPT; + +#ifdef __cplusplus +} +#endif + +#endif // TILEDB_CAPI_NDRECTANGLE_API_EXTERNAL_EXPERIMENTAL_H diff --git a/include/tiledb/array_schema_evolution.h b/include/tiledb/array_schema_evolution.h index 31cfa55..4c5fb88 100644 --- a/include/tiledb/array_schema_evolution.h +++ b/include/tiledb/array_schema_evolution.h @@ -36,6 +36,7 @@ #include "array_schema.h" #include "attribute.h" #include "context.h" +#include "current_domain.h" #include "deleter.h" #include "domain.h" #include "object.h" @@ -216,6 +217,21 @@ class ArraySchemaEvolution { return *this; } + /** + * Expands the current domain during array schema evolution. + * TileDB will enforce that the new current domain is expanding + * on the current one and not contracting during `tiledb_array_evolve`. + * + * @param expanded_domain The current domain we want to expand the schema to. + */ + ArraySchemaEvolution& expand_current_domain( + const CurrentDomain& expanded_domain) { + auto& ctx = ctx_.get(); + ctx.handle_error(tiledb_array_schema_evolution_expand_current_domain( + ctx.ptr().get(), evolution_.get(), expanded_domain.ptr().get())); + return *this; + } + /** * Sets timestamp range. * diff --git a/include/tiledb/array_schema_experimental.h b/include/tiledb/array_schema_experimental.h index 4f6a746..8da27be 100644 --- a/include/tiledb/array_schema_experimental.h +++ b/include/tiledb/array_schema_experimental.h @@ -34,6 +34,7 @@ #define TILEDB_CPP_API_ARRAY_SCHEMA_EXPERIMENTAL_H #include "array_schema.h" +#include "current_domain.h" #include "dimension_label_experimental.h" #include "enumeration_experimental.h" #include "filter_list.h" @@ -156,6 +157,38 @@ class ArraySchemaExperimental { return DimensionLabel(ctx, dim_label); } + /** + * Returns a copy of the schema's array currentDomain. To change the + * currentDomain, use `set_current_domain()`. + * + * @param ctx The TileDB context. + * @param array_schema The array schema. + * @return Copy of the schema's currentDomain. + */ + static CurrentDomain current_domain( + const Context& ctx, const ArraySchema& array_schema) { + tiledb_current_domain_t* current_domain; + ctx.handle_error(tiledb_array_schema_get_current_domain( + ctx.ptr().get(), array_schema.ptr().get(), ¤t_domain)); + + return CurrentDomain(ctx, current_domain); + } + + /** + * Sets the currentDomain. + * + * @param ctx The TileDB context. + * @param array_schema The array schema. + * @param current_domain The currentDomain to use. + */ + static void set_current_domain( + const Context& ctx, + const ArraySchema& array_schema, + const CurrentDomain& current_domain) { + ctx.handle_error(tiledb_array_schema_set_current_domain( + ctx.ptr().get(), array_schema.ptr().get(), current_domain.ptr().get())); + } + /** * Add an enumeration to the array schema. * diff --git a/include/tiledb/current_domain.h b/include/tiledb/current_domain.h new file mode 100644 index 0000000..f8456dc --- /dev/null +++ b/include/tiledb/current_domain.h @@ -0,0 +1,178 @@ +/** + * @file current_domain.h + * + * @section LICENSE + * + * The MIT License + * + * @copyright Copyright (c) 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 + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @section DESCRIPTION + * + * This file declares the C++ API for the TileDB current_domain object. + */ + +#ifndef TILEDB_CPP_API_CURRENT_DOMAIN_H +#define TILEDB_CPP_API_CURRENT_DOMAIN_H + +#include "context.h" +#include "core_interface.h" +#include "deleter.h" +#include "exception.h" +#include "ndrectangle.h" +#include "tiledb.h" +#include "tiledb_experimental.h" +#include "type.h" +#include "utils.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace tiledb { +class CurrentDomain { + public: + /* ********************************* */ + /* CONSTRUCTORS & DESTRUCTORS */ + /* ********************************* */ + + /** + * Creates a TileDB current_domain object. + * + * @param ctx TileDB context + * @param type The TileDB currentDomain type + */ + explicit CurrentDomain(const Context& ctx) + : ctx_(ctx) { + tiledb_current_domain_t* cd; + ctx.handle_error(tiledb_current_domain_create(ctx.ptr().get(), &cd)); + current_domain_ = std::shared_ptr(cd, deleter_); + } + + /** + * Creates a TileDB current_domain object. + * + * @param ctx TileDB context + * @param cd The TileDB currentDomain C api pointer + */ + CurrentDomain(const tiledb::Context& ctx, tiledb_current_domain_t* cd) + : ctx_(ctx) { + current_domain_ = std::shared_ptr(cd, deleter_); + } + + CurrentDomain(const CurrentDomain&) = default; + CurrentDomain(CurrentDomain&&) = default; + CurrentDomain& operator=(const CurrentDomain&) = default; + CurrentDomain& operator=(CurrentDomain&&) = default; + + /* ********************************* */ + /* API */ + /* ********************************* */ + + /** + * Returns a shared pointer to the C TileDB currentDomain object. + * + * @return The C API pointer + */ + std::shared_ptr ptr() const { + return current_domain_; + } + + /** + * Returns the currentDomain type. + * + * @return The currentDomain type. + */ + tiledb_current_domain_type_t type() const { + tiledb_current_domain_type_t type; + auto& ctx = ctx_.get(); + ctx.handle_error( + tiledb_current_domain_get_type(current_domain_.get(), &type)); + return type; + } + + /** + * Set a N-dimensional rectangle representation on a current domain. + * Error if the current domain passed is not empty. + * + * @param ndrect The N-dimensional rectangle to be used. + * @return Reference to this `currentDomain` instance. + */ + CurrentDomain& set_ndrectangle(const NDRectangle& ndrect) { + auto& ctx = ctx_.get(); + ctx.handle_error(tiledb_current_domain_set_ndrectangle( + current_domain_.get(), ndrect.ptr().get())); + + return *this; + } + + /** + * Get the N-dimensional rectangle associated with the current domain object, + * error if the current domain is empty or a different representation is set. + * + * @return The N-dimensional rectangle of the current domain + */ + NDRectangle ndrectangle() const { + tiledb_ndrectangle_t* nd; + auto& ctx = ctx_.get(); + ctx.handle_error( + tiledb_current_domain_get_ndrectangle(current_domain_.get(), &nd)); + return NDRectangle(ctx, nd); + } + + /** + * Check if the current_domain is empty + * + * @return True if the currentDomain is empty + */ + bool is_empty() const { + uint32_t ret; + auto& ctx = ctx_.get(); + ctx.handle_error( + tiledb_current_domain_get_is_empty(current_domain_.get(), &ret)); + return static_cast(ret); + } + + private: + /* ********************************* */ + /* PRIVATE ATTRIBUTES */ + /* ********************************* */ + + /** The TileDB context. */ + std::reference_wrapper ctx_; + + /** Pointer to the TileDB C current_domain object. */ + std::shared_ptr current_domain_; + + /** An auxiliary deleter. */ + impl::Deleter deleter_; +}; + +} // namespace tiledb + +#endif // TILEDB_CPP_API_CURRENT_DOMAIN_H diff --git a/include/tiledb/deleter.h b/include/tiledb/deleter.h index 90d466c..0629c33 100644 --- a/include/tiledb/deleter.h +++ b/include/tiledb/deleter.h @@ -117,6 +117,14 @@ class Deleter { tiledb_domain_free(&p); } + void operator()(tiledb_current_domain_t* p) const { + tiledb_current_domain_free(&p); + } + + void operator()(tiledb_ndrectangle_t* p) const { + tiledb_ndrectangle_free(&p); + } + void operator()(tiledb_enumeration_t* p) const { tiledb_enumeration_free(&p); } diff --git a/include/tiledb/ndrectangle.h b/include/tiledb/ndrectangle.h new file mode 100644 index 0000000..a39b9ec --- /dev/null +++ b/include/tiledb/ndrectangle.h @@ -0,0 +1,331 @@ +/** + * @file ndrectangle.h + * + * @section LICENSE + * + * The MIT License + * + * @copyright Copyright (c) 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 + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @section DESCRIPTION + * + * This file declares the C++ API for the TileDB NDRectangle. + */ + +#ifndef TILEDB_CPP_API_NDRECTANGLE_H +#define TILEDB_CPP_API_NDRECTANGLE_H + +#include "context.h" +#include "deleter.h" +#include "dimension.h" +#include "domain.h" +#include "tiledb.h" +#include "type.h" + +#include +#include +#include + +namespace tiledb { + +class NDRectangle { + public: + /* ********************************* */ + /* CONSTRUCTORS & DESTRUCTORS */ + /* ********************************* */ + + /** + * Constructor + * + * @param ctx The TileDB context + * @param domain The input Domain + */ + explicit NDRectangle(const tiledb::Context& ctx, const tiledb::Domain& domain) + : ctx_(ctx) { + tiledb_ndrectangle_t* capi_ndrect; + ctx.handle_error(tiledb_ndrectangle_alloc( + ctx.ptr().get(), domain.ptr().get(), &capi_ndrect)); + ndrect_ = std::shared_ptr(capi_ndrect, deleter_); + } + + /** + * Constructor + * + * @param ctx The TileDB context + * @param ndrect The NDRectangle C API pointer + * + * @note The object will manage the lifetime of tiledb_ndrectangle_t* + */ + NDRectangle(const tiledb::Context& ctx, tiledb_ndrectangle_t* ndrect) + : ctx_(ctx) { + ndrect_ = std::shared_ptr(ndrect, deleter_); + } + + NDRectangle(const NDRectangle&) = default; + NDRectangle(NDRectangle&&) = default; + NDRectangle& operator=(const NDRectangle&) = default; + NDRectangle& operator=(NDRectangle&&) = default; + + /* ********************************* */ + /* API */ + /* ********************************* */ + + /** + * Adds an 1D range along a dimension name, in the form (start, end). The + * datatype of the range must be the same as the dimension datatype. + * + * **Example:** + * + * @code{.cpp} + * // Set an 1D range on dimension 0, assuming the domain type is int64. + * int64_t start = 10; + * int64_t end = 20; + * ndrect.set_range(0, start, end); + * @endcode + * + * @tparam T The dimension datatype. Must be an integer or a floating point + * number. + * @param dim_name The name of the dimension to add the range to. + * @param start The range start to add. + * @param end The range end to add. + * @return Reference to this NDRectangle. + */ + template < + class T, + std::enable_if_t< + std::is_integral_v || std::is_floating_point_v, + bool> = true> + NDRectangle& set_range(const std::string& dim_name, T start, T end) { + auto& ctx = ctx_.get(); + + // Create the tiledb_range_t struct and fill it + tiledb_range_t range; + range.min = static_cast(&start); + range.min_size = sizeof(T); + range.max = static_cast(&end); + range.max_size = sizeof(T); + + // Pass the struct to tiledb_ndrectangle_set_range_for_name + ctx.handle_error(tiledb_ndrectangle_set_range_for_name( + ctx.ptr().get(), ndrect_.get(), dim_name.c_str(), &range)); + + return *this; + } + + /** + * Adds an 1D range along a dimension index, in the form (start, end). The + * datatype of the range must be the same as the dimension datatype. + * + * **Example:** + * + * @code{.cpp} + * // Set an 1D range on dimension 0, assuming the domain type is int64. + * int64_t start = 10; + * int64_t end = 20; + * ndrect.set_range(0, start, end); + * @endcode + * + * @tparam T The dimension datatype. Must be an integer or a floating point + * number. + * @param dim_idx The index of the dimension to add the range to. + * @param start The range start to add. + * @param end The range end to add. + * @return Reference to this NDRectangle. + */ + template < + class T, + std::enable_if_t< + std::is_integral_v || std::is_floating_point_v, + bool> = true> + NDRectangle& set_range(uint32_t dim_idx, T start, T end) { + auto& ctx = ctx_.get(); + // Create the tiledb_range_t struct and fill it + tiledb_range_t range; + range.min = static_cast(&start); + range.min_size = sizeof(T); + range.max = static_cast(&end); + range.max_size = sizeof(T); + + // Pass the struct to tiledb_ndrectangle_set_range + ctx.handle_error(tiledb_ndrectangle_set_range( + ctx.ptr().get(), ndrect_.get(), dim_idx, &range)); + + return *this; + } + + /** + * Adds a 1D string range along a dimension index, in the form (start, end). + * Applicable only to variable-sized dimensions + * + * @param dim_idx The index of the dimension to add the range to. + * @param start The range start to add. + * @param end The range end to add. + * @return Reference to this NDRectangle. + */ + NDRectangle& set_range( + uint32_t dim_idx, const std::string& start, const std::string& end) { + auto& ctx = ctx_.get(); + // Create the tiledb_range_t struct and fill it + tiledb_range_t range; + range.min = static_cast(start.c_str()); + range.min_size = start.size(); + range.max = static_cast(end.c_str()); + range.max_size = end.size(); + + // Pass the struct to tiledb_ndrectangle_set_range + ctx.handle_error(tiledb_ndrectangle_set_range( + ctx.ptr().get(), ndrect_.get(), dim_idx, &range)); + + return *this; + } + + /** + * Adds a 1D string range along a dimension index, in the form (start, end). + * Applicable only to variable-sized dimensions + * + * @param dim_name The name of the dimension to add the range to. + * @param start The range start to add. + * @param end The range end to add. + * @return Reference to this NDRectangle. + */ + NDRectangle& set_range( + const std::string& dim_name, + const std::string& start, + const std::string& end) { + auto& ctx = ctx_.get(); + // Create the tiledb_range_t struct and fill it + tiledb_range_t range; + range.min = static_cast(start.c_str()); + range.min_size = start.size(); + range.max = static_cast(end.c_str()); + range.max_size = end.size(); + + // Pass the struct to tiledb_ndrectangle_set_range_for_name + ctx.handle_error(tiledb_ndrectangle_set_range_for_name( + ctx.ptr().get(), ndrect_.get(), dim_name.c_str(), &range)); + + return *this; + } + + /** + * Retrieves a range for a given variable length string dimension index and + * range id. + * + * @param dim_idx The dimension index. + * @param range_idx The range index. + * @return A pair of the form (start, end). + */ + std::array range(unsigned dim_idx) { + auto& ctx = ctx_.get(); + tiledb_range_t range; + + ctx.handle_error(tiledb_ndrectangle_get_range( + ctx.ptr().get(), ndrect_.get(), dim_idx, &range)); + + std::string start_str(static_cast(range.min), range.min_size); + std::string end_str(static_cast(range.max), range.max_size); + + return {std::move(start_str), std::move(end_str)}; + } + + /** + * Retrieves a range for a given variable length string dimension index and + * range id. + * + * @param dim_name The dimension name. + * @param range_idx The range index. + * @return A pair of the form (start, end). + */ + std::array range(const std::string& dim_name) { + auto& ctx = ctx_.get(); + tiledb_range_t range; + ctx.handle_error(tiledb_ndrectangle_get_range_from_name( + ctx.ptr().get(), ndrect_.get(), dim_name.c_str(), &range)); + + std::string start_str(static_cast(range.min), range.min_size); + std::string end_str(static_cast(range.max), range.max_size); + + return {std::move(start_str), std::move(end_str)}; + } + + /** + * Retrieves a range for a given dimension name. The template datatype must be + * the same as that of the underlying array. + * + * @tparam T The dimension datatype. + * @param dim_name The dimension name. + * @return A duplex of the form (start, end). + */ + template + std::array range(const std::string& dim_name) { + auto& ctx = ctx_.get(); + tiledb_range_t range; + ctx.handle_error(tiledb_ndrectangle_get_range_from_name( + ctx.ptr().get(), ndrect_.get(), dim_name.c_str(), &range)); + + return {*(const T*)range.min, *(const T*)range.max}; + } + + /** + * Retrieves a range for a given dimension index. The template datatype must + * be the same as that of the underlying array. + * + * @tparam T The dimension datatype. + * @param dim_idx The dimension index. + * @return A duplex of the form (start, end). + */ + template + std::array range(unsigned dim_idx) { + auto& ctx = ctx_.get(); + tiledb_range_t range; + ctx.handle_error(tiledb_ndrectangle_get_range( + ctx.ptr().get(), ndrect_.get(), dim_idx, &range)); + + return {*(const T*)range.min, *(const T*)range.max}; + } + + /** + * Returns the C TileDB ndrect object. + * + * @return The C pointer to the NDRectangle object + */ + std::shared_ptr ptr() const { + return ndrect_; + } + + private: + /* ********************************* */ + /* PRIVATE ATTRIBUTES */ + /* ********************************* */ + + /** The TileDB context. */ + std::reference_wrapper ctx_; + + /** Pointer to the C TileDB domain object. */ + std::shared_ptr ndrect_; + + /** An auxiliary deleter. */ + impl::Deleter deleter_; +}; + +} // namespace tiledb + +#endif // TILEDB_CPP_API_NDRECTANGLE_H diff --git a/include/tiledb/tiledb.h b/include/tiledb/tiledb.h index 0b2ca9f..22ce715 100644 --- a/include/tiledb/tiledb.h +++ b/include/tiledb/tiledb.h @@ -2402,9 +2402,16 @@ TILEDB_EXPORT int32_t tiledb_array_set_open_timestamp_start( /** * Sets the ending timestamp to use when opening (and reopening) the array. - * This is an inclusive bound. The UINT64_MAX timestamp is a reserved timestamp - * that will be interpretted as the current timestamp when an array is opened. - * The default value is `UINT64_MAX`. + * This is an inclusive bound. The default value is `UINT64_MAX`. + * + * When opening the array for reads, this value will be used to determine the + * ending timestamp of fragments to load. A value of `UINT64_MAX` will be + * translated to the current timestamp at which the array is opened. + * + * When opening the array for writes, this value will be used to determine the + * timestamp to write new fragments. A value of `UINT64_MAX` will use the + * current timestamp at which the array is opened. A value of 0 will use the + * current timestamp at which the fragment is written. * * **Example:** * diff --git a/include/tiledb/tiledb_experimental b/include/tiledb/tiledb_experimental index 63f208f..5ffb41d 100644 --- a/include/tiledb/tiledb_experimental +++ b/include/tiledb/tiledb_experimental @@ -45,5 +45,7 @@ #include "query_experimental.h" #include "subarray_experimental.h" #include "vfs_experimental.h" +#include "ndrectangle.h" +#include "current_domain.h" #endif // TILEDB_EXPERIMENTAL_CPP_H diff --git a/include/tiledb/tiledb_experimental.h b/include/tiledb/tiledb_experimental.h index 56bd929..691ce1f 100644 --- a/include/tiledb/tiledb_experimental.h +++ b/include/tiledb/tiledb_experimental.h @@ -42,6 +42,7 @@ * API sections */ #include "tiledb/api/c_api/attribute/attribute_api_external_experimental.h" +#include "tiledb/api/c_api/current_domain/current_domain_api_external_experimental.h" #include "tiledb/api/c_api/enumeration/enumeration_api_experimental.h" #include "tiledb/api/c_api/query_aggregate/query_aggregate_api_external_experimental.h" #include "tiledb/api/c_api/query_field/query_field_api_external_experimental.h" @@ -295,6 +296,49 @@ TILEDB_EXPORT int32_t tiledb_array_schema_evolution_set_timestamp_range( uint64_t lo, uint64_t hi) TILEDB_NOEXCEPT; +/** + * Expands the current domain during array schema evolution. + * TileDB will enforce that the new current domain is expanding + * on the current one and not contracting during `tiledb_array_evolve`. + * + * **Example:** + * + * @code{.c} + * tiledb_current_domain_t *new_domain; + * tiledb_current_domain_create(ctx, &new_domain); + * tiledb_ndrectangle_t *ndr; + * tiledb_ndrectangle_alloc(ctx, domain, &ndr); + * + * tiledb_range_t range; + * range.min = &expanded_min; + * range.min_size = sizeof(expanded_min); + * range.max = &expanded_max; + * range.max_size = sizeof(expanded_max); + * tiledb_ndrectangle_set_range_for_name(ctx, ndr, "dim1", &range); + * tiledb_ndrectangle_set_range_for_name(ctx, ndr, "dim2", &range); + * + * tiledb_current_domain_set_ndrectangle(new_domain, ndr); + * + * tiledb_array_schema_evolution_expand_current_domain(ctx, + * array_schema_evolution, new_domain); + * + * tiledb_array_evolve(ctx, array_uri, array_schema_evolution); + * + * tiledb_ndrectangle_free(&ndr); + * tiledb_current_domain_free(&new_domain); + * + * @endcode + * + * @param ctx The TileDB context. + * @param array_schema_evolution The schema evolution. + * @param expanded_domain The current domain we want to expand the schema to. + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT capi_return_t tiledb_array_schema_evolution_expand_current_domain( + tiledb_ctx_t* ctx, + tiledb_array_schema_evolution_t* array_schema_evolution, + tiledb_current_domain_t* expanded_domain) TILEDB_NOEXCEPT; + /* ********************************* */ /* ARRAY SCHEMA */ /* ********************************* */ @@ -354,6 +398,51 @@ TILEDB_EXPORT int32_t tiledb_array_schema_add_enumeration( tiledb_array_schema_t* array_schema, tiledb_enumeration_t* enumeration) TILEDB_NOEXCEPT; +/** + * Sets the current domain on the array schema + * + * **Example:** + * + * @code{.c} + * tiledb_current_domain_t *current_domain; + * tiledb_current_domain_create(ctx, ¤t_domain); + * tiledb_array_schema_set_current_domain(ctx, array_schema, current_domain); + * @endcode + * + * @param ctx The TileDB context. + * @param array_schema The array schema. + * @param current_domain The current domain to set on the schema + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT int32_t tiledb_array_schema_set_current_domain( + tiledb_ctx_t* ctx, + tiledb_array_schema_t* array_schema, + tiledb_current_domain_t* current_domain) TILEDB_NOEXCEPT; + +/** + * Gets the current domain set on the array schema or + * creates an empty current domain if none was set. + * It is the responsability of the caller to free the resources associated + * with the current domain when the handle isn't needed anymore. + * + * **Example:** + * + * @code{.c} + * tiledb_current_domain_t *current_domain; + * tiledb_array_schema_get_current_domain(ctx, array_schema, ¤t_domain); + * tiledb_current_domain_free(¤t_domain); + * @endcode + * + * @param ctx The TileDB context. + * @param array_schema The array schema. + * @param current_domain The current domain set on the schema + * @return `TILEDB_OK` for success and `TILEDB_ERR` for error. + */ +TILEDB_EXPORT int32_t tiledb_array_schema_get_current_domain( + tiledb_ctx_t* ctx, + tiledb_array_schema_t* array_schema, + tiledb_current_domain_t** current_domain) TILEDB_NOEXCEPT; + /* ********************************* */ /* ARRAY */ /* ********************************* */ diff --git a/include/tiledb/tiledb_version.h b/include/tiledb/tiledb_version.h index 109be38..cc75ba3 100644 --- a/include/tiledb/tiledb_version.h +++ b/include/tiledb/tiledb_version.h @@ -27,5 +27,5 @@ */ #define TILEDB_VERSION_MAJOR 2 -#define TILEDB_VERSION_MINOR 24 -#define TILEDB_VERSION_PATCH 2 +#define TILEDB_VERSION_MINOR 25 +#define TILEDB_VERSION_PATCH 0 diff --git a/lib/x64-ucrt/libaws-c-auth.a b/lib/x64-ucrt/libaws-c-auth.a index a777093..2078109 100644 Binary files a/lib/x64-ucrt/libaws-c-auth.a and b/lib/x64-ucrt/libaws-c-auth.a differ diff --git a/lib/x64-ucrt/libaws-c-cal.a b/lib/x64-ucrt/libaws-c-cal.a index b414904..7bd0c28 100644 Binary files a/lib/x64-ucrt/libaws-c-cal.a and b/lib/x64-ucrt/libaws-c-cal.a differ diff --git a/lib/x64-ucrt/libaws-c-common.a b/lib/x64-ucrt/libaws-c-common.a index d3c39de..b2500c1 100644 Binary files a/lib/x64-ucrt/libaws-c-common.a and b/lib/x64-ucrt/libaws-c-common.a differ diff --git a/lib/x64-ucrt/libaws-c-compression.a b/lib/x64-ucrt/libaws-c-compression.a index 6e3b5b6..1ad2377 100644 Binary files a/lib/x64-ucrt/libaws-c-compression.a and b/lib/x64-ucrt/libaws-c-compression.a differ diff --git a/lib/x64-ucrt/libaws-c-event-stream.a b/lib/x64-ucrt/libaws-c-event-stream.a index 523fd45..3982050 100644 Binary files a/lib/x64-ucrt/libaws-c-event-stream.a and b/lib/x64-ucrt/libaws-c-event-stream.a differ diff --git a/lib/x64-ucrt/libaws-c-http.a b/lib/x64-ucrt/libaws-c-http.a index 4f45277..4d00f97 100644 Binary files a/lib/x64-ucrt/libaws-c-http.a and b/lib/x64-ucrt/libaws-c-http.a differ diff --git a/lib/x64-ucrt/libaws-c-io.a b/lib/x64-ucrt/libaws-c-io.a index 580de0b..dfe225d 100644 Binary files a/lib/x64-ucrt/libaws-c-io.a and b/lib/x64-ucrt/libaws-c-io.a differ diff --git a/lib/x64-ucrt/libaws-c-mqtt.a b/lib/x64-ucrt/libaws-c-mqtt.a index cc59eee..19af034 100644 Binary files a/lib/x64-ucrt/libaws-c-mqtt.a and b/lib/x64-ucrt/libaws-c-mqtt.a differ diff --git a/lib/x64-ucrt/libaws-c-s3.a b/lib/x64-ucrt/libaws-c-s3.a index def75c9..705509c 100644 Binary files a/lib/x64-ucrt/libaws-c-s3.a and b/lib/x64-ucrt/libaws-c-s3.a differ diff --git a/lib/x64-ucrt/libaws-c-sdkutils.a b/lib/x64-ucrt/libaws-c-sdkutils.a index 46fbc08..d6fc55e 100644 Binary files a/lib/x64-ucrt/libaws-c-sdkutils.a and b/lib/x64-ucrt/libaws-c-sdkutils.a differ diff --git a/lib/x64-ucrt/libaws-checksums.a b/lib/x64-ucrt/libaws-checksums.a index 0609d90..c72379d 100644 Binary files a/lib/x64-ucrt/libaws-checksums.a and b/lib/x64-ucrt/libaws-checksums.a differ diff --git a/lib/x64-ucrt/libaws-cpp-sdk-access-management.a b/lib/x64-ucrt/libaws-cpp-sdk-access-management.a index 0468c93..1a5e4f7 100644 Binary files a/lib/x64-ucrt/libaws-cpp-sdk-access-management.a and b/lib/x64-ucrt/libaws-cpp-sdk-access-management.a differ diff --git a/lib/x64-ucrt/libaws-cpp-sdk-cognito-identity.a b/lib/x64-ucrt/libaws-cpp-sdk-cognito-identity.a index d307737..ba7dcee 100644 Binary files a/lib/x64-ucrt/libaws-cpp-sdk-cognito-identity.a and b/lib/x64-ucrt/libaws-cpp-sdk-cognito-identity.a differ diff --git a/lib/x64-ucrt/libaws-cpp-sdk-core.a b/lib/x64-ucrt/libaws-cpp-sdk-core.a index e46c638..89cea18 100644 Binary files a/lib/x64-ucrt/libaws-cpp-sdk-core.a and b/lib/x64-ucrt/libaws-cpp-sdk-core.a differ diff --git a/lib/x64-ucrt/libaws-cpp-sdk-iam.a b/lib/x64-ucrt/libaws-cpp-sdk-iam.a index d8ad250..2c1277b 100644 Binary files a/lib/x64-ucrt/libaws-cpp-sdk-iam.a and b/lib/x64-ucrt/libaws-cpp-sdk-iam.a differ diff --git a/lib/x64-ucrt/libaws-cpp-sdk-identity-management.a b/lib/x64-ucrt/libaws-cpp-sdk-identity-management.a index d60d66c..2798c15 100644 Binary files a/lib/x64-ucrt/libaws-cpp-sdk-identity-management.a and b/lib/x64-ucrt/libaws-cpp-sdk-identity-management.a differ diff --git a/lib/x64-ucrt/libaws-cpp-sdk-s3.a b/lib/x64-ucrt/libaws-cpp-sdk-s3.a index 41ab36c..d0361ac 100644 Binary files a/lib/x64-ucrt/libaws-cpp-sdk-s3.a and b/lib/x64-ucrt/libaws-cpp-sdk-s3.a differ diff --git a/lib/x64-ucrt/libaws-cpp-sdk-sts.a b/lib/x64-ucrt/libaws-cpp-sdk-sts.a index 3b16d0e..edaf174 100644 Binary files a/lib/x64-ucrt/libaws-cpp-sdk-sts.a and b/lib/x64-ucrt/libaws-cpp-sdk-sts.a differ diff --git a/lib/x64-ucrt/libaws-crt-cpp.a b/lib/x64-ucrt/libaws-crt-cpp.a index 9a2c3f7..24ef6f4 100644 Binary files a/lib/x64-ucrt/libaws-crt-cpp.a and b/lib/x64-ucrt/libaws-crt-cpp.a differ diff --git a/lib/x64-ucrt/libbz2.a b/lib/x64-ucrt/libbz2.a index 042cc18..8c63648 100644 Binary files a/lib/x64-ucrt/libbz2.a and b/lib/x64-ucrt/libbz2.a differ diff --git a/lib/x64-ucrt/libfmt.a b/lib/x64-ucrt/libfmt.a index a591b5a..2d90568 100644 Binary files a/lib/x64-ucrt/libfmt.a and b/lib/x64-ucrt/libfmt.a differ diff --git a/lib/x64-ucrt/liblibmagic.a b/lib/x64-ucrt/liblibmagic.a index accfcd2..2245fcd 100644 Binary files a/lib/x64-ucrt/liblibmagic.a and b/lib/x64-ucrt/liblibmagic.a differ diff --git a/lib/x64-ucrt/liblz4.a b/lib/x64-ucrt/liblz4.a index 5ef5038..fcc2e29 100644 Binary files a/lib/x64-ucrt/liblz4.a and b/lib/x64-ucrt/liblz4.a differ diff --git a/lib/x64-ucrt/libpcre2-16.a b/lib/x64-ucrt/libpcre2-16.a index 9718cad..15382e8 100644 Binary files a/lib/x64-ucrt/libpcre2-16.a and b/lib/x64-ucrt/libpcre2-16.a differ diff --git a/lib/x64-ucrt/libpcre2-32.a b/lib/x64-ucrt/libpcre2-32.a index 7f74293..82b0227 100644 Binary files a/lib/x64-ucrt/libpcre2-32.a and b/lib/x64-ucrt/libpcre2-32.a differ diff --git a/lib/x64-ucrt/libpcre2-8.a b/lib/x64-ucrt/libpcre2-8.a index 605065a..9b5fafd 100644 Binary files a/lib/x64-ucrt/libpcre2-8.a and b/lib/x64-ucrt/libpcre2-8.a differ diff --git a/lib/x64-ucrt/libpcre2-posix.a b/lib/x64-ucrt/libpcre2-posix.a index 315f88b..d8fd795 100644 Binary files a/lib/x64-ucrt/libpcre2-posix.a and b/lib/x64-ucrt/libpcre2-posix.a differ diff --git a/lib/x64-ucrt/libsharpyuv.a b/lib/x64-ucrt/libsharpyuv.a index cd40c28..9c06430 100644 Binary files a/lib/x64-ucrt/libsharpyuv.a and b/lib/x64-ucrt/libsharpyuv.a differ diff --git a/lib/x64-ucrt/libspdlog.a b/lib/x64-ucrt/libspdlog.a index 543a3c2..bf5bf30 100644 Binary files a/lib/x64-ucrt/libspdlog.a and b/lib/x64-ucrt/libspdlog.a differ diff --git a/lib/x64-ucrt/libtiledbstatic.a b/lib/x64-ucrt/libtiledbstatic.a index dabb790..bfd2247 100644 Binary files a/lib/x64-ucrt/libtiledbstatic.a and b/lib/x64-ucrt/libtiledbstatic.a differ diff --git a/lib/x64-ucrt/libwebp.a b/lib/x64-ucrt/libwebp.a index dd67db5..e8def86 100644 Binary files a/lib/x64-ucrt/libwebp.a and b/lib/x64-ucrt/libwebp.a differ diff --git a/lib/x64-ucrt/libwebpdecoder.a b/lib/x64-ucrt/libwebpdecoder.a index 9485dbb..766b104 100644 Binary files a/lib/x64-ucrt/libwebpdecoder.a and b/lib/x64-ucrt/libwebpdecoder.a differ diff --git a/lib/x64-ucrt/libwebpdemux.a b/lib/x64-ucrt/libwebpdemux.a index e1c03a2..a5e1b02 100644 Binary files a/lib/x64-ucrt/libwebpdemux.a and b/lib/x64-ucrt/libwebpdemux.a differ diff --git a/lib/x64-ucrt/libwebpmux.a b/lib/x64-ucrt/libwebpmux.a index 47c25cb..b20e35a 100644 Binary files a/lib/x64-ucrt/libwebpmux.a and b/lib/x64-ucrt/libwebpmux.a differ diff --git a/lib/x64-ucrt/libzlib.a b/lib/x64-ucrt/libzlib.a index 443ffcd..6bd2226 100644 Binary files a/lib/x64-ucrt/libzlib.a and b/lib/x64-ucrt/libzlib.a differ diff --git a/lib/x64-ucrt/libzstd.a b/lib/x64-ucrt/libzstd.a index a57ea29..63052ab 100644 Binary files a/lib/x64-ucrt/libzstd.a and b/lib/x64-ucrt/libzstd.a differ