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