|
34 | 34 | #include "array_schema_api_experimental.h" |
35 | 35 | #include "array_schema_api_internal.h" |
36 | 36 |
|
| 37 | +#include "tiledb/api/c_api/attribute/attribute_api_external_experimental.h" |
37 | 38 | #include "tiledb/api/c_api/attribute/attribute_api_internal.h" |
38 | 39 | #include "tiledb/api/c_api/context/context_api_internal.h" |
39 | 40 | #include "tiledb/api/c_api/current_domain/current_domain_api_external_experimental.h" |
@@ -181,6 +182,54 @@ capi_return_t tiledb_array_schema_timestamp_range( |
181 | 182 | return TILEDB_OK; |
182 | 183 | } |
183 | 184 |
|
| 185 | +capi_return_t tiledb_array_schema_get_enumeration_from_name( |
| 186 | + tiledb_ctx_t* ctx, |
| 187 | + tiledb_array_schema_t* array_schema, |
| 188 | + const char* enumeration_name, |
| 189 | + tiledb_enumeration_t** enumeration) { |
| 190 | + ensure_array_schema_is_valid(array_schema); |
| 191 | + ensure_output_pointer_is_valid(enumeration); |
| 192 | + |
| 193 | + if (enumeration_name == nullptr) { |
| 194 | + throw CAPIException("'enumeration_name' must not be null"); |
| 195 | + } |
| 196 | + |
| 197 | + array_schema->load_enumeration(ctx, enumeration_name); |
| 198 | + |
| 199 | + auto ptr = array_schema->get_enumeration(enumeration_name); |
| 200 | + *enumeration = tiledb_enumeration_handle_t::make_handle(ptr); |
| 201 | + |
| 202 | + return TILEDB_OK; |
| 203 | +} |
| 204 | + |
| 205 | +capi_return_t tiledb_array_schema_get_enumeration_from_attribute_name( |
| 206 | + tiledb_ctx_t* ctx, |
| 207 | + tiledb_array_schema_t* array_schema, |
| 208 | + const char* attribute_name, |
| 209 | + tiledb_enumeration_t** enumeration) { |
| 210 | + ensure_array_schema_is_valid(array_schema); |
| 211 | + ensure_output_pointer_is_valid(enumeration); |
| 212 | + |
| 213 | + tiledb_attribute_t* attribute; |
| 214 | + capi_return_t getattr = tiledb_array_schema_get_attribute_from_name( |
| 215 | + ctx, array_schema, attribute_name, &attribute); |
| 216 | + if (tiledb_status(getattr) != TILEDB_OK) { |
| 217 | + return getattr; |
| 218 | + } |
| 219 | + |
| 220 | + tiledb_string_t* enumeration_name_inner; |
| 221 | + capi_return_t getenmr = tiledb_attribute_get_enumeration_name( |
| 222 | + ctx, attribute, &enumeration_name_inner); |
| 223 | + if (tiledb_status(getenmr) != TILEDB_OK) { |
| 224 | + return getenmr; |
| 225 | + } |
| 226 | + |
| 227 | + std::string enumeration_name(enumeration_name_inner->view()); |
| 228 | + return api_entry_with_context< |
| 229 | + tiledb::api::tiledb_array_schema_get_enumeration_from_name>( |
| 230 | + ctx, array_schema, enumeration_name.c_str(), enumeration); |
| 231 | +} |
| 232 | + |
184 | 233 | capi_return_t tiledb_array_schema_add_enumeration( |
185 | 234 | tiledb_array_schema_t* array_schema, tiledb_enumeration_t* enumeration) { |
186 | 235 | ensure_array_schema_is_valid(array_schema); |
@@ -365,6 +414,10 @@ capi_return_t tiledb_array_schema_get_attribute_from_name( |
365 | 414 | ensure_array_schema_is_valid(array_schema); |
366 | 415 | ensure_output_pointer_is_valid(attr); |
367 | 416 |
|
| 417 | + if (name == nullptr) { |
| 418 | + throw CAPIException("'attribute_name' must not be null"); |
| 419 | + } |
| 420 | + |
368 | 421 | uint32_t attribute_num = array_schema->attribute_num(); |
369 | 422 | if (attribute_num == 0) { |
370 | 423 | *attr = nullptr; |
@@ -540,6 +593,28 @@ CAPI_INTERFACE( |
540 | 593 | ctx, array_schema, lo, hi); |
541 | 594 | } |
542 | 595 |
|
| 596 | +CAPI_INTERFACE( |
| 597 | + array_schema_get_enumeration_from_name, |
| 598 | + tiledb_ctx_t* ctx, |
| 599 | + tiledb_array_schema_t* array_schema, |
| 600 | + const char* enumeration_name, |
| 601 | + tiledb_enumeration_t** enumeration) { |
| 602 | + return api_entry_with_context< |
| 603 | + tiledb::api::tiledb_array_schema_get_enumeration_from_name>( |
| 604 | + ctx, array_schema, enumeration_name, enumeration); |
| 605 | +} |
| 606 | + |
| 607 | +CAPI_INTERFACE( |
| 608 | + array_schema_get_enumeration_from_attribute_name, |
| 609 | + tiledb_ctx_t* ctx, |
| 610 | + tiledb_array_schema_t* array_schema, |
| 611 | + const char* attribute_name, |
| 612 | + tiledb_enumeration_t** enumeration) { |
| 613 | + return api_entry_with_context< |
| 614 | + tiledb::api::tiledb_array_schema_get_enumeration_from_attribute_name>( |
| 615 | + ctx, array_schema, attribute_name, enumeration); |
| 616 | +} |
| 617 | + |
543 | 618 | CAPI_INTERFACE( |
544 | 619 | array_schema_add_enumeration, |
545 | 620 | tiledb_ctx_t* ctx, |
|
0 commit comments