/src/rocksdb/util/write_batch_util.h
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) Meta Platforms, Inc. and affiliates. |
2 | | // |
3 | | // This source code is licensed under both the GPLv2 (found in the |
4 | | // COPYING file in the root directory) and Apache 2.0 License |
5 | | // (found in the LICENSE.Apache file in the root directory). |
6 | | |
7 | | #pragma once |
8 | | #include <unordered_set> |
9 | | #include <vector> |
10 | | |
11 | | #include "rocksdb/slice.h" |
12 | | #include "rocksdb/status.h" |
13 | | #include "rocksdb/write_batch.h" |
14 | | |
15 | | namespace ROCKSDB_NAMESPACE { |
16 | | // ColumnFamilyCollector is a write batch handler which does nothing |
17 | | // except recording unique column family IDs |
18 | | class ColumnFamilyCollector : public WriteBatch::Handler { |
19 | | std::unordered_set<uint32_t> column_family_ids_; |
20 | | |
21 | 0 | Status AddColumnFamilyId(uint32_t column_family_id) { |
22 | 0 | column_family_ids_.insert(column_family_id); |
23 | 0 | return Status::OK(); |
24 | 0 | } |
25 | | |
26 | | public: |
27 | 0 | explicit ColumnFamilyCollector() {} |
28 | | |
29 | 0 | ~ColumnFamilyCollector() override {} |
30 | | |
31 | 0 | Status PutCF(uint32_t column_family_id, const Slice&, const Slice&) override { |
32 | 0 | return AddColumnFamilyId(column_family_id); |
33 | 0 | } |
34 | | |
35 | | Status PutEntityCF(uint32_t column_family_id, const Slice&, |
36 | 0 | const Slice&) override { |
37 | 0 | return AddColumnFamilyId(column_family_id); |
38 | 0 | } |
39 | | |
40 | | Status TimedPutCF(uint32_t column_family_id, const Slice&, const Slice&, |
41 | 0 | uint64_t) override { |
42 | 0 | return AddColumnFamilyId(column_family_id); |
43 | 0 | } |
44 | | |
45 | 0 | Status DeleteCF(uint32_t column_family_id, const Slice&) override { |
46 | 0 | return AddColumnFamilyId(column_family_id); |
47 | 0 | } |
48 | | |
49 | 0 | Status SingleDeleteCF(uint32_t column_family_id, const Slice&) override { |
50 | 0 | return AddColumnFamilyId(column_family_id); |
51 | 0 | } |
52 | | |
53 | | Status DeleteRangeCF(uint32_t column_family_id, const Slice&, |
54 | 0 | const Slice&) override { |
55 | 0 | return AddColumnFamilyId(column_family_id); |
56 | 0 | } |
57 | | |
58 | | Status MergeCF(uint32_t column_family_id, const Slice&, |
59 | 0 | const Slice&) override { |
60 | 0 | return AddColumnFamilyId(column_family_id); |
61 | 0 | } |
62 | | |
63 | | Status PutBlobIndexCF(uint32_t column_family_id, const Slice&, |
64 | 0 | const Slice&) override { |
65 | 0 | return AddColumnFamilyId(column_family_id); |
66 | 0 | } |
67 | | |
68 | 0 | Status MarkBeginPrepare(bool) override { return Status::OK(); } |
69 | | |
70 | 0 | Status MarkEndPrepare(const Slice&) override { return Status::OK(); } |
71 | | |
72 | 0 | Status MarkRollback(const Slice&) override { return Status::OK(); } |
73 | | |
74 | 0 | Status MarkCommit(const Slice&) override { return Status::OK(); } |
75 | | |
76 | 0 | Status MarkCommitWithTimestamp(const Slice&, const Slice&) override { |
77 | 0 | return Status::OK(); |
78 | 0 | } |
79 | | |
80 | 0 | Status MarkNoop(bool) override { return Status::OK(); } |
81 | | |
82 | 0 | const std::unordered_set<uint32_t>& column_families() const { |
83 | 0 | return column_family_ids_; |
84 | 0 | } |
85 | | }; |
86 | | |
87 | | Status CollectColumnFamilyIdsFromWriteBatch( |
88 | | const WriteBatch& batch, std::vector<uint32_t>* column_family_ids); |
89 | | |
90 | | } // namespace ROCKSDB_NAMESPACE |