From c518e852ee6074fcccbd367eea74ae3fe0f26952 Mon Sep 17 00:00:00 2001 From: Tomasz Grabiec Date: Fri, 18 Mar 2016 22:29:52 +0100 Subject: [PATCH] modificiation_statement: Use result_view::do_with() Reduces code duplication. Message-Id: <1458336592-22065-1-git-send-email-tgrabiec@scylladb.com> --- cql3/statements/modification_statement.cc | 12 +++++------- query-result-reader.hh | 6 +++--- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/cql3/statements/modification_statement.cc b/cql3/statements/modification_statement.cc index 0acb548dbf..e09c6fb1ff 100644 --- a/cql3/statements/modification_statement.cc +++ b/cql3/statements/modification_statement.cc @@ -291,13 +291,11 @@ modification_statement::read_required_rows( query::read_command cmd(s->id(), s->version(), ps, std::numeric_limits::max()); // FIXME: ignoring "local" return proxy.local().query(s, make_lw_shared(std::move(cmd)), std::move(pr), cl).then([this, ps] (auto result) { - // FIXME: copying - // FIXME: Use scattered_reader to avoid copying - bytes_ostream buf(result->buf()); - query::result_view v(buf.linearize()); - auto prefetched_rows = update_parameters::prefetched_rows_type({update_parameters::prefetch_data(s)}); - v.consume(ps, prefetch_data_builder(s, prefetched_rows.value(), ps)); - return prefetched_rows; + return query::result_view::do_with(*result, [&] (query::result_view v) { + auto prefetched_rows = update_parameters::prefetched_rows_type({update_parameters::prefetch_data(s)}); + v.consume(ps, prefetch_data_builder(s, prefetched_rows.value(), ps)); + return prefetched_rows; + }); }); } diff --git a/query-result-reader.hh b/query-result-reader.hh index 8fa4a923f4..a9027a6206 100644 --- a/query-result-reader.hh +++ b/query-result-reader.hh @@ -143,17 +143,17 @@ public: result_view(ser::query_result_view v) : _v(v) {} template - static void do_with(const query::result& res, Func&& func) { + static auto do_with(const query::result& res, Func&& func) { const bytes_ostream& buf = res.buf(); // FIXME: This special casing saves us the cost of copying an already // linearized response. When we switch views to scattered_reader this will go away. if (buf.is_linearized()) { result_view view(buf.view()); - func(view); + return func(view); } else { bytes_ostream w(buf); result_view view(w.linearize()); - func(view); + return func(view); } }