MCPcopy Create free account
hub / github.com/TileDB-Inc/TileDB / attribute_from_capnp

Function attribute_from_capnp

tiledb/sm/serialization/array_schema.cc:419–480  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

417}
418
419shared_ptr<Attribute> attribute_from_capnp(
420 const capnp::Attribute::Reader& attribute_reader) {
421 // Get datatype
422 Datatype datatype = datatype_enum(attribute_reader.getType());
423
424 // Set nullable
425 const bool nullable = attribute_reader.getNullable();
426
427 // Get data order
428 auto data_order = attribute_reader.hasOrder() ?
429 data_order_from_str(attribute_reader.getOrder()) :
430 DataOrder::UNORDERED_DATA;
431
432 // Filter pipelines
433 shared_ptr<FilterPipeline> filters{};
434 if (attribute_reader.hasFilterPipeline()) {
435 auto filter_pipeline_reader = attribute_reader.getFilterPipeline();
436 auto&& [st_fp, f]{
437 filter_pipeline_from_capnp(filter_pipeline_reader, datatype)};
438 throw_if_not_ok(st_fp);
439 filters = f.value();
440 } else {
441 filters = make_shared<FilterPipeline>(HERE());
442 }
443
444 // Fill value
445 ByteVecValue fill_value_vec;
446 uint8_t fill_value_validity = 0;
447 if (attribute_reader.hasFillValue()) {
448 // To initialize the ByteVecValue object, we do so by instantiating a
449 // vector of type uint8_t that points to the data stored in the byte
450 // vector.
451 auto capnp_byte_vec = attribute_reader.getFillValue().asBytes();
452 auto vec_ptr = capnp_byte_vec.begin();
453 std::vector<uint8_t> byte_vec(vec_ptr, vec_ptr + capnp_byte_vec.size());
454 fill_value_vec = ByteVecValue(move(byte_vec));
455 if (nullable) {
456 fill_value_validity = attribute_reader.getFillValueValidity();
457 }
458 } else {
459 // default initialization
460 fill_value_vec = Attribute::default_fill_value(
461 datatype, attribute_reader.getCellValNum());
462 }
463
464 std::optional<std::string> enmr_name;
465 if (attribute_reader.hasEnumerationName()) {
466 enmr_name = attribute_reader.getEnumerationName();
467 }
468
469 return tiledb::common::make_shared<Attribute>(
470 HERE(),
471 attribute_reader.getName(),
472 datatype,
473 nullable,
474 attribute_reader.getCellValNum(),
475 *(filters.get()),
476 fill_value_vec,

Callers 3

array_schema_from_capnpFunction · 0.85

Calls 15

datatype_enumFunction · 0.85
data_order_from_strFunction · 0.85
throw_if_not_okFunction · 0.85
ByteVecValueClass · 0.85
getTypeMethod · 0.80
getNullableMethod · 0.80
hasOrderMethod · 0.80
getOrderMethod · 0.80
hasFilterPipelineMethod · 0.80
getFilterPipelineMethod · 0.80
hasFillValueMethod · 0.80

Tested by

no test coverage detected