Skip to content

Commit 3edd0c4

Browse files
committed
fix: use std::optional to avoid default-constructible BloomFilter requirement
1 parent 0e2b3f6 commit 3edd0c4

1 file changed

Lines changed: 8 additions & 7 deletions

File tree

src/main.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <cstdint>
1919
#include <cstring>
2020
#include <exception>
21+
#include <optional>
2122
#include <iostream>
2223
#include <memory>
2324
#include <sstream>
@@ -572,12 +573,12 @@ int main(int argc, char* argv[]) {
572573
std::string delivery_errors;
573574

574575
// Hoist bloom filter and key resolution out of per-destination loop
575-
cloudsql::common::BloomFilter bloom;
576+
std::optional<cloudsql::common::BloomFilter> bloom;
576577
bool have_bloom = false;
577-
size_t key_idx = static_cast<size_t>(-1);
578+
size_t bloom_key_idx = static_cast<size_t>(-1);
578579

579580
if (cluster_manager->has_bloom_filter(args.context_id)) {
580-
bloom = cluster_manager->get_bloom_filter(args.context_id);
581+
bloom.emplace(cluster_manager->get_bloom_filter(args.context_id));
581582
std::string probe_key_col =
582583
cluster_manager->get_probe_key_col(args.context_id);
583584

@@ -588,13 +589,13 @@ int main(int argc, char* argv[]) {
588589
const auto* table_meta = table_meta_opt.value();
589590
for (size_t i = 0; i < table_meta->columns.size(); ++i) {
590591
if (table_meta->columns[i].name == probe_key_col) {
591-
key_idx = i;
592+
bloom_key_idx = i;
592593
break;
593594
}
594595
}
595596
}
596597
}
597-
have_bloom = (key_idx != static_cast<size_t>(-1));
598+
have_bloom = (bloom_key_idx != static_cast<size_t>(-1));
598599
}
599600

600601
for (auto& [node_id, rows] : partitions) {
@@ -618,11 +619,11 @@ int main(int argc, char* argv[]) {
618619
// Apply bloom filter on sender side before sending
619620
std::vector<cloudsql::executor::Tuple> rows_to_send =
620621
std::move(rows);
621-
if (have_bloom) {
622+
if (have_bloom && bloom.has_value()) {
622623
std::vector<cloudsql::executor::Tuple> filtered;
623624
filtered.reserve(rows_to_send.size());
624625
for (auto& row : rows_to_send) {
625-
if (bloom.might_contain(row.get(key_idx))) {
626+
if (bloom->might_contain(row.get(bloom_key_idx))) {
626627
filtered.push_back(std::move(row));
627628
}
628629
}

0 commit comments

Comments
 (0)