Instead of lengthy blurbs, switch to single-line, machine-readable standardized (https://spdx.dev) license identifiers. The Linux kernel switched long ago, so there is strong precedent. Three cases are handled: AGPL-only, Apache-only, and dual licensed. For the latter case, I chose (AGPL-3.0-or-later and Apache-2.0), reasoning that our changes are extensive enough to apply our license. The changes we applied mechanically with a script, except to licenses/README.md. Closes #9937
46 lines
1.2 KiB
C++
46 lines
1.2 KiB
C++
/*
|
|
* Copyright (C) 2015-present ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <seastar/core/distributed.hh>
|
|
#include "query-result.hh"
|
|
|
|
namespace query {
|
|
|
|
// Merges non-overlapping results into one
|
|
// Implements @Reducer concept from distributed.hh
|
|
class result_merger {
|
|
std::vector<foreign_ptr<lw_shared_ptr<query::result>>> _partial;
|
|
const uint64_t _max_rows;
|
|
const uint32_t _max_partitions;
|
|
public:
|
|
explicit result_merger(uint64_t max_rows, uint32_t max_partitions)
|
|
: _max_rows(max_rows)
|
|
, _max_partitions(max_partitions)
|
|
{ }
|
|
|
|
void reserve(size_t size) {
|
|
_partial.reserve(size);
|
|
}
|
|
|
|
void operator()(foreign_ptr<lw_shared_ptr<query::result>> r) {
|
|
if (!_partial.empty() && _partial.back()->is_short_read()) {
|
|
return;
|
|
}
|
|
_partial.emplace_back(std::move(r));
|
|
}
|
|
|
|
// FIXME: Eventually we should return a composite_query_result here
|
|
// which holds the vector of query results and which can be quickly turned
|
|
// into packet fragments by the transport layer without copying the data.
|
|
foreign_ptr<lw_shared_ptr<query::result>> get();
|
|
};
|
|
|
|
}
|