gqlite 1.2.2 → 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.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/ext/Cargo.toml +20 -0
  3. data/ext/gqlitedb/Cargo.toml +77 -0
  4. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/benches/common/pokec.rs +30 -20
  5. data/ext/gqlitedb/gqlite_bench_data/README.MD +6 -0
  6. data/ext/gqlitedb/gqlite_bench_data/scripts/generate_smaller_pokec.rb +85 -0
  7. data/ext/gqlitedb/gqlite_bench_data/scripts/to_efficient_pokec.rb +34 -0
  8. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/release.toml +2 -2
  9. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/aggregators/arithmetic.rs +1 -0
  10. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/aggregators/stats.rs +27 -49
  11. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/aggregators.rs +7 -7
  12. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/capi.rs +34 -10
  13. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/compiler/expression_analyser.rs +10 -4
  14. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/compiler/variables_manager.rs +36 -39
  15. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/compiler.rs +46 -41
  16. data/ext/gqlitedb/src/connection.rs +300 -0
  17. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/error.rs +113 -50
  18. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/containers.rs +21 -26
  19. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/edge.rs +3 -3
  20. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/math.rs +3 -3
  21. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/node.rs +2 -2
  22. data/ext/gqlitedb/src/functions/path.rs +75 -0
  23. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/scalar.rs +3 -3
  24. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/string.rs +1 -1
  25. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions/value.rs +7 -7
  26. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/functions.rs +29 -31
  27. data/ext/gqlitedb/src/graph.rs +11 -0
  28. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/interpreter/evaluators.rs +178 -224
  29. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/interpreter/instructions.rs +8 -2
  30. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/lib.rs +9 -5
  31. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/parser/ast.rs +54 -76
  32. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/parser/gql.pest +9 -4
  33. data/ext/{gqliterb/vendor/gqlitedb/src/parser/parser.rs → gqlitedb/src/parser/parser_impl.rs} +86 -34
  34. data/ext/gqlitedb/src/parser.rs +4 -0
  35. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/prelude.rs +3 -2
  36. data/ext/gqlitedb/src/query_result.rs +88 -0
  37. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/store/redb.rs +260 -170
  38. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/store/sqlite.rs +157 -142
  39. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/store.rs +30 -23
  40. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/evaluators.rs +41 -85
  41. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/store/redb.rs +12 -5
  42. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/store/sqlite.rs +12 -5
  43. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/store.rs +106 -114
  44. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/templates/ast.rs +29 -29
  45. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/templates/programs.rs +4 -4
  46. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/value/compare.rs +13 -20
  47. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/value/contains.rs +2 -2
  48. data/ext/gqlitedb/src/value.rs +225 -0
  49. data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/value_table.rs +22 -18
  50. data/ext/gqliterb/Cargo.toml +12 -34
  51. data/ext/gqliterb/src/lib.rs +67 -39
  52. data/ext/graphcore/Cargo.toml +19 -0
  53. data/ext/graphcore/README.MD +4 -0
  54. data/ext/graphcore/release.toml +1 -0
  55. data/ext/graphcore/src/error.rs +28 -0
  56. data/ext/{gqliterb/vendor/gqlitedb → graphcore}/src/graph.rs +146 -35
  57. data/ext/graphcore/src/lib.rs +16 -0
  58. data/ext/graphcore/src/prelude.rs +4 -0
  59. data/ext/{gqliterb/vendor/gqlitedb → graphcore}/src/serialize_with.rs +2 -2
  60. data/ext/graphcore/src/table.rs +272 -0
  61. data/ext/{gqliterb/vendor/gqlitedb → graphcore}/src/value/value_map.rs +44 -49
  62. data/ext/graphcore/src/value.rs +413 -0
  63. metadata +94 -83
  64. data/ext/gqliterb/.cargo/config.toml +0 -2
  65. data/ext/gqliterb/Cargo.lock +0 -1109
  66. data/ext/gqliterb/vendor/gqlitedb/Cargo.lock +0 -2060
  67. data/ext/gqliterb/vendor/gqlitedb/Cargo.toml +0 -132
  68. data/ext/gqliterb/vendor/gqlitedb/src/connection.rs +0 -208
  69. data/ext/gqliterb/vendor/gqlitedb/src/functions/path.rs +0 -48
  70. data/ext/gqliterb/vendor/gqlitedb/src/parser.rs +0 -4
  71. data/ext/gqliterb/vendor/gqlitedb/src/value.rs +0 -559
  72. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/askama.toml +0 -0
  73. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/benches/common/mod.rs +0 -0
  74. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/benches/pokec_divan.rs +0 -0
  75. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/benches/pokec_iai.rs +0 -0
  76. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/aggregators/containers.rs +0 -0
  77. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/aggregators/count.rs +0 -0
  78. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/consts.rs +0 -0
  79. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/interpreter/mod.rs +0 -0
  80. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/store/pgql.rs +0 -0
  81. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/compiler.rs +0 -0
  82. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/parser.rs +0 -0
  83. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests/templates.rs +0 -0
  84. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/tests.rs +0 -0
  85. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/src/utils.rs +0 -0
  86. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/call_stats.sql +0 -0
  87. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/edge_count_for_node.sql +0 -0
  88. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/edge_create.sql +0 -0
  89. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/edge_delete.sql +0 -0
  90. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/edge_delete_by_nodes.sql +0 -0
  91. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/edge_select.sql +0 -0
  92. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/edge_update.sql +0 -0
  93. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/graph_create.sql +0 -0
  94. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/graph_delete.sql +0 -0
  95. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/metadata_create_table.sql +0 -0
  96. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/metadata_get.sql +0 -0
  97. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/metadata_set.sql +0 -0
  98. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/node_create.sql +0 -0
  99. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/node_delete.sql +0 -0
  100. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/node_select.sql +0 -0
  101. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/node_update.sql +0 -0
  102. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/table_exists.sql +0 -0
  103. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/upgrade_from_1_01.sql +0 -0
  104. /data/ext/{gqliterb/vendor/gqlitedb → gqlitedb}/templates/sql/sqlite/upgrade_graph_from_1_01.sql +0 -0
