@surrealdb/lezer 1.0.3 → 1.0.5

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 (58) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/.turbo/turbo-run-tests.log +500 -42
  3. package/dist/index.cjs +68 -66
  4. package/dist/index.js +68 -66
  5. package/package.json +1 -1
  6. package/src/parser.js +18 -18
  7. package/src/parser.terms.js +234 -231
  8. package/src/surrealql.grammar +88 -80
  9. package/src/tokens.js +2 -0
  10. package/test/misc/comments.txt +44 -0
  11. package/test/misc/functions.txt +63 -0
  12. package/test/misc/identifiers.txt +22 -0
  13. package/test/misc/javascript.txt +34 -0
  14. package/test/misc/operators.txt +213 -0
  15. package/test/misc/parameters.txt +23 -0
  16. package/test/misc/subqueries.txt +23 -0
  17. package/test/statements/alter.txt +47 -0
  18. package/test/statements/break-continue.txt +15 -0
  19. package/test/statements/create.txt +103 -0
  20. package/test/statements/define.txt +281 -0
  21. package/test/statements/delete.txt +63 -0
  22. package/test/statements/for.txt +19 -0
  23. package/test/statements/if-else.txt +47 -0
  24. package/test/statements/info.txt +63 -0
  25. package/test/statements/insert.txt +63 -0
  26. package/test/statements/let.txt +39 -0
  27. package/test/statements/live.txt +47 -0
  28. package/test/statements/option.txt +23 -0
  29. package/test/statements/rebuild.txt +15 -0
  30. package/test/statements/relate.txt +63 -0
  31. package/test/statements/remove.txt +95 -0
  32. package/test/statements/return.txt +39 -0
  33. package/test/statements/select.txt +231 -0
  34. package/test/statements/show.txt +31 -0
  35. package/test/statements/sleep.txt +23 -0
  36. package/test/statements/throw.txt +23 -0
  37. package/test/statements/transactions.txt +47 -0
  38. package/test/statements/update.txt +87 -0
  39. package/test/statements/upsert.txt +55 -0
  40. package/test/statements/use.txt +39 -0
  41. package/test/test-surrealql.js +81 -9
  42. package/test/values/arrays.txt +47 -0
  43. package/test/values/casting.txt +95 -0
  44. package/test/values/closures.txt +39 -0
  45. package/test/values/durations.txt +41 -0
  46. package/test/values/format-strings.txt +39 -0
  47. package/test/values/geometries.txt +23 -0
  48. package/test/values/idioms.txt +228 -0
  49. package/test/values/literals.txt +46 -0
  50. package/test/values/numbers.txt +75 -0
  51. package/test/values/objects.txt +64 -0
  52. package/test/values/ranges.txt +31 -0
  53. package/test/values/record-ids.txt +71 -0
  54. package/test/values/regex.txt +31 -0
  55. package/test/values/sets.txt +31 -0
  56. package/test/values/strings.txt +69 -0
  57. package/test/statement.txt +0 -132
  58. package/test/value.txt +0 -259
