gqlite 1.2.0 → 1.2.2

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 (85) hide show
  1. checksums.yaml +4 -4
  2. data/ext/gqliterb/.cargo/config.toml +2 -0
  3. data/ext/gqliterb/Cargo.lock +133 -123
  4. data/ext/gqliterb/Cargo.toml +3 -6
  5. data/ext/gqliterb/src/lib.rs +2 -2
  6. data/ext/gqliterb/vendor/gqlitedb/Cargo.lock +2060 -0
  7. data/ext/gqliterb/vendor/gqlitedb/Cargo.toml +132 -0
  8. data/ext/gqliterb/vendor/gqlitedb/askama.toml +3 -0
  9. data/ext/gqliterb/vendor/gqlitedb/benches/common/mod.rs +25 -0
  10. data/ext/gqliterb/vendor/gqlitedb/benches/common/pokec.rs +185 -0
  11. data/ext/gqliterb/vendor/gqlitedb/benches/pokec_divan.rs +137 -0
  12. data/ext/gqliterb/vendor/gqlitedb/benches/pokec_iai.rs +122 -0
  13. data/ext/gqliterb/vendor/gqlitedb/release.toml +7 -0
  14. data/ext/gqliterb/vendor/gqlitedb/src/aggregators/arithmetic.rs +96 -0
  15. data/ext/gqliterb/vendor/gqlitedb/src/aggregators/containers.rs +33 -0
  16. data/ext/gqliterb/vendor/gqlitedb/src/aggregators/count.rs +35 -0
  17. data/ext/gqliterb/vendor/gqlitedb/src/aggregators/stats.rs +168 -0
  18. data/ext/gqliterb/vendor/gqlitedb/src/aggregators.rs +74 -0
  19. data/ext/gqliterb/vendor/gqlitedb/src/capi.rs +236 -0
  20. data/ext/gqliterb/vendor/gqlitedb/src/compiler/expression_analyser.rs +427 -0
  21. data/ext/gqliterb/vendor/gqlitedb/src/compiler/variables_manager.rs +620 -0
  22. data/ext/gqliterb/vendor/gqlitedb/src/compiler.rs +1106 -0
  23. data/ext/gqliterb/vendor/gqlitedb/src/connection.rs +208 -0
  24. data/ext/gqliterb/vendor/gqlitedb/src/consts.rs +10 -0
  25. data/ext/gqliterb/vendor/gqlitedb/src/error.rs +621 -0
  26. data/ext/gqliterb/vendor/gqlitedb/src/functions/containers.rs +115 -0
  27. data/ext/gqliterb/vendor/gqlitedb/src/functions/edge.rs +20 -0
  28. data/ext/gqliterb/vendor/gqlitedb/src/functions/math.rs +44 -0
  29. data/ext/gqliterb/vendor/gqlitedb/src/functions/node.rs +16 -0
  30. data/ext/gqliterb/vendor/gqlitedb/src/functions/path.rs +48 -0
  31. data/ext/gqliterb/vendor/gqlitedb/src/functions/scalar.rs +86 -0
  32. data/ext/gqliterb/vendor/gqlitedb/src/functions/string.rs +28 -0
  33. data/ext/gqliterb/vendor/gqlitedb/src/functions/value.rs +99 -0
  34. data/ext/gqliterb/vendor/gqlitedb/src/functions.rs +412 -0
  35. data/ext/gqliterb/vendor/gqlitedb/src/graph.rs +268 -0
  36. data/ext/gqliterb/vendor/gqlitedb/src/interpreter/evaluators.rs +1788 -0
  37. data/ext/gqliterb/vendor/gqlitedb/src/interpreter/instructions.rs +262 -0
  38. data/ext/gqliterb/vendor/gqlitedb/src/interpreter/mod.rs +4 -0
  39. data/ext/gqliterb/vendor/gqlitedb/src/lib.rs +42 -0
  40. data/ext/gqliterb/vendor/gqlitedb/src/parser/ast.rs +625 -0
  41. data/ext/gqliterb/vendor/gqlitedb/src/parser/gql.pest +191 -0
  42. data/ext/gqliterb/vendor/gqlitedb/src/parser/parser.rs +1153 -0
  43. data/ext/gqliterb/vendor/gqlitedb/src/parser.rs +4 -0
  44. data/ext/gqliterb/vendor/gqlitedb/src/prelude.rs +8 -0
  45. data/ext/gqliterb/vendor/gqlitedb/src/serialize_with.rs +94 -0
  46. data/ext/gqliterb/vendor/gqlitedb/src/store/pgql.rs +121 -0
  47. data/ext/gqliterb/vendor/gqlitedb/src/store/redb.rs +1250 -0
  48. data/ext/gqliterb/vendor/gqlitedb/src/store/sqlite.rs +994 -0
  49. data/ext/gqliterb/vendor/gqlitedb/src/store.rs +432 -0
  50. data/ext/gqliterb/vendor/gqlitedb/src/tests/compiler.rs +92 -0
  51. data/ext/gqliterb/vendor/gqlitedb/src/tests/evaluators.rs +227 -0
  52. data/ext/gqliterb/vendor/gqlitedb/src/tests/parser.rs +81 -0
  53. data/ext/gqliterb/vendor/gqlitedb/src/tests/store/redb.rs +39 -0
  54. data/ext/gqliterb/vendor/gqlitedb/src/tests/store/sqlite.rs +39 -0
  55. data/ext/gqliterb/vendor/gqlitedb/src/tests/store.rs +462 -0
  56. data/ext/gqliterb/vendor/gqlitedb/src/tests/templates/ast.rs +356 -0
  57. data/ext/gqliterb/vendor/gqlitedb/src/tests/templates/programs.rs +455 -0
  58. data/ext/gqliterb/vendor/gqlitedb/src/tests/templates.rs +2 -0
  59. data/ext/gqliterb/vendor/gqlitedb/src/tests.rs +39 -0
  60. data/ext/gqliterb/vendor/gqlitedb/src/utils.rs +28 -0
  61. data/ext/gqliterb/vendor/gqlitedb/src/value/compare.rs +212 -0
  62. data/ext/gqliterb/vendor/gqlitedb/src/value/contains.rs +47 -0
  63. data/ext/gqliterb/vendor/gqlitedb/src/value/value_map.rs +298 -0
  64. data/ext/gqliterb/vendor/gqlitedb/src/value.rs +559 -0
  65. data/ext/gqliterb/vendor/gqlitedb/src/value_table.rs +616 -0
  66. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/call_stats.sql +22 -0
  67. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/edge_count_for_node.sql +3 -0
  68. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/edge_create.sql +6 -0
  69. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/edge_delete.sql +1 -0
  70. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/edge_delete_by_nodes.sql +2 -0
  71. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/edge_select.sql +139 -0
  72. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/edge_update.sql +4 -0
  73. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/graph_create.sql +16 -0
  74. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/graph_delete.sql +3 -0
  75. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/metadata_create_table.sql +1 -0
  76. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/metadata_get.sql +1 -0
  77. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/metadata_set.sql +1 -0
  78. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/node_create.sql +1 -0
  79. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/node_delete.sql +1 -0
  80. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/node_select.sql +42 -0
  81. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/node_update.sql +4 -0
  82. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/table_exists.sql +5 -0
  83. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/upgrade_from_1_01.sql +2 -0
  84. data/ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/upgrade_graph_from_1_01.sql +65 -0
  85. metadata +82 -2
