Skip to main content

linkrs_storage/engine/sync_wrapper/
reader.rs

1use super::SyncWrapper;
2use crate::cursor::{EdgeCursor, IndexCursor, IndexRow, IndexScanPlan, ScanOptions, VertexCursor};
3use crate::macros::forward_methods;
4use crate::{StorageClient, StorageReader};
5use linkrs_core::types::{EdgeTypeInfo, TagInfo, VertexId};
6use linkrs_core::{Edge, StorageError, Value, Vertex};
7use std::sync::Arc;
8
9impl<S: StorageClient + 'static> StorageReader for SyncWrapper<S> {
10    forward_methods!(inner;
11        fn get_vertex(&self, space: &str, tag: &str, id: &VertexId) -> Result<Option<Vertex>, StorageError>;
12        fn layout_version(&self) -> u64;
13        fn vertex_id_domain(&self, space: &str) -> Option<std::ops::Range<i64>>;
14        fn get_vertex_projected(&self, space: &str, tag: &str, id: &VertexId, projection: &[std::sync::Arc<str>]) -> Result<Option<Vertex>, StorageError>;
15        fn scan_vertices(&self, space: &str) -> Result<Vec<Vertex>, StorageError>;
16        fn scan_vertices_by_tag(&self, space: &str, tag: &str) -> Result<Vec<Vertex>, StorageError>;
17        fn scan_vertices_by_tag_paginated(&self, space: &str, tag: &str, offset: usize, limit: usize) -> Result<Vec<Vertex>, StorageError>;
18        fn scan_vertices_by_prop(
19            &self,
20            space: &str,
21            tag: &str,
22            prop: &str,
23            value: &Value,
24        ) -> Result<Vec<Vertex>, StorageError>;
25        fn get_edge(
26            &self,
27            space: &str,
28            src: &VertexId,
29            dst: &VertexId,
30            edge_type: &str,
31            rank: i64,
32        ) -> Result<Option<Edge>, StorageError>;
33        fn get_edge_projected(
34            &self,
35            space: &str,
36            src: &VertexId,
37            dst: &VertexId,
38            edge_type: &str,
39            rank: i64,
40            projection: &[Arc<str>],
41        ) -> Result<Option<Edge>, StorageError>;
42        fn get_node_edges(
43            &self,
44            space: &str,
45            node_id: &VertexId,
46            direction: linkrs_core::EdgeDirection,
47            edge_types: &[String],
48        ) -> Result<Vec<Edge>, StorageError>;
49        fn get_node_edges_projected(
50            &self,
51            space: &str,
52            node_id: &VertexId,
53            direction: linkrs_core::EdgeDirection,
54            edge_types: &[String],
55            projection: Option<&[Arc<str>]>,
56            limit: Option<usize>,
57        ) -> Result<Vec<Edge>, StorageError>;
58        fn get_vertices_batch(
59            &self,
60            space: &str,
61            tag: &str,
62            ids: &[VertexId],
63        ) -> Result<Vec<Option<Vertex>>, StorageError>;
64        fn get_vertices_projected_batch(
65            &self,
66            space: &str,
67            tag: &str,
68            ids: &[VertexId],
69            projection: &[std::sync::Arc<str>],
70        ) -> Result<Vec<Option<Vertex>>, StorageError>;
71        fn neighbor_dst_ids_batch(
72            &self,
73            space: &str,
74            src_ids: &[VertexId],
75            direction: linkrs_core::EdgeDirection,
76            edge_types: &[String],
77        ) -> Result<Vec<Vec<VertexId>>, StorageError>;
78        fn out_degree_batch(
79            &self,
80            space: &str,
81            src_ids: &[VertexId],
82            direction: linkrs_core::EdgeDirection,
83            edge_types: &[String],
84        ) -> Result<Vec<usize>, StorageError>;
85        fn scan_edges_by_type(&self, space: &str, edge_type: &str) -> Result<Vec<Edge>, StorageError>;
86        fn scan_all_edges(&self, space: &str) -> Result<Vec<Edge>, StorageError>;
87        fn scan_edges_by_type_paginated(&self, space: &str, edge_type: &str, offset: usize, limit: usize) -> Result<Vec<Edge>, StorageError>;
88        fn count_vertices_by_tag(&self, space: &str, tag: &str) -> Result<u64, StorageError>;
89        fn count_edges_by_type(&self, space: &str, edge_type: &str) -> Result<u64, StorageError>;
90        fn enable_edge_property_index(&self, space: &str, edge_type: &str, pool_capacity: u64) -> Result<bool, StorageError>;
91        fn has_edge_property_index(&self, space: &str, edge_type: &str) -> Result<bool, StorageError>;
92        fn disable_edge_property_index(&self, space: &str, edge_type: &str) -> Result<(), StorageError>;
93        fn lookup_edges_by_property_range(&self, space: &str, edge_type: &str, prop_name: &str, lower: Option<&Value>, upper: Option<&Value>, include_lower: bool, include_upper: bool) -> Result<Vec<Edge>, StorageError>;
94        fn lookup_index(
95            &self,
96            space: &str,
97            index: &str,
98            value: &Value,
99        ) -> Result<Vec<Value>, StorageError>;
100        fn get_vertex_with_schema(
101            &self,
102            space: &str,
103            tag: &str,
104            id: &Value,
105        ) -> Result<Option<(TagInfo, Vec<u8>)>, StorageError>;
106        fn get_edge_with_schema(
107            &self,
108            space: &str,
109            edge_type: &str,
110            src: &Value,
111            dst: &Value,
112        ) -> Result<Option<(EdgeTypeInfo, Vec<u8>)>, StorageError>;
113        fn scan_vertices_with_schema(
114            &self,
115            space: &str,
116            tag: &str,
117        ) -> Result<Vec<(TagInfo, Vec<u8>)>, StorageError>;
118        fn scan_edges_with_schema(
119            &self,
120            space: &str,
121            edge_type: &str,
122        ) -> Result<Vec<(EdgeTypeInfo, Vec<u8>)>, StorageError>;
123        fn get_space(
124            &self,
125            space: &str,
126        ) -> Result<Option<linkrs_core::types::SpaceInfo>, StorageError>;
127        fn get_space_by_id(
128            &self,
129            space_id: u64,
130        ) -> Result<Option<linkrs_core::types::SpaceInfo>, StorageError>;
131        fn list_spaces(&self) -> Result<Vec<linkrs_core::types::SpaceInfo>, StorageError>;
132        fn get_space_id(&self, space: &str) -> Result<u64, StorageError>;
133        fn space_exists(&self, space: &str) -> bool;
134        fn get_tag(
135            &self,
136            space: &str,
137            tag: &str,
138        ) -> Result<Option<linkrs_core::types::TagInfo>, StorageError>;
139        fn list_tags(&self, space: &str) -> Result<Vec<linkrs_core::types::TagInfo>, StorageError>;
140        fn get_edge_type(
141            &self,
142            space: &str,
143            edge: &str,
144        ) -> Result<Option<linkrs_core::types::EdgeTypeInfo>, StorageError>;
145        fn list_edge_types(
146            &self,
147            space: &str,
148        ) -> Result<Vec<linkrs_core::types::EdgeTypeInfo>, StorageError>;
149        fn resolve_edge_type_name(&self, space: &str, hash: u32) -> Result<Option<String>, StorageError>;
150        fn get_tag_index(
151            &self,
152            space: &str,
153            index: &str,
154        ) -> Result<Option<linkrs_core::types::Index>, StorageError>;
155        fn list_tag_indexes(
156            &self,
157            space: &str,
158        ) -> Result<Vec<linkrs_core::types::Index>, StorageError>;
159        fn get_edge_index(
160            &self,
161            space: &str,
162            index: &str,
163        ) -> Result<Option<linkrs_core::types::Index>, StorageError>;
164        fn list_edge_indexes(
165            &self,
166            space: &str,
167        ) -> Result<Vec<linkrs_core::types::Index>, StorageError>;
168        fn get_vertex_version_history(
169            &self,
170            space: &str,
171            tag: &str,
172        ) -> Result<Option<crate::LabelVersionHistory>, StorageError>;
173        fn get_edge_version_history(
174            &self,
175            space: &str,
176            edge_type: &str,
177        ) -> Result<Option<crate::LabelVersionHistory>, StorageError>;
178        fn get_vertex_schema_changes(
179            &self,
180            space: &str,
181            tag: &str,
182            from_version: u64,
183            to_version: u64,
184        ) -> Result<Vec<crate::PropertyChange>, StorageError>;
185        fn get_edge_schema_changes(
186            &self,
187            space: &str,
188            edge_type: &str,
189            from_version: u64,
190            to_version: u64,
191        ) -> Result<Vec<crate::PropertyChange>, StorageError>;
192        fn detect_vertex_breaking_changes(
193            &self,
194            space: &str,
195            tag: &str,
196            from_version: u64,
197            to_version: u64,
198        ) -> Result<Vec<crate::PropertyChange>, StorageError>;
199        fn detect_edge_breaking_changes(
200            &self,
201            space: &str,
202            edge_type: &str,
203            from_version: u64,
204            to_version: u64,
205        ) -> Result<Vec<crate::PropertyChange>, StorageError>;
206        fn create_vertex_cursor(
207            &self,
208            space: &str,
209            options: &ScanOptions,
210        ) -> Result<Box<dyn VertexCursor>, StorageError>;
211        fn create_edge_cursor(
212            &self,
213            space: &str,
214            options: &ScanOptions,
215        ) -> Result<Box<dyn EdgeCursor>, StorageError>;
216        fn create_index_cursor(
217            &self,
218            plan: &IndexScanPlan,
219        ) -> Result<Box<dyn IndexCursor<Row = IndexRow>>, StorageError>;
220        fn list_migration_history(&self, space: &str, label: &str, is_edge: bool) -> Result<Vec<crate::MigrationHistoryRecord>, StorageError>;
221        fn get_applied_versions(&self, space: &str, label: &str, is_edge: bool) -> Result<Vec<u64>, StorageError>;
222        fn record_migration_history(&self, record: crate::MigrationHistoryRecord) -> Result<(), StorageError>;
223        fn list_all_migration_history(&self) -> Result<Vec<crate::MigrationHistoryRecord>, StorageError>;
224    );
225}