@surrealdb/lezer 1.0.5 → 1.0.8
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.
- package/.turbo/turbo-build.log +3 -3
- package/.turbo/turbo-run-tests.log +13 -4
- package/dist/index.cjs +203 -201
- package/dist/index.js +203 -201
- package/package.json +1 -1
- package/src/parser.js +17 -17
- package/src/parser.terms.js +370 -369
- package/src/surrealql.grammar +22 -12
- package/src/tokens.js +2 -0
- package/test/statements/define.txt +56 -0
- package/test/statements/update.txt +8 -0
- package/test/values/numbers.txt +14 -2
package/src/surrealql.grammar
CHANGED
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
filter
|
|
33
33
|
for
|
|
34
34
|
clause
|
|
35
|
+
flexibleAfter
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
expressions {
|
|
@@ -63,6 +64,7 @@ anyKeyword {
|
|
|
63
64
|
asc |
|
|
64
65
|
assert |
|
|
65
66
|
at |
|
|
67
|
+
async |
|
|
66
68
|
authenticate |
|
|
67
69
|
auto |
|
|
68
70
|
begin |
|
|
@@ -336,6 +338,7 @@ defineEventOptions {
|
|
|
336
338
|
value
|
|
337
339
|
} |
|
|
338
340
|
ThenClause {
|
|
341
|
+
async?
|
|
339
342
|
then
|
|
340
343
|
commaSep<(SubQuery | Block)>
|
|
341
344
|
} |
|
|
@@ -872,7 +875,12 @@ Range[since=2_0_0] {
|
|
|
872
875
|
}
|
|
873
876
|
|
|
874
877
|
Idiom {
|
|
875
|
-
Ident
|
|
878
|
+
Ident idiomPart*
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
idiomPart {
|
|
882
|
+
"." ( Ident | AnyStar ) |
|
|
883
|
+
"[" AnyStar "]"
|
|
876
884
|
}
|
|
877
885
|
|
|
878
886
|
Path {
|
|
@@ -1096,7 +1104,7 @@ FieldAssignment {
|
|
|
1096
1104
|
// Clauses
|
|
1097
1105
|
|
|
1098
1106
|
MergeClause {
|
|
1099
|
-
merge
|
|
1107
|
+
merge value
|
|
1100
1108
|
}
|
|
1101
1109
|
|
|
1102
1110
|
PatchClause {
|
|
@@ -1384,9 +1392,9 @@ FunctionClause {
|
|
|
1384
1392
|
}
|
|
1385
1393
|
|
|
1386
1394
|
TypeClause {
|
|
1387
|
-
flexible
|
|
1388
|
-
typeKeyword
|
|
1389
|
-
type
|
|
1395
|
+
( flexible typeKeyword type ) |
|
|
1396
|
+
( typeKeyword type !flexibleAfter flexible ) |
|
|
1397
|
+
( typeKeyword type )
|
|
1390
1398
|
}
|
|
1391
1399
|
|
|
1392
1400
|
ReadonlyClause[since=1_2_0] {
|
|
@@ -1593,12 +1601,13 @@ Operator {
|
|
|
1593
1601
|
CommentResult[@name=Comment,closedBy=CommentResultClose] { "-------- Query" ![\n]* }
|
|
1594
1602
|
|
|
1595
1603
|
// Numbers
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1604
|
+
digitSeq { @digit+ ("_" @digit+)* }
|
|
1605
|
+
Int { digitSeq }
|
|
1606
|
+
frac { '.' digitSeq }
|
|
1607
|
+
exp { $[eE] $[+\-]? digitSeq }
|
|
1608
|
+
Float { (digitSeq "f") | (digitSeq (frac exp? | exp) "f"?) | "Infinity" | "NaN" }
|
|
1609
|
+
Decimal { digitSeq frac? exp? "dec" }
|
|
1610
|
+
VersionNumber { digitSeq ("." digitSeq ("." digitSeq)?)? }
|
|
1602
1611
|
|
|
1603
1612
|
String { "'" (!['\\] | "\\" _)* "'" | '"' (!["\\] | "\\" _)* '"' }
|
|
1604
1613
|
prefixedString[@name=String] { $[rudbf] String }
|
|
@@ -1631,7 +1640,7 @@ Operator {
|
|
|
1631
1640
|
Regex { "/" (![/\\\n[] | "\\" ![\n] | "[" (![\n\\\]] | "\\" ![\n])* "]")+ ("/" $[dgimsuvy]*)? }
|
|
1632
1641
|
|
|
1633
1642
|
durationUnit { "ns" | "us" | "µs" | "ms" | "s" | "m" | "h" | "d" | "w" | "y"}
|
|
1634
|
-
DurationPart {
|
|
1643
|
+
DurationPart { digitSeq " "* durationUnit }
|
|
1635
1644
|
|
|
1636
1645
|
@precedence { CommentResult Comment Int "-" }
|
|
1637
1646
|
@precedence { Comment binaryOperator }
|
|
@@ -1693,6 +1702,7 @@ piped<content> {
|
|
|
1693
1702
|
asc [@name=Keyword],
|
|
1694
1703
|
assert [@name=Keyword],
|
|
1695
1704
|
at [@name=Keyword],
|
|
1705
|
+
async [@name=Keyword],
|
|
1696
1706
|
authenticate [@name=Keyword],
|
|
1697
1707
|
auto [@name=Keyword],
|
|
1698
1708
|
backend [@name=Keyword],
|
package/src/tokens.js
CHANGED
|
@@ -46,6 +46,14 @@ DEFINE EVENT myevent ON TABLE person WHEN $event = "CREATE" THEN (CREATE log)
|
|
|
46
46
|
|
|
47
47
|
SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnTableClause(Keyword,Keyword,Ident),WhenClause(Keyword,BinaryExpression(VariableName,Operator,String)),ThenClause(Keyword,SubQuery(CreateStatement(Keyword,Ident)))))
|
|
48
48
|
|
|
49
|
+
# Define event with async
|
|
50
|
+
|
|
51
|
+
DEFINE EVENT e ON TABLE file WHEN $event = 'DELETE' ASYNC THEN { };
|
|
52
|
+
|
|
53
|
+
==>
|
|
54
|
+
|
|
55
|
+
SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnTableClause(Keyword,Keyword,Ident),WhenClause(Keyword,BinaryExpression(VariableName,Operator,String)),ThenClause(Keyword,Keyword,Block(BraceOpen,BraceClose))))
|
|
56
|
+
|
|
49
57
|
# Define field
|
|
50
58
|
|
|
51
59
|
DEFINE FIELD name ON TABLE person TYPE string
|
|
@@ -86,6 +94,22 @@ DEFINE FIELD data ON TABLE person FLEXIBLE TYPE object
|
|
|
86
94
|
|
|
87
95
|
SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,Keyword,TypeName)))
|
|
88
96
|
|
|
97
|
+
# Define field with flexible after type clause
|
|
98
|
+
|
|
99
|
+
DEFINE FIELD metadata ON TABLE user TYPE object FLEXIBLE
|
|
100
|
+
|
|
101
|
+
==>
|
|
102
|
+
|
|
103
|
+
SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName,Keyword)))
|
|
104
|
+
|
|
105
|
+
# Define field flexible after parameterized object type
|
|
106
|
+
|
|
107
|
+
DEFINE FIELD alternatives ON file TYPE option<object> FLEXIBLE
|
|
108
|
+
|
|
109
|
+
==>
|
|
110
|
+
|
|
111
|
+
SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Ident),TypeClause(Keyword,ParameterizedType(TypeName,"<",TypeName,">"),Keyword)))
|
|
112
|
+
|
|
89
113
|
# Define field with permissions
|
|
90
114
|
|
|
91
115
|
DEFINE FIELD secret ON TABLE person TYPE string PERMISSIONS FOR select, create WHERE $auth.admin = true
|
|
@@ -110,6 +134,30 @@ DEFINE FIELD fullname ON TABLE person COMPUTED $value.first + " " + $value.last
|
|
|
110
134
|
|
|
111
135
|
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
136
|
|
|
137
|
+
# Define field on array items
|
|
138
|
+
|
|
139
|
+
DEFINE FIELD children.* ON parent TYPE record<child> PERMISSIONS FULL
|
|
140
|
+
|
|
141
|
+
==>
|
|
142
|
+
|
|
143
|
+
SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident,Any),OnTableClause(Keyword,Ident),TypeClause(Keyword,ParameterizedType(TypeName,"<",TypeName,">")),PermissionsForClause(Keyword,Literal)))
|
|
144
|
+
|
|
145
|
+
# Define field on array items with bracket wildcard
|
|
146
|
+
|
|
147
|
+
DEFINE FIELD tags[*] ON TABLE person TYPE string
|
|
148
|
+
|
|
149
|
+
==>
|
|
150
|
+
|
|
151
|
+
SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident,"[",Any,"]"),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName)))
|
|
152
|
+
|
|
153
|
+
# Define field nested below array items
|
|
154
|
+
|
|
155
|
+
DEFINE FIELD comments.*.title ON TABLE post TYPE string
|
|
156
|
+
|
|
157
|
+
==>
|
|
158
|
+
|
|
159
|
+
SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident,Any,Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName)))
|
|
160
|
+
|
|
113
161
|
# Define index unique
|
|
114
162
|
|
|
115
163
|
DEFINE INDEX idx_email ON TABLE person FIELDS email UNIQUE
|
|
@@ -118,6 +166,14 @@ DEFINE INDEX idx_email ON TABLE person FIELDS email UNIQUE
|
|
|
118
166
|
|
|
119
167
|
SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnTableClause(Keyword,Keyword,Ident),FieldsColumnsClause(Keyword,Idiom(Ident)),IndexClause(UniqueClause(Keyword))))
|
|
120
168
|
|
|
169
|
+
# Define index on array items
|
|
170
|
+
|
|
171
|
+
DEFINE INDEX idx_tags ON TABLE person FIELDS tags.* UNIQUE
|
|
172
|
+
|
|
173
|
+
==>
|
|
174
|
+
|
|
175
|
+
SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnTableClause(Keyword,Keyword,Ident),FieldsColumnsClause(Keyword,Idiom(Ident,Any)),IndexClause(UniqueClause(Keyword))))
|
|
176
|
+
|
|
121
177
|
# Define index search analyzer
|
|
122
178
|
|
|
123
179
|
DEFINE INDEX idx_search ON TABLE person FIELDS name SEARCH ANALYZER my_analyzer BM25
|
|
@@ -38,6 +38,14 @@ UPDATE person MERGE {age: 31}
|
|
|
38
38
|
|
|
39
39
|
SurrealQL(UpdateStatement(Keyword,Ident,MergeClause(Keyword,Object(BraceOpen,ObjectContent(ObjectProperty(ObjectKey(KeyName),Colon,Number(Int))),BraceClose))))
|
|
40
40
|
|
|
41
|
+
# Update path target with MERGE expression
|
|
42
|
+
|
|
43
|
+
UPDATE $object.id MERGE ($object + {updatedBy: $user});
|
|
44
|
+
|
|
45
|
+
==>
|
|
46
|
+
|
|
47
|
+
SurrealQL(UpdateStatement(Keyword,Path(VariableName,Subscript(Ident)),MergeClause(Keyword,SubQuery(BinaryExpression(VariableName,Operator,Object(BraceOpen,ObjectContent(ObjectProperty(ObjectKey(KeyName),Colon,VariableName)),BraceClose))))))
|
|
48
|
+
|
|
41
49
|
# Update with REPLACE
|
|
42
50
|
|
|
43
51
|
UPDATE person REPLACE {name: "Tobie"}
|
package/test/values/numbers.txt
CHANGED
|
@@ -32,11 +32,23 @@ SurrealQL(Number(Float),Number(Float),Number(Float),Number(Float))
|
|
|
32
32
|
# Float with f suffix
|
|
33
33
|
|
|
34
34
|
2e4f;
|
|
35
|
-
3.14f
|
|
35
|
+
3.14f;
|
|
36
|
+
100f
|
|
36
37
|
|
|
37
38
|
==>
|
|
38
39
|
|
|
39
|
-
SurrealQL(Number(Float),Number(Float))
|
|
40
|
+
SurrealQL(Number(Float),Number(Float),Number(Float))
|
|
41
|
+
|
|
42
|
+
# Underscore separators
|
|
43
|
+
|
|
44
|
+
1_000_000;
|
|
45
|
+
1_000_000.99;
|
|
46
|
+
1_000.5f;
|
|
47
|
+
2_000_000dec
|
|
48
|
+
|
|
49
|
+
==>
|
|
50
|
+
|
|
51
|
+
SurrealQL(Number(Int),Number(Float),Number(Float),Number(Decimal))
|
|
40
52
|
|
|
41
53
|
# Float special values
|
|
42
54
|
|