| 619 | } |
| 620 | |
| 621 | Status Query::get_validity_buffer( |
| 622 | const char* name, |
| 623 | uint8_t** buffer_validity_bytemap, |
| 624 | uint64_t** buffer_validity_bytemap_size) const { |
| 625 | // Check query type |
| 626 | if (type_ != QueryType::READ && type_ != QueryType::WRITE && |
| 627 | type_ != QueryType::MODIFY_EXCLUSIVE) { |
| 628 | return LOG_STATUS(Status_SerializationError( |
| 629 | "Cannot get buffer; Unsupported query type.")); |
| 630 | } |
| 631 | |
| 632 | // Check attribute |
| 633 | if (!array_schema_->is_nullable(name)) |
| 634 | return logger_->status(Status_QueryError( |
| 635 | std::string("Cannot get buffer; '") + name + "' is non-nullable")); |
| 636 | |
| 637 | // Attribute or dimension |
| 638 | auto it = buffers_.find(name); |
| 639 | if (it != buffers_.end()) { |
| 640 | auto vv = &it->second.validity_vector_; |
| 641 | *buffer_validity_bytemap = vv->bytemap(); |
| 642 | *buffer_validity_bytemap_size = vv->bytemap_size(); |
| 643 | } |
| 644 | |
| 645 | return Status::Ok(); |
| 646 | } |
| 647 | |
| 648 | Status Query::get_attr_serialization_state( |
| 649 | const std::string& attribute, SerializationState::AttrState** state) { |