Skip to main content

grovedb_version/version/
grovedb_versions.rs

1use versioned_feature_core::FeatureVersion;
2
3#[derive(Clone, Debug, Default)]
4pub struct GroveDBVersions {
5    pub apply_batch: GroveDBApplyBatchVersions,
6    pub element: GroveDBElementMethodVersions,
7    pub operations: GroveDBOperationsVersions,
8    pub aggregate_sum_path_query_methods: GroveDBAggregateSumPathQueryMethodVersions,
9    pub path_query_methods: GroveDBPathQueryMethodVersions,
10    pub replication: GroveDBReplicationVersions,
11    pub query_limits: GroveDBQueryLimits,
12}
13
14#[derive(Clone, Debug)]
15pub struct GroveDBQueryLimits {
16    pub max_aggregate_sum_query_elements_scanned: u16,
17}
18
19impl Default for GroveDBQueryLimits {
20    fn default() -> Self {
21        Self {
22            max_aggregate_sum_query_elements_scanned: 1024,
23        }
24    }
25}
26
27#[derive(Clone, Debug, Default)]
28pub struct GroveDBAggregateSumPathQueryMethodVersions {
29    pub merge: FeatureVersion,
30}
31
32#[derive(Clone, Debug, Default)]
33pub struct GroveDBPathQueryMethodVersions {
34    pub terminal_keys: FeatureVersion,
35    pub merge: FeatureVersion,
36    pub query_items_at_path: FeatureVersion,
37    pub should_add_parent_tree_at_path: FeatureVersion,
38}
39
40#[derive(Clone, Debug, Default)]
41pub struct GroveDBApplyBatchVersions {
42    pub apply_batch_structure: FeatureVersion,
43    pub apply_body: FeatureVersion,
44    pub continue_partial_apply_body: FeatureVersion,
45    pub apply_operations_without_batching: FeatureVersion,
46    pub apply_batch: FeatureVersion,
47    pub apply_partial_batch: FeatureVersion,
48    pub open_batch_transactional_merk_at_path: FeatureVersion,
49    pub open_batch_merk_at_path: FeatureVersion,
50    pub apply_batch_with_element_flags_update: FeatureVersion,
51    pub apply_partial_batch_with_element_flags_update: FeatureVersion,
52    pub estimated_case_operations_for_batch: FeatureVersion,
53}
54
55#[derive(Clone, Debug, Default)]
56pub struct GroveDBOperationsVersions {
57    pub get: GroveDBOperationsGetVersions,
58    pub insert: GroveDBOperationsInsertVersions,
59    pub delete: GroveDBOperationsDeleteVersions,
60    pub delete_up_tree: GroveDBOperationsDeleteUpTreeVersions,
61    pub query: GroveDBOperationsQueryVersions,
62    pub proof: GroveDBOperationsProofVersions,
63    pub average_case: GroveDBOperationsAverageCaseVersions,
64    pub worst_case: GroveDBOperationsWorstCaseVersions,
65}
66
67#[derive(Clone, Debug, Default)]
68pub struct GroveDBOperationsGetVersions {
69    pub get: FeatureVersion,
70    pub get_caching_optional: FeatureVersion,
71    pub follow_reference: FeatureVersion,
72    pub follow_reference_once: FeatureVersion,
73    pub get_raw: FeatureVersion,
74    pub get_raw_caching_optional: FeatureVersion,
75    pub get_raw_optional: FeatureVersion,
76    pub get_raw_optional_caching_optional: FeatureVersion,
77    pub has_raw: FeatureVersion,
78    pub check_subtree_exists_invalid_path: FeatureVersion,
79    pub average_case_for_has_raw: FeatureVersion,
80    pub average_case_for_has_raw_tree: FeatureVersion,
81    pub average_case_for_get_raw: FeatureVersion,
82    pub average_case_for_get: FeatureVersion,
83    pub average_case_for_get_tree: FeatureVersion,
84    pub worst_case_for_has_raw: FeatureVersion,
85    pub worst_case_for_get_raw: FeatureVersion,
86    pub worst_case_for_get: FeatureVersion,
87    pub is_empty_tree: FeatureVersion,
88}
89
90#[derive(Clone, Debug, Default)]
91pub struct GroveDBOperationsProofVersions {
92    pub prove_query: FeatureVersion,
93    pub prove_query_many: FeatureVersion,
94    pub prove_query_non_serialized: FeatureVersion,
95    pub prove_trunk_chunk: FeatureVersion,
96    pub prove_trunk_chunk_non_serialized: FeatureVersion,
97    pub prove_branch_chunk: FeatureVersion,
98    pub prove_branch_chunk_non_serialized: FeatureVersion,
99    pub verify_query_with_options: FeatureVersion,
100    pub verify_query_raw: FeatureVersion,
101    pub verify_layer_proof: FeatureVersion,
102    pub verify_query: FeatureVersion,
103    pub verify_subset_query: FeatureVersion,
104    pub verify_query_with_absence_proof: FeatureVersion,
105    pub verify_subset_query_with_absence_proof: FeatureVersion,
106    pub verify_query_with_chained_path_queries: FeatureVersion,
107    pub verify_query_get_parent_tree_info_with_options: FeatureVersion,
108}
109
110#[derive(Clone, Debug, Default)]
111pub struct GroveDBOperationsQueryVersions {
112    pub query_encoded_many: FeatureVersion,
113    pub query_many_raw: FeatureVersion,
114    pub get_proved_path_query: FeatureVersion,
115    pub query: FeatureVersion,
116    pub query_item_value: FeatureVersion,
117    pub query_item_value_or_sum: FeatureVersion,
118    pub query_aggregate_sums: FeatureVersion,
119    pub query_aggregate_count_on_range: FeatureVersion,
120    pub query_aggregate_sum_on_range: FeatureVersion,
121    pub query_aggregate_count_and_sum_on_range: FeatureVersion,
122    pub query_sums: FeatureVersion,
123    pub query_raw: FeatureVersion,
124    pub query_keys_optional: FeatureVersion,
125    pub query_raw_keys_optional: FeatureVersion,
126    pub follow_element: FeatureVersion,
127}
128
129#[derive(Clone, Debug, Default)]
130pub struct GroveDBOperationsAverageCaseVersions {
131    pub add_average_case_get_merk_at_path: FeatureVersion,
132    pub average_case_merk_replace_tree: FeatureVersion,
133    pub average_case_merk_insert_tree: FeatureVersion,
134    pub average_case_merk_delete_tree: FeatureVersion,
135    pub average_case_merk_insert_element: FeatureVersion,
136    pub average_case_merk_replace_element: FeatureVersion,
137    pub average_case_merk_patch_element: FeatureVersion,
138    pub average_case_merk_delete_element: FeatureVersion,
139    pub add_average_case_has_raw_cost: FeatureVersion,
140    pub add_average_case_has_raw_tree_cost: FeatureVersion,
141    pub add_average_case_get_raw_cost: FeatureVersion,
142    pub add_average_case_get_raw_tree_cost: FeatureVersion,
143    pub add_average_case_get_cost: FeatureVersion,
144}
145
146#[derive(Clone, Debug, Default)]
147pub struct GroveDBOperationsWorstCaseVersions {
148    pub add_worst_case_get_merk_at_path: FeatureVersion,
149    pub worst_case_merk_replace_tree: FeatureVersion,
150    pub worst_case_merk_insert_tree: FeatureVersion,
151    pub worst_case_merk_delete_tree: FeatureVersion,
152    pub worst_case_merk_insert_element: FeatureVersion,
153    pub worst_case_merk_replace_element: FeatureVersion,
154    pub worst_case_merk_patch_element: FeatureVersion,
155    pub worst_case_merk_delete_element: FeatureVersion,
156    pub add_worst_case_has_raw_cost: FeatureVersion,
157    pub add_worst_case_get_raw_tree_cost: FeatureVersion,
158    pub add_worst_case_get_raw_cost: FeatureVersion,
159    pub add_worst_case_get_cost: FeatureVersion,
160}
161
162#[derive(Clone, Debug, Default)]
163pub struct GroveDBOperationsInsertVersions {
164    pub insert: FeatureVersion,
165    pub insert_on_transaction: FeatureVersion,
166    pub insert_without_transaction: FeatureVersion,
167    pub add_element_on_transaction: FeatureVersion,
168    pub add_element_without_transaction: FeatureVersion,
169    pub insert_if_not_exists: FeatureVersion,
170    pub insert_if_not_exists_return_existing_element: FeatureVersion,
171    pub insert_if_changed_value: FeatureVersion,
172}
173
174#[derive(Clone, Debug, Default)]
175pub struct GroveDBOperationsDeleteVersions {
176    pub delete: FeatureVersion,
177    pub clear_subtree: FeatureVersion,
178    pub delete_with_sectional_storage_function: FeatureVersion,
179    pub delete_if_empty_tree: FeatureVersion,
180    pub delete_if_empty_tree_with_sectional_storage_function: FeatureVersion,
181    pub delete_operation_for_delete_internal: FeatureVersion,
182    pub delete_internal_on_transaction: FeatureVersion,
183    pub delete_internal_without_transaction: FeatureVersion,
184    pub average_case_delete_operation_for_delete: FeatureVersion,
185    pub worst_case_delete_operation_for_delete: FeatureVersion,
186}
187
188#[derive(Clone, Debug, Default)]
189pub struct GroveDBOperationsDeleteUpTreeVersions {
190    pub delete_up_tree_while_empty: FeatureVersion,
191    pub delete_up_tree_while_empty_with_sectional_storage: FeatureVersion,
192    pub delete_operations_for_delete_up_tree_while_empty: FeatureVersion,
193    pub add_delete_operations_for_delete_up_tree_while_empty: FeatureVersion,
194    pub average_case_delete_operations_for_delete_up_tree_while_empty: FeatureVersion,
195    pub worst_case_delete_operations_for_delete_up_tree_while_empty: FeatureVersion,
196}
197
198#[derive(Clone, Debug, Default)]
199pub struct GroveDBOperationsApplyBatchVersions {
200    pub apply_batch_structure: FeatureVersion,
201    pub apply_body: FeatureVersion,
202    pub continue_partial_apply_body: FeatureVersion,
203    pub apply_operations_without_batching: FeatureVersion,
204    pub apply_batch: FeatureVersion,
205    pub apply_partial_batch: FeatureVersion,
206    pub open_batch_transactional_merk_at_path: FeatureVersion,
207    pub open_batch_merk_at_path: FeatureVersion,
208    pub apply_batch_with_element_flags_update: FeatureVersion,
209    pub apply_partial_batch_with_element_flags_update: FeatureVersion,
210    pub estimated_case_operations_for_batch: FeatureVersion,
211}
212
213#[derive(Clone, Debug, Default)]
214pub struct GroveDBElementMethodVersions {
215    pub delete: FeatureVersion,
216    pub delete_with_sectioned_removal_bytes: FeatureVersion,
217    pub delete_into_batch_operations: FeatureVersion,
218    pub element_at_key_already_exists: FeatureVersion,
219    pub get: FeatureVersion,
220    pub get_optional: FeatureVersion,
221    pub get_from_storage: FeatureVersion,
222    pub get_optional_from_storage: FeatureVersion,
223    pub get_with_absolute_refs: FeatureVersion,
224    pub get_value_hash: FeatureVersion,
225    pub get_with_value_hash: FeatureVersion,
226    pub get_specialized_cost: FeatureVersion,
227    pub value_defined_cost: FeatureVersion,
228    pub value_defined_cost_for_serialized_value: FeatureVersion,
229    pub specialized_costs_for_key_value: FeatureVersion,
230    pub required_item_space: FeatureVersion,
231    pub required_item_with_sum_item_space: FeatureVersion,
232    pub required_reference_with_sum_item_space: FeatureVersion,
233    pub insert: FeatureVersion,
234    pub insert_into_batch_operations: FeatureVersion,
235    pub insert_if_not_exists: FeatureVersion,
236    pub insert_if_not_exists_into_batch_operations: FeatureVersion,
237    pub insert_if_changed_value: FeatureVersion,
238    pub insert_if_changed_value_into_batch_operations: FeatureVersion,
239    pub insert_reference: FeatureVersion,
240    pub insert_reference_into_batch_operations: FeatureVersion,
241    pub insert_reference_if_changed_value: FeatureVersion,
242    pub insert_subtree: FeatureVersion,
243    pub insert_subtree_into_batch_operations: FeatureVersion,
244    pub get_query: FeatureVersion,
245    pub get_aggregate_sum_query: FeatureVersion,
246    pub get_query_values: FeatureVersion,
247    pub get_query_apply_function: FeatureVersion,
248    pub get_path_query: FeatureVersion,
249    pub get_sized_query: FeatureVersion,
250    pub get_aggregate_sum_query_apply_function: FeatureVersion,
251    pub path_query_push: FeatureVersion,
252    pub aggregate_sum_path_query_push: FeatureVersion,
253    pub query_item: FeatureVersion,
254    pub basic_push: FeatureVersion,
255    pub basic_aggregate_sum_push: FeatureVersion,
256    // AUDIT NOTE (issue #717 — intentional, do not re-flag): the element
257    // serialize/serialized_size/deserialize codec versions are `0` for EVERY
258    // protocol version (v1/v2/v3), and that is correct. Element bincode
259    // encoding is protocol-INDEPENDENT: each variant's discriminant is fixed by
260    // declaration order and new variants are only ever *appended* (see the
261    // append-only discriminant contract in `grovedb-element/src/element_type.rs`
262    // and the `ProvableSumTree`/`ProvableCountProvableSumTree` notes in
263    // `element/mod.rs`). A newer variant therefore serializes and deserializes
264    // identically regardless of the protocol version constant, so there is no
265    // "newer variant serialized under an older format" hazard. These codec
266    // versions are a cost-accounting selector, NOT a wire-format gate — bumping
267    // them for new variants would break the append-only compatibility contract.
268    // Whether a given protocol should *construct* a newer variant at all is a
269    // concern for the higher-level insert/validation logic, not for this codec,
270    // which deliberately stays version-agnostic.
271    pub serialize: FeatureVersion,
272    pub serialized_size: FeatureVersion,
273    pub deserialize: FeatureVersion,
274    pub aggregate_sum_query_item: FeatureVersion,
275}
276
277#[derive(Clone, Debug, Default)]
278pub struct GroveDBReplicationVersions {
279    pub get_subtrees_metadata: FeatureVersion,
280    pub fetch_chunk: FeatureVersion,
281    pub start_snapshot_syncing: FeatureVersion,
282    pub apply_chunk: FeatureVersion,
283}