@@ -500,21 +500,25 @@ VersionedItem update_impl(
500
500
folly::Future<ReadVersionOutput> read_multi_key (
501
501
const std::shared_ptr<Store>& store,
502
502
const SegmentInMemory& index_key_seg,
503
- std::any& handler_data) {
503
+ std::any& handler_data,
504
+ AtomKey&& key
505
+ ) {
504
506
std::vector<AtomKey> keys;
507
+ keys.reserve (index_key_seg.row_count ());
505
508
for (size_t idx = 0 ; idx < index_key_seg.row_count (); idx++) {
506
- keys.emplace_back (stream:: read_key_row (index_key_seg, static_cast <ssize_t >(idx)));
509
+ keys.emplace_back (read_key_row (index_key_seg, static_cast <ssize_t >(idx)));
507
510
}
508
511
509
512
AtomKey dup {keys[0 ]};
510
513
VersionedItem versioned_item{std::move (dup )};
511
514
TimeseriesDescriptor multi_key_desc{index_key_seg.index_descriptor ()};
512
515
513
516
return read_frame_for_version (store, versioned_item, std::make_shared<ReadQuery>(), ReadOptions{}, handler_data)
514
- .thenValue ([multi_key_desc=std::move (multi_key_desc), keys=std::move (keys)](ReadVersionOutput&& read_version_output) mutable {
517
+ .thenValue ([multi_key_desc=std::move (multi_key_desc), keys=std::move (keys), key= std::move (key) ](ReadVersionOutput&& read_version_output) mutable {
515
518
multi_key_desc.mutable_proto ().mutable_normalization ()->CopyFrom (read_version_output.frame_and_descriptor_ .desc_ .proto ().normalization ());
516
519
read_version_output.frame_and_descriptor_ .desc_ = std::move (multi_key_desc);
517
520
read_version_output.frame_and_descriptor_ .keys_ = std::move (keys);
521
+ read_version_output.versioned_item_ = VersionedItem (std::move (key));
518
522
return std::move (read_version_output);
519
523
});
520
524
}
@@ -2046,7 +2050,7 @@ folly::Future<ReadVersionOutput> read_frame_for_version(
2046
2050
2047
2051
if (pipeline_context->multi_key_ ) {
2048
2052
check_multi_key_is_not_index_only (*pipeline_context, *read_query);
2049
- return read_multi_key (store, *pipeline_context->multi_key_ , handler_data);
2053
+ return read_multi_key (store, *pipeline_context->multi_key_ , handler_data, std::move (res_versioned_item. key_ ) );
2050
2054
}
2051
2055
2052
2056
if (opt_false (read_options.incompletes ())) {
@@ -2067,7 +2071,7 @@ folly::Future<ReadVersionOutput> read_frame_for_version(
2067
2071
ARCTICDB_DEBUG (log ::version (), " Fetching data to frame" );
2068
2072
2069
2073
DecodePathData shared_data;
2070
- return version_store:: do_direct_read_or_process (store, read_query, read_options, pipeline_context, shared_data, handler_data)
2074
+ return do_direct_read_or_process (store, read_query, read_options, pipeline_context, shared_data, handler_data)
2071
2075
.thenValue ([res_versioned_item, pipeline_context, read_options, &handler_data, read_query, shared_data](auto && frame) mutable {
2072
2076
ARCTICDB_DEBUG (log ::version (), " Reduce and fix columns" );
2073
2077
return reduce_and_fix_columns (pipeline_context, frame, read_options, handler_data)
0 commit comments