@webda/ql 4.0.0-beta.1

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/query.js ADDED
@@ -0,0 +1,646 @@
1
+ import { CharStreams, CommonTokenStream } from "antlr4ts";
2
+ import { AbstractParseTreeVisitor, TerminalNode } from "antlr4ts/tree/index.js";
3
+ import { WebdaQLLexer } from "./WebdaQLLexer.js";
4
+ import { OrderFieldExpressionContext, SubExpressionContext, WebdaQLParserParser } from "./WebdaQLParserParser.js";
5
+ export function PrependCondition(query = "", condition) {
6
+ if (!condition) {
7
+ return query;
8
+ }
9
+ query = query.trim();
10
+ // Find the right part of the query this regex will always be true as all part are optional
11
+ const rightPart = query.match(/(?<order>ORDER BY ([a-zA-Z0-9\._]+( DESC| ASC)?,?)+ ?)?(?<offset>OFFSET ["']\w+["'] ?)?(?<limit>LIMIT \d+)?$/);
12
+ // Remove it if found
13
+ query = query.substring(0, query.length - rightPart[0].length).trim();
14
+ // Add the condition to the query now
15
+ if (!query) {
16
+ query = condition;
17
+ }
18
+ else {
19
+ query = `(${condition}) AND (${query})`;
20
+ }
21
+ // Re-add the right part
22
+ if (rightPart[0].length) {
23
+ query += " " + rightPart[0];
24
+ }
25
+ return query;
26
+ }
27
+ /**
28
+ * Create Expression based on the parsed token
29
+ *
30
+ * Expression allow to optimize and split between Query and Filter
31
+ */
32
+ export class ExpressionBuilder extends AbstractParseTreeVisitor {
33
+ /**
34
+ * Default result for the override
35
+ * @returns
36
+ */
37
+ defaultResult() {
38
+ // An empty AND return true
39
+ return {
40
+ filter: new AndExpression([])
41
+ };
42
+ }
43
+ /**
44
+ * Get offset
45
+ * @returns
46
+ */
47
+ getOffset() {
48
+ return this.offset;
49
+ }
50
+ /**
51
+ * Get limit
52
+ * @returns
53
+ */
54
+ getLimit() {
55
+ return this.limit;
56
+ }
57
+ /**
58
+ * Read the limit
59
+ * @param ctx
60
+ */
61
+ visitLimitExpression(ctx) {
62
+ this.limit = this.visitIntegerLiteral(ctx.getChild(1));
63
+ }
64
+ /**
65
+ * Read the offset if provided
66
+ * @param ctx
67
+ */
68
+ visitOffsetExpression(ctx) {
69
+ this.offset = this.visitStringLiteral(ctx.getChild(1));
70
+ }
71
+ /**
72
+ * Visit a order field expression
73
+ */
74
+ visitOrderFieldExpression(ctx) {
75
+ return {
76
+ field: ctx.getChild(0).text,
77
+ direction: ctx.childCount > 1 ? ctx.getChild(1).text : "ASC"
78
+ };
79
+ }
80
+ /**
81
+ * Read the order by values
82
+ */
83
+ visitOrderExpression(ctx) {
84
+ this.orderBy = ctx.children
85
+ ?.filter(c => c instanceof OrderFieldExpressionContext)
86
+ .map((c) => this.visitOrderFieldExpression(c));
87
+ }
88
+ /**
89
+ * Return only AndExpression
90
+ * @param ctx
91
+ * @returns
92
+ */
93
+ visitWebdaql(ctx) {
94
+ if (ctx.childCount === 1) {
95
+ // An empty AND return true
96
+ return {
97
+ filter: new AndExpression([])
98
+ };
99
+ }
100
+ // To parse offset and limit and order by
101
+ for (let i = 1; i < ctx.childCount - 1; i++) {
102
+ this.visit(ctx.getChild(i));
103
+ }
104
+ // If the first element is a sub expression, it means we have a filter
105
+ if (ctx.getChild(0) instanceof SubExpressionContext) {
106
+ return {
107
+ filter: this.visit(ctx.getChild(0).getChild(1)) || new AndExpression([]),
108
+ limit: this.limit,
109
+ continuationToken: this.offset,
110
+ orderBy: this.orderBy
111
+ };
112
+ }
113
+ // Go down one level - if expression empty it means no expression were provided
114
+ return {
115
+ filter: this.visit(ctx.getChild(0)) || new AndExpression([]),
116
+ limit: this.limit,
117
+ continuationToken: this.offset,
118
+ orderBy: this.orderBy
119
+ };
120
+ }
121
+ /**
122
+ * Simplify Logic expression and regroup them
123
+ * @param ctx
124
+ * @returns
125
+ */
126
+ getComparison(ctx) {
127
+ const res = [];
128
+ let [left, _, right] = ctx.children;
129
+ if (right instanceof SubExpressionContext) {
130
+ right = right.getChild(1);
131
+ }
132
+ if (left instanceof SubExpressionContext) {
133
+ left = left.getChild(1);
134
+ }
135
+ if (left instanceof ctx.constructor) {
136
+ res.push(...this.getComparison(left));
137
+ }
138
+ else {
139
+ res.push(left);
140
+ }
141
+ if (right instanceof ctx.constructor) {
142
+ res.push(...this.getComparison(right));
143
+ }
144
+ else {
145
+ res.push(right);
146
+ }
147
+ return res;
148
+ }
149
+ /**
150
+ * Get the AndExpression, regrouping all the parameters
151
+ *
152
+ * By default the parser is doing a AND (b AND (c AND d)) creating 3 depth expressions
153
+ * This visitor simplify to a AND b AND c AND d with only one Expression
154
+ */
155
+ visitAndLogicExpression(ctx) {
156
+ return new AndExpression(this.getComparison(ctx).map(c => this.visit(c)));
157
+ }
158
+ /**
159
+ * Implement the BinaryComparison with all methods managed
160
+ */
161
+ visitBinaryComparisonExpression(ctx) {
162
+ const [left, op, right] = ctx.children;
163
+ // @ts-ignore
164
+ return new ComparisonExpression(op.text, left.text, this.visit(right));
165
+ }
166
+ /**
167
+ * Visit each value of the [..., ..., ...] set
168
+ */
169
+ visitSetExpression(ctx) {
170
+ return ctx.children.filter((_i, id) => id % 2).map(c => this.visit(c));
171
+ }
172
+ /**
173
+ * a LIKE "%A?"
174
+ * @param ctx
175
+ * @returns
176
+ */
177
+ visitLikeExpression(ctx) {
178
+ const [left, _, right] = ctx.children;
179
+ let value = this.visit(right);
180
+ return new ComparisonExpression("LIKE", left.text, value);
181
+ }
182
+ /**
183
+ * Map the a IN ['b','c']
184
+ */
185
+ visitInExpression(ctx) {
186
+ const [left, _, right] = ctx.children;
187
+ let value = this.visit(right);
188
+ return new ComparisonExpression("IN", left.text, value);
189
+ }
190
+ /**
191
+ * Map the a CONTAINS 'b'
192
+ */
193
+ visitContainsExpression(ctx) {
194
+ const [left, _, right] = ctx.children;
195
+ let value = this.visit(right);
196
+ return new ComparisonExpression("CONTAINS", left.text, value);
197
+ }
198
+ /**
199
+ * Get the OrExpression, regrouping all the parameters
200
+ *
201
+ * By default the parser is doing a OR (b OR (c OR d)) creating 3 depth expressions
202
+ * This visitor simplify to a OR b OR c OR d with only one Expression
203
+ */
204
+ visitOrLogicExpression(ctx) {
205
+ return new OrExpression(this.getComparison(ctx).map(c => this.visit(c)));
206
+ }
207
+ /**
208
+ * Read the string literal (removing the simple or double bracket)
209
+ */
210
+ visitStringLiteral(ctx) {
211
+ return ctx.text.substring(1, ctx.text.length - 1);
212
+ }
213
+ /**
214
+ * Read the boolean literal
215
+ */
216
+ visitBooleanLiteral(ctx) {
217
+ return "TRUE" === ctx.text;
218
+ }
219
+ /**
220
+ * Read the number literal
221
+ */
222
+ visitIntegerLiteral(ctx) {
223
+ return parseInt(ctx.text);
224
+ }
225
+ }
226
+ /**
227
+ * Represent the query expression or subset
228
+ */
229
+ export class Expression {
230
+ constructor(operator) {
231
+ this.operator = operator;
232
+ }
233
+ }
234
+ /**
235
+ * Comparison expression
236
+ */
237
+ export class ComparisonExpression extends Expression {
238
+ /**
239
+ *
240
+ * @param operator of the expression
241
+ * @param attribute of the object to read
242
+ * @param value
243
+ */
244
+ constructor(operator, attribute, value) {
245
+ super(operator);
246
+ this.value = value;
247
+ this.attribute = attribute.split(".");
248
+ }
249
+ static likeToRegex(like) {
250
+ return new RegExp(like
251
+ // Prevent common regexp chars
252
+ .replace(/\?/g, "\\?")
253
+ .replace(/\[/g, "\\[")
254
+ .replace(/\{/g, "\\{")
255
+ .replace(/\(/g, "\\(")
256
+ // Update % and _ to match regex version
257
+ .replace(/([^\\])_/g, "$1.{1}")
258
+ .replace(/^_/g, ".{1}")
259
+ .replace(/\\_/g, "_")
260
+ .replace(/([^\\])%/g, "$1.*")
261
+ .replace(/^%/g, ".*")
262
+ .replace(/\\%/g, "%")
263
+ // Replace backslash aswell
264
+ .replace(/\\([^?[{(])/g, "\\\\"));
265
+ }
266
+ /**
267
+ * Read the value from the object
268
+ *
269
+ * @param target
270
+ * @returns
271
+ */
272
+ static getAttributeValue(target, attribute) {
273
+ let res = target;
274
+ for (let i = 0; res && i < attribute.length; i++) {
275
+ res = res[attribute[i]];
276
+ }
277
+ return res;
278
+ }
279
+ /**
280
+ * Set the value of the attribute based on the assignment
281
+ *
282
+ * If used as a Set expression
283
+ * @param target
284
+ */
285
+ setAttributeValue(target) {
286
+ var _a;
287
+ // Avoid alteration of prototype for security reason
288
+ if (this.attribute.includes("__proto__")) {
289
+ return;
290
+ }
291
+ if (this.operator === "=") {
292
+ let res = target;
293
+ for (let i = 0; res && i < this.attribute.length - 1; i++) {
294
+ res[_a = this.attribute[i]] ?? (res[_a] = {});
295
+ res = res[this.attribute[i]];
296
+ }
297
+ res[this.attribute[this.attribute.length - 1]] = this.value;
298
+ }
299
+ }
300
+ /**
301
+ * @override
302
+ */
303
+ eval(target) {
304
+ const left = ComparisonExpression.getAttributeValue(target, this.attribute);
305
+ switch (this.operator) {
306
+ case "=":
307
+ // ignore strong type on purpose
308
+ return left == this.value;
309
+ case "<=":
310
+ return left <= this.value;
311
+ case ">=":
312
+ return left >= this.value;
313
+ case "<":
314
+ return left < this.value;
315
+ case ">":
316
+ return left > this.value;
317
+ case "!=":
318
+ return left != this.value;
319
+ case "LIKE":
320
+ if (typeof left === "string") {
321
+ // Grammar definie value as stringLiteral
322
+ return left.match(ComparisonExpression.likeToRegex(this.value)) !== null;
323
+ }
324
+ return left.toString().match(ComparisonExpression.likeToRegex(this.value)) !== null;
325
+ case "IN":
326
+ return this.value.includes(left);
327
+ case "CONTAINS":
328
+ if (Array.isArray(left)) {
329
+ return left.includes(this.value);
330
+ }
331
+ return false;
332
+ }
333
+ }
334
+ /**
335
+ * Return a string represantation of a value
336
+ */
337
+ toStringValue(value) {
338
+ if (Array.isArray(value)) {
339
+ return `[${value.map(v => this.toStringValue(v)).join(", ")}]`;
340
+ }
341
+ switch (typeof value) {
342
+ case "string":
343
+ return `"${value}"`;
344
+ case "boolean":
345
+ return value.toString().toUpperCase();
346
+ }
347
+ return value?.toString();
348
+ }
349
+ /**
350
+ * Allow subclass to create different display
351
+ */
352
+ toStringAttribute() {
353
+ return this.attribute.join(".");
354
+ }
355
+ /**
356
+ * Allow subclass to create different display
357
+ */
358
+ toStringOperator() {
359
+ return this.operator;
360
+ }
361
+ /**
362
+ * @override
363
+ */
364
+ toString() {
365
+ return `${this.toStringAttribute()} ${this.toStringOperator()} ${this.toStringValue(this.value)}`;
366
+ }
367
+ }
368
+ /**
369
+ * Abstract logic expression (AND|OR)
370
+ *
371
+ * Could add XOR in the future
372
+ */
373
+ export class LogicalExpression extends Expression {
374
+ /**
375
+ *
376
+ * @param operator
377
+ * @param children
378
+ */
379
+ constructor(operator, children) {
380
+ super(operator);
381
+ /**
382
+ * Contains the members of the logical expression
383
+ */
384
+ this.children = [];
385
+ this.children = children;
386
+ }
387
+ /**
388
+ * @override
389
+ */
390
+ toString(depth = 0) {
391
+ if (depth) {
392
+ return "( " + this.children.map(c => c.toString(depth + 1)).join(` ${this.operator} `) + " )";
393
+ }
394
+ return this.children.map(c => c.toString(depth + 1)).join(` ${this.operator} `);
395
+ }
396
+ }
397
+ /**
398
+ * AND Expression implementation
399
+ */
400
+ export class AndExpression extends LogicalExpression {
401
+ /**
402
+ * @param children Expressions to use for AND
403
+ */
404
+ constructor(children) {
405
+ super("AND", children);
406
+ }
407
+ /**
408
+ * @override
409
+ */
410
+ eval(target) {
411
+ for (let child of this.children) {
412
+ if (!child.eval(target)) {
413
+ return false;
414
+ }
415
+ }
416
+ return true;
417
+ }
418
+ }
419
+ /**
420
+ * OR Expression implementation
421
+ */
422
+ export class OrExpression extends LogicalExpression {
423
+ /**
424
+ * @param children Expressions to use for OR
425
+ */
426
+ constructor(children) {
427
+ super("OR", children);
428
+ }
429
+ /**
430
+ * @override
431
+ */
432
+ eval(target) {
433
+ for (let child of this.children) {
434
+ if (child.eval(target)) {
435
+ return true;
436
+ }
437
+ }
438
+ return this.children.length === 0;
439
+ }
440
+ }
441
+ /**
442
+ *
443
+ */
444
+ export class QueryValidator {
445
+ constructor(sql, builder = new ExpressionBuilder()) {
446
+ this.sql = sql;
447
+ this.lexer = new WebdaQLLexer(CharStreams.fromString(sql || ""));
448
+ let tokenStream = new CommonTokenStream(this.lexer);
449
+ let parser = new WebdaQLParserParser(tokenStream);
450
+ parser.removeErrorListeners();
451
+ parser.addErrorListener({
452
+ syntaxError: (_recognizer, _offendingSymbol, _line, _charPositionInLine, msg, _e) => {
453
+ throw new SyntaxError(`${msg} (Query: ${sql})`);
454
+ }
455
+ });
456
+ // Parse the input, where `compilationUnit` is whatever entry point you defined
457
+ this.tree = parser.webdaql();
458
+ this.builder = builder;
459
+ this.query = this.builder.visit(this.tree);
460
+ }
461
+ /**
462
+ * Get offset
463
+ * @returns
464
+ */
465
+ getOffset() {
466
+ return this.builder.getOffset() || "";
467
+ }
468
+ /**
469
+ * Get limit
470
+ * @returns
471
+ */
472
+ getLimit() {
473
+ return this.builder.getLimit() || 1000;
474
+ }
475
+ /**
476
+ * Get the expression by itself
477
+ * @returns
478
+ */
479
+ getExpression() {
480
+ return this.query.filter;
481
+ }
482
+ /**
483
+ * Retrieve parsed query
484
+ * @returns
485
+ */
486
+ getQuery() {
487
+ return {
488
+ ...this.query,
489
+ // Use displayTree to get the truely executed query
490
+ toString: () => this.displayTree()
491
+ };
492
+ }
493
+ /**
494
+ * Verify if a target fit the expression
495
+ * @param target
496
+ * @returns
497
+ */
498
+ eval(target) {
499
+ return this.query.filter.eval(target);
500
+ }
501
+ /**
502
+ * Display parse tree back as query
503
+ * @param tree
504
+ * @returns
505
+ */
506
+ displayTree(tree = this.tree) {
507
+ let res = "";
508
+ for (let i = 0; i < tree.childCount; i++) {
509
+ const child = tree.getChild(i);
510
+ if (child instanceof TerminalNode) {
511
+ if (child.text === "<EOF>") {
512
+ continue;
513
+ }
514
+ res += child.text.trim() + " ";
515
+ }
516
+ else {
517
+ res += this.displayTree(child).trim() + " ";
518
+ }
519
+ }
520
+ return res;
521
+ }
522
+ }
523
+ /**
524
+ * For now reuse same parser
525
+ */
526
+ export class SetterValidator extends QueryValidator {
527
+ constructor(sql) {
528
+ super(sql);
529
+ // Do one empty run to raise any issue with disallowed expression
530
+ this.eval({});
531
+ }
532
+ eval(target) {
533
+ if (this.query.filter) {
534
+ this.assign(target, this.query.filter);
535
+ }
536
+ return true;
537
+ }
538
+ assign(target, expression) {
539
+ if (expression instanceof AndExpression) {
540
+ expression.children.forEach(c => this.assign(target, c));
541
+ }
542
+ else if (expression instanceof ComparisonExpression && expression.operator === "=") {
543
+ expression.setAttributeValue(target);
544
+ }
545
+ else {
546
+ throw new SyntaxError(`Set Expression can only contain And and assignment expression '='`);
547
+ }
548
+ }
549
+ }
550
+ export class PartialValidator extends QueryValidator {
551
+ constructor(query, builder = new PartialExpressionBuilder()) {
552
+ super(query, builder);
553
+ }
554
+ /**
555
+ * Eval the query
556
+ * @param target
557
+ * @param partial
558
+ * @returns
559
+ */
560
+ eval(target, partial = true) {
561
+ this.builder.setPartial(partial);
562
+ this.builder.setPartialMatch(false);
563
+ return this.query.filter.eval(target);
564
+ }
565
+ /**
566
+ * Return if the result ignored some fields
567
+ * @returns
568
+ */
569
+ wasPartialMatch() {
570
+ return this.builder.partialMatch;
571
+ }
572
+ }
573
+ export class PartialComparisonExpression extends ComparisonExpression {
574
+ constructor(builder, op, attribute, value) {
575
+ super(op, attribute, value);
576
+ this.builder = builder;
577
+ }
578
+ /**
579
+ * Override the eval to check if the attribute is present
580
+ * if not and we are in partial mode, return true
581
+ *
582
+ * @param target
583
+ * @returns
584
+ */
585
+ eval(target) {
586
+ if (this.builder.partial) {
587
+ const left = ComparisonExpression.getAttributeValue(target, this.attribute);
588
+ if (left === undefined) {
589
+ this.builder.setPartialMatch(true);
590
+ return true;
591
+ }
592
+ }
593
+ return super.eval(target);
594
+ }
595
+ }
596
+ export class PartialExpressionBuilder extends ExpressionBuilder {
597
+ setPartial(partial) {
598
+ this.partial = partial;
599
+ }
600
+ setPartialMatch(partial) {
601
+ this.partialMatch = partial;
602
+ }
603
+ /**
604
+ * a LIKE "%A?"
605
+ * @param ctx
606
+ * @returns
607
+ */
608
+ visitLikeExpression(ctx) {
609
+ const [left, _, right] = ctx.children;
610
+ let value = this.visit(right);
611
+ return new PartialComparisonExpression(this, "LIKE", left.text, value);
612
+ }
613
+ /**
614
+ * Implement the BinaryComparison with all methods managed
615
+ */
616
+ visitBinaryComparisonExpression(ctx) {
617
+ const [left, op, right] = ctx.children;
618
+ // @ts-ignore
619
+ return new PartialComparisonExpression(this, op.text, left.text, this.visit(right));
620
+ }
621
+ /**
622
+ * Map the a IN ['b','c']
623
+ */
624
+ visitInExpression(ctx) {
625
+ const [left, _, right] = ctx.children;
626
+ let value = this.visit(right);
627
+ return new PartialComparisonExpression(this, "IN", left.text, value);
628
+ }
629
+ /**
630
+ * Map the a CONTAINS 'b'
631
+ */
632
+ visitContainsExpression(ctx) {
633
+ const [left, _, right] = ctx.children;
634
+ let value = this.visit(right);
635
+ return new PartialComparisonExpression(this, "CONTAINS", left.text, value);
636
+ }
637
+ }
638
+ /**
639
+ * Remove artifact from sanitize-html inside query
640
+ * @param query
641
+ * @returns
642
+ */
643
+ export function unsanitize(query) {
644
+ return query.replace(/&lt;/g, "<").replace(/&gt;/g, ">");
645
+ }
646
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};