From d6e08e9d8d3ac9b356ac50cee22b41f828160247 Mon Sep 17 00:00:00 2001 From: Douglas Rumbaugh Date: Thu, 27 Jul 2023 18:21:26 -0400 Subject: Expanded query interface Query interface now enables skipping of delete processing and stopping query processing when first match is found. --- include/framework/DynamicExtension.h | 41 ++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 7 deletions(-) (limited to 'include/framework/DynamicExtension.h') diff --git a/include/framework/DynamicExtension.h b/include/framework/DynamicExtension.h index bd09e1f..5c903b9 100644 --- a/include/framework/DynamicExtension.h +++ b/include/framework/DynamicExtension.h @@ -121,16 +121,39 @@ public: Q::process_query_states(parms, states, buffer_state); - std::vector> query_results(shards.size() + 1); + std::vector>> query_results(shards.size() + 1); // Execute the query for the buffer auto buffer_results = Q::buffer_query(buffer, buffer_state, parms); - query_results[0] = filter_deletes(buffer_results, {-1, -1}, buffer); + query_results[0] = std::move(filter_deletes(buffer_results, {-1, -1}, buffer)); + if constexpr (Q::EARLY_ABORT) { + if (query_results[0].size() > 0) { + auto result = Q::merge(query_results, parms); + for (size_t i=0; i 0) { + auto result = Q::merge(query_results, parms); + for (size_t i=0; iappend(rec, ts); } - std::vector filter_deletes(std::vector> &records, ShardID shid, Buffer *buffer) { - std::vector processed_records; + std::vector> filter_deletes(std::vector> &records, ShardID shid, Buffer *buffer) { + if constexpr (!Q::SKIP_DELETE_FILTER) { + return records; + } + + std::vector> processed_records; processed_records.reserve(records.size()); // For delete tagging, we just need to check the delete bit on each @@ -276,7 +303,7 @@ private: continue; } - processed_records.emplace_back(rec.rec); + processed_records.emplace_back(rec); } return processed_records; @@ -305,7 +332,7 @@ private: } } - processed_records.emplace_back(rec.rec); + processed_records.emplace_back(rec); } return processed_records; -- cgit v1.2.3