@@ -0,0 +1,23 @@
1
+ # Simple variable
2
+
3
+ $name
4
+
5
+ ==>
6
+
7
+ SurrealQL(VariableName)
8
+
9
+ # Variable with underscore
10
+
11
+ $my_var
12
+
13
+ ==>
14
+
15
+ SurrealQL(VariableName)
16
+
17
+ # Variable with numbers
18
+
19
+ $var123
20
+
21
+ ==>
22
+
23
+ SurrealQL(VariableName)
@@ -0,0 +1,23 @@
1
+ # Subquery with select
2
+
3
+ (SELECT * FROM test)
4
+
5
+ ==>
6
+
7
+ SurrealQL(SubQuery(SelectStatement(Keyword,Fields(Any),Keyword,Ident)))
8
+
9
+ # Subquery with value
10
+
11
+ (1 + 2)
12
+
13
+ ==>
14
+
15
+ SurrealQL(SubQuery(BinaryExpression(Number(Int),Operator,Number(Int))))
16
+
17
+ # Subquery with create
18
+
19
+ (CREATE test)
20
+
21
+ ==>
22
+
23
+ SurrealQL(SubQuery(CreateStatement(Keyword,Ident)))
@@ -0,0 +1,47 @@
1
+ # Alter table basic
2
+
3
+ ALTER TABLE person
4
+
5
+ ==>
6
+
7
+ SurrealQL(AlterStatement(Keyword,Keyword,Ident))
8
+
9
+ # Alter table drop
10
+
11
+ ALTER TABLE person DROP
12
+
13
+ ==>
14
+
15
+ SurrealQL(AlterStatement(Keyword,Keyword,Ident,Keyword))
16
+
17
+ # Alter table schemafull
18
+
19
+ ALTER TABLE person SCHEMAFULL
20
+
21
+ ==>
22
+
23
+ SurrealQL(AlterStatement(Keyword,Keyword,Ident,Keyword))
24
+
25
+ # Alter table schemaless
26
+
27
+ ALTER TABLE person SCHEMALESS
28
+
29
+ ==>
30
+
31
+ SurrealQL(AlterStatement(Keyword,Keyword,Ident,Keyword))
32
+
33
+ # Alter table with comment
34
+
35
+ ALTER TABLE person COMMENT "Updated table"
36
+
37
+ ==>
38
+
39
+ SurrealQL(AlterStatement(Keyword,Keyword,Ident,CommentClause(Keyword,String)))
40
+
41
+ # Alter table with permissions none
42
+
43
+ ALTER TABLE person PERMISSIONS NONE
44
+
45
+ ==>
46
+
47
+ SurrealQL(AlterStatement(Keyword,Keyword,Ident,PermissionsForClause(Keyword,None)))
@@ -0,0 +1,15 @@
1
+ # Break statement
2
+
3
+ BREAK
4
+
5
+ ==>
6
+
7
+ SurrealQL(BreakStatement(Keyword))
8
+
9
+ # Continue statement
10
+
11
+ CONTINUE
12
+
13
+ ==>
14
+
15
+ SurrealQL(ContinueStatement(Keyword))
@@ -0,0 +1,103 @@
1
+ # Simple create
2
+
3
+ CREATE person
4
+
5
+ ==>
6
+
7
+ SurrealQL(CreateStatement(Keyword,Ident))
8
+
9
+ # Create ONLY
10
+
11
+ CREATE ONLY person
12
+
13
+ ==>
14
+
15
+ SurrealQL(CreateStatement(Keyword,Keyword,Ident))
16
+
17
+ # Create with SET
18
+
19
+ CREATE person SET name = "Tobie", age = 30
20
+
21
+ ==>
22
+
23
+ SurrealQL(CreateStatement(Keyword,Ident,SetClause(Keyword,FieldAssignment(Ident,Operator,String),FieldAssignment(Ident,Operator,Number(Int)))))
24
+
25
+ # Create with CONTENT
26
+
27
+ CREATE person CONTENT {name: "Tobie", age: 30}
28
+
29
+ ==>
30
+
31
+ SurrealQL(CreateStatement(Keyword,Ident,ContentClause(Keyword,Object(BraceOpen,ObjectContent(ObjectProperty(ObjectKey(KeyName),Colon,String),ObjectProperty(ObjectKey(KeyName),Colon,Number(Int))),BraceClose))))
32
+
33
+ # Create with RETURN fields
34
+
35
+ CREATE person SET name = "Tobie" RETURN name
36
+
37
+ ==>
38
+
39
+ SurrealQL(CreateStatement(Keyword,Ident,SetClause(Keyword,FieldAssignment(Ident,Operator,String)),ReturnClause(Keyword,Fields(Predicate(Ident)))))
40
+
41
+ # Create with RETURN AFTER
42
+
43
+ CREATE person SET name = "Tobie" RETURN AFTER
44
+
45
+ ==>
46
+
47
+ SurrealQL(CreateStatement(Keyword,Ident,SetClause(Keyword,FieldAssignment(Ident,Operator,String)),ReturnClause(Keyword,Literal)))
48
+
49
+ # Create with RETURN BEFORE
50
+
51
+ CREATE person SET name = "Tobie" RETURN BEFORE
52
+
53
+ ==>
54
+
55
+ SurrealQL(CreateStatement(Keyword,Ident,SetClause(Keyword,FieldAssignment(Ident,Operator,String)),ReturnClause(Keyword,Literal)))
56
+
57
+ # Create with RETURN DIFF
58
+
59
+ CREATE person SET name = "Tobie" RETURN DIFF
60
+
61
+ ==>
62
+
63
+ SurrealQL(CreateStatement(Keyword,Ident,SetClause(Keyword,FieldAssignment(Ident,Operator,String)),ReturnClause(Keyword,Literal)))
64
+
65
+ # Create with TIMEOUT
66
+
67
+ CREATE person SET name = "Tobie" TIMEOUT 5s
68
+
69
+ ==>
70
+
71
+ SurrealQL(CreateStatement(Keyword,Ident,SetClause(Keyword,FieldAssignment(Ident,Operator,String)),TimeoutClause(Keyword,Duration(DurationPart))))
72
+
73
+ # Create with PARALLEL
74
+
75
+ CREATE person SET name = "Tobie" PARALLEL
76
+
77
+ ==>
78
+
79
+ SurrealQL(CreateStatement(Keyword,Ident,SetClause(Keyword,FieldAssignment(Ident,Operator,String)),ParallelClause(Keyword)))
80
+
81
+ # Create with record ID target
82
+
83
+ CREATE person:tobie
84
+
85
+ ==>
86
+
87
+ SurrealQL(CreateStatement(Keyword,RecordId(RecordTbIdent,Colon,RecordIdIdent)))
88
+
89
+ # Create with variable target
90
+
91
+ CREATE $table
92
+
93
+ ==>
94
+
95
+ SurrealQL(CreateStatement(Keyword,VariableName))
96
+
97
+ # Create multiple targets
98
+
99
+ CREATE person, animal
100
+
101
+ ==>
102
+
103
+ SurrealQL(CreateStatement(Keyword,Ident,Ident))
@@ -0,0 +1,281 @@
1
+ # Define namespace
2
+
3
+ DEFINE NAMESPACE test
4
+
5
+ ==>
6
+
7
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident))
8
+
9
+ # Define namespace if not exists
10
+
11
+ DEFINE NAMESPACE IF NOT EXISTS test
12
+
13
+ ==>
14
+
15
+ SurrealQL(DefineStatement(Keyword,Keyword,IfNotExistsClause(Keyword,Keyword,Keyword),Ident))
16
+
17
+ # Define namespace overwrite
18
+
19
+ DEFINE NAMESPACE OVERWRITE test
20
+
21
+ ==>
22
+
23
+ SurrealQL(DefineStatement(Keyword,Keyword,OverwriteClause(Keyword),Ident))
24
+
25
+ # Define database
26
+
27
+ DEFINE DATABASE test
28
+
29
+ ==>
30
+
31
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident))
32
+
33
+ # Define user
34
+
35
+ DEFINE USER tobie ON ROOT PASSWORD "secret" ROLES owner
36
+
37
+ ==>
38
+
39
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnRootNsDbClause(Keyword,Keyword),Keyword,String,Keyword,Ident))
40
+
41
+ # Define event
42
+
43
+ DEFINE EVENT myevent ON TABLE person WHEN $event = "CREATE" THEN (CREATE log)
44
+
45
+ ==>
46
+
47
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnTableClause(Keyword,Keyword,Ident),WhenClause(Keyword,BinaryExpression(VariableName,Operator,String)),ThenClause(Keyword,SubQuery(CreateStatement(Keyword,Ident)))))
48
+
49
+ # Define field
50
+
51
+ DEFINE FIELD name ON TABLE person TYPE string
52
+
53
+ ==>
54
+
55
+ SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName)))
56
+
57
+ # Define field with default
58
+
59
+ DEFINE FIELD age ON TABLE person TYPE number DEFAULT 0
60
+
61
+ ==>
62
+
63
+ SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName),DefaultClause(Keyword,DefaultAlways,Number(Int))))
64
+
65
+ # Define field with assert
66
+
67
+ DEFINE FIELD email ON TABLE person TYPE string ASSERT $value != NONE
68
+
69
+ ==>
70
+
71
+ SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName),AssertClause(Keyword,BinaryExpression(VariableName,Operator,None))))
72
+
73
+ # Define field readonly
74
+
75
+ DEFINE FIELD created ON TABLE person TYPE datetime READONLY
76
+
77
+ ==>
78
+
79
+ SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName),ReadonlyClause(Keyword)))
80
+
81
+ # Define field flexible type
82
+
83
+ DEFINE FIELD data ON TABLE person FLEXIBLE TYPE object
84
+
85
+ ==>
86
+
87
+ SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,Keyword,TypeName)))
88
+
89
+ # Define field with permissions
90
+
91
+ DEFINE FIELD secret ON TABLE person TYPE string PERMISSIONS FOR select, create WHERE $auth.admin = true
92
+
93
+ ==>
94
+
95
+ SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName),PermissionsForClause(Keyword,PermissionGroup(Keyword,Keyword,Keyword,WhereClause(Keyword,BinaryExpression(Path(VariableName,Subscript(Ident)),Operator,Bool))))))
96
+
97
+ # Define field with reference
98
+
99
+ DEFINE FIELD author ON TABLE post TYPE record REFERENCE
100
+
101
+ ==>
102
+
103
+ SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName),ReferenceClause(Keyword)))
104
+
105
+ # Define field with computed
106
+
107
+ DEFINE FIELD fullname ON TABLE person COMPUTED $value.first + " " + $value.last
108
+
109
+ ==>
110
+
111
+ SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),ComputedClause(Keyword,BinaryExpression(BinaryExpression(Path(VariableName,Subscript(Ident)),Operator,String),Operator,Path(VariableName,Subscript(Ident))))))
112
+
113
+ # Define index unique
114
+
115
+ DEFINE INDEX idx_email ON TABLE person FIELDS email UNIQUE
116
+
117
+ ==>
118
+
119
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnTableClause(Keyword,Keyword,Ident),FieldsColumnsClause(Keyword,Idiom(Ident)),IndexClause(UniqueClause(Keyword))))
120
+
121
+ # Define index search analyzer
122
+
123
+ DEFINE INDEX idx_search ON TABLE person FIELDS name SEARCH ANALYZER my_analyzer BM25
124
+
125
+ ==>
126
+
127
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnTableClause(Keyword,Keyword,Ident),FieldsColumnsClause(Keyword,Idiom(Ident)),IndexClause(SearchAnalyzerClause(Keyword,Keyword,Ident,Bm25Clause(Keyword)))))
128
+
129
+ # Define index mtree
130
+
131
+ DEFINE INDEX idx_vec ON TABLE person FIELDS embedding MTREE DIMENSION 3
132
+
133
+ ==>
134
+
135
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnTableClause(Keyword,Keyword,Ident),FieldsColumnsClause(Keyword,Idiom(Ident)),IndexClause(MtreeClause(Keyword,IndexDimensionClause(Keyword,Number(Int))))))
136
+
137
+ # Define index hnsw
138
+
139
+ DEFINE INDEX idx_vec ON TABLE person FIELDS embedding HNSW DIMENSION 3
140
+
141
+ ==>
142
+
143
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnTableClause(Keyword,Keyword,Ident),FieldsColumnsClause(Keyword,Idiom(Ident)),IndexClause(HnswClause(Keyword,IndexDimensionClause(Keyword,Number(Int))))))
144
+
145
+ # Define function
146
+
147
+ DEFINE FUNCTION fn::greet($name: string) {
148
+ RETURN "Hello, " + $name + "!";
149
+ }
150
+
151
+ ==>
152
+
153
+ SurrealQL(DefineStatement(Keyword,Keyword,FunctionName,ParamDefinition(VariableName,Colon,Type(TypeName)),Block(BraceOpen,ReturnStatement(Keyword,BinaryExpression(BinaryExpression(String,Operator,VariableName),Operator,String)),BraceClose)))
154
+
155
+ # Define param
156
+
157
+ DEFINE PARAM $endpointBase VALUE "https://dummyjson.com"
158
+
159
+ ==>
160
+
161
+ SurrealQL(DefineStatement(Keyword,Keyword,VariableName,Keyword,String))
162
+
163
+ # Define table
164
+
165
+ DEFINE TABLE person
166
+
167
+ ==>
168
+
169
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident))
170
+
171
+ # Define table schemafull
172
+
173
+ DEFINE TABLE person SCHEMAFULL
174
+
175
+ ==>
176
+
177
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,Keyword))
178
+
179
+ # Define table schemaless
180
+
181
+ DEFINE TABLE person SCHEMALESS
182
+
183
+ ==>
184
+
185
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,Keyword))
186
+
187
+ # Define table drop
188
+
189
+ DEFINE TABLE person DROP
190
+
191
+ ==>
192
+
193
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,Keyword))
194
+
195
+ # Define table type relation
196
+
197
+ DEFINE TABLE knows TYPE RELATION IN person OUT person
198
+
199
+ ==>
200
+
201
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,TableTypeClause(Keyword,Keyword,Keyword,Ident,Keyword,Ident,EnforcedClause)))
202
+
203
+ # Define table type normal
204
+
205
+ DEFINE TABLE person TYPE NORMAL
206
+
207
+ ==>
208
+
209
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,TableTypeClause(Keyword,Keyword)))
210
+
211
+ # Define table type any
212
+
213
+ DEFINE TABLE person TYPE ANY
214
+
215
+ ==>
216
+
217
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,TableTypeClause(Keyword,Keyword)))
218
+
219
+ # Define table as view
220
+
221
+ DEFINE TABLE adult AS SELECT * FROM person WHERE age > 18
222
+
223
+ ==>
224
+
225
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,TableViewClause(Keyword,Keyword,Any,Keyword,Ident,WhereClause(Keyword,BinaryExpression(Ident,Operator,Number(Int))))))
226
+
227
+ # Define table with changefeed
228
+
229
+ DEFINE TABLE person CHANGEFEED 1d
230
+
231
+ ==>
232
+
233
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,ChangefeedClause(Keyword,Duration(DurationPart))))
234
+
235
+ # Define table with permissions none
236
+
237
+ DEFINE TABLE person PERMISSIONS NONE
238
+
239
+ ==>
240
+
241
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,PermissionsForClause(Keyword,None)))
242
+
243
+ # Define table with comment
244
+
245
+ DEFINE TABLE person COMMENT "People table"
246
+
247
+ ==>
248
+
249
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident,CommentClause(Keyword,String)))
250
+
251
+ # Define access on database
252
+
253
+ DEFINE ACCESS myaccess ON DATABASE TYPE RECORD SIGNUP (CREATE user SET email = $email) SIGNIN (SELECT * FROM user WHERE email = $email)
254
+
255
+ ==>
256
+
257
+ SurrealQL(DefineStatement(Keyword,AccessDefinition(Keyword,Ident,OnRootNsDbClause(Keyword,Keyword),AccessTypeClause(Keyword,Keyword,SignupClause(Keyword,SubQuery(CreateStatement(Keyword,Ident,SetClause(Keyword,FieldAssignment(Ident,Operator,VariableName))))),SigninClause(Keyword,SubQuery(SelectStatement(Keyword,Fields(Any),Keyword,Ident,WhereClause(Keyword,BinaryExpression(Ident,Operator,VariableName)))))))))
258
+
259
+ # Define config graphql
260
+
261
+ DEFINE CONFIG GRAPHQL AUTO
262
+
263
+ ==>
264
+
265
+ SurrealQL(DefineStatement(Keyword,Keyword,Keyword,Keyword))
266
+
267
+ # Define bucket
268
+
269
+ DEFINE BUCKET mybucket
270
+
271
+ ==>
272
+
273
+ SurrealQL(DefineStatement(Keyword,Keyword,Ident))
274
+
275
+ # Define scope
276
+
277
+ DEFINE SCOPE account SESSION 24h SIGNUP (CREATE user SET email = $email) SIGNIN (SELECT * FROM user WHERE email = $email)
278
+
279
+ ==>
280
+
281
+ SurrealQL(DefineStatement(Keyword,ScopeDefinition(Keyword,Ident,SessionClause(Keyword,Duration(DurationPart)),SignupClause(Keyword,SubQuery(CreateStatement(Keyword,Ident,SetClause(Keyword,FieldAssignment(Ident,Operator,VariableName))))),SigninClause(Keyword,SubQuery(SelectStatement(Keyword,Fields(Any),Keyword,Ident,WhereClause(Keyword,BinaryExpression(Ident,Operator,VariableName))))))))
@@ -0,0 +1,63 @@
1
+ # Simple delete
2
+
3
+ DELETE person
4
+
5
+ ==>
6
+
7
+ SurrealQL(DeleteStatement(Keyword,Ident))
8
+
9
+ # Delete ONLY
10
+
11
+ DELETE ONLY person:tobie
12
+
13
+ ==>
14
+
15
+ SurrealQL(DeleteStatement(Keyword,Keyword,RecordId(RecordTbIdent,Colon,RecordIdIdent)))
16
+
17
+ # Delete with WHERE
18
+
19
+ DELETE person WHERE age < 18
20
+
21
+ ==>
22
+
23
+ SurrealQL(DeleteStatement(Keyword,Ident,WhereClause(Keyword,BinaryExpression(Ident,Operator,Number(Int)))))
24
+
25
+ # Delete with RETURN BEFORE
26
+
27
+ DELETE person RETURN BEFORE
28
+
29
+ ==>
30
+
31
+ SurrealQL(DeleteStatement(Keyword,Ident,ReturnClause(Keyword,Literal)))
32
+
33
+ # Delete with TIMEOUT
34
+
35
+ DELETE person TIMEOUT 5s
36
+
37
+ ==>
38
+
39
+ SurrealQL(DeleteStatement(Keyword,Ident,TimeoutClause(Keyword,Duration(DurationPart))))
40
+
41
+ # Delete with PARALLEL
42
+
43
+ DELETE person PARALLEL
44
+
45
+ ==>
46
+
47
+ SurrealQL(DeleteStatement(Keyword,Ident,ParallelClause(Keyword)))
48
+
49
+ # Delete record ID
50
+
51
+ DELETE person:tobie
52
+
53
+ ==>
54
+
55
+ SurrealQL(DeleteStatement(Keyword,RecordId(RecordTbIdent,Colon,RecordIdIdent)))
56
+
57
+ # Delete with WHERE and RETURN
58
+
59
+ DELETE person WHERE active = false RETURN DIFF
60
+
61
+ ==>
62
+
63
+ SurrealQL(DeleteStatement(Keyword,Ident,WhereClause(Keyword,BinaryExpression(Ident,Operator,Bool)),ReturnClause(Keyword,Literal)))
@@ -0,0 +1,19 @@
1
+ # For loop with array
2
+
3
+ FOR $item IN [1, 2, 3] {
4
+ CREATE item SET value = $item;
5
+ }
6
+
7
+ ==>
8
+
9
+ SurrealQL(ForStatement(Keyword,VariableName,Keyword,Array("[",Number(Int),Number(Int),Number(Int),"]"),Block(BraceOpen,CreateStatement(Keyword,Ident,SetClause(Keyword,FieldAssignment(Ident,Operator,VariableName))),BraceClose)))
10
+
11
+ # For loop with variable
12
+
13
+ FOR $item IN $list {
14
+ UPDATE item SET value = $item;
15
+ }
16
+
17
+ ==>
18
+
19
+ SurrealQL(ForStatement(Keyword,VariableName,Keyword,VariableName,Block(BraceOpen,UpdateStatement(Keyword,Ident,SetClause(Keyword,FieldAssignment(Ident,Operator,VariableName))),BraceClose)))
@@ -0,0 +1,47 @@
1
+ # Modern if
2
+
3
+ IF $age > 18 { RETURN "adult" }
4
+
5
+ ==>
6
+
7
+ SurrealQL(IfElseStatement(Keyword,Modern(BinaryExpression(VariableName,Operator,Number(Int)),Block(BraceOpen,ReturnStatement(Keyword,String),BraceClose))))
8
+
9
+ # Modern if else
10
+
11
+ IF $age > 18 { RETURN "adult" } ELSE { RETURN "minor" }
12
+
13
+ ==>
14
+
15
+ SurrealQL(IfElseStatement(Keyword,Modern(BinaryExpression(VariableName,Operator,Number(Int)),Block(BraceOpen,ReturnStatement(Keyword,String),BraceClose),Keyword,Block(BraceOpen,ReturnStatement(Keyword,String),BraceClose))))
16
+
17
+ # Modern if else if else
18
+
19
+ IF $age > 65 { RETURN "senior" } ELSE IF $age > 18 { RETURN "adult" } ELSE { RETURN "minor" }
20
+
21
+ ==>
22
+
23
+ SurrealQL(IfElseStatement(Keyword,Modern(BinaryExpression(VariableName,Operator,Number(Int)),Block(BraceOpen,ReturnStatement(Keyword,String),BraceClose),Keyword,Keyword,BinaryExpression(VariableName,Operator,Number(Int)),Block(BraceOpen,ReturnStatement(Keyword,String),BraceClose),Keyword,Block(BraceOpen,ReturnStatement(Keyword,String),BraceClose))))
24
+
25
+ # Legacy if then end
26
+
27
+ IF $age > 18 THEN (RETURN "adult") END
28
+
29
+ ==>
30
+
31
+ SurrealQL(IfElseStatement(Keyword,Legacy(BinaryExpression(VariableName,Operator,Number(Int)),Keyword,SubQuery(ReturnStatement(Keyword,String)),Keyword)))
32
+
33
+ # Legacy if then else end
34
+
35
+ IF $age > 18 THEN (RETURN "adult") ELSE (RETURN "minor") END
36
+
37
+ ==>
38
+
39
+ SurrealQL(IfElseStatement(Keyword,Legacy(BinaryExpression(VariableName,Operator,Number(Int)),Keyword,SubQuery(ReturnStatement(Keyword,String)),Keyword,SubQuery(ReturnStatement(Keyword,String)),Keyword)))
40
+
41
+ # Legacy if then else if then else end
42
+
43
+ IF $age > 65 THEN (RETURN "senior") ELSE IF $age > 18 THEN (RETURN "adult") ELSE (RETURN "minor") END
44
+
45
+ ==>
46
+
47
+ SurrealQL(IfElseStatement(Keyword,Legacy(BinaryExpression(VariableName,Operator,Number(Int)),Keyword,SubQuery(ReturnStatement(Keyword,String)),Keyword,Keyword,BinaryExpression(VariableName,Operator,Number(Int)),Keyword,SubQuery(ReturnStatement(Keyword,String)),Keyword,SubQuery(ReturnStatement(Keyword,String)),Keyword)))
@@ -0,0 +1,63 @@
1
+ # Info for root
2
+
3
+ INFO FOR ROOT
4
+
5
+ ==>
6
+
7
+ SurrealQL(InfoForStatement(Keyword,Keyword,Keyword))
8
+
9
+ # Info for namespace
10
+
11
+ INFO FOR NS
12
+
13
+ ==>
14
+
15
+ SurrealQL(InfoForStatement(Keyword,Keyword,Keyword))
16
+
17
+ # Info for namespace long form
18
+
19
+ INFO FOR NAMESPACE
20
+
21
+ ==>
22
+
23
+ SurrealQL(InfoForStatement(Keyword,Keyword,Keyword))
24
+
25
+ # Info for database
26
+
27
+ INFO FOR DB
28
+
29
+ ==>
30
+
31
+ SurrealQL(InfoForStatement(Keyword,Keyword,Keyword))
32
+
33
+ # Info for database long form
34
+
35
+ INFO FOR DATABASE
36
+
37
+ ==>
38
+
39
+ SurrealQL(InfoForStatement(Keyword,Keyword,Keyword))
40
+
41
+ # Info for scope
42
+
43
+ INFO FOR SCOPE myaccount
44
+
45
+ ==>
46
+
47
+ SurrealQL(InfoForStatement(Keyword,Keyword,Keyword,Ident))
48
+
49
+ # Info for table
50
+
51
+ INFO FOR TABLE person
52
+
53
+ ==>
54
+
55
+ SurrealQL(InfoForStatement(Keyword,Keyword,Keyword,Ident))
56
+
57
+ # Info for table with structure
58
+
59
+ INFO FOR TABLE person STRUCTURE
60
+
61
+ ==>
62
+
63
+ SurrealQL(InfoForStatement(Keyword,Keyword,Keyword,Ident,Keyword))