diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/framework/DynamicExtension.h | 20 | ||||
| -rw-r--r-- | include/shard/MemISAM.h | 2 | ||||
| -rw-r--r-- | include/shard/WIRS.h | 8 |
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; |