3232
3333#ifdef TILEDB_SERIALIZATION
3434
35- #include " test/support/src/helpers.h"
3635#include " test/support/src/mem_helpers.h"
3736#include " test/support/tdb_catch.h"
3837#include " tiledb/api/c_api/buffer/buffer_api_internal.h"
4241#include " tiledb/sm/c_api/tiledb_serialization.h"
4342#include " tiledb/sm/c_api/tiledb_struct_def.h"
4443#include " tiledb/sm/cpp_api/tiledb"
45- #include " tiledb/sm/cpp_api/tiledb_experimental"
4644#include " tiledb/sm/crypto/encryption_key.h"
4745#include " tiledb/sm/enums/array_type.h"
4846#include " tiledb/sm/enums/encryption_type.h"
@@ -69,7 +67,6 @@ struct RequestHandlerFx {
6967 Config cfg_;
7068 Context ctx_;
7169 EncryptionKey enc_key_;
72- shared_ptr<ArraySchema> schema_;
7370};
7471
7572struct HandleLoadArraySchemaRequestFx : RequestHandlerFx {
@@ -78,17 +75,11 @@ struct HandleLoadArraySchemaRequestFx : RequestHandlerFx {
7875 }
7976
8077 virtual shared_ptr<ArraySchema> create_schema () override ;
81-
82- std::tuple<
83- shared_ptr<ArraySchema>,
84- std::unordered_map<std::string, shared_ptr<ArraySchema>>>
85- call_handler (
78+ shared_ptr<ArraySchema> call_handler (
8679 serialization::LoadArraySchemaRequest req, SerializationType stype);
8780
8881 shared_ptr<const Enumeration> create_string_enumeration (
8982 std::string name, std::vector<std::string>& values);
90-
91- shared_ptr<ArraySchema> schema_add_attribute (const std::string& attr_name);
9283};
9384
9485struct HandleQueryPlanRequestFx : RequestHandlerFx {
@@ -125,23 +116,15 @@ struct HandleConsolidationPlanRequestFx : RequestHandlerFx {
125116
126117TEST_CASE_METHOD (
127118 HandleLoadArraySchemaRequestFx,
128- " tiledb_handle_load_array_schema_request - no enumerations " ,
119+ " tiledb_handle_load_array_schema_request - default request " ,
129120 " [request_handler][load_array_schema][default]" ) {
130121 auto stype = GENERATE (SerializationType::JSON, SerializationType::CAPNP);
131122
132123 create_array ();
133- auto schema_response =
134- call_handler (serialization::LoadArraySchemaRequest (cfg_), stype);
135- auto schema = std::get<0 >(schema_response);
124+ auto schema =
125+ call_handler (serialization::LoadArraySchemaRequest (false ), stype);
136126 REQUIRE (schema->has_enumeration (" enmr" ));
137127 REQUIRE (schema->get_loaded_enumeration_names ().size () == 0 );
138- tiledb::test::schema_equiv (*schema, *schema_);
139-
140- // We did not evolve the schema so there should only be one.
141- auto all_schemas = std::get<1 >(schema_response);
142- REQUIRE (all_schemas.size () == 1 );
143- tiledb::test::schema_equiv (
144- *all_schemas.find (schema->name ())->second , *schema_);
145128}
146129
147130TEST_CASE_METHOD (
@@ -151,57 +134,12 @@ TEST_CASE_METHOD(
151134 auto stype = GENERATE (SerializationType::JSON, SerializationType::CAPNP);
152135
153136 create_array ();
154- REQUIRE (cfg_.set (" rest.load_enumerations_on_array_open" , " true" ).ok ());
155- auto schema_response =
156- call_handler (serialization::LoadArraySchemaRequest (cfg_), stype);
157- auto schema = std::get<0 >(schema_response);
137+ auto schema =
138+ call_handler (serialization::LoadArraySchemaRequest (true ), stype);
158139 REQUIRE (schema->has_enumeration (" enmr" ));
159140 REQUIRE (schema->get_loaded_enumeration_names ().size () == 1 );
160141 REQUIRE (schema->get_loaded_enumeration_names ()[0 ] == " enmr" );
161142 REQUIRE (schema->get_enumeration (" enmr" ) != nullptr );
162- tiledb::test::schema_equiv (*schema, *schema_);
163-
164- // We did not evolve the schema so there should only be one.
165- auto all_schemas = std::get<1 >(schema_response);
166- REQUIRE (all_schemas.size () == 1 );
167- tiledb::test::schema_equiv (
168- *all_schemas.find (schema->name ())->second , *schema_);
169- }
170-
171- TEST_CASE_METHOD (
172- HandleLoadArraySchemaRequestFx,
173- " tiledb_handle_load_array_schema_request - multiple schemas" ,
174- " [request_handler][load_array_schema][schema-evolution]" ) {
175- auto stype = GENERATE (SerializationType::JSON, SerializationType::CAPNP);
176- std::string load_enums = GENERATE (" true" , " false" );
177-
178- create_array ();
179-
180- std::vector<shared_ptr<ArraySchema>> all_schemas{schema_};
181- all_schemas.push_back (schema_add_attribute (" b" ));
182- all_schemas.push_back (schema_add_attribute (" c" ));
183- all_schemas.push_back (schema_add_attribute (" d" ));
184-
185- REQUIRE (cfg_.set (" rest.load_enumerations_on_array_open" , load_enums).ok ());
186- auto schema_response =
187- call_handler (serialization::LoadArraySchemaRequest (cfg_), stype);
188- auto schema = std::get<0 >(schema_response);
189- if (load_enums == " true" ) {
190- REQUIRE (schema->has_enumeration (" enmr" ));
191- REQUIRE (schema->get_loaded_enumeration_names ().size () == 1 );
192- REQUIRE (schema->get_loaded_enumeration_names ()[0 ] == " enmr" );
193- REQUIRE (schema->get_enumeration (" enmr" ) != nullptr );
194- }
195- // The latest schema should be equal to the last applied evolution.
196- tiledb::test::schema_equiv (*schema, *all_schemas.back ());
197-
198- // Validate schemas returned from the request in the order they were created.
199- auto r_all_schemas = std::get<1 >(schema_response);
200- std::map<std::string, shared_ptr<ArraySchema>> resp (
201- r_all_schemas.begin (), r_all_schemas.end ());
202- for (int i = 0 ; const auto & s : resp) {
203- tiledb::test::schema_equiv (*s.second , *all_schemas[i++]);
204- }
205143}
206144
207145TEST_CASE_METHOD (
@@ -408,9 +346,7 @@ TEST_CASE_METHOD(
408346RequestHandlerFx::RequestHandlerFx (const std::string uri)
409347 : memory_tracker_(tiledb::test::create_test_memory_tracker())
410348 , uri_(uri)
411- , ctx_(cfg_)
412- , schema_(make_shared<ArraySchema>(
413- ArrayType::DENSE, ctx_.resources().ephemeral_memory_tracker())) {
349+ , ctx_(cfg_) {
414350 delete_array ();
415351 throw_if_not_ok (enc_key_.set_key (EncryptionType::NO_ENCRYPTION, nullptr , 0 ));
416352}
@@ -469,28 +405,9 @@ HandleLoadArraySchemaRequestFx::create_string_enumeration(
469405 tiledb::test::create_test_memory_tracker ());
470406}
471407
472- shared_ptr<ArraySchema> HandleLoadArraySchemaRequestFx::schema_add_attribute (
473- const std::string& attr_name) {
474- tiledb::Context ctx;
475- tiledb::ArraySchemaEvolution ase (ctx);
476- auto attr = tiledb::Attribute::create<int32_t >(ctx, attr_name);
477- ase.add_attribute (attr);
478- // Evolve and update the original schema member variable.
479- schema_ = ase.ptr ()->array_schema_evolution_ ->evolve_schema (schema_);
480- // Apply the schema evolution.
481- Array::evolve_array_schema (
482- this ->ctx_ .resources (),
483- this ->uri_ ,
484- ase.ptr ()->array_schema_evolution_ ,
485- this ->enc_key_ );
486-
487- // Return the new evolved schema for validation.
488- return schema_;
489- }
490-
491408shared_ptr<ArraySchema> HandleLoadArraySchemaRequestFx::create_schema () {
492409 // Create a schema to serialize
493- schema_ =
410+ auto schema =
494411 make_shared<ArraySchema>(HERE (), ArrayType::SPARSE, memory_tracker_);
495412 auto dim =
496413 make_shared<Dimension>(HERE (), " dim1" , Datatype::INT32, memory_tracker_);
@@ -499,23 +416,20 @@ shared_ptr<ArraySchema> HandleLoadArraySchemaRequestFx::create_schema() {
499416
500417 auto dom = make_shared<Domain>(HERE (), memory_tracker_);
501418 throw_if_not_ok (dom->add_dimension (dim));
502- throw_if_not_ok (schema_ ->set_domain (dom));
419+ throw_if_not_ok (schema ->set_domain (dom));
503420
504421 std::vector<std::string> values = {" pig" , " cow" , " chicken" , " dog" , " cat" };
505422 auto enmr = create_string_enumeration (" enmr" , values);
506- schema_ ->add_enumeration (enmr);
423+ schema ->add_enumeration (enmr);
507424
508425 auto attr = make_shared<Attribute>(HERE (), " attr" , Datatype::INT32);
509426 attr->set_enumeration_name (" enmr" );
510- throw_if_not_ok (schema_ ->add_attribute (attr));
427+ throw_if_not_ok (schema ->add_attribute (attr));
511428
512- return schema_ ;
429+ return schema ;
513430}
514431
515- std::tuple<
516- shared_ptr<ArraySchema>,
517- std::unordered_map<std::string, shared_ptr<ArraySchema>>>
518- HandleLoadArraySchemaRequestFx::call_handler (
432+ shared_ptr<ArraySchema> HandleLoadArraySchemaRequestFx::call_handler (
519433 serialization::LoadArraySchemaRequest req, SerializationType stype) {
520434 // If this looks weird, its because we're using the public C++ API to create
521435 // these objets instead of the internal APIs elsewhere in this test suite.
@@ -537,7 +451,7 @@ HandleLoadArraySchemaRequestFx::call_handler(
537451 REQUIRE (rval == TILEDB_OK);
538452
539453 return serialization::deserialize_load_array_schema_response (
540- uri_, stype, resp_buf->buffer (), memory_tracker_);
454+ stype, resp_buf->buffer (), memory_tracker_);
541455}
542456
543457shared_ptr<ArraySchema> HandleQueryPlanRequestFx::create_schema () {
0 commit comments