diff --git a/src/Storages/StorageMemory.cpp b/src/Storages/StorageMemory.cpp index e481b4753fe1f48ed65a67918e4cd4f025651f15..5ef4ab24914a2dd8d95eede4e48b29781719c8bf 100644 --- a/src/Storages/StorageMemory.cpp +++ b/src/Storages/StorageMemory.cpp @@ -126,20 +126,27 @@ Pipe StorageMemory::read( Pipes pipes; + BlocksList::iterator first = data.begin(); + + size_t offset = 0; for (size_t stream = 0; stream < num_streams; ++stream) { - BlocksList::iterator first = data.begin(); - BlocksList::iterator last = data.begin(); - - std::advance(first, stream * size / num_streams); - std::advance(last, (stream + 1) * size / num_streams); + auto next = first; + while (offset < stream * size / num_streams) + { + ++next; + ++offset; + } - if (first == last) + if (first == next) continue; - else - --last; + + auto last = next; + --last; pipes.emplace_back(std::make_shared(column_names, first, last, *this, metadata_snapshot)); + + first = next; } return Pipe::unitePipes(std::move(pipes));