@steedos/odata-v4-parser 3.0.13-beta.9 → 3.0.13
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/lib/expressions.js +131 -131
- package/lib/expressions.js.map +1 -1
- package/lib/json.js +69 -69
- package/lib/json.js.map +1 -1
- package/lib/lexer.js +30 -25
- package/lib/lexer.js.map +1 -1
- package/lib/nameOrIdentifier.js +180 -218
- package/lib/nameOrIdentifier.js.map +1 -1
- package/lib/odataUri.js +7 -7
- package/lib/odataUri.js.map +1 -1
- package/lib/parser.js +18 -21
- package/lib/parser.js.map +1 -1
- package/lib/primitiveLiteral.js +129 -129
- package/lib/primitiveLiteral.js.map +1 -1
- package/lib/query.js +162 -162
- package/lib/query.js.map +1 -1
- package/lib/resourcePath.js +65 -65
- package/lib/resourcePath.js.map +1 -1
- package/lib/utils.js +3 -3
- package/package.json +2 -2
- package/tsconfig.json +3 -7
package/lib/query.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Query = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
const utils_1 = require("./utils");
|
|
5
|
+
const lexer_1 = require("./lexer");
|
|
6
|
+
const primitiveLiteral_1 = require("./primitiveLiteral");
|
|
7
|
+
const nameOrIdentifier_1 = require("./nameOrIdentifier");
|
|
8
|
+
const expressions_1 = require("./expressions");
|
|
9
9
|
var Query;
|
|
10
10
|
(function (Query) {
|
|
11
11
|
function queryOptions(value, index, metadataContext) {
|
|
12
|
-
|
|
12
|
+
let token = Query.queryOption(value, index, metadataContext);
|
|
13
13
|
if (!token)
|
|
14
14
|
return;
|
|
15
|
-
|
|
15
|
+
let start = index;
|
|
16
16
|
index = token.next;
|
|
17
|
-
|
|
17
|
+
let options = [];
|
|
18
18
|
while (token) {
|
|
19
19
|
options.push(token);
|
|
20
20
|
if (value[index] !== 0x26)
|
|
@@ -25,7 +25,7 @@ var Query;
|
|
|
25
25
|
return;
|
|
26
26
|
index = token.next;
|
|
27
27
|
}
|
|
28
|
-
return lexer_1.default.tokenize(value, start, index, { options
|
|
28
|
+
return lexer_1.default.tokenize(value, start, index, { options }, lexer_1.default.TokenType.QueryOptions);
|
|
29
29
|
}
|
|
30
30
|
Query.queryOptions = queryOptions;
|
|
31
31
|
function queryOption(value, index, metadataContext) {
|
|
@@ -49,12 +49,12 @@ var Query;
|
|
|
49
49
|
}
|
|
50
50
|
Query.systemQueryOption = systemQueryOption;
|
|
51
51
|
function customQueryOption(value, index) {
|
|
52
|
-
|
|
52
|
+
let key = nameOrIdentifier_1.default.odataIdentifier(value, index);
|
|
53
53
|
if (!key)
|
|
54
54
|
return;
|
|
55
|
-
|
|
55
|
+
let start = index;
|
|
56
56
|
index = key.next;
|
|
57
|
-
|
|
57
|
+
let eq = lexer_1.default.EQ(value, index);
|
|
58
58
|
if (!eq)
|
|
59
59
|
return;
|
|
60
60
|
index = eq;
|
|
@@ -66,7 +66,7 @@ var Query;
|
|
|
66
66
|
}
|
|
67
67
|
Query.customQueryOption = customQueryOption;
|
|
68
68
|
function id(value, index) {
|
|
69
|
-
|
|
69
|
+
let start = index;
|
|
70
70
|
if (utils_1.default.equals(value, index, "%24id")) {
|
|
71
71
|
index += 5;
|
|
72
72
|
}
|
|
@@ -75,7 +75,7 @@ var Query;
|
|
|
75
75
|
}
|
|
76
76
|
else
|
|
77
77
|
return;
|
|
78
|
-
|
|
78
|
+
let eq = lexer_1.default.EQ(value, index);
|
|
79
79
|
if (!eq)
|
|
80
80
|
return;
|
|
81
81
|
index = eq;
|
|
@@ -87,7 +87,7 @@ var Query;
|
|
|
87
87
|
}
|
|
88
88
|
Query.id = id;
|
|
89
89
|
function expand(value, index, metadataContext) {
|
|
90
|
-
|
|
90
|
+
let start = index;
|
|
91
91
|
if (utils_1.default.equals(value, index, "%24expand")) {
|
|
92
92
|
index += 9;
|
|
93
93
|
}
|
|
@@ -96,18 +96,18 @@ var Query;
|
|
|
96
96
|
}
|
|
97
97
|
else
|
|
98
98
|
return;
|
|
99
|
-
|
|
99
|
+
let eq = lexer_1.default.EQ(value, index);
|
|
100
100
|
if (!eq)
|
|
101
101
|
return;
|
|
102
102
|
index = eq;
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
let items = [];
|
|
104
|
+
let token = Query.expandItem(value, index, metadataContext);
|
|
105
105
|
if (!token)
|
|
106
106
|
return;
|
|
107
107
|
index = token.next;
|
|
108
108
|
while (token) {
|
|
109
109
|
items.push(token);
|
|
110
|
-
|
|
110
|
+
let comma = lexer_1.default.COMMA(value, index);
|
|
111
111
|
if (comma) {
|
|
112
112
|
index = comma;
|
|
113
113
|
token = Query.expandItem(value, index, metadataContext);
|
|
@@ -118,28 +118,28 @@ var Query;
|
|
|
118
118
|
else
|
|
119
119
|
break;
|
|
120
120
|
}
|
|
121
|
-
return lexer_1.default.tokenize(value, start, index, { items
|
|
121
|
+
return lexer_1.default.tokenize(value, start, index, { items }, lexer_1.default.TokenType.Expand);
|
|
122
122
|
}
|
|
123
123
|
Query.expand = expand;
|
|
124
124
|
function expandItem(value, index, metadataContext) {
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
let start = index;
|
|
126
|
+
let star = lexer_1.default.STAR(value, index);
|
|
127
127
|
if (star) {
|
|
128
128
|
index = star;
|
|
129
|
-
|
|
130
|
-
if (
|
|
131
|
-
index =
|
|
132
|
-
return lexer_1.default.tokenize(value, start, index, { path: "*", ref
|
|
129
|
+
let ref = expressions_1.default.refExpr(value, index);
|
|
130
|
+
if (ref) {
|
|
131
|
+
index = ref.next;
|
|
132
|
+
return lexer_1.default.tokenize(value, start, index, { path: "*", ref }, lexer_1.default.TokenType.ExpandItem);
|
|
133
133
|
}
|
|
134
134
|
else {
|
|
135
|
-
|
|
135
|
+
let open = lexer_1.default.OPEN(value, index);
|
|
136
136
|
if (open) {
|
|
137
137
|
index = open;
|
|
138
|
-
|
|
138
|
+
let token = Query.levels(value, index);
|
|
139
139
|
if (!token)
|
|
140
140
|
return;
|
|
141
141
|
index = token.next;
|
|
142
|
-
|
|
142
|
+
let close = lexer_1.default.CLOSE(value, index);
|
|
143
143
|
if (!close)
|
|
144
144
|
return;
|
|
145
145
|
index = close;
|
|
@@ -147,26 +147,26 @@ var Query;
|
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
|
-
|
|
150
|
+
let path = Query.expandPath(value, index, metadataContext);
|
|
151
151
|
if (!path)
|
|
152
152
|
return;
|
|
153
153
|
index = path.next;
|
|
154
|
-
|
|
155
|
-
|
|
154
|
+
let tokenValue = { path };
|
|
155
|
+
let ref = expressions_1.default.refExpr(value, index);
|
|
156
156
|
if (ref) {
|
|
157
157
|
index = ref.next;
|
|
158
158
|
tokenValue.ref = ref;
|
|
159
|
-
|
|
159
|
+
let open = lexer_1.default.OPEN(value, index);
|
|
160
160
|
if (open) {
|
|
161
161
|
index = open;
|
|
162
|
-
|
|
162
|
+
let option = Query.expandRefOption(value, index);
|
|
163
163
|
if (!option)
|
|
164
164
|
return;
|
|
165
|
-
|
|
165
|
+
let refOptions = [];
|
|
166
166
|
while (option) {
|
|
167
167
|
refOptions.push(option);
|
|
168
168
|
index = option.next;
|
|
169
|
-
|
|
169
|
+
let semi = lexer_1.default.SEMI(value, index);
|
|
170
170
|
if (semi) {
|
|
171
171
|
index = semi;
|
|
172
172
|
option = Query.expandRefOption(value, index);
|
|
@@ -176,7 +176,7 @@ var Query;
|
|
|
176
176
|
else
|
|
177
177
|
break;
|
|
178
178
|
}
|
|
179
|
-
|
|
179
|
+
let close = lexer_1.default.CLOSE(value, index);
|
|
180
180
|
if (!close)
|
|
181
181
|
return;
|
|
182
182
|
index = close;
|
|
@@ -184,21 +184,21 @@ var Query;
|
|
|
184
184
|
}
|
|
185
185
|
}
|
|
186
186
|
else {
|
|
187
|
-
|
|
187
|
+
let count = expressions_1.default.countExpr(value, index);
|
|
188
188
|
if (count) {
|
|
189
189
|
index = count.next;
|
|
190
190
|
tokenValue.count = count;
|
|
191
|
-
|
|
191
|
+
let open = lexer_1.default.OPEN(value, index);
|
|
192
192
|
if (open) {
|
|
193
193
|
index = open;
|
|
194
|
-
|
|
194
|
+
let option = Query.expandCountOption(value, index);
|
|
195
195
|
if (!option)
|
|
196
196
|
return;
|
|
197
|
-
|
|
197
|
+
let countOptions = [];
|
|
198
198
|
while (option) {
|
|
199
199
|
countOptions.push(option);
|
|
200
200
|
index = option.next;
|
|
201
|
-
|
|
201
|
+
let semi = lexer_1.default.SEMI(value, index);
|
|
202
202
|
if (semi) {
|
|
203
203
|
index = semi;
|
|
204
204
|
option = Query.expandCountOption(value, index);
|
|
@@ -208,7 +208,7 @@ var Query;
|
|
|
208
208
|
else
|
|
209
209
|
break;
|
|
210
210
|
}
|
|
211
|
-
|
|
211
|
+
let close = lexer_1.default.CLOSE(value, index);
|
|
212
212
|
if (!close)
|
|
213
213
|
return;
|
|
214
214
|
index = close;
|
|
@@ -216,17 +216,17 @@ var Query;
|
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
218
|
else {
|
|
219
|
-
|
|
219
|
+
let open = lexer_1.default.OPEN(value, index);
|
|
220
220
|
if (open) {
|
|
221
221
|
index = open;
|
|
222
|
-
|
|
222
|
+
let option = Query.expandOption(value, index);
|
|
223
223
|
if (!option)
|
|
224
224
|
return;
|
|
225
|
-
|
|
225
|
+
let options = [];
|
|
226
226
|
while (option) {
|
|
227
227
|
options.push(option);
|
|
228
228
|
index = option.next;
|
|
229
|
-
|
|
229
|
+
let semi = lexer_1.default.SEMI(value, index);
|
|
230
230
|
if (semi) {
|
|
231
231
|
index = semi;
|
|
232
232
|
option = Query.expandOption(value, index);
|
|
@@ -236,7 +236,7 @@ var Query;
|
|
|
236
236
|
else
|
|
237
237
|
break;
|
|
238
238
|
}
|
|
239
|
-
|
|
239
|
+
let close = lexer_1.default.CLOSE(value, index);
|
|
240
240
|
if (!close)
|
|
241
241
|
return;
|
|
242
242
|
index = close;
|
|
@@ -268,9 +268,9 @@ var Query;
|
|
|
268
268
|
}
|
|
269
269
|
Query.expandOption = expandOption;
|
|
270
270
|
function expandPath(value, index, metadataContext) {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
271
|
+
let start = index;
|
|
272
|
+
let path = [];
|
|
273
|
+
let token = nameOrIdentifier_1.default.qualifiedEntityTypeName(value, index, metadataContext) ||
|
|
274
274
|
nameOrIdentifier_1.default.qualifiedComplexTypeName(value, index, metadataContext);
|
|
275
275
|
if (token) {
|
|
276
276
|
index = token.next;
|
|
@@ -281,13 +281,13 @@ var Query;
|
|
|
281
281
|
metadataContext = token.value.metadata;
|
|
282
282
|
delete token.value.metadata;
|
|
283
283
|
}
|
|
284
|
-
|
|
284
|
+
let complex = nameOrIdentifier_1.default.complexProperty(value, index, metadataContext) ||
|
|
285
285
|
nameOrIdentifier_1.default.complexColProperty(value, index, metadataContext);
|
|
286
286
|
while (complex) {
|
|
287
287
|
if (value[complex.next] === 0x2f) {
|
|
288
288
|
index = complex.next + 1;
|
|
289
289
|
path.push(complex);
|
|
290
|
-
|
|
290
|
+
let complexTypeName = nameOrIdentifier_1.default.qualifiedComplexTypeName(value, index, metadataContext);
|
|
291
291
|
if (complexTypeName) {
|
|
292
292
|
if (value[complexTypeName.next] === 0x2f) {
|
|
293
293
|
index = complexTypeName.next + 1;
|
|
@@ -302,7 +302,7 @@ var Query;
|
|
|
302
302
|
else
|
|
303
303
|
break;
|
|
304
304
|
}
|
|
305
|
-
|
|
305
|
+
let nav = nameOrIdentifier_1.default.navigationProperty(value, index, metadataContext);
|
|
306
306
|
if (!nav)
|
|
307
307
|
return;
|
|
308
308
|
index = nav.next;
|
|
@@ -310,7 +310,7 @@ var Query;
|
|
|
310
310
|
metadataContext = nav.metadata;
|
|
311
311
|
delete nav.metadata;
|
|
312
312
|
if (value[index] === 0x2f) {
|
|
313
|
-
|
|
313
|
+
let typeName = nameOrIdentifier_1.default.qualifiedEntityTypeName(value, index + 1, metadataContext);
|
|
314
314
|
if (typeName) {
|
|
315
315
|
index = typeName.next;
|
|
316
316
|
path.push(typeName);
|
|
@@ -322,7 +322,7 @@ var Query;
|
|
|
322
322
|
}
|
|
323
323
|
Query.expandPath = expandPath;
|
|
324
324
|
function search(value, index) {
|
|
325
|
-
|
|
325
|
+
let start = index;
|
|
326
326
|
if (utils_1.default.equals(value, index, "%24search")) {
|
|
327
327
|
index += 9;
|
|
328
328
|
}
|
|
@@ -331,11 +331,11 @@ var Query;
|
|
|
331
331
|
}
|
|
332
332
|
else
|
|
333
333
|
return;
|
|
334
|
-
|
|
334
|
+
let eq = lexer_1.default.EQ(value, index);
|
|
335
335
|
if (!eq)
|
|
336
336
|
return;
|
|
337
337
|
index = eq;
|
|
338
|
-
|
|
338
|
+
let expr = Query.searchExpr(value, index);
|
|
339
339
|
if (!expr)
|
|
340
340
|
return;
|
|
341
341
|
index = expr.next;
|
|
@@ -343,15 +343,15 @@ var Query;
|
|
|
343
343
|
}
|
|
344
344
|
Query.search = search;
|
|
345
345
|
function searchExpr(value, index) {
|
|
346
|
-
|
|
346
|
+
let token = Query.searchParenExpr(value, index) ||
|
|
347
347
|
Query.searchTerm(value, index);
|
|
348
348
|
if (!token)
|
|
349
349
|
return;
|
|
350
350
|
index = token.next;
|
|
351
|
-
|
|
351
|
+
let expr = Query.searchAndExpr(value, index) ||
|
|
352
352
|
Query.searchOrExpr(value, index);
|
|
353
353
|
if (expr) {
|
|
354
|
-
|
|
354
|
+
const left = lexer_1.default.clone(token);
|
|
355
355
|
token.next = expr.value.next;
|
|
356
356
|
token.value = {
|
|
357
357
|
left: left,
|
|
@@ -378,16 +378,16 @@ var Query;
|
|
|
378
378
|
}
|
|
379
379
|
Query.searchTerm = searchTerm;
|
|
380
380
|
function searchNotExpr(value, index) {
|
|
381
|
-
|
|
381
|
+
let rws = lexer_1.default.RWS(value, index);
|
|
382
382
|
if (!utils_1.default.equals(value, rws, "NOT"))
|
|
383
383
|
return;
|
|
384
|
-
|
|
384
|
+
let start = index;
|
|
385
385
|
index = rws + 3;
|
|
386
386
|
rws = lexer_1.default.RWS(value, index);
|
|
387
387
|
if (rws === index)
|
|
388
388
|
return;
|
|
389
389
|
index = rws;
|
|
390
|
-
|
|
390
|
+
let expr = Query.searchPhrase(value, index) ||
|
|
391
391
|
Query.searchWord(value, index);
|
|
392
392
|
if (!expr)
|
|
393
393
|
return;
|
|
@@ -396,16 +396,16 @@ var Query;
|
|
|
396
396
|
}
|
|
397
397
|
Query.searchNotExpr = searchNotExpr;
|
|
398
398
|
function searchOrExpr(value, index) {
|
|
399
|
-
|
|
399
|
+
let rws = lexer_1.default.RWS(value, index);
|
|
400
400
|
if (rws === index || !utils_1.default.equals(value, rws, "OR"))
|
|
401
401
|
return;
|
|
402
|
-
|
|
402
|
+
let start = index;
|
|
403
403
|
index = rws + 2;
|
|
404
404
|
rws = lexer_1.default.RWS(value, index);
|
|
405
405
|
if (rws === index)
|
|
406
406
|
return;
|
|
407
407
|
index = rws;
|
|
408
|
-
|
|
408
|
+
let token = Query.searchExpr(value, index);
|
|
409
409
|
if (!token)
|
|
410
410
|
return;
|
|
411
411
|
index = token.next;
|
|
@@ -413,16 +413,16 @@ var Query;
|
|
|
413
413
|
}
|
|
414
414
|
Query.searchOrExpr = searchOrExpr;
|
|
415
415
|
function searchAndExpr(value, index) {
|
|
416
|
-
|
|
416
|
+
let rws = lexer_1.default.RWS(value, index);
|
|
417
417
|
if (rws === index || !utils_1.default.equals(value, rws, "AND"))
|
|
418
418
|
return;
|
|
419
|
-
|
|
419
|
+
let start = index;
|
|
420
420
|
index = rws + 3;
|
|
421
421
|
rws = lexer_1.default.RWS(value, index);
|
|
422
422
|
if (rws === index)
|
|
423
423
|
return;
|
|
424
424
|
index = rws;
|
|
425
|
-
|
|
425
|
+
let token = Query.searchExpr(value, index);
|
|
426
426
|
if (!token)
|
|
427
427
|
return;
|
|
428
428
|
index = token.next;
|
|
@@ -430,18 +430,18 @@ var Query;
|
|
|
430
430
|
}
|
|
431
431
|
Query.searchAndExpr = searchAndExpr;
|
|
432
432
|
function searchPhrase(value, index) {
|
|
433
|
-
|
|
433
|
+
let mark = lexer_1.default.quotationMark(value, index);
|
|
434
434
|
if (mark === index)
|
|
435
435
|
return;
|
|
436
|
-
|
|
436
|
+
let start = index;
|
|
437
437
|
index = mark;
|
|
438
|
-
|
|
439
|
-
|
|
438
|
+
let valueStart = index;
|
|
439
|
+
let ch = lexer_1.default.qcharNoAMPDQUOTE(value, index);
|
|
440
440
|
while (ch > index && !lexer_1.default.OPEN(value, index) && !lexer_1.default.CLOSE(value, index)) {
|
|
441
441
|
index = ch;
|
|
442
442
|
ch = lexer_1.default.qcharNoAMPDQUOTE(value, index);
|
|
443
443
|
}
|
|
444
|
-
|
|
444
|
+
let valueEnd = index;
|
|
445
445
|
mark = lexer_1.default.quotationMark(value, index);
|
|
446
446
|
if (!mark)
|
|
447
447
|
return;
|
|
@@ -450,29 +450,29 @@ var Query;
|
|
|
450
450
|
}
|
|
451
451
|
Query.searchPhrase = searchPhrase;
|
|
452
452
|
function searchWord(value, index) {
|
|
453
|
-
|
|
453
|
+
let next = utils_1.default.required(value, index, lexer_1.default.ALPHA, 1);
|
|
454
454
|
if (!next)
|
|
455
455
|
return;
|
|
456
|
-
|
|
456
|
+
let start = index;
|
|
457
457
|
index = next;
|
|
458
|
-
|
|
458
|
+
let token = lexer_1.default.tokenize(value, start, index, null, lexer_1.default.TokenType.SearchWord);
|
|
459
459
|
token.value = token.raw;
|
|
460
460
|
return token;
|
|
461
461
|
}
|
|
462
462
|
Query.searchWord = searchWord;
|
|
463
463
|
function searchParenExpr(value, index) {
|
|
464
|
-
|
|
464
|
+
let open = lexer_1.default.OPEN(value, index);
|
|
465
465
|
if (!open)
|
|
466
466
|
return;
|
|
467
|
-
|
|
467
|
+
let start = index;
|
|
468
468
|
index = open;
|
|
469
469
|
index = lexer_1.default.BWS(value, index);
|
|
470
|
-
|
|
470
|
+
let expr = Query.searchExpr(value, index);
|
|
471
471
|
if (!expr)
|
|
472
472
|
return;
|
|
473
473
|
index = expr.next;
|
|
474
474
|
index = lexer_1.default.BWS(value, index);
|
|
475
|
-
|
|
475
|
+
let close = lexer_1.default.CLOSE(value, index);
|
|
476
476
|
if (!close)
|
|
477
477
|
return;
|
|
478
478
|
index = close;
|
|
@@ -480,7 +480,7 @@ var Query;
|
|
|
480
480
|
}
|
|
481
481
|
Query.searchParenExpr = searchParenExpr;
|
|
482
482
|
function levels(value, index) {
|
|
483
|
-
|
|
483
|
+
let start = index;
|
|
484
484
|
if (utils_1.default.equals(value, index, "%24levels")) {
|
|
485
485
|
index += 9;
|
|
486
486
|
}
|
|
@@ -489,17 +489,17 @@ var Query;
|
|
|
489
489
|
}
|
|
490
490
|
else
|
|
491
491
|
return;
|
|
492
|
-
|
|
492
|
+
let eq = lexer_1.default.EQ(value, index);
|
|
493
493
|
if (!eq)
|
|
494
494
|
return;
|
|
495
495
|
index = eq;
|
|
496
|
-
|
|
496
|
+
let level;
|
|
497
497
|
if (utils_1.default.equals(value, index, "max")) {
|
|
498
498
|
level = "max";
|
|
499
499
|
index += 3;
|
|
500
500
|
}
|
|
501
501
|
else {
|
|
502
|
-
|
|
502
|
+
let token = primitiveLiteral_1.default.int32Value(value, index);
|
|
503
503
|
if (!token)
|
|
504
504
|
return;
|
|
505
505
|
level = token.raw;
|
|
@@ -509,7 +509,7 @@ var Query;
|
|
|
509
509
|
}
|
|
510
510
|
Query.levels = levels;
|
|
511
511
|
function filter(value, index) {
|
|
512
|
-
|
|
512
|
+
let start = index;
|
|
513
513
|
if (utils_1.default.equals(value, index, "%24filter")) {
|
|
514
514
|
index += 9;
|
|
515
515
|
}
|
|
@@ -518,11 +518,11 @@ var Query;
|
|
|
518
518
|
}
|
|
519
519
|
else
|
|
520
520
|
return;
|
|
521
|
-
|
|
521
|
+
let eq = lexer_1.default.EQ(value, index);
|
|
522
522
|
if (!eq)
|
|
523
523
|
return;
|
|
524
524
|
index = eq;
|
|
525
|
-
|
|
525
|
+
let expr = expressions_1.default.boolCommonExpr(value, index);
|
|
526
526
|
if (!expr)
|
|
527
527
|
return;
|
|
528
528
|
index = expr.next;
|
|
@@ -530,7 +530,7 @@ var Query;
|
|
|
530
530
|
}
|
|
531
531
|
Query.filter = filter;
|
|
532
532
|
function orderby(value, index) {
|
|
533
|
-
|
|
533
|
+
let start = index;
|
|
534
534
|
if (utils_1.default.equals(value, index, "%24orderby")) {
|
|
535
535
|
index += 10;
|
|
536
536
|
}
|
|
@@ -539,18 +539,18 @@ var Query;
|
|
|
539
539
|
}
|
|
540
540
|
else
|
|
541
541
|
return;
|
|
542
|
-
|
|
542
|
+
let eq = lexer_1.default.EQ(value, index);
|
|
543
543
|
if (!eq)
|
|
544
544
|
return;
|
|
545
545
|
index = eq;
|
|
546
|
-
|
|
547
|
-
|
|
546
|
+
let items = [];
|
|
547
|
+
let token = Query.orderbyItem(value, index);
|
|
548
548
|
if (!token)
|
|
549
549
|
return;
|
|
550
550
|
index = token.next;
|
|
551
551
|
while (token) {
|
|
552
552
|
items.push(token);
|
|
553
|
-
|
|
553
|
+
let comma = lexer_1.default.COMMA(value, index);
|
|
554
554
|
if (comma) {
|
|
555
555
|
index = comma;
|
|
556
556
|
token = Query.orderbyItem(value, index);
|
|
@@ -561,17 +561,17 @@ var Query;
|
|
|
561
561
|
else
|
|
562
562
|
break;
|
|
563
563
|
}
|
|
564
|
-
return lexer_1.default.tokenize(value, start, index, { items
|
|
564
|
+
return lexer_1.default.tokenize(value, start, index, { items }, lexer_1.default.TokenType.OrderBy);
|
|
565
565
|
}
|
|
566
566
|
Query.orderby = orderby;
|
|
567
567
|
function orderbyItem(value, index) {
|
|
568
|
-
|
|
568
|
+
let expr = expressions_1.default.commonExpr(value, index);
|
|
569
569
|
if (!expr)
|
|
570
570
|
return;
|
|
571
|
-
|
|
571
|
+
let start = index;
|
|
572
572
|
index = expr.next;
|
|
573
|
-
|
|
574
|
-
|
|
573
|
+
let direction = 1;
|
|
574
|
+
let rws = lexer_1.default.RWS(value, index);
|
|
575
575
|
if (rws > index) {
|
|
576
576
|
index = rws;
|
|
577
577
|
if (utils_1.default.equals(value, index, "asc"))
|
|
@@ -583,11 +583,11 @@ var Query;
|
|
|
583
583
|
else
|
|
584
584
|
return;
|
|
585
585
|
}
|
|
586
|
-
return lexer_1.default.tokenize(value, start, index, { expr
|
|
586
|
+
return lexer_1.default.tokenize(value, start, index, { expr, direction }, lexer_1.default.TokenType.OrderByItem);
|
|
587
587
|
}
|
|
588
588
|
Query.orderbyItem = orderbyItem;
|
|
589
589
|
function skip(value, index) {
|
|
590
|
-
|
|
590
|
+
let start = index;
|
|
591
591
|
if (utils_1.default.equals(value, index, "%24skip")) {
|
|
592
592
|
index += 7;
|
|
593
593
|
}
|
|
@@ -596,11 +596,11 @@ var Query;
|
|
|
596
596
|
}
|
|
597
597
|
else
|
|
598
598
|
return;
|
|
599
|
-
|
|
599
|
+
let eq = lexer_1.default.EQ(value, index);
|
|
600
600
|
if (!eq)
|
|
601
601
|
return;
|
|
602
602
|
index = eq;
|
|
603
|
-
|
|
603
|
+
let token = primitiveLiteral_1.default.int32Value(value, index);
|
|
604
604
|
if (!token)
|
|
605
605
|
return;
|
|
606
606
|
index = token.next;
|
|
@@ -608,7 +608,7 @@ var Query;
|
|
|
608
608
|
}
|
|
609
609
|
Query.skip = skip;
|
|
610
610
|
function top(value, index) {
|
|
611
|
-
|
|
611
|
+
let start = index;
|
|
612
612
|
if (utils_1.default.equals(value, index, "%24top")) {
|
|
613
613
|
index += 6;
|
|
614
614
|
}
|
|
@@ -617,11 +617,11 @@ var Query;
|
|
|
617
617
|
}
|
|
618
618
|
else
|
|
619
619
|
return;
|
|
620
|
-
|
|
620
|
+
let eq = lexer_1.default.EQ(value, index);
|
|
621
621
|
if (!eq)
|
|
622
622
|
return;
|
|
623
623
|
index = eq;
|
|
624
|
-
|
|
624
|
+
let token = primitiveLiteral_1.default.int32Value(value, index);
|
|
625
625
|
if (!token)
|
|
626
626
|
return;
|
|
627
627
|
index = token.next;
|
|
@@ -629,7 +629,7 @@ var Query;
|
|
|
629
629
|
}
|
|
630
630
|
Query.top = top;
|
|
631
631
|
function format(value, index) {
|
|
632
|
-
|
|
632
|
+
let start = index;
|
|
633
633
|
if (utils_1.default.equals(value, index, "%24format")) {
|
|
634
634
|
index += 9;
|
|
635
635
|
}
|
|
@@ -638,11 +638,11 @@ var Query;
|
|
|
638
638
|
}
|
|
639
639
|
else
|
|
640
640
|
return;
|
|
641
|
-
|
|
641
|
+
let eq = lexer_1.default.EQ(value, index);
|
|
642
642
|
if (!eq)
|
|
643
643
|
return;
|
|
644
644
|
index = eq;
|
|
645
|
-
|
|
645
|
+
let format;
|
|
646
646
|
if (utils_1.default.equals(value, index, "atom")) {
|
|
647
647
|
format = "atom";
|
|
648
648
|
index += 4;
|
|
@@ -656,11 +656,11 @@ var Query;
|
|
|
656
656
|
index += 3;
|
|
657
657
|
}
|
|
658
658
|
if (format)
|
|
659
|
-
return lexer_1.default.tokenize(value, start, index, { format
|
|
659
|
+
return lexer_1.default.tokenize(value, start, index, { format }, lexer_1.default.TokenType.Format);
|
|
660
660
|
}
|
|
661
661
|
Query.format = format;
|
|
662
662
|
function inlinecount(value, index) {
|
|
663
|
-
|
|
663
|
+
let start = index;
|
|
664
664
|
if (utils_1.default.equals(value, index, "%24count")) {
|
|
665
665
|
index += 8;
|
|
666
666
|
}
|
|
@@ -669,11 +669,11 @@ var Query;
|
|
|
669
669
|
}
|
|
670
670
|
else
|
|
671
671
|
return;
|
|
672
|
-
|
|
672
|
+
let eq = lexer_1.default.EQ(value, index);
|
|
673
673
|
if (!eq)
|
|
674
674
|
return;
|
|
675
675
|
index = eq;
|
|
676
|
-
|
|
676
|
+
let token = primitiveLiteral_1.default.booleanValue(value, index);
|
|
677
677
|
if (!token)
|
|
678
678
|
return;
|
|
679
679
|
index = token.next;
|
|
@@ -681,7 +681,7 @@ var Query;
|
|
|
681
681
|
}
|
|
682
682
|
Query.inlinecount = inlinecount;
|
|
683
683
|
function select(value, index) {
|
|
684
|
-
|
|
684
|
+
let start = index;
|
|
685
685
|
if (utils_1.default.equals(value, index, "%24select")) {
|
|
686
686
|
index += 9;
|
|
687
687
|
}
|
|
@@ -690,18 +690,18 @@ var Query;
|
|
|
690
690
|
}
|
|
691
691
|
else
|
|
692
692
|
return;
|
|
693
|
-
|
|
693
|
+
let eq = lexer_1.default.EQ(value, index);
|
|
694
694
|
if (!eq)
|
|
695
695
|
return;
|
|
696
696
|
index = eq;
|
|
697
|
-
|
|
698
|
-
|
|
697
|
+
let items = [];
|
|
698
|
+
let token = Query.selectItem(value, index);
|
|
699
699
|
if (!token)
|
|
700
700
|
return;
|
|
701
701
|
while (token) {
|
|
702
702
|
items.push(token);
|
|
703
703
|
index = token.next;
|
|
704
|
-
|
|
704
|
+
let comma = lexer_1.default.COMMA(value, index);
|
|
705
705
|
if (comma) {
|
|
706
706
|
index = comma;
|
|
707
707
|
token = Query.selectItem(value, index);
|
|
@@ -711,14 +711,14 @@ var Query;
|
|
|
711
711
|
else
|
|
712
712
|
break;
|
|
713
713
|
}
|
|
714
|
-
return lexer_1.default.tokenize(value, start, index, { items
|
|
714
|
+
return lexer_1.default.tokenize(value, start, index, { items }, lexer_1.default.TokenType.Select);
|
|
715
715
|
}
|
|
716
716
|
Query.select = select;
|
|
717
717
|
function selectItem(value, index) {
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
718
|
+
let start = index;
|
|
719
|
+
let item;
|
|
720
|
+
let op = Query.allOperationsInSchema(value, index);
|
|
721
|
+
let star = lexer_1.default.STAR(value, index);
|
|
722
722
|
if (op > index) {
|
|
723
723
|
item = { namespace: utils_1.default.stringify(value, index, op - 2), value: "*" };
|
|
724
724
|
index = op;
|
|
@@ -729,7 +729,7 @@ var Query;
|
|
|
729
729
|
}
|
|
730
730
|
else {
|
|
731
731
|
item = {};
|
|
732
|
-
|
|
732
|
+
let name = nameOrIdentifier_1.default.qualifiedEntityTypeName(value, index) ||
|
|
733
733
|
nameOrIdentifier_1.default.qualifiedComplexTypeName(value, index);
|
|
734
734
|
if (name && value[name.next] !== 0x2f)
|
|
735
735
|
return;
|
|
@@ -737,75 +737,75 @@ var Query;
|
|
|
737
737
|
index++;
|
|
738
738
|
item.name = name;
|
|
739
739
|
}
|
|
740
|
-
|
|
740
|
+
let select = Query.selectProperty(value, index) ||
|
|
741
741
|
Query.qualifiedActionName(value, index) ||
|
|
742
742
|
Query.qualifiedFunctionName(value, index);
|
|
743
|
-
if (!
|
|
743
|
+
if (!select)
|
|
744
744
|
return;
|
|
745
|
-
index =
|
|
746
|
-
item = name ? { name
|
|
745
|
+
index = select.next;
|
|
746
|
+
item = name ? { name, select } : select;
|
|
747
747
|
}
|
|
748
748
|
if (index > start)
|
|
749
749
|
return lexer_1.default.tokenize(value, start, index, item, lexer_1.default.TokenType.SelectItem);
|
|
750
750
|
}
|
|
751
751
|
Query.selectItem = selectItem;
|
|
752
752
|
function allOperationsInSchema(value, index) {
|
|
753
|
-
|
|
754
|
-
|
|
753
|
+
let namespaceNext = nameOrIdentifier_1.default.namespace(value, index);
|
|
754
|
+
let star = lexer_1.default.STAR(value, namespaceNext + 1);
|
|
755
755
|
if (namespaceNext > index && value[namespaceNext] === 0x2e && star)
|
|
756
756
|
return star;
|
|
757
757
|
return index;
|
|
758
758
|
}
|
|
759
759
|
Query.allOperationsInSchema = allOperationsInSchema;
|
|
760
760
|
function selectProperty(value, index) {
|
|
761
|
-
|
|
761
|
+
let token = Query.selectPath(value, index) ||
|
|
762
762
|
nameOrIdentifier_1.default.primitiveProperty(value, index) ||
|
|
763
763
|
nameOrIdentifier_1.default.primitiveColProperty(value, index) ||
|
|
764
764
|
nameOrIdentifier_1.default.navigationProperty(value, index);
|
|
765
765
|
if (!token)
|
|
766
766
|
return;
|
|
767
|
-
|
|
767
|
+
let start = index;
|
|
768
768
|
index = token.next;
|
|
769
769
|
if (token.type === lexer_1.default.TokenType.SelectPath) {
|
|
770
770
|
if (value[index] === 0x2f) {
|
|
771
771
|
index++;
|
|
772
|
-
|
|
772
|
+
let prop = Query.selectProperty(value, index);
|
|
773
773
|
if (!prop)
|
|
774
774
|
return;
|
|
775
|
-
|
|
775
|
+
let path = lexer_1.default.clone(token);
|
|
776
776
|
token.next = prop.next;
|
|
777
777
|
token.raw = utils_1.default.stringify(value, start, token.next);
|
|
778
|
-
token.value = { path
|
|
778
|
+
token.value = { path, next: prop };
|
|
779
779
|
}
|
|
780
780
|
}
|
|
781
781
|
return token;
|
|
782
782
|
}
|
|
783
783
|
Query.selectProperty = selectProperty;
|
|
784
784
|
function selectPath(value, index) {
|
|
785
|
-
|
|
785
|
+
let token = nameOrIdentifier_1.default.complexProperty(value, index) ||
|
|
786
786
|
nameOrIdentifier_1.default.complexColProperty(value, index);
|
|
787
787
|
if (!token)
|
|
788
788
|
return;
|
|
789
|
-
|
|
789
|
+
let start = index;
|
|
790
790
|
index = token.next;
|
|
791
|
-
|
|
791
|
+
let tokenValue = token;
|
|
792
792
|
if (value[index] === 0x2f) {
|
|
793
|
-
|
|
793
|
+
let name = nameOrIdentifier_1.default.qualifiedComplexTypeName(value, index + 1);
|
|
794
794
|
if (name) {
|
|
795
795
|
index = name.next;
|
|
796
|
-
tokenValue = { prop: token, name
|
|
796
|
+
tokenValue = { prop: token, name };
|
|
797
797
|
}
|
|
798
798
|
}
|
|
799
799
|
return lexer_1.default.tokenize(value, start, index, tokenValue, lexer_1.default.TokenType.SelectPath);
|
|
800
800
|
}
|
|
801
801
|
Query.selectPath = selectPath;
|
|
802
802
|
function qualifiedActionName(value, index) {
|
|
803
|
-
|
|
803
|
+
let namespaceNext = nameOrIdentifier_1.default.namespace(value, index);
|
|
804
804
|
if (namespaceNext === index || value[namespaceNext] !== 0x2e)
|
|
805
805
|
return;
|
|
806
|
-
|
|
806
|
+
let start = index;
|
|
807
807
|
index = namespaceNext + 1;
|
|
808
|
-
|
|
808
|
+
let action = nameOrIdentifier_1.default.action(value, index);
|
|
809
809
|
if (!action)
|
|
810
810
|
return;
|
|
811
811
|
action.value.namespace = utils_1.default.stringify(value, start, namespaceNext);
|
|
@@ -813,38 +813,38 @@ var Query;
|
|
|
813
813
|
}
|
|
814
814
|
Query.qualifiedActionName = qualifiedActionName;
|
|
815
815
|
function qualifiedFunctionName(value, index) {
|
|
816
|
-
|
|
816
|
+
let namespaceNext = nameOrIdentifier_1.default.namespace(value, index);
|
|
817
817
|
if (namespaceNext === index || value[namespaceNext] !== 0x2e)
|
|
818
818
|
return;
|
|
819
|
-
|
|
819
|
+
let start = index;
|
|
820
820
|
index = namespaceNext + 1;
|
|
821
|
-
|
|
821
|
+
let fn = nameOrIdentifier_1.default.odataFunction(value, index);
|
|
822
822
|
if (!fn)
|
|
823
823
|
return;
|
|
824
824
|
fn.value.namespace = utils_1.default.stringify(value, start, namespaceNext);
|
|
825
825
|
index = fn.next;
|
|
826
|
-
|
|
827
|
-
|
|
826
|
+
let tokenValue = { name: fn };
|
|
827
|
+
let open = lexer_1.default.OPEN(value, index);
|
|
828
828
|
if (open) {
|
|
829
829
|
index = open;
|
|
830
830
|
tokenValue.parameters = [];
|
|
831
|
-
|
|
831
|
+
let param = expressions_1.default.parameterName(value, index);
|
|
832
832
|
if (!param)
|
|
833
833
|
return;
|
|
834
834
|
while (param) {
|
|
835
835
|
index = param.next;
|
|
836
836
|
tokenValue.parameters.push(param);
|
|
837
|
-
|
|
837
|
+
let comma = lexer_1.default.COMMA(value, index);
|
|
838
838
|
if (comma) {
|
|
839
839
|
index = comma;
|
|
840
|
-
|
|
841
|
-
if (!
|
|
840
|
+
let param = expressions_1.default.parameterName(value, index);
|
|
841
|
+
if (!param)
|
|
842
842
|
return;
|
|
843
843
|
}
|
|
844
844
|
else
|
|
845
845
|
break;
|
|
846
846
|
}
|
|
847
|
-
|
|
847
|
+
let close = lexer_1.default.CLOSE(value, index);
|
|
848
848
|
if (!close)
|
|
849
849
|
return;
|
|
850
850
|
index = close;
|
|
@@ -853,7 +853,7 @@ var Query;
|
|
|
853
853
|
}
|
|
854
854
|
Query.qualifiedFunctionName = qualifiedFunctionName;
|
|
855
855
|
function skiptoken(value, index) {
|
|
856
|
-
|
|
856
|
+
let start = index;
|
|
857
857
|
if (utils_1.default.equals(value, index, "%24skiptoken")) {
|
|
858
858
|
index += 12;
|
|
859
859
|
}
|
|
@@ -862,14 +862,14 @@ var Query;
|
|
|
862
862
|
}
|
|
863
863
|
else
|
|
864
864
|
return;
|
|
865
|
-
|
|
865
|
+
let eq = lexer_1.default.EQ(value, index);
|
|
866
866
|
if (!eq)
|
|
867
867
|
return;
|
|
868
868
|
index = eq;
|
|
869
|
-
|
|
869
|
+
let ch = lexer_1.default.qcharNoAMP(value, index);
|
|
870
870
|
if (!ch)
|
|
871
871
|
return;
|
|
872
|
-
|
|
872
|
+
let valueStart = index;
|
|
873
873
|
while (ch > index) {
|
|
874
874
|
index = ch;
|
|
875
875
|
ch = lexer_1.default.qcharNoAMP(value, index);
|
|
@@ -878,21 +878,21 @@ var Query;
|
|
|
878
878
|
}
|
|
879
879
|
Query.skiptoken = skiptoken;
|
|
880
880
|
function aliasAndValue(value, index) {
|
|
881
|
-
|
|
881
|
+
let alias = expressions_1.default.parameterAlias(value, index);
|
|
882
882
|
if (!alias)
|
|
883
883
|
return;
|
|
884
|
-
|
|
884
|
+
let start = index;
|
|
885
885
|
index = alias.next;
|
|
886
|
-
|
|
886
|
+
let eq = lexer_1.default.EQ(value, index);
|
|
887
887
|
if (!eq)
|
|
888
888
|
return;
|
|
889
889
|
index = eq;
|
|
890
|
-
|
|
890
|
+
let paramValue = expressions_1.default.parameterValue(value, index);
|
|
891
891
|
if (!paramValue)
|
|
892
892
|
return;
|
|
893
893
|
index = paramValue.next;
|
|
894
894
|
return lexer_1.default.tokenize(value, start, index, {
|
|
895
|
-
alias
|
|
895
|
+
alias,
|
|
896
896
|
value: paramValue
|
|
897
897
|
}, lexer_1.default.TokenType.AliasAndValue);
|
|
898
898
|
}
|