@@ -53,10 +53,10 @@ where
53
53
  vec!["default".to_string(), "test_graph".to_string()]
54
54
  );
55
55
 
56
- // Delete graph
56
+ // Drop graph
57
57
  let mut tx = store.begin_write().unwrap();
58
58
  store
59
- .delete_graph(&mut tx, &"test_graph".to_string())
59
+ .drop_graph(&mut tx, &"test_graph".to_string(), false)
60
60
  .unwrap();
61
61
  tx.close().unwrap();
62
62
 
@@ -81,11 +81,19 @@ where
81
81
  vec!["default".to_string(), "test_graph".to_string()]
82
82
  );
83
83
 
84
+ // Drop unexisting graph
84
85
  let mut tx = store.begin_write().unwrap();
85
86
  store
86
- .delete_graph(&mut tx, &"unknown".to_string())
87
+ .drop_graph(&mut tx, &"unknown".to_string(), false)
87
88
  .expect_err("Attempt at deleting unknown graph.");
88
89
  drop(tx);
90
+
91
+ // Drop unexisting graph
92
+ let mut tx = store.begin_write().unwrap();
93
+ store
94
+ .drop_graph(&mut tx, &"unknown".to_string(), true)
95
+ .unwrap();
96
+ drop(tx);
89
97
  }
90
98
 
91
99
  fn test_select_nodes<TStore>(store: TStore)
@@ -94,16 +102,16 @@ where
94
102
  {
95
103
  // Add two nodes
96
104
  let nodes = [
97
- graph::Node {
98
- labels: graph::labels!("hello", "world"),
99
- properties: value::map!("key" => 42i64),
100
- key: graph::Key::default(),
101
- },
102
- graph::Node {
103
- labels: graph::labels!("not"),
104
- properties: Default::default(),
105
- key: graph::Key::default(),
106
- },
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
+ ),
107
115
  ];
108
116
 
109
117
  check_stats(&store, None, 0, 0, 0, 0);
@@ -111,7 +119,7 @@ where
111
119
  let mut tx = store.begin_write().unwrap();
112
120
 
113
121
  store
114
- .create_nodes(tx.borrow_mut(), &"default".into(), nodes.iter())
122
+ .create_nodes(tx.borrow_mut(), "default", nodes.iter())
115
123
  .unwrap();
