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
@@ -0,0 +1,413 @@
1
+ use itertools::Itertools as _;
2
+ use serde::{Deserialize, Serialize};
3
+ use std::{
4
+ hash::Hash,
5
+ ops::{Add, Div, Mul, Neg, Rem, Sub},
6
+ };
7
+
8
+ mod value_map;
9
+
10
+ pub(crate) use crate::prelude::*;
11
+
12
+ pub use value_map::ValueMap;
13
+
14
+ /// Represent a value in a properties for a Node or an Edge.
15
+ #[derive(Serialize, Deserialize, Debug, Default, PartialEq, Clone)]
16
+ #[serde(untagged)]
17
+ pub enum Value
18
+ {
19
+ /// Null value.
20
+ #[default]
21
+ Null,
22
+ /// A UUID Key in the graph.
23
+ Key(graph::Key),
24
+ /// Boolean value.
25
+ Boolean(bool),
26
+ /// Signed integer value.
27
+ Integer(i64),
28
+ #[serde(
29
+ serialize_with = "serialize_with::serialize_float",
30
+ deserialize_with = "serialize_with::deserialize_float"
31
+ )]
32
+ /// Floating point value.
33
+ Float(f64),
34
+ /// String value.
35
+ String(String),
36
+ /// Array of values.
37
+ Array(Vec<Value>),
38
+ /// Unordered map of values.
39
+ Map(ValueMap),
40
+ /// A node in the graph.
41
+ Node(graph::Node),
42
+ /// An edge in the graph.
43
+ Edge(graph::Edge),
44
+ /// A path in the graph.
45
+ Path(graph::SinglePath),
46
+ }
47
+
48
+ impl Value
49
+ {
50
+ /// Transform this value into a map. This function is guaranteed to succeed,
51
+ /// in case the value does not contains a map, it will create a default empty
52
+ /// map.
53
+ pub fn into_map(self) -> ValueMap
54
+ {
55
+ match self
56
+ {
57
+ Value::Map(o) => o.clone(),
58
+ _ => ValueMap::new(),
59
+ }
60
+ }
61
+ /// Return true if the value is null, false otherwise.
62
+ pub fn is_null(&self) -> bool
63
+ {
64
+ matches!(self, Value::Null)
65
+ }
66
+ /// Remove all elements of a map that are null. Walk through the map values recursively.
67
+ pub fn remove_null(self) -> Self
68
+ {
69
+ match self
70
+ {
71
+ Value::Map(object) => object.remove_null().into(),
72
+ o => o,
73
+ }
74
+ }
75
+ }
76
+ impl Hash for Value
77
+ {
78
+ fn hash<H: std::hash::Hasher>(&self, state: &mut H)
79
+ {
80
+ match self
81
+ {
82
+ Value::Null =>
83
+ {}
84
+ Value::Key(k) => k.hash(state),
85
+ Value::Boolean(b) => b.hash(state),
86
+ Value::Integer(i) => i.hash(state),
87
+ Value::Float(f) =>
88
+ {
89
+ let bits = if f.is_nan()
90
+ {
91
+ 0x7ff8000000000000
92
+ }
93
+ else
94
+ {
95
+ f.to_bits()
96
+ };
97
+ bits.hash(state);
98
+ }
99
+ Value::String(s) => s.hash(state),
100
+ Value::Array(a) => a.hash(state),
101
+ Value::Map(m) => m.hash(state),
102
+ Value::Node(n) => n.hash(state),
103
+ Value::Edge(e) => e.hash(state),
104
+ Value::Path(p) => p.hash(state),
105
+ }
106
+ }
107
+ }
108
+
109
+ impl Add for Value
110
+ {
111
+ type Output = Result<Value>;
112
+ fn add(self, rhs: Self) -> Self::Output
113
+ {
114
+ match self
115
+ {
116
+ Value::Boolean(..)
117
+ | Value::Key(..)
118
+ | Value::Node(..)
119
+ | Value::Edge(..)
120
+ | Value::Map(..)
121
+ | Value::Path(..) => Err(Error::InvalidBinaryOperands),
122
+ Value::Null => Ok(Value::Null),
123
+ Self::Array(lhs) => match rhs
124
+ {
125
+ Self::Array(rhs) =>
126
+ {
127
+ let mut lhs = lhs.clone();
128
+ lhs.append(&mut rhs.clone());
129
+ Ok(lhs.into())
130
+ }
131
+ _ =>
132
+ {
133
+ let mut lhs = lhs.clone();
134
+ lhs.push(rhs.clone());
135
+ Ok(lhs.into())
136
+ }
137
+ },
138
+ Self::Float(lhs) => match rhs
139
+ {
140
+ Self::Float(rhs) => Ok((lhs + rhs).into()),
141
+ Self::Integer(rhs) => Ok((lhs + rhs as f64).into()),
142
+ Self::Null => Ok(Self::Null),
143
+ _ => Err(Error::InvalidBinaryOperands),
144
+ },
145
+ Self::Integer(lhs) => match rhs
146
+ {
147
+ Self::Float(rhs) => Ok((lhs as f64 + rhs).into()),
148
+ Self::Integer(rhs) => Ok((lhs + rhs).into()),
149
+ Self::Null => Ok(Self::Null),
150
+ _ => Err(Error::InvalidBinaryOperands),
151
+ },
152
+ Self::String(lhs) => match rhs
153
+ {
154
+ Self::String(rhs) => Ok((lhs + &rhs).into()),
155
+ Self::Null => Ok(Self::Null),
156
+ _ => Err(Error::InvalidBinaryOperands),
157
+ },
158
+ }
159
+ }
160
+ }
161
+
162
+ macro_rules! impl_mdsr {
163
+ ($x:tt, $op:tt) => {
164
+ impl $x for Value
165
+ {
166
+ type Output = Result<Value>;
167
+ fn $op(self, rhs: Self) -> Self::Output
168
+ {
169
+ match self
170
+ {
171
+ Value::Boolean(..)
172
+ | Value::Key(..)
173
+ | Value::String(..)
174
+ | Value::Node(..)
175
+ | Value::Edge(..)
176
+ | Value::Array(..)
177
+ | Value::Map(..)
178
+ | Value::Path(..) => Err(Error::InvalidBinaryOperands.into()),
179
+ Value::Null => Ok(Value::Null),
180
+ Self::Float(lhs) => match rhs
181
+ {
182
+ Self::Float(rhs) => Ok(lhs.$op(rhs).into()),
183
+ Self::Integer(rhs) => Ok(lhs.$op(rhs as f64).into()),
184
+ Self::Null => Ok(Self::Null),
185
+ _ => Err(Error::InvalidBinaryOperands.into()),
186
+ },
187
+ Self::Integer(lhs) => match rhs
188
+ {
189
+ Self::Float(rhs) => Ok((lhs as f64).$op(rhs).into()),
190
+ Self::Integer(rhs) => Ok(lhs.$op(rhs).into()),
191
+ Self::Null => Ok(Self::Null),
192
+ _ => Err(Error::InvalidBinaryOperands.into()),
193
+ },
194
+ }
195
+ }
196
+ }
197
+ };
198
+ }
199
+
200
+ impl_mdsr!(Mul, mul);
201
+ impl_mdsr!(Sub, sub);
202
+ impl_mdsr!(Div, div);
203
+ impl_mdsr!(Rem, rem);
204
+
205
+ impl Value
206
+ {
207
+ /// Compute this value to the power of rhs. Return an error if called a non-number values.
208
+ pub fn pow(self, rhs: Value) -> Result<Value>
209
+ {
210
+ match self
211
+ {
212
+ Value::Boolean(..)
213
+ | Value::Key(..)
214
+ | Value::String(..)
215
+ | Value::Node(..)
216
+ | Value::Edge(..)
217
+ | Value::Array(..)
218
+ | Value::Map(..)
219
+ | Value::Path(..) => Err(Error::InvalidBinaryOperands),
220
+ Value::Null => Ok(Value::Null),
221
+ Self::Float(lhs) => match rhs
222
+ {
223
+ Self::Float(rhs) => Ok(lhs.powf(rhs).into()),
224
+ Self::Integer(rhs) => Ok(lhs.powf(rhs as f64).into()),
225
+ Self::Null => Ok(Self::Null),
226
+ _ => Err(Error::InvalidBinaryOperands),
227
+ },
228
+ Self::Integer(lhs) => match rhs
229
+ {
230
+ Self::Float(rhs) => Ok((lhs as f64).powf(rhs).into()),
231
+ Self::Integer(rhs) => match rhs.try_into()
232
+ {
233
+ Ok(rhs) => Ok(lhs.pow(rhs).into()),
234
+ Err(_) => Ok((lhs as f64).powf(rhs as f64).into()),
235
+ },
236
+ Self::Null => Ok(Self::Null),
237
+ _ => Err(Error::InvalidBinaryOperands),
238
+ },
239
+ }
240
+ }
241
+ }
242
+
243
+ impl Neg for Value
244
+ {
245
+ type Output = Result<Value>;
246
+ fn neg(self) -> Self::Output
247
+ {
248
+ match self
249
+ {
250
+ Self::Float(fl) => Ok((-fl).into()),
251
+ Self::Integer(i) => Ok((-i).into()),
252
+ Value::Null => Ok(Value::Null),
253
+ Value::Boolean(..)
254
+ | Value::Key(..)
255
+ | Value::String(..)
256
+ | Value::Node(..)
257
+ | Value::Edge(..)
258
+ | Value::Array(..)
259
+ | Value::Map(..)
260
+ | Value::Path(..) => Err(Error::InvalidNegationOperands),
261
+ }
262
+ }
263
+ }
264
+
265
+ impl std::fmt::Display for Value
266
+ {
267
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result
268
+ {
269
+ match self
270
+ {
271
+ Value::Null => write!(f, "null"),
272
+ Value::Key(k) => write!(f, "<{}>", k.uuid()),
273
+ Value::Boolean(b) => write!(f, "{}", b),
274
+ Value::Integer(i) => write!(f, "{}", i),
275
+ Value::Float(fl) => write!(f, "{}", fl),
276
+ Value::String(s) => write!(f, "{}", s),
277
+ Value::Array(v) => write!(f, "[{}]", v.iter().map(|x| x.to_string()).join(", ")),
278
+ Value::Map(o) => write!(f, "{}", o),
279
+ Value::Node(n) => write!(f, "{}", n),
280
+ Value::Edge(e) => write!(f, "{}", e),
281
+ Value::Path(p) => write!(f, "{}", p),
282
+ }
283
+ }
284
+ }
285
+
286
+ /// Trait to return a reference to the underlying type
287
+ pub trait ValueTryIntoRef<T>
288
+ {
289
+ /// Return a reference to T
290
+ fn try_into_ref(&self) -> Result<&T, Error>;
291
+ }
292
+
293
+ impl ValueTryIntoRef<Value> for Value
294
+ {
295
+ fn try_into_ref(&self) -> Result<&Value, Error>
296
+ {
297
+ Ok(self)
298
+ }
299
+ }
300
+
301
+ macro_rules! impl_to_value {
302
+ ($type:ty, $vn:tt) => {
303
+ impl From<$type> for Value
304
+ {
305
+ fn from(v: $type) -> Value
306
+ {
307
+ Value::$vn(v)
308
+ }
309
+ }
310
+
311
+ impl From<Vec<$type>> for Value
312
+ {
313
+ fn from(v: Vec<$type>) -> Value
314
+ {
315
+ Value::Array(v.into_iter().map(|v| v.into()).collect())
316
+ }
317
+ }
318
+ impl TryInto<$type> for Value
319
+ {
320
+ type Error = Error;
321
+ fn try_into(self) -> Result<$type, Self::Error>
322
+ {
323
+ match self
324
+ {
325
+ Value::$vn(v) => Ok(v),
326
+ _ => Err(
327
+ Error::InvalidValueCast {
328
+ value: Box::new(self),
329
+ typename: stringify!($type),
330
+ }
331
+ .into(),
332
+ ),
333
+ }
334
+ }
335
+ }
336
+
337
+ impl ValueTryIntoRef<$type> for Value
338
+ {
339
+ fn try_into_ref(&self) -> Result<&$type, Error>
340
+ {
341
+ match self
342
+ {
343
+ Value::$vn(v) => Ok(v),
344
+ _ => Err(
345
+ Error::InvalidValueCast {
346
+ value: Box::new(self.clone()),
347
+ typename: stringify!($type),
348
+ }
349
+ .into(),
350
+ ),
351
+ }
352
+ }
353
+ }
354
+ };
355
+ }
356
+
357
+ impl_to_value!(graph::Key, Key);
358
+ impl_to_value!(bool, Boolean);
359
+ impl_to_value!(i64, Integer);
360
+ impl_to_value!(f64, Float);
361
+ impl_to_value!(String, String);
362
+ impl_to_value!(graph::Node, Node);
363
+ impl_to_value!(graph::Edge, Edge);
364
+ impl_to_value!(graph::SinglePath, Path);
365
+ impl_to_value!(Vec<Value>, Array);
366
+ impl_to_value!(ValueMap, Map);
367
+
368
+ impl From<&str> for Value
369
+ {
370
+ fn from(val: &str) -> Self
371
+ {
372
+ Value::String(val.into())
373
+ }
374
+ }
375
+
376
+ /// Convenient macro for creating Array.
377
+ ///
378
+ /// Example:
379
+ ///
380
+ /// ```rust
381
+ /// # use graphcore::{Value, array};
382
+ /// let value_arr: Value = array!("hello", 12);
383
+ /// ```
384
+ #[macro_export]
385
+ macro_rules! array {
386
+ () => (
387
+ $crate::Value::Array(Default::default())
388
+ );
389
+ ($($x:expr),+ $(,)?) => (
390
+ $crate::Value::Array(
391
+ vec![$($x.into()),+]
392
+ )
393
+ );
394
+ }
395
+
396
+ /// Convenient macro for creating ValueMap.
397
+ ///
398
+ /// Example:
399
+ ///
400
+ /// ```rust
401
+ /// # use graphcore::{ValueMap, value_map};
402
+ /// let value_map: ValueMap = value_map!("hello" => 12);
403
+ /// ```
404
+ #[macro_export]
405
+ macro_rules! value_map {
406
+ // map-like
407
+ ($($k:expr => $v:expr),* $(,)?) => {
408
+ {
409
+ let value_map: $crate::ValueMap = core::convert::From::from([$(($k.to_string(), $v.into()),)*]);
410
+ value_map
411
+ }
412
+ };
413
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gqlite
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyrille Berger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-07-26 00:00:00.000000000 Z
11
+ date: 2025-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rb_sys
@@ -62,90 +62,101 @@ extensions:
62
62
  - ext/gqliterb/extconf.rb
63
63
  extra_rdoc_files: []
64
64
  files:
65
- - ext/gqliterb/.cargo/config.toml
66
- - ext/gqliterb/Cargo.lock
65
+ - ext/Cargo.toml
66
+ - ext/gqlitedb/Cargo.toml
67
+ - ext/gqlitedb/askama.toml
68
+ - ext/gqlitedb/benches/common/mod.rs
69
+ - ext/gqlitedb/benches/common/pokec.rs
70
+ - ext/gqlitedb/benches/pokec_divan.rs
71
+ - ext/gqlitedb/benches/pokec_iai.rs
72
+ - ext/gqlitedb/gqlite_bench_data/README.MD
73
+ - ext/gqlitedb/gqlite_bench_data/scripts/generate_smaller_pokec.rb
74
+ - ext/gqlitedb/gqlite_bench_data/scripts/to_efficient_pokec.rb
75
+ - ext/gqlitedb/release.toml
76
+ - ext/gqlitedb/src/aggregators.rs
77
+ - ext/gqlitedb/src/aggregators/arithmetic.rs
78
+ - ext/gqlitedb/src/aggregators/containers.rs
79
+ - ext/gqlitedb/src/aggregators/count.rs
80
+ - ext/gqlitedb/src/aggregators/stats.rs
81
+ - ext/gqlitedb/src/capi.rs
82
+ - ext/gqlitedb/src/compiler.rs
83
+ - ext/gqlitedb/src/compiler/expression_analyser.rs
84
+ - ext/gqlitedb/src/compiler/variables_manager.rs
85
+ - ext/gqlitedb/src/connection.rs
86
+ - ext/gqlitedb/src/consts.rs
87
+ - ext/gqlitedb/src/error.rs
88
+ - ext/gqlitedb/src/functions.rs
89
+ - ext/gqlitedb/src/functions/containers.rs
90
+ - ext/gqlitedb/src/functions/edge.rs
91
+ - ext/gqlitedb/src/functions/math.rs
92
+ - ext/gqlitedb/src/functions/node.rs
93
+ - ext/gqlitedb/src/functions/path.rs
94
+ - ext/gqlitedb/src/functions/scalar.rs
95
+ - ext/gqlitedb/src/functions/string.rs
96
+ - ext/gqlitedb/src/functions/value.rs
97
+ - ext/gqlitedb/src/graph.rs
98
+ - ext/gqlitedb/src/interpreter/evaluators.rs
99
+ - ext/gqlitedb/src/interpreter/instructions.rs
100
+ - ext/gqlitedb/src/interpreter/mod.rs
101
+ - ext/gqlitedb/src/lib.rs
102
+ - ext/gqlitedb/src/parser.rs
103
+ - ext/gqlitedb/src/parser/ast.rs
104
+ - ext/gqlitedb/src/parser/gql.pest
105
+ - ext/gqlitedb/src/parser/parser_impl.rs
106
+ - ext/gqlitedb/src/prelude.rs
107
+ - ext/gqlitedb/src/query_result.rs
108
+ - ext/gqlitedb/src/store.rs
109
+ - ext/gqlitedb/src/store/pgql.rs
110
+ - ext/gqlitedb/src/store/redb.rs
111
+ - ext/gqlitedb/src/store/sqlite.rs
112
+ - ext/gqlitedb/src/tests.rs
113
+ - ext/gqlitedb/src/tests/compiler.rs
114
+ - ext/gqlitedb/src/tests/evaluators.rs
115
+ - ext/gqlitedb/src/tests/parser.rs
116
+ - ext/gqlitedb/src/tests/store.rs
117
+ - ext/gqlitedb/src/tests/store/redb.rs
118
+ - ext/gqlitedb/src/tests/store/sqlite.rs
119
+ - ext/gqlitedb/src/tests/templates.rs
120
+ - ext/gqlitedb/src/tests/templates/ast.rs
121
+ - ext/gqlitedb/src/tests/templates/programs.rs
122
+ - ext/gqlitedb/src/utils.rs
123
+ - ext/gqlitedb/src/value.rs
124
+ - ext/gqlitedb/src/value/compare.rs
125
+ - ext/gqlitedb/src/value/contains.rs
126
+ - ext/gqlitedb/src/value_table.rs
127
+ - ext/gqlitedb/templates/sql/sqlite/call_stats.sql
128
+ - ext/gqlitedb/templates/sql/sqlite/edge_count_for_node.sql
129
+ - ext/gqlitedb/templates/sql/sqlite/edge_create.sql
130
+ - ext/gqlitedb/templates/sql/sqlite/edge_delete.sql
131
+ - ext/gqlitedb/templates/sql/sqlite/edge_delete_by_nodes.sql
132
+ - ext/gqlitedb/templates/sql/sqlite/edge_select.sql
133
+ - ext/gqlitedb/templates/sql/sqlite/edge_update.sql
134
+ - ext/gqlitedb/templates/sql/sqlite/graph_create.sql
135
+ - ext/gqlitedb/templates/sql/sqlite/graph_delete.sql
136
+ - ext/gqlitedb/templates/sql/sqlite/metadata_create_table.sql
137
+ - ext/gqlitedb/templates/sql/sqlite/metadata_get.sql
138
+ - ext/gqlitedb/templates/sql/sqlite/metadata_set.sql
139
+ - ext/gqlitedb/templates/sql/sqlite/node_create.sql
140
+ - ext/gqlitedb/templates/sql/sqlite/node_delete.sql
141
+ - ext/gqlitedb/templates/sql/sqlite/node_select.sql
142
+ - ext/gqlitedb/templates/sql/sqlite/node_update.sql
143
+ - ext/gqlitedb/templates/sql/sqlite/table_exists.sql
144
+ - ext/gqlitedb/templates/sql/sqlite/upgrade_from_1_01.sql
145
+ - ext/gqlitedb/templates/sql/sqlite/upgrade_graph_from_1_01.sql
67
146
  - ext/gqliterb/Cargo.toml
68
147
  - ext/gqliterb/extconf.rb
69
148
  - ext/gqliterb/src/lib.rs
70
- - ext/gqliterb/vendor/gqlitedb/Cargo.lock
71
- - ext/gqliterb/vendor/gqlitedb/Cargo.toml
72
- - ext/gqliterb/vendor/gqlitedb/askama.toml
73
- - ext/gqliterb/vendor/gqlitedb/benches/common/mod.rs
74
- - ext/gqliterb/vendor/gqlitedb/benches/common/pokec.rs
75
- - ext/gqliterb/vendor/gqlitedb/benches/pokec_divan.rs
76
- - ext/gqliterb/vendor/gqlitedb/benches/pokec_iai.rs
77
- - ext/gqliterb/vendor/gqlitedb/release.toml
78
- - ext/gqliterb/vendor/gqlitedb/src/aggregators.rs
79
- - ext/gqliterb/vendor/gqlitedb/src/aggregators/arithmetic.rs
80
- - ext/gqliterb/vendor/gqlitedb/src/aggregators/containers.rs
81
- - ext/gqliterb/vendor/gqlitedb/src/aggregators/count.rs
82
- - ext/gqliterb/vendor/gqlitedb/src/aggregators/stats.rs
83
- - ext/gqliterb/vendor/gqlitedb/src/capi.rs
84
- - ext/gqliterb/vendor/gqlitedb/src/compiler.rs
85
- - ext/gqliterb/vendor/gqlitedb/src/compiler/expression_analyser.rs
86
- - ext/gqliterb/vendor/gqlitedb/src/compiler/variables_manager.rs
87
- - ext/gqliterb/vendor/gqlitedb/src/connection.rs
88
- - ext/gqliterb/vendor/gqlitedb/src/consts.rs
89
- - ext/gqliterb/vendor/gqlitedb/src/error.rs
90
- - ext/gqliterb/vendor/gqlitedb/src/functions.rs
91
- - ext/gqliterb/vendor/gqlitedb/src/functions/containers.rs
92
- - ext/gqliterb/vendor/gqlitedb/src/functions/edge.rs
93
- - ext/gqliterb/vendor/gqlitedb/src/functions/math.rs
94
- - ext/gqliterb/vendor/gqlitedb/src/functions/node.rs
95
- - ext/gqliterb/vendor/gqlitedb/src/functions/path.rs
96
- - ext/gqliterb/vendor/gqlitedb/src/functions/scalar.rs
97
- - ext/gqliterb/vendor/gqlitedb/src/functions/string.rs
98
- - ext/gqliterb/vendor/gqlitedb/src/functions/value.rs
99
- - ext/gqliterb/vendor/gqlitedb/src/graph.rs
100
- - ext/gqliterb/vendor/gqlitedb/src/interpreter/evaluators.rs
101
- - ext/gqliterb/vendor/gqlitedb/src/interpreter/instructions.rs
102
- - ext/gqliterb/vendor/gqlitedb/src/interpreter/mod.rs
103
- - ext/gqliterb/vendor/gqlitedb/src/lib.rs
104
- - ext/gqliterb/vendor/gqlitedb/src/parser.rs
105
- - ext/gqliterb/vendor/gqlitedb/src/parser/ast.rs
106
- - ext/gqliterb/vendor/gqlitedb/src/parser/gql.pest
107
- - ext/gqliterb/vendor/gqlitedb/src/parser/parser.rs
108
- - ext/gqliterb/vendor/gqlitedb/src/prelude.rs
109
- - ext/gqliterb/vendor/gqlitedb/src/serialize_with.rs
110
- - ext/gqliterb/vendor/gqlitedb/src/store.rs
111
- - ext/gqliterb/vendor/gqlitedb/src/store/pgql.rs
112
- - ext/gqliterb/vendor/gqlitedb/src/store/redb.rs
113
- - ext/gqliterb/vendor/gqlitedb/src/store/sqlite.rs
114
- - ext/gqliterb/vendor/gqlitedb/src/tests.rs
115
- - ext/gqliterb/vendor/gqlitedb/src/tests/compiler.rs
116
- - ext/gqliterb/vendor/gqlitedb/src/tests/evaluators.rs
117
- - ext/gqliterb/vendor/gqlitedb/src/tests/parser.rs
118
- - ext/gqliterb/vendor/gqlitedb/src/tests/store.rs
119
- - ext/gqliterb/vendor/gqlitedb/src/tests/store/redb.rs
120
- - ext/gqliterb/vendor/gqlitedb/src/tests/store/sqlite.rs
121
- - ext/gqliterb/vendor/gqlitedb/src/tests/templates.rs
122
- - ext/gqliterb/vendor/gqlitedb/src/tests/templates/ast.rs
123
- - ext/gqliterb/vendor/gqlitedb/src/tests/templates/programs.rs
124
- - ext/gqliterb/vendor/gqlitedb/src/utils.rs
125
- - ext/gqliterb/vendor/gqlitedb/src/value.rs
126
- - ext/gqliterb/vendor/gqlitedb/src/value/compare.rs
127
- - ext/gqliterb/vendor/gqlitedb/src/value/contains.rs
128
- - ext/gqliterb/vendor/gqlitedb/src/value/value_map.rs
129
- - ext/gqliterb/vendor/gqlitedb/src/value_table.rs
130
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/call_stats.sql
131
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/edge_count_for_node.sql
132
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/edge_create.sql
133
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/edge_delete.sql
134
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/edge_delete_by_nodes.sql
135
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/edge_select.sql
136
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/edge_update.sql
137
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/graph_create.sql
138
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/graph_delete.sql
139
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/metadata_create_table.sql
140
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/metadata_get.sql
141
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/metadata_set.sql
142
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/node_create.sql
143
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/node_delete.sql
144
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/node_select.sql
145
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/node_update.sql
146
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/table_exists.sql
147
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/upgrade_from_1_01.sql
148
- - ext/gqliterb/vendor/gqlitedb/templates/sql/sqlite/upgrade_graph_from_1_01.sql
149
+ - ext/graphcore/Cargo.toml
150
+ - ext/graphcore/README.MD
151
+ - ext/graphcore/release.toml
152
+ - ext/graphcore/src/error.rs
153
+ - ext/graphcore/src/graph.rs
154
+ - ext/graphcore/src/lib.rs
155
+ - ext/graphcore/src/prelude.rs
156
+ - ext/graphcore/src/serialize_with.rs
157
+ - ext/graphcore/src/table.rs
158
+ - ext/graphcore/src/value.rs
159
+ - ext/graphcore/src/value/value_map.rs
149
160
  - lib/gqlite.rb
150
161
  homepage: https://gitlab.com/auksys/gqlite
151
162
  licenses:
@@ -1,2 +0,0 @@
1
- [patch.crates-io]
2
- gqlitedb = { path = "vendor/gqlitedb" }