gqlite 1.2.3 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/Cargo.toml +20 -0
- data/ext/gqlitedb/Cargo.toml +77 -0
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/benches/common/pokec.rs +30 -20
- data/ext/gqlitedb/gqlite_bench_data/README.MD +6 -0
- data/ext/gqlitedb/gqlite_bench_data/scripts/generate_smaller_pokec.rb +85 -0
- data/ext/gqlitedb/gqlite_bench_data/scripts/to_efficient_pokec.rb +34 -0
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/aggregators/arithmetic.rs +1 -0
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/aggregators/stats.rs +27 -49
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/aggregators.rs +7 -7
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/capi.rs +10 -9
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/compiler/expression_analyser.rs +6 -4
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/compiler/variables_manager.rs +27 -31
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/compiler.rs +37 -41
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/connection.rs +42 -84
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/error.rs +105 -34
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/containers.rs +21 -26
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/edge.rs +2 -2
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/math.rs +2 -2
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/node.rs +1 -1
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/path.rs +15 -20
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/scalar.rs +2 -2
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/value.rs +6 -6
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions.rs +20 -20
- data/ext/gqlitedb/src/graph.rs +11 -0
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/interpreter/evaluators.rs +160 -194
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/interpreter/instructions.rs +2 -1
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/lib.rs +9 -4
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/parser/ast.rs +44 -52
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/parser/gql.pest +1 -1
- data/ext/{gqliterb/vendor/gqlitedb/src/parser/parser.rs → gqlitedb/src/parser/parser_impl.rs} +50 -28
- data/ext/gqlitedb/src/parser.rs +4 -0
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/prelude.rs +3 -2
- data/ext/gqlitedb/src/query_result.rs +88 -0
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/store/redb.rs +226 -148
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/store/sqlite.rs +111 -128
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/store.rs +22 -22
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/evaluators.rs +32 -76
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/store.rs +95 -111
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/templates/ast.rs +29 -29
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/templates/programs.rs +4 -4
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/value/compare.rs +13 -20
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/value/contains.rs +2 -2
- data/ext/gqlitedb/src/value.rs +225 -0
- data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/value_table.rs +15 -5
- data/ext/gqliterb/Cargo.toml +12 -35
- data/ext/gqliterb/src/lib.rs +60 -38
- data/ext/graphcore/Cargo.toml +19 -0
- data/ext/graphcore/README.MD +4 -0
- data/ext/graphcore/release.toml +1 -0
- data/ext/graphcore/src/error.rs +28 -0
- data/ext/{gqliterb/vendor/gqlitedb → graphcore}/src/graph.rs +134 -38
- data/ext/graphcore/src/lib.rs +16 -0
- data/ext/graphcore/src/prelude.rs +4 -0
- data/ext/{gqliterb/vendor/gqlitedb → graphcore}/src/serialize_with.rs +2 -2
- data/ext/graphcore/src/table.rs +272 -0
- data/ext/{gqliterb/vendor/gqlitedb → graphcore}/src/value/value_map.rs +44 -49
- data/ext/graphcore/src/value.rs +413 -0
- metadata +94 -83
- data/ext/gqliterb/.cargo/config.toml +0 -2
- data/ext/gqliterb/Cargo.lock +0 -1116
- data/ext/gqliterb/vendor/gqlitedb/Cargo.lock +0 -2115
- data/ext/gqliterb/vendor/gqlitedb/Cargo.toml +0 -138
- data/ext/gqliterb/vendor/gqlitedb/src/parser.rs +0 -4
- data/ext/gqliterb/vendor/gqlitedb/src/value.rs +0 -609
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/askama.toml +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/benches/common/mod.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/benches/pokec_divan.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/benches/pokec_iai.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/release.toml +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/aggregators/containers.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/aggregators/count.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/consts.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/string.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/interpreter/mod.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/store/pgql.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/compiler.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/parser.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/store/redb.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/store/sqlite.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/templates.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/utils.rs +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/call_stats.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/edge_count_for_node.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/edge_create.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/edge_delete.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/edge_delete_by_nodes.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/edge_select.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/edge_update.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/graph_create.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/graph_delete.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/metadata_create_table.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/metadata_get.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/metadata_set.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/node_create.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/node_delete.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/node_select.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/node_update.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/table_exists.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/upgrade_from_1_01.sql +0 -0
- /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/upgrade_graph_from_1_01.sql +0 -0
@@ -102,16 +102,16 @@ where
|
|
102
102
|
{
|
103
103
|
// Add two nodes
|
104
104
|
let nodes = [
|
105
|
-
graph::Node
|
106
|
-
|
107
|
-
|
108
|
-
key
|
109
|
-
|
110
|
-
graph::Node
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
105
|
+
graph::Node::new(
|
106
|
+
graph::Key::default(),
|
107
|
+
graph::labels!("hello", "world"),
|
108
|
+
value::value_map!("key" => 42i64),
|
109
|
+
),
|
110
|
+
graph::Node::new(
|
111
|
+
graph::Key::default(),
|
112
|
+
graph::labels!("not"),
|
113
|
+
Default::default(),
|
114
|
+
),
|
115
115
|
];
|
116
116
|
|
117
117
|
check_stats(&store, None, 0, 0, 0, 0);
|
@@ -119,7 +119,7 @@ where
|
|
119
119
|
let mut tx = store.begin_write().unwrap();
|
120
120
|
|
121
121
|
store
|
122
|
-
.create_nodes(tx.borrow_mut(),
|
122
|
+
.create_nodes(tx.borrow_mut(), "default", nodes.iter())
|
123
123
|
.unwrap();
|
124
124
|
tx.close().unwrap();
|
125
125
|
check_stats(&store, None, 2, 0, 3, 1);
|
@@ -127,8 +127,8 @@ where
|
|
127
127
|
let selected_nodes = store
|
128
128
|
.select_nodes(
|
129
129
|
store.begin_read().unwrap().borrow_mut(),
|
130
|
-
|
131
|
-
store::SelectNodeQuery::select_keys([nodes[0].key]),
|
130
|
+
"default",
|
131
|
+
store::SelectNodeQuery::select_keys([nodes[0].key()]),
|
132
132
|
)
|
133
133
|
.unwrap();
|
134
134
|
|
@@ -138,7 +138,7 @@ where
|
|
138
138
|
let selected_nodes = store
|
139
139
|
.select_nodes(
|
140
140
|
store.begin_read().unwrap().borrow_mut(),
|
141
|
-
|
141
|
+
"default",
|
142
142
|
store::SelectNodeQuery::select_labels(["not".to_string()]),
|
143
143
|
)
|
144
144
|
.unwrap();
|
@@ -152,32 +152,28 @@ where
|
|
152
152
|
TStore: store::Store,
|
153
153
|
{
|
154
154
|
// Add a node
|
155
|
-
let node = graph::Node
|
156
|
-
|
157
|
-
|
158
|
-
key
|
159
|
-
|
155
|
+
let node = graph::Node::new(
|
156
|
+
graph::Key::default(),
|
157
|
+
graph::labels!("hello", "world"),
|
158
|
+
value::value_map!("key" => 42i64),
|
159
|
+
);
|
160
160
|
|
161
161
|
check_stats(&store, None, 0, 0, 0, 0);
|
162
162
|
|
163
163
|
let mut tx = store.begin_write().unwrap();
|
164
164
|
|
165
165
|
store
|
166
|
-
.create_nodes(
|
167
|
-
tx.borrow_mut(),
|
168
|
-
&"default".into(),
|
169
|
-
vec![node.clone()].iter(),
|
170
|
-
)
|
166
|
+
.create_nodes(tx.borrow_mut(), "default", vec![node.clone()].iter())
|
171
167
|
.unwrap();
|
172
168
|
tx.close().unwrap();
|
173
169
|
check_stats(&store, None, 1, 0, 2, 1);
|
174
170
|
|
175
171
|
// Modify node
|
176
|
-
let modified_node = graph::Node
|
177
|
-
|
178
|
-
|
179
|
-
key
|
180
|
-
|
172
|
+
let modified_node = graph::Node::new(
|
173
|
+
node.key().clone(),
|
174
|
+
graph::labels!("world"),
|
175
|
+
value::value_map!("key" => 12i64),
|
176
|
+
);
|
181
177
|
|
182
178
|
let mut tx = store.begin_write().unwrap();
|
183
179
|
store
|
@@ -189,7 +185,7 @@ where
|
|
189
185
|
let selected_nodes = store
|
190
186
|
.select_nodes(
|
191
187
|
store.begin_read().unwrap().borrow_mut(),
|
192
|
-
|
188
|
+
"default",
|
193
189
|
store::SelectNodeQuery::select_all(),
|
194
190
|
)
|
195
191
|
.unwrap();
|
@@ -201,8 +197,8 @@ where
|
|
201
197
|
store
|
202
198
|
.delete_nodes(
|
203
199
|
&mut tx,
|
204
|
-
|
205
|
-
store::SelectNodeQuery::select_keys([modified_node.key]),
|
200
|
+
"default",
|
201
|
+
store::SelectNodeQuery::select_keys([modified_node.key()]),
|
206
202
|
true,
|
207
203
|
)
|
208
204
|
.unwrap();
|
@@ -215,40 +211,40 @@ fn test_select_edges<TStore>(store: TStore)
|
|
215
211
|
where
|
216
212
|
TStore: store::Store,
|
217
213
|
{
|
218
|
-
let source_node = graph::Node
|
219
|
-
|
220
|
-
|
221
|
-
key
|
222
|
-
|
223
|
-
let destination_node = graph::Node
|
224
|
-
|
225
|
-
|
226
|
-
key
|
227
|
-
|
228
|
-
let edge = graph::
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
214
|
+
let source_node = graph::Node::new(
|
215
|
+
graph::Key::default(),
|
216
|
+
graph::labels!("hello"),
|
217
|
+
value::value_map!("key" => 42i64),
|
218
|
+
);
|
219
|
+
let destination_node = graph::Node::new(
|
220
|
+
graph::Key::default(),
|
221
|
+
graph::labels!("world"),
|
222
|
+
value::value_map!("key" => 12i64),
|
223
|
+
);
|
224
|
+
let edge = graph::SinglePath::new(
|
225
|
+
graph::Key::default(),
|
226
|
+
source_node.clone(),
|
227
|
+
vec!["!".into()],
|
228
|
+
value::value_map!("existence" => true),
|
229
|
+
destination_node.clone(),
|
230
|
+
);
|
235
231
|
|
236
232
|
check_stats(&store, None, 0, 0, 0, 0);
|
237
233
|
|
238
234
|
let mut tx = store.begin_write().unwrap();
|
239
235
|
store
|
240
|
-
.create_edges(tx.borrow_mut(),
|
236
|
+
.create_edges(tx.borrow_mut(), "default", [edge.clone()].iter())
|
241
237
|
.expect_err("expect missing node");
|
242
238
|
check_stats(&store, Some(&mut tx), 0, 0, 0, 0);
|
243
239
|
store
|
244
240
|
.create_nodes(
|
245
241
|
tx.borrow_mut(),
|
246
|
-
|
242
|
+
"default",
|
247
243
|
[source_node, destination_node].iter(),
|
248
244
|
)
|
249
245
|
.unwrap();
|
250
246
|
store
|
251
|
-
.create_edges(tx.borrow_mut(),
|
247
|
+
.create_edges(tx.borrow_mut(), "default", [edge.clone()].iter())
|
252
248
|
.unwrap();
|
253
249
|
tx.close().unwrap();
|
254
250
|
check_stats(&store, None, 2, 1, 2, 3);
|
@@ -256,20 +252,20 @@ where
|
|
256
252
|
let selected_edges = store
|
257
253
|
.select_edges(
|
258
254
|
store.begin_read().unwrap().borrow_mut(),
|
259
|
-
|
260
|
-
store::SelectEdgeQuery::select_keys([edge.key]),
|
255
|
+
"default",
|
256
|
+
store::SelectEdgeQuery::select_keys([edge.key()]),
|
261
257
|
graph::EdgeDirectivity::Directed,
|
262
258
|
)
|
263
259
|
.unwrap();
|
264
260
|
|
265
261
|
assert_eq!(1, selected_edges.len());
|
266
|
-
assert_eq!(edge, selected_edges[0].
|
262
|
+
assert_eq!(edge, selected_edges[0].path);
|
267
263
|
assert!(!selected_edges[0].reversed);
|
268
264
|
|
269
265
|
let selected_edges = store
|
270
266
|
.select_edges(
|
271
267
|
store.begin_read().unwrap().borrow_mut(),
|
272
|
-
|
268
|
+
"default",
|
273
269
|
store::SelectEdgeQuery::select_source_destination_labels_properties(
|
274
270
|
store::SelectNodeQuery::select_all(),
|
275
271
|
vec![],
|
@@ -281,13 +277,13 @@ where
|
|
281
277
|
.unwrap();
|
282
278
|
|
283
279
|
assert_eq!(1, selected_edges.len());
|
284
|
-
assert_eq!(edge, selected_edges[0].
|
280
|
+
assert_eq!(edge, selected_edges[0].path);
|
285
281
|
assert!(!selected_edges[0].reversed);
|
286
282
|
|
287
283
|
let selected_edges = store
|
288
284
|
.select_edges(
|
289
285
|
store.begin_read().unwrap().borrow_mut(),
|
290
|
-
|
286
|
+
"default",
|
291
287
|
store::SelectEdgeQuery::select_source_destination_labels_properties(
|
292
288
|
store::SelectNodeQuery::select_labels_properties(vec![], Default::default()),
|
293
289
|
vec![],
|
@@ -299,19 +295,19 @@ where
|
|
299
295
|
.unwrap();
|
300
296
|
|
301
297
|
assert_eq!(1, selected_edges.len());
|
302
|
-
assert_eq!(edge, selected_edges[0].
|
298
|
+
assert_eq!(edge, selected_edges[0].path);
|
303
299
|
assert!(!selected_edges[0].reversed);
|
304
300
|
|
305
301
|
// Check reverse direction
|
306
302
|
let selected_edges = store
|
307
303
|
.select_edges(
|
308
304
|
store.begin_read().unwrap().borrow_mut(),
|
309
|
-
|
305
|
+
"default",
|
310
306
|
store::SelectEdgeQuery::select_source_destination_labels_properties(
|
311
|
-
store::SelectNodeQuery::select_keys(vec![edge.destination.key]),
|
307
|
+
store::SelectNodeQuery::select_keys(vec![edge.destination().key()]),
|
312
308
|
vec![],
|
313
309
|
Default::default(),
|
314
|
-
store::SelectNodeQuery::select_keys(vec![edge.source.key]),
|
310
|
+
store::SelectNodeQuery::select_keys(vec![edge.source().key()]),
|
315
311
|
),
|
316
312
|
graph::EdgeDirectivity::Directed,
|
317
313
|
)
|
@@ -322,19 +318,19 @@ where
|
|
322
318
|
let selected_edges = store
|
323
319
|
.select_edges(
|
324
320
|
store.begin_read().unwrap().borrow_mut(),
|
325
|
-
|
321
|
+
"default",
|
326
322
|
store::SelectEdgeQuery::select_source_destination_labels_properties(
|
327
|
-
store::SelectNodeQuery::select_keys(vec![edge.destination.key]),
|
323
|
+
store::SelectNodeQuery::select_keys(vec![edge.destination().key()]),
|
328
324
|
vec![],
|
329
325
|
Default::default(),
|
330
|
-
store::SelectNodeQuery::select_keys(vec![edge.source.key]),
|
326
|
+
store::SelectNodeQuery::select_keys(vec![edge.source().key()]),
|
331
327
|
),
|
332
328
|
graph::EdgeDirectivity::Undirected,
|
333
329
|
)
|
334
330
|
.unwrap();
|
335
331
|
|
336
332
|
assert_eq!(1, selected_edges.len());
|
337
|
-
assert_eq!(edge, selected_edges[0].
|
333
|
+
assert_eq!(edge, selected_edges[0].path);
|
338
334
|
assert!(selected_edges[0].reversed);
|
339
335
|
}
|
340
336
|
|
@@ -342,65 +338,63 @@ fn test_update_edges<TStore>(store: TStore)
|
|
342
338
|
where
|
343
339
|
TStore: store::Store,
|
344
340
|
{
|
345
|
-
let source_node = graph::Node
|
346
|
-
|
347
|
-
|
348
|
-
key
|
349
|
-
|
350
|
-
let destination_node = graph::Node
|
351
|
-
|
352
|
-
|
353
|
-
key
|
354
|
-
|
355
|
-
let edge = graph::
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
341
|
+
let source_node = graph::Node::new(
|
342
|
+
graph::Key::default(),
|
343
|
+
graph::labels!("hello"),
|
344
|
+
value::value_map!("key" => 42i64),
|
345
|
+
);
|
346
|
+
let destination_node = graph::Node::new(
|
347
|
+
graph::Key::default(),
|
348
|
+
graph::labels!("world"),
|
349
|
+
value::value_map!("key" => 12i64),
|
350
|
+
);
|
351
|
+
let edge = graph::SinglePath::new(
|
352
|
+
graph::Key::default(),
|
353
|
+
source_node.clone(),
|
354
|
+
vec!["!".into()],
|
355
|
+
value::value_map!("existence" => true),
|
356
|
+
destination_node.clone(),
|
357
|
+
);
|
362
358
|
|
363
359
|
check_stats(&store, None, 0, 0, 0, 0);
|
364
360
|
|
365
361
|
// Insert edge in store
|
366
362
|
let mut tx = store.begin_write().unwrap();
|
367
363
|
store
|
368
|
-
.create_edges(tx.borrow_mut(),
|
364
|
+
.create_edges(tx.borrow_mut(), "default", [edge.clone()].iter())
|
369
365
|
.expect_err("expect missing node");
|
370
366
|
check_stats(&store, Some(&mut tx), 0, 0, 0, 0);
|
371
367
|
store
|
372
368
|
.create_nodes(
|
373
369
|
tx.borrow_mut(),
|
374
|
-
|
370
|
+
"default",
|
375
371
|
[source_node, destination_node].iter(),
|
376
372
|
)
|
377
373
|
.unwrap();
|
378
374
|
store
|
379
|
-
.create_edges(tx.borrow_mut(),
|
375
|
+
.create_edges(tx.borrow_mut(), "default", [edge.clone()].iter())
|
380
376
|
.unwrap();
|
381
377
|
tx.close().unwrap();
|
382
378
|
check_stats(&store, None, 2, 1, 2, 3);
|
383
379
|
|
384
380
|
// Modify edge
|
385
381
|
|
386
|
-
let modified_edge = graph::Edge
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
properties: value::map!("existence" => false),
|
392
|
-
};
|
382
|
+
let modified_edge = graph::Edge::new(
|
383
|
+
edge.key().clone(),
|
384
|
+
graph::labels!("?"),
|
385
|
+
value::value_map!("existence" => false),
|
386
|
+
);
|
393
387
|
|
394
388
|
let mut tx = store.begin_write().unwrap();
|
395
389
|
store
|
396
|
-
.update_edge(&mut tx,
|
390
|
+
.update_edge(&mut tx, "default", &modified_edge)
|
397
391
|
.unwrap();
|
398
392
|
tx.close().unwrap();
|
399
393
|
|
400
394
|
let selected_edges = store
|
401
395
|
.select_edges(
|
402
396
|
store.begin_read().unwrap().borrow_mut(),
|
403
|
-
|
397
|
+
"default",
|
404
398
|
store::SelectEdgeQuery::select_all(),
|
405
399
|
graph::EdgeDirectivity::Directed,
|
406
400
|
)
|
@@ -409,7 +403,7 @@ where
|
|
409
403
|
check_stats(&store, None, 2, 1, 2, 3);
|
410
404
|
|
411
405
|
assert_eq!(1, selected_edges.len());
|
412
|
-
assert_eq!(modified_edge, selected_edges[0].
|
406
|
+
assert_eq!(modified_edge, selected_edges[0].path.to_owned().into());
|
413
407
|
assert!(!selected_edges[0].reversed);
|
414
408
|
|
415
409
|
// Remove edge
|
@@ -418,7 +412,7 @@ where
|
|
418
412
|
store
|
419
413
|
.delete_edges(
|
420
414
|
&mut tx,
|
421
|
-
|
415
|
+
"default",
|
422
416
|
store::SelectEdgeQuery::select_all(),
|
423
417
|
graph::EdgeDirectivity::Directed,
|
424
418
|
)
|
@@ -429,7 +423,7 @@ where
|
|
429
423
|
let selected_edges = store
|
430
424
|
.select_edges(
|
431
425
|
store.begin_read().unwrap().borrow_mut(),
|
432
|
-
|
426
|
+
"default",
|
433
427
|
store::SelectEdgeQuery::select_all(),
|
434
428
|
graph::EdgeDirectivity::Directed,
|
435
429
|
)
|
@@ -440,30 +434,20 @@ where
|
|
440
434
|
// Add edge back, and remove one of the node
|
441
435
|
let mut tx = store.begin_write().unwrap();
|
442
436
|
store
|
443
|
-
.create_edges(tx.borrow_mut(),
|
437
|
+
.create_edges(tx.borrow_mut(), "default", [edge.clone()].iter())
|
444
438
|
.unwrap();
|
445
439
|
tx.close().unwrap();
|
446
440
|
check_stats(&store, None, 2, 1, 2, 3);
|
447
441
|
|
448
442
|
let mut tx = store.begin_write().unwrap();
|
449
443
|
store
|
450
|
-
.delete_nodes(
|
451
|
-
&mut tx,
|
452
|
-
&"default".into(),
|
453
|
-
SelectNodeQuery::select_all(),
|
454
|
-
false,
|
455
|
-
)
|
444
|
+
.delete_nodes(&mut tx, "default", SelectNodeQuery::select_all(), false)
|
456
445
|
.expect_err("should fails, nodes are still connected.");
|
457
446
|
tx.close().unwrap();
|
458
447
|
|
459
448
|
let mut tx = store.begin_write().unwrap();
|
460
449
|
store
|
461
|
-
.delete_nodes(
|
462
|
-
&mut tx,
|
463
|
-
&"default".into(),
|
464
|
-
SelectNodeQuery::select_all(),
|
465
|
-
true,
|
466
|
-
)
|
450
|
+
.delete_nodes(&mut tx, "default", SelectNodeQuery::select_all(), true)
|
467
451
|
.unwrap();
|
468
452
|
tx.close().unwrap();
|
469
453
|
check_stats(&store, None, 0, 0, 0, 0);
|
@@ -37,7 +37,7 @@ pub(crate) fn create_named_node() -> Statements
|
|
37
37
|
vec![
|
38
38
|
Create {
|
39
39
|
patterns: vec![Pattern::Node(NodePattern {
|
40
|
-
variable: Some(var_ids.
|
40
|
+
variable: Some(var_ids.create_variable_from_name("n")),
|
41
41
|
labels: LabelExpression::None,
|
42
42
|
properties: Some(
|
43
43
|
Map {
|
@@ -57,10 +57,10 @@ pub(crate) fn create_named_node() -> Statements
|
|
57
57
|
Return {
|
58
58
|
all: false,
|
59
59
|
expressions: vec![NamedExpression {
|
60
|
-
identifier: var_ids.
|
60
|
+
identifier: var_ids.create_variable_from_name("p"),
|
61
61
|
expression: MemberAccess {
|
62
62
|
left: Variable {
|
63
|
-
identifier: var_ids.
|
63
|
+
identifier: var_ids.create_variable_from_name("n"),
|
64
64
|
}
|
65
65
|
.into(),
|
66
66
|
path: vec!["name".into()],
|
@@ -85,7 +85,7 @@ pub(crate) fn create_named_node_double_return() -> Statements
|
|
85
85
|
vec![
|
86
86
|
Create {
|
87
87
|
patterns: vec![Pattern::Node(NodePattern {
|
88
|
-
variable: Some(var_ids.
|
88
|
+
variable: Some(var_ids.create_variable_from_name("n")),
|
89
89
|
labels: LabelExpression::None,
|
90
90
|
properties: Some(
|
91
91
|
Map {
|
@@ -109,10 +109,10 @@ pub(crate) fn create_named_node_double_return() -> Statements
|
|
109
109
|
all: false,
|
110
110
|
expressions: vec![
|
111
111
|
NamedExpression {
|
112
|
-
identifier: var_ids.
|
112
|
+
identifier: var_ids.create_variable_from_name("id"),
|
113
113
|
expression: MemberAccess {
|
114
114
|
left: Variable {
|
115
|
-
identifier: var_ids.
|
115
|
+
identifier: var_ids.create_variable_from_name("n"),
|
116
116
|
}
|
117
117
|
.into(),
|
118
118
|
path: vec!["id".into()],
|
@@ -120,10 +120,10 @@ pub(crate) fn create_named_node_double_return() -> Statements
|
|
120
120
|
.into(),
|
121
121
|
},
|
122
122
|
NamedExpression {
|
123
|
-
identifier: var_ids.
|
123
|
+
identifier: var_ids.create_variable_from_name("p"),
|
124
124
|
expression: MemberAccess {
|
125
125
|
left: Variable {
|
126
|
-
identifier: var_ids.
|
126
|
+
identifier: var_ids.create_variable_from_name("n"),
|
127
127
|
}
|
128
128
|
.into(),
|
129
129
|
path: vec!["name".into()],
|
@@ -151,11 +151,11 @@ pub(crate) fn double_with_return() -> Statements
|
|
151
151
|
all: false,
|
152
152
|
expressions: vec![
|
153
153
|
NamedExpression {
|
154
|
-
identifier: var_ids.
|
154
|
+
identifier: var_ids.create_variable_from_name("n"),
|
155
155
|
expression: Value { value: 1.into() }.into(),
|
156
156
|
},
|
157
157
|
NamedExpression {
|
158
|
-
identifier: var_ids.
|
158
|
+
identifier: var_ids.create_variable_from_name("m"),
|
159
159
|
expression: Value { value: 2.into() }.into(),
|
160
160
|
},
|
161
161
|
],
|
@@ -171,16 +171,16 @@ pub(crate) fn double_with_return() -> Statements
|
|
171
171
|
all: false,
|
172
172
|
expressions: vec![
|
173
173
|
NamedExpression {
|
174
|
-
identifier: var_ids.
|
174
|
+
identifier: var_ids.create_variable_from_name("a"),
|
175
175
|
expression: Variable {
|
176
|
-
identifier: var_ids.
|
176
|
+
identifier: var_ids.create_variable_from_name("n"),
|
177
177
|
}
|
178
178
|
.into(),
|
179
179
|
},
|
180
180
|
NamedExpression {
|
181
|
-
identifier: var_ids.
|
181
|
+
identifier: var_ids.create_variable_from_name("b"),
|
182
182
|
expression: Variable {
|
183
|
-
identifier: var_ids.
|
183
|
+
identifier: var_ids.create_variable_from_name("m"),
|
184
184
|
}
|
185
185
|
.into(),
|
186
186
|
},
|
@@ -193,7 +193,7 @@ pub(crate) fn double_with_return() -> Statements
|
|
193
193
|
where_expression: None,
|
194
194
|
}
|
195
195
|
.into(),
|
196
|
-
return_statement(var_ids.
|
196
|
+
return_statement(var_ids.create_variable_from_name("a")),
|
197
197
|
]
|
198
198
|
}
|
199
199
|
|
@@ -203,14 +203,14 @@ pub(crate) fn unwind() -> Statements
|
|
203
203
|
let var_ids = VariableIdentifiers::default();
|
204
204
|
vec![
|
205
205
|
Unwind {
|
206
|
-
identifier: var_ids.
|
206
|
+
identifier: var_ids.create_variable_from_name("i"),
|
207
207
|
expression: Array {
|
208
208
|
array: vec![Value { value: 0.into() }.into()],
|
209
209
|
}
|
210
210
|
.into(),
|
211
211
|
}
|
212
212
|
.into(),
|
213
|
-
return_statement(var_ids.
|
213
|
+
return_statement(var_ids.create_variable_from_name("i")),
|
214
214
|
]
|
215
215
|
}
|
216
216
|
|
@@ -223,12 +223,12 @@ pub(crate) fn match_loop() -> Statements
|
|
223
223
|
patterns: vec![Pattern::Edge(EdgePattern {
|
224
224
|
variable: None,
|
225
225
|
source: NodePattern {
|
226
|
-
variable: Some(var_ids.
|
226
|
+
variable: Some(var_ids.create_variable_from_name("n")),
|
227
227
|
labels: LabelExpression::None,
|
228
228
|
properties: None,
|
229
229
|
},
|
230
230
|
destination: NodePattern {
|
231
|
-
variable: Some(var_ids.
|
231
|
+
variable: Some(var_ids.create_variable_from_name("n")),
|
232
232
|
labels: LabelExpression::None,
|
233
233
|
properties: None,
|
234
234
|
},
|
@@ -240,7 +240,7 @@ pub(crate) fn match_loop() -> Statements
|
|
240
240
|
optional: false,
|
241
241
|
}
|
242
242
|
.into(),
|
243
|
-
return_statement(var_ids.
|
243
|
+
return_statement(var_ids.create_variable_from_name("n")),
|
244
244
|
]
|
245
245
|
}
|
246
246
|
|
@@ -251,7 +251,7 @@ pub(crate) fn optional_match() -> Statements
|
|
251
251
|
vec![
|
252
252
|
Match {
|
253
253
|
patterns: vec![Pattern::Node(NodePattern {
|
254
|
-
variable: Some(var_ids.
|
254
|
+
variable: Some(var_ids.create_variable_from_name("a")),
|
255
255
|
labels: LabelExpression::None,
|
256
256
|
properties: None,
|
257
257
|
})],
|
@@ -259,7 +259,7 @@ pub(crate) fn optional_match() -> Statements
|
|
259
259
|
optional: true,
|
260
260
|
}
|
261
261
|
.into(),
|
262
|
-
return_statement(var_ids.
|
262
|
+
return_statement(var_ids.create_variable_from_name("a")),
|
263
263
|
]
|
264
264
|
}
|
265
265
|
|
@@ -270,7 +270,7 @@ pub(crate) fn match_count() -> Statements
|
|
270
270
|
vec![
|
271
271
|
Match {
|
272
272
|
patterns: vec![Pattern::Node(NodePattern {
|
273
|
-
variable: Some(var_ids.
|
273
|
+
variable: Some(var_ids.create_variable_from_name("a")),
|
274
274
|
labels: LabelExpression::None,
|
275
275
|
properties: None,
|
276
276
|
})],
|
@@ -281,7 +281,7 @@ pub(crate) fn match_count() -> Statements
|
|
281
281
|
Return {
|
282
282
|
all: false,
|
283
283
|
expressions: vec![NamedExpression {
|
284
|
-
identifier: var_ids.
|
284
|
+
identifier: var_ids.create_variable_from_name("count(*)"),
|
285
285
|
expression: FunctionCall {
|
286
286
|
name: "count".into(),
|
287
287
|
arguments: vec![Value { value: 0.into() }.into()],
|
@@ -306,7 +306,7 @@ pub(crate) fn aggregation() -> Statements
|
|
306
306
|
vec![
|
307
307
|
Match {
|
308
308
|
patterns: vec![Pattern::Node(NodePattern {
|
309
|
-
variable: Some(var_ids.
|
309
|
+
variable: Some(var_ids.create_variable_from_name("n")),
|
310
310
|
labels: LabelExpression::None,
|
311
311
|
properties: None,
|
312
312
|
})],
|
@@ -318,10 +318,10 @@ pub(crate) fn aggregation() -> Statements
|
|
318
318
|
all: false,
|
319
319
|
expressions: vec![
|
320
320
|
NamedExpression {
|
321
|
-
identifier: var_ids.
|
321
|
+
identifier: var_ids.create_variable_from_name("n.name"),
|
322
322
|
expression: MemberAccess {
|
323
323
|
left: Variable {
|
324
|
-
identifier: var_ids.
|
324
|
+
identifier: var_ids.create_variable_from_name("n"),
|
325
325
|
}
|
326
326
|
.into(),
|
327
327
|
path: vec!["name".into()],
|
@@ -329,12 +329,12 @@ pub(crate) fn aggregation() -> Statements
|
|
329
329
|
.into(),
|
330
330
|
},
|
331
331
|
NamedExpression {
|
332
|
-
identifier: var_ids.
|
332
|
+
identifier: var_ids.create_variable_from_name("count(n.num)"),
|
333
333
|
expression: FunctionCall {
|
334
334
|
name: "count".into(),
|
335
335
|
arguments: vec![MemberAccess {
|
336
336
|
left: Variable {
|
337
|
-
identifier: var_ids.
|
337
|
+
identifier: var_ids.create_variable_from_name("n"),
|
338
338
|
}
|
339
339
|
.into(),
|
340
340
|
path: vec!["num".into()],
|
@@ -243,7 +243,7 @@ pub(crate) fn unwind() -> Program
|
|
243
243
|
pub(crate) fn match_loop() -> Program
|
244
244
|
{
|
245
245
|
vec![
|
246
|
-
Block::
|
246
|
+
Block::Match {
|
247
247
|
blocks: vec![BlockMatch::MatchEdge {
|
248
248
|
instructions: vec![
|
249
249
|
Instruction::Push {
|
@@ -297,7 +297,7 @@ pub(crate) fn match_loop() -> Program
|
|
297
297
|
pub(crate) fn optional_match() -> Program
|
298
298
|
{
|
299
299
|
vec![
|
300
|
-
Block::
|
300
|
+
Block::Match {
|
301
301
|
blocks: vec![BlockMatch::MatchNode {
|
302
302
|
instructions: vec![
|
303
303
|
Instruction::Push {
|
@@ -336,7 +336,7 @@ pub(crate) fn optional_match() -> Program
|
|
336
336
|
pub(crate) fn match_count(function_manager: &functions::Manager) -> Program
|
337
337
|
{
|
338
338
|
vec![
|
339
|
-
Block::
|
339
|
+
Block::Match {
|
340
340
|
blocks: vec![BlockMatch::MatchNode {
|
341
341
|
instructions: vec![
|
342
342
|
Instruction::Push {
|
@@ -387,7 +387,7 @@ pub(crate) fn match_count(function_manager: &functions::Manager) -> Program
|
|
387
387
|
pub(crate) fn aggregation(function_manager: &functions::Manager) -> Program
|
388
388
|
{
|
389
389
|
vec![
|
390
|
-
Block::
|
390
|
+
Block::Match {
|
391
391
|
blocks: vec![BlockMatch::MatchNode {
|
392
392
|
instructions: vec![
|
393
393
|
Instruction::Push {
|