116
124
  tx.close().unwrap();
117
125
  check_stats(&store, None, 2, 0, 3, 1);
@@ -119,8 +127,8 @@ where
119
127
  let selected_nodes = store
120
128
  .select_nodes(
121
129
  store.begin_read().unwrap().borrow_mut(),
122
- &"default".into(),
123
- store::SelectNodeQuery::select_keys([nodes[0].key]),
130
+ "default",
131
+ store::SelectNodeQuery::select_keys([nodes[0].key()]),
124
132
  )
125
133
  .unwrap();
126
134
 
@@ -130,7 +138,7 @@ where
130
138
  let selected_nodes = store
131
139
  .select_nodes(
132
140
  store.begin_read().unwrap().borrow_mut(),
133
- &"default".into(),
141
+ "default",
134
142
  store::SelectNodeQuery::select_labels(["not".to_string()]),
135
143
  )
136
144
  .unwrap();
@@ -144,32 +152,28 @@ where
144
152
  TStore: store::Store,
145
153
  {
146
154
  // Add a node
147
- let node = graph::Node {
148
- labels: graph::labels!("hello", "world"),
149
- properties: value::map!("key" => 42i64),
150
- key: graph::Key::default(),
151
- };
155
+ let node = graph::Node::new(
156
+ graph::Key::default(),
157
+ graph::labels!("hello", "world"),
158
+ value::value_map!("key" => 42i64),
159
+ );
152
160
 
153
161
  check_stats(&store, None, 0, 0, 0, 0);
154
162
 
155
163
  let mut tx = store.begin_write().unwrap();
156
164
 
157
165
  store
158
- .create_nodes(
159
- tx.borrow_mut(),
160
- &"default".into(),
161
- vec![node.clone()].iter(),
162
- )
166
+ .create_nodes(tx.borrow_mut(), "default", vec![node.clone()].iter())
163
167
  .unwrap();
164
168
  tx.close().unwrap();
165
169
  check_stats(&store, None, 1, 0, 2, 1);
166
170
 
167
171
  // Modify node
168
- let modified_node = graph::Node {
169
- labels: graph::labels!("world"),
170
- properties: value::map!("key" => 12i64),
171
- key: node.key.clone(),
172
- };
172
+ let modified_node = graph::Node::new(
173
+ node.key().clone(),
174
+ graph::labels!("world"),
175
+ value::value_map!("key" => 12i64),
176
+ );
173
177
 
174
178
  let mut tx = store.begin_write().unwrap();
175
179
  store
@@ -181,7 +185,7 @@ where
181
185
  let selected_nodes = store
182
186
  .select_nodes(
183
187
  store.begin_read().unwrap().borrow_mut(),
184
- &"default".into(),
188
+ "default",
185
189
  store::SelectNodeQuery::select_all(),
186
190
  )
187
191
  .unwrap();
@@ -193,8 +197,8 @@ where
193
197
  store
194
198
  .delete_nodes(
195
199
  &mut tx,
196
- &"default".into(),
197
- store::SelectNodeQuery::select_keys([modified_node.key]),
200
+ "default",
201
+ store::SelectNodeQuery::select_keys([modified_node.key()]),
198
202
  true,
199
203
  )
200
204
  .unwrap();
@@ -207,40 +211,40 @@ fn test_select_edges<TStore>(store: TStore)
207
211
  where
208
212
  TStore: store::Store,
209
213
  {
210
- let source_node = graph::Node {
211
- labels: graph::labels!("hello"),
212
- properties: value::map!("key" => 42i64),
213
- key: graph::Key::default(),
214
- };
215
- let destination_node = graph::Node {
216
- labels: graph::labels!("world"),
217
- properties: value::map!("key" => 12i64),
218
- key: graph::Key::default(),
219
- };
220
- let edge = graph::Edge {
221
- source: source_node.clone(),
222
- destination: destination_node.clone(),
223
- key: graph::Key::default(),
224
- labels: vec!["!".into()],
225
- properties: value::map!("existence" => true),
226
- };
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
+ );
227
231
 
228
232
  check_stats(&store, None, 0, 0, 0, 0);
229
233
 
230
234
  let mut tx = store.begin_write().unwrap();
231
235
  store
232
- .create_edges(tx.borrow_mut(), &"default".into(), [edge.clone()].iter())
236
+ .create_edges(tx.borrow_mut(), "default", [edge.clone()].iter())
233
237
  .expect_err("expect missing node");
234
238
  check_stats(&store, Some(&mut tx), 0, 0, 0, 0);
235
239
  store
236
240
  .create_nodes(
237
241
  tx.borrow_mut(),
238
- &"default".into(),
242
+ "default",
239
243
  [source_node, destination_node].iter(),
240
244
  )
241
245
  .unwrap();
242
246
  store
243
- .create_edges(tx.borrow_mut(), &"default".into(), [edge.clone()].iter())
247
+ .create_edges(tx.borrow_mut(), "default", [edge.clone()].iter())
244
248
  .unwrap();
245
249
  tx.close().unwrap();
246
250
  check_stats(&store, None, 2, 1, 2, 3);
@@ -248,20 +252,20 @@ where
248
252
  let selected_edges = store
249
253
  .select_edges(
250
254
  store.begin_read().unwrap().borrow_mut(),
251
- &"default".into(),
252
- store::SelectEdgeQuery::select_keys([edge.key]),
255
+ "default",
256
+ store::SelectEdgeQuery::select_keys([edge.key()]),
253
257
  graph::EdgeDirectivity::Directed,
254
258
  )
255
259
  .unwrap();
256
260
 
257
261
  assert_eq!(1, selected_edges.len());
258
- assert_eq!(edge, selected_edges[0].edge);
262
+ assert_eq!(edge, selected_edges[0].path);
259
263
  assert!(!selected_edges[0].reversed);
260
264
 
261
265
  let selected_edges = store
262
266
  .select_edges(
263
267
  store.begin_read().unwrap().borrow_mut(),
264
- &"default".into(),
268
+ "default",
265
269
  store::SelectEdgeQuery::select_source_destination_labels_properties(
266
270
  store::SelectNodeQuery::select_all(),
267
271
  vec![],
@@ -273,13 +277,13 @@ where
273
277
  .unwrap();
274
278
 
275
279
  assert_eq!(1, selected_edges.len());
276
- assert_eq!(edge, selected_edges[0].edge);
280
+ assert_eq!(edge, selected_edges[0].path);
277
281
  assert!(!selected_edges[0].reversed);
278
282
 
279
283
  let selected_edges = store
280
284
  .select_edges(
281
285
  store.begin_read().unwrap().borrow_mut(),
282
- &"default".into(),
286
+ "default",
283
287
  store::SelectEdgeQuery::select_source_destination_labels_properties(
284
288
  store::SelectNodeQuery::select_labels_properties(vec![], Default::default()),
285
289
  vec![],
@@ -291,19 +295,19 @@ where
291
295
  .unwrap();
292
296
 
293
297
  assert_eq!(1, selected_edges.len());
294
- assert_eq!(edge, selected_edges[0].edge);
298
+ assert_eq!(edge, selected_edges[0].path);
295
299
  assert!(!selected_edges[0].reversed);
296
300
 
297
301
  // Check reverse direction
298
302
  let selected_edges = store
299
303
  .select_edges(
300
304
  store.begin_read().unwrap().borrow_mut(),
301
- &"default".into(),
305
+ "default",
302
306
  store::SelectEdgeQuery::select_source_destination_labels_properties(
303
- store::SelectNodeQuery::select_keys(vec![edge.destination.key]),
307
+ store::SelectNodeQuery::select_keys(vec![edge.destination().key()]),
304
308
  vec![],
305
309
  Default::default(),
306
- store::SelectNodeQuery::select_keys(vec![edge.source.key]),
310
+ store::SelectNodeQuery::select_keys(vec![edge.source().key()]),
307
311
  ),
308
312
  graph::EdgeDirectivity::Directed,
309
313
  )
@@ -314,19 +318,19 @@ where
314
318
  let selected_edges = store
315
319
  .select_edges(
316
320
  store.begin_read().unwrap().borrow_mut(),
317
- &"default".into(),
321
+ "default",
318
322
  store::SelectEdgeQuery::select_source_destination_labels_properties(
319
- store::SelectNodeQuery::select_keys(vec![edge.destination.key]),
323
+ store::SelectNodeQuery::select_keys(vec![edge.destination().key()]),
320
324
  vec![],
321
325
  Default::default(),
322
- store::SelectNodeQuery::select_keys(vec![edge.source.key]),
326
+ store::SelectNodeQuery::select_keys(vec![edge.source().key()]),
323
327
  ),
324
328
  graph::EdgeDirectivity::Undirected,
325
329
  )
326
330
  .unwrap();
327
331
 
328
332
  assert_eq!(1, selected_edges.len());
329
- assert_eq!(edge, selected_edges[0].edge);
333
+ assert_eq!(edge, selected_edges[0].path);
330
334
  assert!(selected_edges[0].reversed);
331
335
  }
332
336
 
@@ -334,65 +338,63 @@ fn test_update_edges<TStore>(store: TStore)
334
338
  where
335
339
  TStore: store::Store,
336
340
  {
337
- let source_node = graph::Node {
338
- labels: graph::labels!("hello"),
339
- properties: value::map!("key" => 42i64),
340
- key: graph::Key::default(),
341
- };
342
- let destination_node = graph::Node {
343
- labels: graph::labels!("world"),
344
- properties: value::map!("key" => 12i64),
345
- key: graph::Key::default(),
346
- };
347
- let edge = graph::Edge {
348
- source: source_node.clone(),
349
- destination: destination_node.clone(),
350
- key: graph::Key::default(),
351
- labels: vec!["!".into()],
352
- properties: value::map!("existence" => true),
353
- };
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
+ );
354
358
 
355
359
  check_stats(&store, None, 0, 0, 0, 0);
356
360
 
357
361
  // Insert edge in store
358
362
  let mut tx = store.begin_write().unwrap();
359
363
  store
360
- .create_edges(tx.borrow_mut(), &"default".into(), [edge.clone()].iter())
364
+ .create_edges(tx.borrow_mut(), "default", [edge.clone()].iter())
361
365
  .expect_err("expect missing node");
362
366
  check_stats(&store, Some(&mut tx), 0, 0, 0, 0);
363
367
  store
364
368
  .create_nodes(
365
369
  tx.borrow_mut(),
366
- &"default".into(),
370
+ "default",
367
371
  [source_node, destination_node].iter(),
368
372
  )
369
373
  .unwrap();
370
374
  store
371
- .create_edges(tx.borrow_mut(), &"default".into(), [edge.clone()].iter())
375
+ .create_edges(tx.borrow_mut(), "default", [edge.clone()].iter())
372
376
  .unwrap();
373
377
  tx.close().unwrap();
374
378
  check_stats(&store, None, 2, 1, 2, 3);
375
379
 
376
380
  // Modify edge
377
381
 
378
- let modified_edge = graph::Edge {
379
- key: edge.key.clone(),
380
- source: edge.source.clone(),
381
- destination: edge.destination.clone(),
382
- labels: vec!["?".into()],
383
- properties: value::map!("existence" => false),
384
- };
382
+ let modified_edge = graph::Edge::new(
383
+ edge.key().clone(),
384
+ graph::labels!("?"),
385
+ value::value_map!("existence" => false),
386
+ );
385
387
 
386
388
  let mut tx = store.begin_write().unwrap();
387
389
  store
388
- .update_edge(&mut tx, &"default".into(), &modified_edge)
390
+ .update_edge(&mut tx, "default", &modified_edge)
389
391
  .unwrap();
390
392
  tx.close().unwrap();
391
393
 
392
394
  let selected_edges = store
393
395
  .select_edges(
394
396
  store.begin_read().unwrap().borrow_mut(),
395
- &"default".into(),
397
+ "default",
396
398
  store::SelectEdgeQuery::select_all(),
397
399
  graph::EdgeDirectivity::Directed,
398
400
  )
@@ -401,7 +403,7 @@ where
401
403
  check_stats(&store, None, 2, 1, 2, 3);
402
404
 
403
405
  assert_eq!(1, selected_edges.len());
404
- assert_eq!(modified_edge, selected_edges[0].edge);
406
+ assert_eq!(modified_edge, selected_edges[0].path.to_owned().into());
405
407
  assert!(!selected_edges[0].reversed);
406
408
 
407
409
  // Remove edge
@@ -410,7 +412,7 @@ where
410
412
  store
411
413
  .delete_edges(
412
414
  &mut tx,
413
- &"default".into(),
415
+ "default",
414
416
  store::SelectEdgeQuery::select_all(),
415
417
  graph::EdgeDirectivity::Directed,
416
418
  )
@@ -421,7 +423,7 @@ where
421
423
  let selected_edges = store
422
424
  .select_edges(
423
425
  store.begin_read().unwrap().borrow_mut(),
424
- &"default".into(),
426
+ "default",
425
427
  store::SelectEdgeQuery::select_all(),
426
428
  graph::EdgeDirectivity::Directed,
427
429
  )
@@ -432,30 +434,20 @@ where
432
434
  // Add edge back, and remove one of the node
433
435
  let mut tx = store.begin_write().unwrap();
434
436
  store
435
- .create_edges(tx.borrow_mut(), &"default".into(), [edge.clone()].iter())
437
+ .create_edges(tx.borrow_mut(), "default", [edge.clone()].iter())
436
438
  .unwrap();
437
439
  tx.close().unwrap();
438
440
  check_stats(&store, None, 2, 1, 2, 3);
439
441
 
440
442
  let mut tx = store.begin_write().unwrap();
441
443
  store
442
- .delete_nodes(
443
- &mut tx,
444
- &"default".into(),
445
- SelectNodeQuery::select_all(),
446
- false,
447
- )
444
+ .delete_nodes(&mut tx, "default", SelectNodeQuery::select_all(), false)
448
445
  .expect_err("should fails, nodes are still connected.");
449
446
  tx.close().unwrap();
450
447
 
451
448
  let mut tx = store.begin_write().unwrap();
452
449
  store
453
- .delete_nodes(
454
- &mut tx,
455
- &"default".into(),
456
- SelectNodeQuery::select_all(),
457
- true,
458
- )
450
+ .delete_nodes(&mut tx, "default", SelectNodeQuery::select_all(), true)
459
451
  .unwrap();
460
452
  tx.close().unwrap();
461
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.from_name("n")),
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.from_name("p"),
60
+ identifier: var_ids.create_variable_from_name("p"),
61
61
  expression: MemberAccess {
62
62
  left: Variable {
63
- identifier: var_ids.from_name("n"),
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.from_name("n")),
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.from_name("id"),
112
+ identifier: var_ids.create_variable_from_name("id"),
113
113
  expression: MemberAccess {
114
114
  left: Variable {
115
- identifier: var_ids.from_name("n"),
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.from_name("p"),
123
+ identifier: var_ids.create_variable_from_name("p"),
124
124
  expression: MemberAccess {
125
125
  left: Variable {
126
- identifier: var_ids.from_name("n"),
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.from_name("n"),
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.from_name("m"),
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.from_name("a"),
174
+ identifier: var_ids.create_variable_from_name("a"),
175
175
  expression: Variable {
176
- identifier: var_ids.from_name("n"),
176
+ identifier: var_ids.create_variable_from_name("n"),
177
177
  }
178
178
  .into(),
179
179
  },
180
180
  NamedExpression {
181
- identifier: var_ids.from_name("b"),
181
+ identifier: var_ids.create_variable_from_name("b"),
182
182
  expression: Variable {
183
- identifier: var_ids.from_name("m"),
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.from_name("a")),
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.from_name("i"),
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.from_name("i")),
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.from_name("n")),
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.from_name("n")),
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.from_name("n")),
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.from_name("a")),
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.from_name("a")),
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.from_name("a")),
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.from_name("count(*)"),
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.from_name("n")),
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.from_name("n.name"),
321
+ identifier: var_ids.create_variable_from_name("n.name"),
322
322
  expression: MemberAccess {
323
323
  left: Variable {
324
- identifier: var_ids.from_name("n"),
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.from_name("count(n.num)"),
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.from_name("n"),
337
+ identifier: var_ids.create_variable_from_name("n"),
338
338
  }
339
339
  .into(),
340
340
  path: vec!["num".into()],