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}