From e935c9cd34a971fe024148d5eb88d67f798bda49 Mon Sep 17 00:00:00 2001 From: Calle Wilund Date: Wed, 13 Jan 2016 10:30:48 +0000 Subject: [PATCH] select_statement: Make sure all aggregate queries use paging Mainly to make sure we respect row limits. Since normal result generation does not for aggregates. Fixes #752 Message-Id: <1452681048-30171-2-git-send-email-calle@scylladb.com> --- cql3/statements/select_statement.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cql3/statements/select_statement.cc b/cql3/statements/select_statement.cc index 4d61a2a2ce..ba13cb4ac9 100644 --- a/cql3/statements/select_statement.cc +++ b/cql3/statements/select_statement.cc @@ -226,15 +226,16 @@ select_statement::execute(distributed& proxy, service::q // An aggregation query will never be paged for the user, but we always page it internally to avoid OOM. // If we user provided a page_size we'll use that to page internally (because why not), otherwise we use our default // Note that if there are some nodes in the cluster with a version less than 2.0, we can't use paging (CASSANDRA-6707). - if (_selection->is_aggregate() && page_size <= 0) { + auto aggregate = _selection->is_aggregate(); + if (aggregate && page_size <= 0) { page_size = DEFAULT_COUNT_PAGE_SIZE; } auto key_ranges = _restrictions->get_partition_key_ranges(options); - if (page_size <= 0 + if (!aggregate && (page_size <= 0 || !service::pager::query_pagers::may_need_paging(page_size, - *command, key_ranges)) { + *command, key_ranges))) { return execute(proxy, command, std::move(key_ranges), state, options, now); } @@ -242,7 +243,7 @@ select_statement::execute(distributed& proxy, service::q auto p = service::pager::query_pagers::pager(_schema, _selection, state, options, command, std::move(key_ranges)); - if (_selection->is_aggregate()) { + if (aggregate) { return do_with( cql3::selection::result_set_builder(*_selection, now, options.get_serialization_format()),