summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/framework/DynamicExtension.h20
-rw-r--r--include/shard/MemISAM.h2
-rw-r--r--include/shard/WIRS.h8
3 files changed, 16 insertions, 14 deletions
diff --git a/include/framework/DynamicExtension.h b/include/framework/DynamicExtension.h
index 91d41f8..2dcbf18 100644
--- a/include/framework/DynamicExtension.h
+++ b/include/framework/DynamicExtension.h
@@ -142,24 +142,27 @@ public:
level->get_query_states(shards, states, parms);
}
- std::vector<std::vector<R>*> query_results(shards.size() + 1, nullptr);
+ std::vector<std::vector<R>> query_results(shards.size() + 1);
// Execute the query for the buffer
- query_results[0] = filter_deletes(Q::buffer_query(buffer, buffer_state, parms), {-1, -1}, buffer);
+ auto buffer_results = Q::buffer_query(buffer, buffer_state, parms);
+ query_results[0] = filter_deletes(buffer_results, {-1, -1}, buffer);
// Execute the query for each shard
for (size_t i=0; i<shards.size(); i++) {
- query_results[i] = filter_deletes(Q::query(shards[i].second, states[i], parms), shards[i].first, buffer);
+ auto shard_results = Q::query(shards[i].second, states[i], parms);
+ query_results[i] = filter_deletes(shard_results, shards[i].first, buffer);
}
// Merge the results together
- auto result = Q::merge(&query_results);
+ auto result = Q::merge(query_results);
for (size_t i=0; i<query_results.size(); i++) {
- delete query_results[i];
Q::delete_query_state(states[i]);
}
+ Q::delete_buffer_query_state(buffer_state);
+
return result;
}
@@ -282,9 +285,9 @@ private:
return buffer->append(rec, ts);
}
- std::vector<R> filter_deletes(std::vector<Wrapped<R>> *records, ShardID shid, Buffer *buffer) {
+ std::vector<R> filter_deletes(std::vector<Wrapped<R>> &records, ShardID shid, Buffer *buffer) {
std::vector<R> processed_records;
- processed_records->reserve(records->size());
+ processed_records.reserve(records.size());
// For delete tagging, we just need to check the delete bit on each
// record.
@@ -297,7 +300,6 @@ private:
processed_records.emplace_back(rec.rec);
}
- delete records;
return processed_records;
}
@@ -327,7 +329,7 @@ private:
processed_records.emplace_back(rec.rec);
}
- delete records;
+ return processed_records;
}
/*
diff --git a/include/shard/MemISAM.h b/include/shard/MemISAM.h
index 8ac17e4..7bfbd3f 100644
--- a/include/shard/MemISAM.h
+++ b/include/shard/MemISAM.h
@@ -180,7 +180,7 @@ public:
return m_tombstone_cnt;
}
- R *point_lookup(R &rec, bool filter) {
+ R *point_lookup(const R &rec, bool filter) {
if (filter && !m_bf->lookup(rec.key)) {
return nullptr;
diff --git a/include/shard/WIRS.h b/include/shard/WIRS.h
index 7e3f468..020df19 100644
--- a/include/shard/WIRS.h
+++ b/include/shard/WIRS.h
@@ -203,7 +203,7 @@ public:
free_tree(m_root);
}
- Wrapped<R> *point_lookup(R &rec, bool filter=false) {
+ Wrapped<R> *point_lookup(const R &rec, bool filter=false) {
if (filter && !m_bf->lookup(rec.key)) {
return nullptr;
}
@@ -213,9 +213,9 @@ public:
return nullptr;
}
- while (idx < m_reccnt && m_data[idx] < rec) ++idx;
+ while (idx < m_reccnt && m_data[idx].rec < rec) ++idx;
- if (m_data[idx] == rec) {
+ if (m_data[idx].rec == rec) {
return m_data + idx;
}
@@ -254,7 +254,7 @@ private:
while (min < max) {
size_t mid = (min + max) / 2;
- if (key > m_data[mid].key) {
+ if (key > m_data[mid].rec.key) {
min = mid + 1;
} else {
max = mid;