Skip to content

Commit 30d4a81

Browse files
committed
Add test for loading enumerations for all schemas.
+ Fix test failure in CI.
1 parent 83e018d commit 30d4a81

File tree

3 files changed

+68
-1
lines changed

3 files changed

+68
-1
lines changed

test/src/unit-enumerations.cc

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,6 +1119,69 @@ TEST_CASE_METHOD(
11191119
REQUIRE(schema->is_enumeration_loaded("test_enmr") == true);
11201120
}
11211121

1122+
TEST_CASE_METHOD(
1123+
EnumerationFx,
1124+
"Array - Load All Enumerations - All Schemas",
1125+
"[enumeration][array][load-all-enumerations][all-schemas]") {
1126+
create_array();
1127+
auto array = get_array(QueryType::READ);
1128+
auto schema = array->array_schema_latest_ptr();
1129+
REQUIRE(schema->is_enumeration_loaded("test_enmr") == false);
1130+
std::string schema_name_1 = schema->name();
1131+
1132+
// Evolve once to add an enumeration.
1133+
auto ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
1134+
std::vector<std::string> var_values{"one", "two", "three"};
1135+
auto var_enmr = create_enumeration(
1136+
var_values, false, Datatype::STRING_ASCII, "ase_var_enmr");
1137+
ase->add_enumeration(var_enmr);
1138+
auto attr4 = make_shared<Attribute>(HERE(), "attr4", Datatype::UINT16);
1139+
attr4->set_enumeration_name("ase_var_enmr");
1140+
CHECK_NOTHROW(ase->evolve_schema(schema));
1141+
// Apply evolution to the array and reopen.
1142+
CHECK_NOTHROW(Array::evolve_array_schema(
1143+
ctx_.resources(), uri_, ase.get(), array->get_encryption_key()));
1144+
CHECK(array->reopen().ok());
1145+
CHECK_NOTHROW(array->load_all_enumerations());
1146+
auto all_schemas = array->array_schemas_all();
1147+
schema = array->array_schema_latest_ptr();
1148+
std::string schema_name_2 = schema->name();
1149+
1150+
// Check all schemas.
1151+
CHECK(all_schemas[schema_name_1]->is_enumeration_loaded("test_enmr") == true);
1152+
CHECK(all_schemas[schema_name_2]->is_enumeration_loaded("test_enmr") == true);
1153+
CHECK(
1154+
all_schemas[schema_name_2]->is_enumeration_loaded("ase_var_enmr") ==
1155+
true);
1156+
1157+
// Evolve a second time to drop an enumeration.
1158+
ase = make_shared<ArraySchemaEvolution>(HERE(), memory_tracker_);
1159+
ase->drop_enumeration("test_enmr");
1160+
ase->drop_attribute("attr1");
1161+
CHECK_NOTHROW(ase->evolve_schema(schema));
1162+
// Apply evolution to the array and reopen.
1163+
CHECK_NOTHROW(Array::evolve_array_schema(
1164+
ctx_.resources(), uri_, ase.get(), array->get_encryption_key()));
1165+
CHECK(array->reopen().ok());
1166+
CHECK_NOTHROW(array->load_all_enumerations());
1167+
all_schemas = array->array_schemas_all();
1168+
schema = array->array_schema_latest_ptr();
1169+
std::string schema_name_3 = schema->name();
1170+
1171+
// Check all schemas.
1172+
CHECK(all_schemas[schema_name_1]->is_enumeration_loaded("test_enmr") == true);
1173+
CHECK(all_schemas[schema_name_2]->is_enumeration_loaded("test_enmr") == true);
1174+
CHECK(
1175+
all_schemas[schema_name_2]->is_enumeration_loaded("ase_var_enmr") ==
1176+
true);
1177+
CHECK_THROWS_WITH(
1178+
all_schemas[schema_name_3]->is_enumeration_loaded("test_enmr"),
1179+
Catch::Matchers::ContainsSubstring("No enumeration named"));
1180+
CHECK(
1181+
all_schemas[schema_name_3]->is_enumeration_loaded("ase_var_enmr") ==
1182+
true);
1183+
}
1184+
11221185
TEST_CASE_METHOD(
11231186
EnumerationFx,
11241187
"Array - Load All Enumerations - Repeated",

tiledb/sm/array/array.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,10 @@ void Array::encryption_type(
804804

805805
shared_ptr<const Enumeration> Array::get_enumeration(
806806
const std::string& enumeration_name) {
807+
if (!is_open_) {
808+
throw ArrayException("Unable to load enumerations; Array is not open.");
809+
}
810+
807811
return get_enumerations(
808812
{enumeration_name}, opened_array_->array_schema_latest_ptr())[0];
809813
}

tiledb/sm/array_schema/array_schema.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1150,7 +1150,7 @@ void ArraySchema::drop_enumeration(const std::string& enmr_name) {
11501150
}
11511151
if (attr_enmr_name.value() == enmr_name) {
11521152
throw ArraySchemaException(
1153-
"Unable to drop enumeration '" + enmr_name + "' as it is used by " +
1153+
"Unable to drop enumeration '" + enmr_name + "' as it is used by" +
11541154
" attribute '" + attr->name() + "'.");
11551155
}
11561156
}

0 commit comments

Comments
 (0)