gqlite 1.2.0 → 1.2.3

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 +152 -135
  4. data/ext/gqliterb/Cargo.toml +4 -6
  5. data/ext/gqliterb/src/lib.rs +8 -2
  6. data/ext/gqliterb/vendor/gqlitedb/Cargo.lock +2115 -0
  7. data/ext/gqliterb/vendor/gqlitedb/Cargo.toml +138 -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 +259 -0
  20. data/ext/gqliterb/vendor/gqlitedb/src/compiler/expression_analyser.rs +431 -0
  21. data/ext/gqliterb/vendor/gqlitedb/src/compiler/variables_manager.rs +621 -0
  22. data/ext/gqliterb/vendor/gqlitedb/src/compiler.rs +1115 -0
  23. data/ext/gqliterb/vendor/gqlitedb/src/connection.rs +342 -0
  24. data/ext/gqliterb/vendor/gqlitedb/src/consts.rs +10 -0
  25. data/ext/gqliterb/vendor/gqlitedb/src/error.rs +613 -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 +80 -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 +410 -0
  35. data/ext/gqliterb/vendor/gqlitedb/src/graph.rs +283 -0
  36. data/ext/gqliterb/vendor/gqlitedb/src/interpreter/evaluators.rs +1776 -0
  37. data/ext/gqliterb/vendor/gqlitedb/src/interpreter/instructions.rs +267 -0
  38. data/ext/gqliterb/vendor/gqlitedb/src/interpreter/mod.rs +4 -0
  39. data/ext/gqliterb/vendor/gqlitedb/src/lib.rs +41 -0
  40. data/ext/gqliterb/vendor/gqlitedb/src/parser/ast.rs +611 -0
  41. data/ext/gqliterb/vendor/gqlitedb/src/parser/gql.pest +196 -0
  42. data/ext/gqliterb/vendor/gqlitedb/src/parser/parser.rs +1183 -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 +1262 -0
  48. data/ext/gqliterb/vendor/gqlitedb/src/store/sqlite.rs +1026 -0
  49. data/ext/gqliterb/vendor/gqlitedb/src/store.rs +439 -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 +46 -0
  54. data/ext/gqliterb/vendor/gqlitedb/src/tests/store/sqlite.rs +46 -0
  55. data/ext/gqliterb/vendor/gqlitedb/src/tests/store.rs +470 -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 +609 -0
  65. data/ext/gqliterb/vendor/gqlitedb/src/value_table.rs +610 -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,196 @@