@@ -0,0 +1,356 @@
1
+ use crate::{graph::EdgeDirectivity, parser::ast::*};
2
+
3
+ fn return_statement(var_id: VariableIdentifier) -> Statement
4
+ {
5
+ Return {
6
+ all: false,
7
+ expressions: vec![NamedExpression {
8
+ identifier: var_id.clone(),
9
+ expression: Variable { identifier: var_id }.into(),
10
+ }],
11
+ modifiers: Modifiers {
12
+ skip: None,
13
+ limit: None,
14
+ order_by: None,
15
+ },
16
+ where_expression: None,
17
+ }
18
+ .into()
19
+ }
20
+
21
+ pub(crate) fn simple_create_node() -> Statements
22
+ {
23
+ vec![Create {
24
+ patterns: vec![Pattern::Node(NodePattern {
25
+ variable: None,
26
+ labels: LabelExpression::None,
27
+ properties: None,
28
+ })],
29
+ }
30
+ .into()]
31
+ }
32
+
33
+ /// AST for `CREATE (n {name: 'foo'}) RETURN n.name AS p`
34
+ pub(crate) fn create_named_node() -> Statements
35
+ {
36
+ let var_ids = VariableIdentifiers::default();
37
+ vec![
38
+ Create {
39
+ patterns: vec![Pattern::Node(NodePattern {
40
+ variable: Some(var_ids.from_name("n")),
41
+ labels: LabelExpression::None,
42
+ properties: Some(
43
+ Map {
44
+ map: vec![(
45
+ "name".into(),
46
+ Value {
47
+ value: "foo".into(),
48
+ }
49
+ .into(),
50
+ )],
51
+ }
52
+ .into(),
53
+ ),
54
+ })],
55
+ }
56
+ .into(),
57
+ Return {
58
+ all: false,
59
+ expressions: vec![NamedExpression {
60
+ identifier: var_ids.from_name("p"),
61
+ expression: MemberAccess {
62
+ left: Variable {
63
+ identifier: var_ids.from_name("n"),
64
+ }
65
+ .into(),
66
+ path: vec!["name".into()],
67
+ }
68
+ .into(),
69
+ }],
70
+ modifiers: Modifiers {
71
+ skip: None,
72
+ limit: None,
73
+ order_by: None,
74
+ },
75
+ where_expression: None,
76
+ }
77
+ .into(),
78
+ ]
79
+ }
80
+
81
+ /// AST for `CREATE (n {id: 12, name: 'foo'}) RETURN n.id AS id, n.name AS p`
82
+ pub(crate) fn create_named_node_double_return() -> Statements
83
+ {
84
+ let var_ids = VariableIdentifiers::default();
85
+ vec![
86
+ Create {
87
+ patterns: vec![Pattern::Node(NodePattern {
88
+ variable: Some(var_ids.from_name("n")),
89
+ labels: LabelExpression::None,
90
+ properties: Some(
91
+ Map {
92
+ map: vec![
93
+ ("id".into(), Value { value: 12.into() }.into()),
94
+ (
95
+ "name".into(),
96
+ Value {
97
+ value: "foo".into(),
98
+ }
99
+ .into(),
100
+ ),
101
+ ],
102
+ }
103
+ .into(),
104
+ ),
105
+ })],
106
+ }
107
+ .into(),
108
+ Return {
109
+ all: false,
110
+ expressions: vec![
111
+ NamedExpression {
112
+ identifier: var_ids.from_name("id"),
113
+ expression: MemberAccess {
114
+ left: Variable {
115
+ identifier: var_ids.from_name("n"),
116
+ }
117
+ .into(),
118
+ path: vec!["id".into()],
119
+ }
120
+ .into(),
121
+ },
122
+ NamedExpression {
123
+ identifier: var_ids.from_name("p"),
124
+ expression: MemberAccess {
125
+ left: Variable {
126
+ identifier: var_ids.from_name("n"),
127
+ }
128
+ .into(),
129
+ path: vec!["name".into()],
130
+ }
131
+ .into(),
132
+ },
133
+ ],
134
+ modifiers: Modifiers {
135
+ skip: None,
136
+ limit: None,
137
+ order_by: None,
138
+ },
139
+ where_expression: None,
140
+ }
141
+ .into(),
142
+ ]
143
+ }
144
+
145
+ /// AST for `WITH 1 AS n, 2 AS m WITH n AS a, m AS b RETURN a`
146
+ pub(crate) fn double_with_return() -> Statements
147
+ {
148
+ let var_ids = VariableIdentifiers::default();
149
+ vec![
150
+ With {
151
+ all: false,
152
+ expressions: vec![
153
+ NamedExpression {
154
+ identifier: var_ids.from_name("n"),
155
+ expression: Value { value: 1.into() }.into(),
156
+ },
157
+ NamedExpression {
158
+ identifier: var_ids.from_name("m"),
159
+ expression: Value { value: 2.into() }.into(),
160
+ },
161
+ ],
162
+ modifiers: Modifiers {
163
+ skip: None,
164
+ limit: None,
165
+ order_by: None,
166
+ },
167
+ where_expression: None,
168
+ }
169
+ .into(),
170
+ With {
171
+ all: false,
172
+ expressions: vec![
173
+ NamedExpression {
174
+ identifier: var_ids.from_name("a"),
175
+ expression: Variable {
176
+ identifier: var_ids.from_name("n"),
177
+ }
178
+ .into(),
179
+ },
180
+ NamedExpression {
181
+ identifier: var_ids.from_name("b"),
182
+ expression: Variable {
183
+ identifier: var_ids.from_name("m"),
184
+ }
185
+ .into(),
186
+ },
187
+ ],
188
+ modifiers: Modifiers {
189
+ skip: None,
190
+ limit: None,
191
+ order_by: None,
192
+ },
193
+ where_expression: None,
194
+ }
195
+ .into(),
196
+ return_statement(var_ids.from_name("a")),
197
+ ]
198
+ }
199
+
200
+ /// AST for `UNWIND [0] AS i RETURN i`
201
+ pub(crate) fn unwind() -> Statements
202
+ {
203
+ let var_ids = VariableIdentifiers::default();
204
+ vec![
205
+ Unwind {
206
+ identifier: var_ids.from_name("i"),
207
+ expression: Array {
208
+ array: vec![Value { value: 0.into() }.into()],
209
+ }
210
+ .into(),
211
+ }
212
+ .into(),
213
+ return_statement(var_ids.from_name("i")),
214
+ ]
215
+ }
216
+
217
+ /// AST for `MATCH (n)-[]->(n) RETURN n`
218
+ pub(crate) fn match_loop() -> Statements
219
+ {
220
+ let var_ids = VariableIdentifiers::default();
221
+ vec![
222
+ Match {
223
+ patterns: vec![Pattern::Edge(EdgePattern {
224
+ variable: None,
225
+ source: NodePattern {
226
+ variable: Some(var_ids.from_name("n")),
227
+ labels: LabelExpression::None,
228
+ properties: None,
229
+ },
230
+ destination: NodePattern {
231
+ variable: Some(var_ids.from_name("n")),
232
+ labels: LabelExpression::None,
233
+ properties: None,
234
+ },
235
+ labels: LabelExpression::None,
236
+ properties: None,
237
+ directivity: EdgeDirectivity::Directed,
238
+ })],
239
+ where_expression: None,
240
+ optional: false,
241
+ }
242
+ .into(),
243
+ return_statement(var_ids.from_name("n")),
244
+ ]
245
+ }
246
+
247
+ /// AST for `OPTIONAL MATCH (a) RETURN a`
248
+ pub(crate) fn optional_match() -> Statements
249
+ {
250
+ let var_ids = VariableIdentifiers::default();
251
+ vec![
252
+ Match {
253
+ patterns: vec![Pattern::Node(NodePattern {
254
+ variable: Some(var_ids.from_name("a")),
255
+ labels: LabelExpression::None,
256
+ properties: None,
257
+ })],
258
+ where_expression: None,
259
+ optional: true,
260
+ }
261
+ .into(),
262
+ return_statement(var_ids.from_name("a")),
263
+ ]
264
+ }
265
+
266
+ /// AST for `MATCH (a) RETURN COUNT(*)`
267
+ pub(crate) fn match_count() -> Statements
268
+ {
269
+ let var_ids = VariableIdentifiers::default();
270
+ vec![
271
+ Match {
272
+ patterns: vec![Pattern::Node(NodePattern {
273
+ variable: Some(var_ids.from_name("a")),
274
+ labels: LabelExpression::None,
275
+ properties: None,
276
+ })],
277
+ where_expression: None,
278
+ optional: false,
279
+ }
280
+ .into(),
281
+ Return {
282
+ all: false,
283
+ expressions: vec![NamedExpression {
284
+ identifier: var_ids.from_name("count(*)"),
285
+ expression: FunctionCall {
286
+ name: "count".into(),
287
+ arguments: vec![Value { value: 0.into() }.into()],
288
+ }
289
+ .into(),
290
+ }],
291
+ modifiers: Modifiers {
292
+ skip: None,
293
+ limit: None,
294
+ order_by: None,
295
+ },
296
+ where_expression: None,
297
+ }
298
+ .into(),
299
+ ]
300
+ }
301
+
302
+ /// AST for `MATCH (n) RETURN n.name, count(n.num)`
303
+ pub(crate) fn aggregation() -> Statements
304
+ {
305
+ let var_ids = VariableIdentifiers::default();
306
+ vec![
307
+ Match {
308
+ patterns: vec![Pattern::Node(NodePattern {
309
+ variable: Some(var_ids.from_name("n")),
310
+ labels: LabelExpression::None,
311
+ properties: None,
312
+ })],
313
+ where_expression: None,
314
+ optional: false,
315
+ }
316
+ .into(),
317
+ Return {
318
+ all: false,
319
+ expressions: vec![
320
+ NamedExpression {
321
+ identifier: var_ids.from_name("n.name"),
322
+ expression: MemberAccess {
323
+ left: Variable {
324
+ identifier: var_ids.from_name("n"),
325
+ }
326
+ .into(),
327
+ path: vec!["name".into()],
328
+ }
329
+ .into(),
330
+ },
331
+ NamedExpression {
332
+ identifier: var_ids.from_name("count(n.num)"),
333
+ expression: FunctionCall {
334
+ name: "count".into(),
335
+ arguments: vec![MemberAccess {
336
+ left: Variable {
337
+ identifier: var_ids.from_name("n"),
338
+ }
339
+ .into(),
340
+ path: vec!["num".into()],
341
+ }
342
+ .into()],
343
+ }
344
+ .into(),
345
+ },
346
+ ],
347
+ modifiers: Modifiers {
348
+ skip: None,
349
+ limit: None,
350
+ order_by: None,
351
+ },
352
+ where_expression: None,
353
+ }
354
+ .into(),
355
+ ]
356
+ }