Skip to main content

reifydb_core/window/
store.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use reifydb_codec::key::encoded::{EncodedKey, EncodedKeyRange};
5use reifydb_value::{Result, value::row_number::RowNumber};
6use serde::{Serialize, de::DeserializeOwned};
7
8pub trait WindowStore {
9	fn state_get<V: DeserializeOwned>(&mut self, key: &EncodedKey) -> Result<Option<V>>;
10
11	fn state_get_many_visit<V: DeserializeOwned>(
12		&mut self,
13		keys: &[EncodedKey],
14		visit: &mut dyn FnMut(EncodedKey, V) -> Result<()>,
15	) -> Result<()>;
16
17	fn state_set<V: Serialize>(&mut self, key: &EncodedKey, value: &V) -> Result<()>;
18
19	fn state_remove(&mut self, key: &EncodedKey) -> Result<()>;
20
21	fn state_drop(&mut self, key: &EncodedKey) -> Result<()>;
22
23	fn internal_get<V: DeserializeOwned>(&mut self, key: &EncodedKey) -> Result<Option<V>>;
24
25	fn internal_get_many_visit<V: DeserializeOwned>(
26		&mut self,
27		keys: &[EncodedKey],
28		visit: &mut dyn FnMut(EncodedKey, V) -> Result<()>,
29	) -> Result<()>;
30
31	fn internal_set<V: Serialize>(&mut self, key: &EncodedKey, value: &V) -> Result<()>;
32
33	fn internal_remove(&mut self, key: &EncodedKey) -> Result<()>;
34
35	fn internal_drop(&mut self, key: &EncodedKey) -> Result<()>;
36
37	fn internal_range_visit<V: DeserializeOwned>(
38		&mut self,
39		range: EncodedKeyRange,
40		limit: Option<usize>,
41		visit: &mut dyn FnMut(EncodedKey, V) -> Result<()>,
42	) -> Result<()>;
43
44	fn get_or_create_row_number(&mut self, key: &EncodedKey) -> Result<(RowNumber, bool)>;
45
46	fn get_or_create_row_numbers(&mut self, keys: &[EncodedKey]) -> Result<Vec<(RowNumber, bool)>>;
47
48	fn drop_row_number(&mut self, key: &EncodedKey) -> Result<()>;
49
50	fn allocate_row_numbers(&mut self, count: u64) -> Result<RowNumber>;
51
52	fn clock_now_nanos(&self) -> u64;
53}