1
+ WHITESPACE = _{ " " | "\t" | "\n" }
2
+ COMMENT = _{ ("//" ~ (!"\n" ~ ANY)*) | ("/*" ~ (!"*/" ~ ANY)* ~ "*/") }
3
+ ident = @{ ASCII_ALPHA ~ (ASCII_ALPHANUMERIC | "_")* }
4
+ parameter_name = @{ (ASCII_ALPHANUMERIC | "_")* }
5
+ char_single = {
6
+ !("'" | "\\") ~ ANY
7
+ | "\\" ~ ("\"" | "\\" | "/" | "b" | "f" | "n" | "r" | "t" | "'")
8
+ | "\\" ~ ("u" ~ ASCII_HEX_DIGIT{4})
9
+ }
10
+ char_double = {
11
+ !("\"" | "\\") ~ ANY
12
+ | "\\" ~ ("\"" | "\\" | "/" | "b" | "f" | "n" | "r" | "t" | "'")
13
+ | "\\" ~ ("u" ~ ASCII_HEX_DIGIT{4})
14
+ }
15
+ char_tick = {
16
+ !("`" | "\\") ~ ANY
17
+ | "\\" ~ ("\"" | "\\" | "/" | "b" | "f" | "n" | "r" | "t" | "'")
18
+ | "\\" ~ ("u" ~ ASCII_HEX_DIGIT{4})
19
+ }
20
+ nothing_ident = @{ "###"+ }
21
+
22
+ // Query
23
+ queries = _{ SOI ~ query ~ (";" ~ query)* ~ ";"? ~ EOI }
24
+
25
+ query = { statement* }
26
+
27
+ nothing = { nothing_ident? }
28
+
29
+ // fragments
30
+
31
+ labels = { ":" ~ label_expression }
32
+ pattern = { ident? ~ labels? ~ map? }
33
+ node_pattern = { "(" ~ pattern ~ ")" }
34
+
35
+ directed_edge_pattern = { (")-[" ~ pattern ~ "]->(") | (nothing ~ ")-->(") }
36
+ reversed_edge_pattern = { (")<-[" ~ pattern ~ "]-(") | (nothing ~ ")<--(") }
37
+ undirected_edge_pattern = { (")-[" ~ pattern ~ "]-(") | (")<-[" ~ pattern ~ "]->(") | (nothing ~ ")--(") }
38
+ edge_pattern = { "(" ~ pattern ~ ((directed_edge_pattern | reversed_edge_pattern | undirected_edge_pattern) ~ pattern)+ ~ ")" }
39
+
40
+ path_pattern = { ident ~ "=" ~ "(" ~ pattern ~ (directed_edge_pattern | reversed_edge_pattern | undirected_edge_pattern) ~ pattern ~ ")" }
41
+
42
+ node_or_edge_pattern = _{ edge_pattern | node_pattern }
43
+ node_or_edge_or_path_pattern = _{ edge_pattern | node_pattern | path_pattern }
44
+
45
+ // Modifiers
46
+
47
+ order_by_kw = @{ "ORDER" ~ WHITESPACE+ ~ "BY" ~ !ASCII_ALPHA }
48
+ limit_kw = @{ "LIMIT" ~ !ASCII_ALPHA }
49
+ skip_kw = @{ "SKIP" ~ !ASCII_ALPHA }
50
+
51
+ limit = { limit_kw ~ expression }
52
+ order_by = { order_by_kw ~ (order_by_desc_expression | order_by_asc_expression) ~ ("," ~ (order_by_desc_expression | order_by_asc_expression))* }
53
+ order_by_asc_expression = { expression ~ ("ASCENDING" | "ASC")? }
54
+ order_by_desc_expression = { expression ~ ("DESCENDING" | "DESC") }
55
+ skip = { skip_kw ~ expression }
56
+ modifiers = {
57
+ (limit ~ ((order_by ~ skip?) | (skip? ~ order_by?)))
58
+ | (order_by ~ ((limit ~ skip?) | (skip? ~ limit?)))
59
+ | (skip ~ ((order_by ~ limit?) | (limit? ~ order_by?)))
60
+ }
61
+
62
+ where_modifier = { "WHERE" ~ expression }
63
+
64
+ // Statements
65
+ statement = {
66
+ create_graph_statement
67
+ | drop_graph_if_exists_statement
68
+ | drop_graph_statement
69
+ | use_graph_statement
70
+ | create_statement
71
+ | optional_match_statement
72
+ | match_statement
73
+ | return_statement
74
+ | call_statement
75
+ | with_statement
76
+ | unwind_statement
77
+ | delete_statement
78
+ | detach_delete_statement
79
+ | set_statement
80
+ | remove_statement
81
+ }
82
+
83
+ star = { "*" }
84
+
85
+ create_graph_statement = { "CREATE" ~ "GRAPH" ~ ident }
86
+ drop_graph_statement = { "DROP" ~ "GRAPH" ~ ident }
87
+ drop_graph_if_exists_statement = { "DROP" ~ "GRAPH" ~ "IF" ~ "EXISTS" ~ ident }
88
+ use_graph_statement = { "USE" ~ ident }
89
+
90
+ create_statement = { "CREATE" ~ node_or_edge_pattern ~ ("," ~ node_or_edge_pattern)* }
91
+ match_statement = { "MATCH" ~ node_or_edge_or_path_pattern ~ ("," ~ node_or_edge_or_path_pattern)* ~ where_modifier? }
92
+ optional_match_statement = { "OPTIONAL" ~ match_statement }
93
+ return_statement = { "RETURN" ~ (star | named_expression) ~ ("," ~ named_expression)* ~ modifiers? }
94
+ call_statement = { "CALL" ~ function_name ~ "()" }
95
+ with_statement = { "WITH" ~ (star | named_expression) ~ ("," ~ named_expression)* ~ where_modifier? ~ modifiers? }
96
+ unwind_statement = { "UNWIND" ~ named_expression }
97
+ delete_statement = { "DELETE" ~ expression ~ ("," ~ expression)* }
98
+ detach_delete_statement = { "DETACH" ~ "DELETE" ~ expression ~ ("," ~ expression)* }
99
+ set_statement = { "SET" ~ set_expression ~ ("," ~ set_expression)* }
100
+ remove_statement = { "REMOVE" ~ remove_expression ~ ("," ~ remove_expression)* }
101
+
102
+ // literals
103
+ int = @{ ("+" | "-")? ~ ('0'..'9')+ }
104
+ octa_int = @{ ("+" | "-")? ~ "0o" ~ ('0'..'9' | 'a' .. 'f' | 'A' .. 'F')+ }
105
+ hexa_int = @{ ("+" | "-")? ~ "0x" ~ ('0'..'9' | 'a' .. 'f' | 'A' .. 'F')+ }
106
+ null_lit = { "null" }
107
+ true_lit = { "true" }
108
+ false_lit = { "false" }
109
+ num = @{ (int? ~ "." ~ ASCII_DIGIT+ ~ (^"e" ~ int)?) | (int ~ ^"e" ~ int) }
110
+ string_literal = ${ ("'" ~ inner_single ~ "'") | ("\"" ~ inner_double ~ "\"") | ("`" ~ inner_tick ~ "`") }
111
+ inner_tick = @{ char_tick* }
112
+ inner_double = @{ char_double* }
113
+ inner_single = @{ char_single* }
114
+ function_name = { ident ~ ("." ~ ident)* }
115
+
116
+ // Expression
117
+
118
+ set_expression = _{ set_eq_expression | set_add_expression | set_label_expression }
119
+ set_eq_expression = { set_eq_member_access ~ "=" ~ expression }
120
+ set_add_expression = { set_eq_member_access ~ "+=" ~ expression }
121
+ remove_expression = _{ remove_member_access | set_label_expression }
122
+ set_label_expression = { ident ~ (":" ~ ident)+ }
123
+ set_eq_member_access = { (("(" ~ ident ~ ")") | ident) ~ ("." ~ ident)* }
124
+ remove_member_access = { (("(" ~ ident ~ ")") | ident) ~ ("." ~ ident)+ }
125
+
126
+ expression = { prefix* ~ expression_term ~ postfix* ~ (infix ~ prefix? ~ expression_term ~ postfix*)* }
127
+
128
+ infix = _{ addition | subtraction | multiplication | division | modulo | exponent | or | and | xor | equal | different | in_ | not_in | superior_equal | inferior_equal | superior | inferior }
129
+ postfix = _{ is_null | is_not_null | member_access | range_access | range_access_to | index_access }
130
+ prefix = _{ negation | not }
131
+
132
+ addition = { "+" }
133
+ subtraction = { "-" }
134
+ multiplication = { "*" }
135
+ division = { "/" }
136
+ modulo = { "%" }
137
+ exponent = { "^" }
138
+
139
+ xor_kw = @{ "XOR" ~ !ASCII_ALPHA }
140
+ xor = { xor_kw }
141
+ or_kw = @{ "OR" ~ !ASCII_ALPHA }
142
+ or = { or_kw }
143
+ and_kw = @{ "AND" ~ !ASCII_ALPHA }
144
+ and = { and_kw }
145
+ equal = { "=" }
146
+ different = { "<>" }
147
+ inferior_kw = @{ "<" ~ (!">" | !"=") }
148
+ inferior = { inferior_kw }
149
+ superior_kw = @{ ">" ~ !"=" }
150
+ superior = { superior_kw }
151
+ inferior_equal = { "<=" }
152
+ superior_equal = { ">=" }
153
+ not_in = { "NOT" ~ "IN" }
154
+ in_ = { "IN" }
155
+
156
+ negation = { "-" ~ !int }
157
+ not_kw = @{ "NOT" ~ !ASCII_ALPHA }
158
+ not = { not_kw }
159
+
160
+ is_null = { "IS" ~ "NULL" }
161
+ is_not_null = { "IS" ~ "NOT" ~ "NULL" }
162
+ member_access = { ("." ~ (ident | string_literal))+ }
163
+ index_access = { "[" ~ expression ~ "]" }
164
+ range_access = { "[" ~ expression ~ ".." ~ expression? ~ "]" }
165
+ range_access_to = { "[" ~ ".." ~ expression ~ "]" }
166
+
167
+ label_check_expression = { ident ~ (":" ~ ident)+ }
168
+
169
+ parenthesised_expression = { "(" ~ expression ~ ")" }
170
+ named_expression = { (expression ~ "AS" ~ ident) | expression }
171
+ function_call = { function_name ~ "(" ~ (expression ~ ("," ~ expression)*)? ~ ")" }
172
+ function_star = { function_name ~ "(" ~ "*" ~ ")" }
173
+ expression_term = { null_lit | true_lit | false_lit | num | hexa_int | octa_int | int | string_literal | map | array | label_check_expression | parameter | parenthesised_expression | function_call | function_star | ident }
174
+
175
+ parameter = { "$" ~ parameter_name }
176
+
177
+ pair = { (ident | string_literal) ~ ":" ~ expression }
178
+
179
+ array = {
180
+ "[" ~ "]"
181
+ | "[" ~ expression ~ ("," ~ expression)* ~ "]"
182
+ }
183
+
184
+ map = {
185
+ "{" ~ "}"
186
+ | "{" ~ pair ~ ("," ~ pair)* ~ "}"
187
+ }
188
+
189
+ // label_expression
190
+
191
+ label_expression = _{ label_inclusion }
192
+
193
+ label_inclusion = { label_alternative ~ (":" ~ label_expression)* }
194
+ label_alternative = { label_atom ~ ("|" ~ label_expression)* }
195
+ label_atom = { label_group | ":"? ~ ident }
196
+ label_group = { "(" ~ label_expression ~ ")" }