@shaxpir/squilt 1.0.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 (69) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +133 -0
  3. package/dist/ast/Abstractions.d.ts +14 -0
  4. package/dist/ast/Abstractions.js +11 -0
  5. package/dist/ast/Alias.d.ts +11 -0
  6. package/dist/ast/Alias.js +23 -0
  7. package/dist/ast/BinaryExpression.d.ts +13 -0
  8. package/dist/ast/BinaryExpression.js +26 -0
  9. package/dist/ast/CaseExpression.d.ts +14 -0
  10. package/dist/ast/CaseExpression.js +22 -0
  11. package/dist/ast/Column.d.ts +17 -0
  12. package/dist/ast/Column.js +38 -0
  13. package/dist/ast/Concat.d.ts +8 -0
  14. package/dist/ast/Concat.js +19 -0
  15. package/dist/ast/ExistsExpression.d.ts +9 -0
  16. package/dist/ast/ExistsExpression.js +18 -0
  17. package/dist/ast/From.d.ts +33 -0
  18. package/dist/ast/From.js +60 -0
  19. package/dist/ast/FunctionExpression.d.ts +13 -0
  20. package/dist/ast/FunctionExpression.js +27 -0
  21. package/dist/ast/FunctionName.d.ts +1 -0
  22. package/dist/ast/FunctionName.js +3 -0
  23. package/dist/ast/InExpression.d.ts +13 -0
  24. package/dist/ast/InExpression.js +35 -0
  25. package/dist/ast/InsertQuery.d.ts +17 -0
  26. package/dist/ast/InsertQuery.js +42 -0
  27. package/dist/ast/Join.d.ts +21 -0
  28. package/dist/ast/Join.js +37 -0
  29. package/dist/ast/Literals.d.ts +31 -0
  30. package/dist/ast/Literals.js +65 -0
  31. package/dist/ast/Operator.d.ts +18 -0
  32. package/dist/ast/Operator.js +23 -0
  33. package/dist/ast/OrderBy.d.ts +14 -0
  34. package/dist/ast/OrderBy.js +25 -0
  35. package/dist/ast/SelectQuery.d.ts +39 -0
  36. package/dist/ast/SelectQuery.js +109 -0
  37. package/dist/ast/UnaryExpression.d.ts +11 -0
  38. package/dist/ast/UnaryExpression.js +22 -0
  39. package/dist/ast/With.d.ts +11 -0
  40. package/dist/ast/With.js +21 -0
  41. package/dist/builder/QueryBuilder.d.ts +8 -0
  42. package/dist/builder/QueryBuilder.js +20 -0
  43. package/dist/builder/Shorthand.d.ts +77 -0
  44. package/dist/builder/Shorthand.js +375 -0
  45. package/dist/index.d.ts +32 -0
  46. package/dist/index.js +133 -0
  47. package/dist/renderer/CompactQueryRenderer.d.ts +45 -0
  48. package/dist/renderer/CompactQueryRenderer.js +192 -0
  49. package/dist/renderer/IndentedQueryRenderer.d.ts +51 -0
  50. package/dist/renderer/IndentedQueryRenderer.js +230 -0
  51. package/dist/renderer/QueryRenderer.d.ts +8 -0
  52. package/dist/renderer/QueryRenderer.js +77 -0
  53. package/dist/validate/CommonQueryValidator.d.ts +50 -0
  54. package/dist/validate/CommonQueryValidator.js +262 -0
  55. package/dist/validate/QueryValidator.d.ts +6 -0
  56. package/dist/validate/QueryValidator.js +3 -0
  57. package/dist/validate/SQLiteQueryValidator.d.ts +27 -0
  58. package/dist/validate/SQLiteQueryValidator.js +96 -0
  59. package/dist/visitor/ParamCollector.d.ts +46 -0
  60. package/dist/visitor/ParamCollector.js +129 -0
  61. package/dist/visitor/QueryIdentityTransformer.d.ts +45 -0
  62. package/dist/visitor/QueryIdentityTransformer.js +173 -0
  63. package/dist/visitor/QueryParamRewriteTransformer.d.ts +11 -0
  64. package/dist/visitor/QueryParamRewriteTransformer.js +26 -0
  65. package/dist/visitor/SqlTreeNodeTransformer.d.ts +5 -0
  66. package/dist/visitor/SqlTreeNodeTransformer.js +3 -0
  67. package/dist/visitor/SqlTreeNodeVisitor.d.ts +45 -0
  68. package/dist/visitor/SqlTreeNodeVisitor.js +47 -0
  69. package/package.json +36 -0
@@ -0,0 +1,45 @@
1
+ import { AliasableExpression } from "../ast/Abstractions";
2
+ import { Alias } from "../ast/Alias";
3
+ import { BinaryExpression } from "../ast/BinaryExpression";
4
+ import { CaseExpression } from "../ast/CaseExpression";
5
+ import { Column } from "../ast/Column";
6
+ import { Concat } from "../ast/Concat";
7
+ import { ExistsExpression } from "../ast/ExistsExpression";
8
+ import { From, JsonEachFrom, SubqueryFrom, TableFrom } from "../ast/From";
9
+ import { FunctionExpression } from "../ast/FunctionExpression";
10
+ import { InExpression } from "../ast/InExpression";
11
+ import { InsertQuery } from "../ast/InsertQuery";
12
+ import { Join } from "../ast/Join";
13
+ import { NullLiteral, NumberLiteral, Param, StringLiteral } from "../ast/Literals";
14
+ import { OrderBy } from "../ast/OrderBy";
15
+ import { SelectQuery } from "../ast/SelectQuery";
16
+ import { UnaryExpression } from "../ast/UnaryExpression";
17
+ import { With } from "../ast/With";
18
+ import { ColumnLikeVisitorAcceptor, FromLikeAndJoinVisitorAcceptor, SqlTreeNodeVisitor } from "../visitor/SqlTreeNodeVisitor";
19
+ import { QueryRenderer } from "./QueryRenderer";
20
+ export declare class CompactQueryRenderer implements QueryRenderer, SqlTreeNodeVisitor<string> {
21
+ protected fromLikeAndJoinAcceptor: FromLikeAndJoinVisitorAcceptor<void>;
22
+ protected columnLikeAcceptor: ColumnLikeVisitorAcceptor<string>;
23
+ render(node: SelectQuery | InsertQuery): string;
24
+ visitInsertQuery(node: InsertQuery): string;
25
+ visitSelectQuery(node: SelectQuery): string;
26
+ visitTableFrom(node: TableFrom): string;
27
+ visitSubqueryFrom(node: SubqueryFrom): string;
28
+ visitJsonEachFrom(node: JsonEachFrom): string;
29
+ visitColumn(node: Column): string;
30
+ visitAlias(node: Alias<From | AliasableExpression>): string;
31
+ visitJoinClause(node: Join): string;
32
+ visitOrderBy(node: OrderBy): string;
33
+ visitWithClause(node: With): string;
34
+ visitBinaryExpression(node: BinaryExpression): string;
35
+ visitUnaryExpression(node: UnaryExpression): string;
36
+ visitInExpression(node: InExpression): string;
37
+ visitConcat(node: Concat): string;
38
+ visitCaseExpression(node: CaseExpression): string;
39
+ visitFunctionExpression(node: FunctionExpression): string;
40
+ visitParamExpression(_node: Param): string;
41
+ visitStringLiteral(node: StringLiteral): string;
42
+ visitNumberLiteral(node: NumberLiteral): string;
43
+ visitNullLiteral(_node: NullLiteral): string;
44
+ visitExistsExpression(node: ExistsExpression): string;
45
+ }
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CompactQueryRenderer = void 0;
4
+ const Alias_1 = require("../ast/Alias");
5
+ const From_1 = require("../ast/From");
6
+ const Join_1 = require("../ast/Join");
7
+ const Operator_1 = require("../ast/Operator");
8
+ const SelectQuery_1 = require("../ast/SelectQuery");
9
+ const SqlTreeNodeVisitor_1 = require("../visitor/SqlTreeNodeVisitor");
10
+ const QueryRenderer_1 = require("./QueryRenderer");
11
+ class CompactQueryRenderer {
12
+ constructor() {
13
+ this.fromLikeAndJoinAcceptor = new SqlTreeNodeVisitor_1.FromLikeAndJoinVisitorAcceptor();
14
+ this.columnLikeAcceptor = new SqlTreeNodeVisitor_1.ColumnLikeVisitorAcceptor();
15
+ }
16
+ render(node) {
17
+ return node.accept(this);
18
+ }
19
+ visitInsertQuery(node) {
20
+ const parts = [];
21
+ parts.push(`INSERT${node.isOrReplace() ? ' OR REPLACE' : ''}`);
22
+ parts.push(`INTO ${(0, QueryRenderer_1.quoteIdentifier)(node['_tableName'])}`);
23
+ if (node['_columns'].length > 0) {
24
+ parts.push(`(${node['_columns'].map(QueryRenderer_1.quoteIdentifier).join(', ')})`);
25
+ }
26
+ parts.push(`VALUES (${node['_values'].map(v => v.accept(this)).join(', ')})`);
27
+ return parts.join(' ');
28
+ }
29
+ visitSelectQuery(node) {
30
+ const parts = [];
31
+ if (node['_with'].length > 0) {
32
+ parts.push(`WITH ${node['_with'].map(w => w.accept(this)).join(', ')}`);
33
+ }
34
+ parts.push(`SELECT${node.isDistinct() ? ' DISTINCT' : ''}`);
35
+ if (node['_columns'].length > 0) {
36
+ parts.push(node['_columns'].map(c => this.columnLikeAcceptor.accept(this, c)).join(', '));
37
+ }
38
+ else {
39
+ parts.push('*');
40
+ }
41
+ if (node['_fromsAndJoins'].length > 0) {
42
+ let fromsAndJoinsText = '';
43
+ for (const fromOrJoin of node['_fromsAndJoins']) {
44
+ if (fromOrJoin instanceof Join_1.Join) {
45
+ fromsAndJoinsText += ` ${fromOrJoin.accept(this)}`;
46
+ }
47
+ else if (fromOrJoin instanceof Alias_1.Alias ||
48
+ fromOrJoin instanceof From_1.From ||
49
+ fromOrJoin instanceof From_1.TableFrom ||
50
+ fromOrJoin instanceof From_1.SubqueryFrom ||
51
+ fromOrJoin instanceof From_1.JsonEachFrom) {
52
+ if (fromsAndJoinsText) {
53
+ fromsAndJoinsText += `, ${fromOrJoin.accept(this)}`;
54
+ }
55
+ else {
56
+ fromsAndJoinsText += `FROM ${fromOrJoin.accept(this)}`;
57
+ }
58
+ }
59
+ }
60
+ parts.push(fromsAndJoinsText);
61
+ }
62
+ if (node['_where']) {
63
+ parts.push(`WHERE ${node['_where'].accept(this)}`);
64
+ }
65
+ if (node['_groupBy'].length > 0) {
66
+ parts.push(`GROUP BY ${node['_groupBy'].map(c => c.accept(this)).join(', ')}`);
67
+ }
68
+ if (node['_having']) {
69
+ parts.push(`HAVING ${node['_having'].accept(this)}`);
70
+ }
71
+ if (node['_union'].length > 0) {
72
+ parts.push(node['_union'].map(u => `UNION ${u.accept(this)}`).join(' '));
73
+ }
74
+ if (node['_orderBy'].length > 0) {
75
+ parts.push(`ORDER BY ${node['_orderBy'].map(o => o.accept(this)).join(', ')}`);
76
+ }
77
+ if (node['_limit'] !== null && node['_limit'] !== undefined) {
78
+ parts.push(`LIMIT ${node['_limit']}`);
79
+ if (node['_offset'] !== null && node['_offset'] !== undefined) {
80
+ parts.push(`OFFSET ${node['_offset']}`);
81
+ }
82
+ }
83
+ return parts.filter(p => p).join(' ');
84
+ }
85
+ visitTableFrom(node) {
86
+ return `${(0, QueryRenderer_1.quoteIdentifier)(node.tableName)}`;
87
+ }
88
+ visitSubqueryFrom(node) {
89
+ return `(${node.subquery.accept(this)})`;
90
+ }
91
+ visitJsonEachFrom(node) {
92
+ const expr = node.jsonExpression.accept(this);
93
+ const path = node.jsonPath ? `, ${node.jsonPath.accept(this)}` : '';
94
+ return `json_each(${expr}${path})`;
95
+ }
96
+ visitColumn(node) {
97
+ if (node.hasTableName()) {
98
+ return `${(0, QueryRenderer_1.quoteIdentifier)(node.tableName)}.${(0, QueryRenderer_1.quoteIdentifier)(node.columnName)}`;
99
+ }
100
+ else {
101
+ return `${(0, QueryRenderer_1.quoteIdentifier)(node.columnName)}`;
102
+ }
103
+ }
104
+ visitAlias(node) {
105
+ const isSubquery = node.referent instanceof From_1.SubqueryFrom || node.referent instanceof SelectQuery_1.SelectQuery;
106
+ const renderedReferent = node.referent.accept(this);
107
+ const renderedAliasName = (0, QueryRenderer_1.quoteIdentifier)(node.alias);
108
+ if (node.referent instanceof From_1.From) {
109
+ return `${renderedReferent} ${renderedAliasName}`;
110
+ }
111
+ else if (isSubquery) {
112
+ return `(${renderedReferent}) AS ${renderedAliasName}`;
113
+ }
114
+ else {
115
+ return `${renderedReferent} AS ${renderedAliasName}`;
116
+ }
117
+ }
118
+ visitJoinClause(node) {
119
+ return `${node.type} JOIN ${(0, QueryRenderer_1.quoteIdentifier)(node.tableName)} ${(0, QueryRenderer_1.quoteIdentifier)(node.alias)} ON ${node.on.accept(this)}`;
120
+ }
121
+ visitOrderBy(node) {
122
+ return `${node.column.accept(this)} ${node.direction}`;
123
+ }
124
+ visitWithClause(node) {
125
+ return `${(0, QueryRenderer_1.quoteIdentifier)(node.name)} AS (${node.query.accept(this)})`;
126
+ }
127
+ visitBinaryExpression(node) {
128
+ return `(${node.left.accept(this)} ${node.operator} ${node.right.accept(this)})`;
129
+ }
130
+ visitUnaryExpression(node) {
131
+ const operand = node.operand.accept(this);
132
+ if (node.operator === Operator_1.Operator.IS_NULL || node.operator === Operator_1.Operator.IS_NOT_NULL) {
133
+ return `(${operand} ${node.operator})`;
134
+ }
135
+ else if (node.operator === 'NOT') {
136
+ return `(NOT ${operand})`;
137
+ }
138
+ else {
139
+ return `(${node.operator}${operand})`;
140
+ }
141
+ }
142
+ visitInExpression(node) {
143
+ const leftStr = node.left.length > 1
144
+ ? `(${node.left.map(l => l.accept(this)).join(', ')})`
145
+ : node.left[0].accept(this);
146
+ const not = node.not ? ' NOT' : '';
147
+ let right;
148
+ if (node.values instanceof SelectQuery_1.SelectQuery) {
149
+ right = `(${node.values.accept(this)})`;
150
+ }
151
+ else {
152
+ right = `(${node.values.map(set => set.length > 1 ? `(${set.map(v => v.accept(this)).join(', ')})` : set[0].accept(this)).join(', ')})`;
153
+ }
154
+ return `(${leftStr}${not} IN ${right})`;
155
+ }
156
+ visitConcat(node) {
157
+ return `(${node.expressions.map(e => e.accept(this)).join(' || ')})`;
158
+ }
159
+ visitCaseExpression(node) {
160
+ const parts = ['CASE'];
161
+ for (const c of node.cases) {
162
+ parts.push(`WHEN ${c.when.accept(this)} THEN ${c.then.accept(this)}`);
163
+ }
164
+ if (node.else) {
165
+ parts.push(`ELSE ${node.else.accept(this)}`);
166
+ }
167
+ parts.push('END');
168
+ return parts.join(' ');
169
+ }
170
+ visitFunctionExpression(node) {
171
+ const args = node.args.map(a => a.accept(this)).join(', ');
172
+ const distinctPrefix = node.distinct ? 'DISTINCT ' : '';
173
+ return `${node.name}(${distinctPrefix}${args})`;
174
+ }
175
+ visitParamExpression(_node) {
176
+ return '?';
177
+ }
178
+ visitStringLiteral(node) {
179
+ return `'${node.value.replace(/'/g, "''")}'`;
180
+ }
181
+ visitNumberLiteral(node) {
182
+ return node.value.toString();
183
+ }
184
+ visitNullLiteral(_node) {
185
+ return 'NULL';
186
+ }
187
+ visitExistsExpression(node) {
188
+ return `EXISTS (${node.subquery.accept(this)})`;
189
+ }
190
+ }
191
+ exports.CompactQueryRenderer = CompactQueryRenderer;
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFjdFF1ZXJ5UmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVuZGVyZXIvQ29tcGFjdFF1ZXJ5UmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0Esd0NBQXFDO0FBTXJDLHNDQUEwRTtBQUkxRSxzQ0FBbUM7QUFFbkMsOENBQTJDO0FBRTNDLG9EQUFpRDtBQUdqRCxzRUFBOEg7QUFDOUgsbURBQWlFO0FBRWpFLE1BQWEsb0JBQW9CO0lBQWpDO1FBR1ksNEJBQXVCLEdBQUcsSUFBSSxtREFBOEIsRUFBUSxDQUFDO1FBQ3JFLHVCQUFrQixHQUFHLElBQUksOENBQXlCLEVBQVUsQ0FBQztJQWdNekUsQ0FBQztJQTlMUSxNQUFNLENBQUMsSUFBK0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFpQjtRQUNoQyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFBLCtCQUFlLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQywrQkFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUks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LENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNwQixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1RCxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMs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QUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMvQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBbUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFrQjtRQUNqQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBc0I7UUFDMUMsT0FBTyxXQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBcE1ELG9EQW9NQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFsaWFzYWJsZUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Fic3RyYWN0aW9uc1wiO1xuaW1wb3J0IHsgQWxpYXMgfSBmcm9tIFwiLi4vYXN0L0FsaWFzXCI7XG5pbXBvcnQgeyBCaW5hcnlFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9CaW5hcnlFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBDYXNlRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQ2FzZUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENvbHVtbiB9IGZyb20gXCIuLi9hc3QvQ29sdW1uXCI7XG5pbXBvcnQgeyBDb25jYXQgfSBmcm9tIFwiLi4vYXN0L0NvbmNhdFwiO1xuaW1wb3J0IHsgRXhpc3RzRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvRXhpc3RzRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgRnJvbSwgSnNvbkVhY2hGcm9tLCBTdWJxdWVyeUZyb20sIFRhYmxlRnJvbSB9IGZyb20gXCIuLi9hc3QvRnJvbVwiO1xuaW1wb3J0IHsgRnVuY3Rpb25FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9GdW5jdGlvbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvSW5FeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJbnNlcnRRdWVyeSB9IGZyb20gXCIuLi9hc3QvSW5zZXJ0UXVlcnlcIjtcbmltcG9ydCB7IEpvaW4gfSBmcm9tIFwiLi4vYXN0L0pvaW5cIjtcbmltcG9ydCB7IE51bGxMaXRlcmFsLCBOdW1iZXJMaXRlcmFsLCBQYXJhbSwgU3RyaW5nTGl0ZXJhbCB9IGZyb20gXCIuLi9hc3QvTGl0ZXJhbHNcIjtcbmltcG9ydCB7IE9wZXJhdG9yIH0gZnJvbSBcIi4uL2FzdC9PcGVyYXRvclwiO1xuaW1wb3J0IHsgT3JkZXJCeSB9IGZyb20gXCIuLi9hc3QvT3JkZXJCeVwiO1xuaW1wb3J0IHsgU2VsZWN0UXVlcnkgfSBmcm9tIFwiLi4vYXN0L1NlbGVjdFF1ZXJ5XCI7XG5pbXBvcnQgeyBVbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L1VuYXJ5RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2l0aCB9IGZyb20gXCIuLi9hc3QvV2l0aFwiO1xuaW1wb3J0IHsgQ29sdW1uTGlrZVZpc2l0b3JBY2NlcHRvciwgRnJvbUxpa2VBbmRKb2luVmlzaXRvckFjY2VwdG9yLCBTcWxUcmVlTm9kZVZpc2l0b3IgfSBmcm9tIFwiLi4vdmlzaXRvci9TcWxUcmVlTm9kZVZpc2l0b3JcIjtcbmltcG9ydCB7IFF1ZXJ5UmVuZGVyZXIsIHF1b3RlSWRlbnRpZmllciB9IGZyb20gXCIuL1F1ZXJ5UmVuZGVyZXJcIjtcblxuZXhwb3J0IGNsYXNzIENvbXBhY3RRdWVyeVJlbmRlcmVyXG4gIGltcGxlbWVudHMgUXVlcnlSZW5kZXJlciwgU3FsVHJlZU5vZGVWaXNpdG9yPHN0cmluZz5cbntcbiAgcHJvdGVjdGVkIGZyb21MaWtlQW5kSm9pbkFjY2VwdG9yID0gbmV3IEZyb21MaWtlQW5kSm9pblZpc2l0b3JBY2NlcHRvcjx2b2lkPigpO1xuICBwcm90ZWN0ZWQgY29sdW1uTGlrZUFjY2VwdG9yID0gbmV3IENvbHVtbkxpa2VWaXNpdG9yQWNjZXB0b3I8c3RyaW5nPigpO1xuXG4gIHB1YmxpYyByZW5kZXIobm9kZTogU2VsZWN0UXVlcnkgfCBJbnNlcnRRdWVyeSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUuYWNjZXB0KHRoaXMpO1xuICB9XG5cbiAgdmlzaXRJbnNlcnRRdWVyeShub2RlOiBJbnNlcnRRdWVyeSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgcGFydHMucHVzaChgSU5TRVJUJHtub2RlLmlzT3JSZXBsYWNlKCkgPyAnIE9SIFJFUExBQ0UnIDogJyd9YCk7XG4gICAgcGFydHMucHVzaChgSU5UTyAke3F1b3RlSWRlbnRpZmllcihub2RlWydfdGFibGVOYW1lJ10pfWApO1xuICAgIGlmIChub2RlWydfY29sdW1ucyddLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCgke25vZGVbJ19jb2x1bW5zJ10ubWFwKHF1b3RlSWRlbnRpZmllcikuam9pbignLCAnKX0pYCk7XG4gICAgfVxuICAgIHBhcnRzLnB1c2goYFZBTFVFUyAoJHtub2RlWydfdmFsdWVzJ10ubWFwKHYgPT4gdi5hY2NlcHQodGhpcykpLmpvaW4oJywgJyl9KWApO1xuICAgIHJldHVybiBwYXJ0cy5qb2luKCcgJyk7XG4gIH1cblxuICB2aXNpdFNlbGVjdFF1ZXJ5KG5vZGU6IFNlbGVjdFF1ZXJ5KTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAobm9kZVsnX3dpdGgnXS5sZW5ndGggPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGBXSVRIICR7bm9kZVsnX3dpdGgnXS5tYXAodyA9PiB3LmFjY2VwdCh0aGlzKSkuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgcGFydHMucHVzaChgU0VMRUNUJHtub2RlLmlzRGlzdGluY3QoKSA/ICcgRElTVElOQ1QnIDogJyd9YCk7XG4gICAgaWYgKG5vZGVbJ19jb2x1bW5zJ10ubGVuZ3RoID4gMCkge1xuICAgICAgcGFydHMucHVzaChub2RlWydfY29sdW1ucyddLm1hcChjID0+IHRoaXMuY29sdW1uTGlrZUFjY2VwdG9yLmFjY2VwdCh0aGlzLCBjKSkuam9pbignLCAnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRzLnB1c2goJyonKTtcbiAgICB9XG4gICAgaWYgKG5vZGVbJ19mcm9tc0FuZEpvaW5zJ10ubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGZyb21zQW5kSm9pbnNUZXh0ID0gJyc7XG4gICAgICBmb3IgKGNvbnN0IGZyb21PckpvaW4gb2Ygbm9kZVsnX2Zyb21zQW5kSm9pbnMnXSkge1xuICAgICAgICBpZiAoZnJvbU9ySm9pbiBpbnN0YW5jZW9mIEpvaW4pIHtcbiAgICAgICAgICBmcm9tc0FuZEpvaW5zVGV4dCArPSBgICR7ZnJvbU9ySm9pbi5hY2NlcHQodGhpcyl9YDtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBmcm9tT3JKb2luIGluc3RhbmNlb2YgQWxpYXMgfHxcbiAgICAgICAgICBmcm9tT3JKb2luIGluc3RhbmNlb2YgRnJvbSB8fFxuICAgICAgICAgIGZyb21PckpvaW4gaW5zdGFuY2VvZiBUYWJsZUZyb20gfHxcbiAgICAgICAgICBmcm9tT3JKb2luIGluc3RhbmNlb2YgU3VicXVlcnlGcm9tIHx8XG4gICAgICAgICAgZnJvbU9ySm9pbiBpbnN0YW5jZW9mIEpzb25FYWNoRnJvbVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoZnJvbXNBbmRKb2luc1RleHQpIHtcbiAgICAgICAgICAgIGZyb21zQW5kSm9pbnNUZXh0ICs9IGAsICR7ZnJvbU9ySm9pbi5hY2NlcHQodGhpcyl9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJvbXNBbmRKb2luc1RleHQgKz0gYEZST00gJHtmcm9tT3JKb2luLmFjY2VwdCh0aGlzKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGFydHMucHVzaChmcm9tc0FuZEpvaW5zVGV4dCk7XG4gICAgfVxuICAgIGlmIChub2RlWydfd2hlcmUnXSkge1xuICAgICAgcGFydHMucHVzaChgV0hFUkUgJHtub2RlWydfd2hlcmUnXS5hY2NlcHQodGhpcyl9YCk7XG4gICAgfVxuICAgIGlmIChub2RlWydfZ3JvdXBCeSddLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYEdST1VQIEJZICR7bm9kZVsnX2dyb3VwQnknXS5tYXAoYyA9PiBjLmFjY2VwdCh0aGlzKSkuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgaWYgKG5vZGVbJ19oYXZpbmcnXSkge1xuICAgICAgcGFydHMucHVzaChgSEFWSU5HICR7bm9kZVsnX2hhdmluZyddLmFjY2VwdCh0aGlzKX1gKTtcbiAgICB9XG4gICAgaWYgKG5vZGVbJ191bmlvbiddLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2gobm9kZVsnX3VuaW9uJ10ubWFwKHUgPT4gYFVOSU9OICR7dS5hY2NlcHQodGhpcyl9YCkuam9pbignICcpKTtcbiAgICB9XG4gICAgaWYgKG5vZGVbJ19vcmRlckJ5J10ubGVuZ3RoID4gMCkge1xuICAgICAgcGFydHMucHVzaChgT1JERVIgQlkgJHtub2RlWydfb3JkZXJCeSddLm1hcChvID0+IG8uYWNjZXB0KHRoaXMpKS5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBpZiAobm9kZVsnX2xpbWl0J10gIT09IG51bGwgJiYgbm9kZVsnX2xpbWl0J10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFydHMucHVzaChgTElNSVQgJHtub2RlWydfbGltaXQnXX1gKTtcbiAgICAgIGlmIChub2RlWydfb2Zmc2V0J10gIT09IG51bGwgJiYgbm9kZVsnX29mZnNldCddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGFydHMucHVzaChgT0ZGU0VUICR7bm9kZVsnX29mZnNldCddfWApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFydHMuZmlsdGVyKHAgPT4gcCkuam9pbignICcpO1xuICB9XG5cbiAgdmlzaXRUYWJsZUZyb20obm9kZTogVGFibGVGcm9tKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7cXVvdGVJZGVudGlmaWVyKG5vZGUudGFibGVOYW1lKX1gO1xuICB9XG5cbiAgdmlzaXRTdWJxdWVyeUZyb20obm9kZTogU3VicXVlcnlGcm9tKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCgke25vZGUuc3VicXVlcnkuYWNjZXB0KHRoaXMpfSlgO1xuICB9XG5cbiAgdmlzaXRKc29uRWFjaEZyb20obm9kZTogSnNvbkVhY2hGcm9tKTogc3RyaW5nIHtcbiAgICBjb25zdCBleHByID0gbm9kZS5qc29uRXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7XG4gICAgY29uc3QgcGF0aCA9IG5vZGUuanNvblBhdGggPyBgLCAke25vZGUuanNvblBhdGguYWNjZXB0KHRoaXMpfWAgOiAnJztcbiAgICByZXR1cm4gYGpzb25fZWFjaCgke2V4cHJ9JHtwYXRofSlgO1xuICB9XG5cbiAgdmlzaXRDb2x1bW4obm9kZTogQ29sdW1uKTogc3RyaW5nIHtcbiAgICBpZiAobm9kZS5oYXNUYWJsZU5hbWUoKSkge1xuICAgICAgcmV0dXJuIGAke3F1b3RlSWRlbnRpZmllcihub2RlLnRhYmxlTmFtZSBhcyBzdHJpbmcpfS4ke3F1b3RlSWRlbnRpZmllcihub2RlLmNvbHVtbk5hbWUpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtxdW90ZUlkZW50aWZpZXIobm9kZS5jb2x1bW5OYW1lKX1gO1xuICAgIH1cbiAgfVxuXG4gIHZpc2l0QWxpYXMobm9kZTogQWxpYXM8RnJvbXxBbGlhc2FibGVFeHByZXNzaW9uPik6IHN0cmluZyB7XG4gICAgY29uc3QgaXNTdWJxdWVyeSA9IG5vZGUucmVmZXJlbnQgaW5zdGFuY2VvZiBTdWJxdWVyeUZyb20gfHwgbm9kZS5yZWZlcmVudCBpbnN0YW5jZW9mIFNlbGVjdFF1ZXJ5O1xuICAgIGNvbnN0IHJlbmRlcmVkUmVmZXJlbnQgPSBub2RlLnJlZmVyZW50LmFjY2VwdCh0aGlzKTtcbiAgICBjb25zdCByZW5kZXJlZEFsaWFzTmFtZSA9IHF1b3RlSWRlbnRpZmllcihub2RlLmFsaWFzIGFzIHN0cmluZyk7XG4gICAgaWYgKG5vZGUucmVmZXJlbnQgaW5zdGFuY2VvZiBGcm9tKSB7XG4gICAgICByZXR1cm4gYCR7cmVuZGVyZWRSZWZlcmVudH0gJHtyZW5kZXJlZEFsaWFzTmFtZX1gO1xuICAgIH0gZWxzZSBpZiAoaXNTdWJxdWVyeSkge1xuICAgICAgcmV0dXJuIGAoJHtyZW5kZXJlZFJlZmVyZW50fSkgQVMgJHtyZW5kZXJlZEFsaWFzTmFtZX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7cmVuZGVyZWRSZWZlcmVudH0gQVMgJHtyZW5kZXJlZEFsaWFzTmFtZX1gO1xuICAgIH1cbiAgfVxuXG4gIHZpc2l0Sm9pbkNsYXVzZShub2RlOiBKb2luKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bm9kZS50eXBlfSBKT0lOICR7cXVvdGVJZGVudGlmaWVyKG5vZGUudGFibGVOYW1lKX0gJHtxdW90ZUlkZW50aWZpZXIobm9kZS5hbGlhcyl9IE9OICR7bm9kZS5vbi5hY2NlcHQodGhpcyl9YDtcbiAgfVxuXG4gIHZpc2l0T3JkZXJCeShub2RlOiBPcmRlckJ5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bm9kZS5jb2x1bW4uYWNjZXB0KHRoaXMpfSAke25vZGUuZGlyZWN0aW9ufWA7XG4gIH1cblxuICB2aXNpdFdpdGhDbGF1c2Uobm9kZTogV2l0aCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3F1b3RlSWRlbnRpZmllcihub2RlLm5hbWUpfSBBUyAoJHtub2RlLnF1ZXJ5LmFjY2VwdCh0aGlzKX0pYDtcbiAgfVxuXG4gIHZpc2l0QmluYXJ5RXhwcmVzc2lvbihub2RlOiBCaW5hcnlFeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCgke25vZGUubGVmdC5hY2NlcHQodGhpcyl9ICR7bm9kZS5vcGVyYXRvcn0gJHtub2RlLnJpZ2h0LmFjY2VwdCh0aGlzKX0pYDtcbiAgfVxuXG4gIHZpc2l0VW5hcnlFeHByZXNzaW9uKG5vZGU6IFVuYXJ5RXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IG5vZGUub3BlcmFuZC5hY2NlcHQodGhpcyk7XG4gICAgaWYgKG5vZGUub3BlcmF0b3IgPT09IE9wZXJhdG9yLklTX05VTEwgfHwgbm9kZS5vcGVyYXRvciA9PT0gT3BlcmF0b3IuSVNfTk9UX05VTEwpIHtcbiAgICAgIHJldHVybiBgKCR7b3BlcmFuZH0gJHtub2RlLm9wZXJhdG9yfSlgO1xuICAgIH0gZWxzZSBpZiAobm9kZS5vcGVyYXRvciA9PT0gJ05PVCcpIHtcbiAgICAgIHJldHVybiBgKE5PVCAke29wZXJhbmR9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgKCR7bm9kZS5vcGVyYXRvcn0ke29wZXJhbmR9KWA7XG4gICAgfVxuICB9XG5cbiAgdmlzaXRJbkV4cHJlc3Npb24obm9kZTogSW5FeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBsZWZ0U3RyID0gbm9kZS5sZWZ0Lmxlbmd0aCA+IDFcbiAgICAgID8gYCgke25vZGUubGVmdC5tYXAobCA9PiBsLmFjY2VwdCh0aGlzKSkuam9pbignLCAnKX0pYFxuICAgICAgOiBub2RlLmxlZnRbMF0uYWNjZXB0KHRoaXMpO1xuICAgIGNvbnN0IG5vdCA9IG5vZGUubm90ID8gJyBOT1QnIDogJyc7XG4gICAgbGV0IHJpZ2h0OiBzdHJpbmc7XG4gICAgaWYgKG5vZGUudmFsdWVzIGluc3RhbmNlb2YgU2VsZWN0UXVlcnkpIHtcbiAgICAgIHJpZ2h0ID0gYCgke25vZGUudmFsdWVzLmFjY2VwdCh0aGlzKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmlnaHQgPSBgKCR7bm9kZS52YWx1ZXMubWFwKHNldCA9PlxuICAgICAgICBzZXQubGVuZ3RoID4gMSA/IGAoJHtzZXQubWFwKHYgPT4gdi5hY2NlcHQodGhpcykpLmpvaW4oJywgJyl9KWAgOiBzZXRbMF0uYWNjZXB0KHRoaXMpXG4gICAgICApLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIHJldHVybiBgKCR7bGVmdFN0cn0ke25vdH0gSU4gJHtyaWdodH0pYDtcbiAgfVxuXG4gIHZpc2l0Q29uY2F0KG5vZGU6IENvbmNhdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAoJHtub2RlLmV4cHJlc3Npb25zLm1hcChlID0+IGUuYWNjZXB0KHRoaXMpKS5qb2luKCcgfHwgJyl9KWA7XG4gIH1cblxuICB2aXNpdENhc2VFeHByZXNzaW9uKG5vZGU6IENhc2VFeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbJ0NBU0UnXTtcbiAgICBmb3IgKGNvbnN0IGMgb2Ygbm9kZS5jYXNlcykge1xuICAgICAgcGFydHMucHVzaChgV0hFTiAke2Mud2hlbi5hY2NlcHQodGhpcyl9IFRIRU4gJHtjLnRoZW4uYWNjZXB0KHRoaXMpfWApO1xuICAgIH1cbiAgICBpZiAobm9kZS5lbHNlKSB7XG4gICAgICBwYXJ0cy5wdXNoKGBFTFNFICR7bm9kZS5lbHNlLmFjY2VwdCh0aGlzKX1gKTtcbiAgICB9XG4gICAgcGFydHMucHVzaCgnRU5EJyk7XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKG5vZGU6IEZ1bmN0aW9uRXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgY29uc3QgYXJncyA9IG5vZGUuYXJncy5tYXAoYSA9PiBhLmFjY2VwdCh0aGlzKSkuam9pbignLCAnKTtcbiAgICBjb25zdCBkaXN0aW5jdFByZWZpeCA9IG5vZGUuZGlzdGluY3QgPyAnRElTVElOQ1QgJyA6ICcnO1xuICAgIHJldHVybiBgJHtub2RlLm5hbWV9KCR7ZGlzdGluY3RQcmVmaXh9JHthcmdzfSlgO1xuICB9XG5cbiAgdmlzaXRQYXJhbUV4cHJlc3Npb24oX25vZGU6IFBhcmFtKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJz8nO1xuICB9XG5cbiAgdmlzaXRTdHJpbmdMaXRlcmFsKG5vZGU6IFN0cmluZ0xpdGVyYWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJyR7bm9kZS52YWx1ZS5yZXBsYWNlKC8nL2csIFwiJydcIil9J2A7XG4gIH1cblxuICB2aXNpdE51bWJlckxpdGVyYWwobm9kZTogTnVtYmVyTGl0ZXJhbCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUudmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZpc2l0TnVsbExpdGVyYWwoX25vZGU6IE51bGxMaXRlcmFsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ05VTEwnO1xuICB9XG5cbiAgdmlzaXRFeGlzdHNFeHByZXNzaW9uKG5vZGU6IEV4aXN0c0V4cHJlc3Npb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBgRVhJU1RTICgke25vZGUuc3VicXVlcnkuYWNjZXB0KHRoaXMpfSlgO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,51 @@
1
+ import { AliasableExpression } from "../ast/Abstractions";
2
+ import { Alias } from "../ast/Alias";
3
+ import { BinaryExpression } from "../ast/BinaryExpression";
4
+ import { CaseExpression } from "../ast/CaseExpression";
5
+ import { Column } from "../ast/Column";
6
+ import { Concat } from "../ast/Concat";
7
+ import { ExistsExpression } from "../ast/ExistsExpression";
8
+ import { From, JsonEachFrom, SubqueryFrom, TableFrom } from "../ast/From";
9
+ import { FunctionExpression } from "../ast/FunctionExpression";
10
+ import { InExpression } from "../ast/InExpression";
11
+ import { InsertQuery } from "../ast/InsertQuery";
12
+ import { Join } from "../ast/Join";
13
+ import { NullLiteral, NumberLiteral, Param, StringLiteral } from "../ast/Literals";
14
+ import { OrderBy } from "../ast/OrderBy";
15
+ import { SelectQuery } from "../ast/SelectQuery";
16
+ import { UnaryExpression } from "../ast/UnaryExpression";
17
+ import { With } from "../ast/With";
18
+ import { ColumnLikeVisitorAcceptor, FromLikeAndJoinVisitorAcceptor, SqlTreeNodeVisitor } from "../visitor/SqlTreeNodeVisitor";
19
+ import { QueryRenderer } from "./QueryRenderer";
20
+ export declare class IndentedQueryRenderer implements QueryRenderer, SqlTreeNodeVisitor<string> {
21
+ protected fromLikeAndJoinAcceptor: FromLikeAndJoinVisitorAcceptor<string>;
22
+ protected columnLikeAcceptor: ColumnLikeVisitorAcceptor<string>;
23
+ private readonly spacesPerLevel;
24
+ private indentationLevel;
25
+ constructor(spacesPerLevel: number);
26
+ render(node: SelectQuery | InsertQuery): string;
27
+ private getIndent;
28
+ private indent;
29
+ private dedent;
30
+ visitInsertQuery(node: InsertQuery): string;
31
+ visitSelectQuery(node: SelectQuery): string;
32
+ visitTableFrom(node: TableFrom): string;
33
+ visitSubqueryFrom(node: SubqueryFrom): string;
34
+ visitJsonEachFrom(node: JsonEachFrom): string;
35
+ visitColumn(node: Column): string;
36
+ visitAlias(node: Alias<From | AliasableExpression>): string;
37
+ visitJoinClause(node: Join): string;
38
+ visitOrderBy(node: OrderBy): string;
39
+ visitWithClause(node: With): string;
40
+ visitBinaryExpression(node: BinaryExpression): string;
41
+ visitUnaryExpression(node: UnaryExpression): string;
42
+ visitInExpression(node: InExpression): string;
43
+ visitConcat(node: Concat): string;
44
+ visitCaseExpression(node: CaseExpression): string;
45
+ visitFunctionExpression(node: FunctionExpression): string;
46
+ visitParamExpression(_node: Param): string;
47
+ visitStringLiteral(node: StringLiteral): string;
48
+ visitNumberLiteral(node: NumberLiteral): string;
49
+ visitNullLiteral(_node: NullLiteral): string;
50
+ visitExistsExpression(node: ExistsExpression): string;
51
+ }
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IndentedQueryRenderer = void 0;
4
+ const Alias_1 = require("../ast/Alias");
5
+ const From_1 = require("../ast/From");
6
+ const Join_1 = require("../ast/Join");
7
+ const Operator_1 = require("../ast/Operator");
8
+ const SelectQuery_1 = require("../ast/SelectQuery");
9
+ const SqlTreeNodeVisitor_1 = require("../visitor/SqlTreeNodeVisitor");
10
+ const QueryRenderer_1 = require("./QueryRenderer");
11
+ class IndentedQueryRenderer {
12
+ constructor(spacesPerLevel) {
13
+ this.fromLikeAndJoinAcceptor = new SqlTreeNodeVisitor_1.FromLikeAndJoinVisitorAcceptor();
14
+ this.columnLikeAcceptor = new SqlTreeNodeVisitor_1.ColumnLikeVisitorAcceptor();
15
+ this.indentationLevel = -1;
16
+ if (!Number.isInteger(spacesPerLevel) || spacesPerLevel <= 0) {
17
+ throw new Error('spacesPerLevel must be a positive integer');
18
+ }
19
+ this.spacesPerLevel = spacesPerLevel;
20
+ }
21
+ render(node) {
22
+ return node.accept(this);
23
+ }
24
+ getIndent() {
25
+ return ' '.repeat(this.indentationLevel * this.spacesPerLevel);
26
+ }
27
+ indent() {
28
+ this.indentationLevel++;
29
+ }
30
+ dedent() {
31
+ this.indentationLevel--;
32
+ }
33
+ visitInsertQuery(node) {
34
+ this.indent();
35
+ const parts = [];
36
+ parts.push(`${this.getIndent()}INSERT${node.isOrReplace() ? ' OR REPLACE' : ''}`);
37
+ parts.push(`${this.getIndent()}INTO ${(0, QueryRenderer_1.quoteIdentifier)(node['_tableName'])}`);
38
+ if (node['_columns'].length > 0) {
39
+ parts.push(`${this.getIndent()}(${node['_columns'].map(QueryRenderer_1.quoteIdentifier).join(', ')})`);
40
+ }
41
+ parts.push(`${this.getIndent()}VALUES`);
42
+ parts.push(`${this.getIndent()}(${node['_values'].map(v => v.accept(this)).join(', ')})`);
43
+ this.dedent();
44
+ return parts.join('\n');
45
+ }
46
+ visitSelectQuery(node) {
47
+ const parts = [];
48
+ if (node['_with'].length > 0) {
49
+ this.indent();
50
+ parts.push('WITH');
51
+ parts.push(node['_with'].map(w => w.accept(this)).join(',\n'));
52
+ this.dedent();
53
+ }
54
+ this.indent();
55
+ parts.push(`${this.getIndent()}SELECT${node.isDistinct() ? ' DISTINCT' : ''}`);
56
+ if (node['_columns'].length > 0) {
57
+ parts.push(node['_columns'].map(c => `${this.getIndent()} ${this.columnLikeAcceptor.accept(this, c)}`).join(',\n'));
58
+ }
59
+ else {
60
+ parts.push(`${this.getIndent()} *`);
61
+ }
62
+ if (node['_fromsAndJoins'].length > 0) {
63
+ let fromsAndJoinsText = '';
64
+ for (const fromOrJoin of node['_fromsAndJoins']) {
65
+ if (fromOrJoin instanceof Join_1.Join) {
66
+ fromsAndJoinsText += `\n${this.getIndent()}${fromOrJoin.accept(this)}`;
67
+ }
68
+ else if (fromOrJoin instanceof Alias_1.Alias ||
69
+ fromOrJoin instanceof From_1.From ||
70
+ fromOrJoin instanceof From_1.TableFrom ||
71
+ fromOrJoin instanceof From_1.SubqueryFrom ||
72
+ fromOrJoin instanceof From_1.JsonEachFrom) {
73
+ if (fromsAndJoinsText) {
74
+ fromsAndJoinsText += `,\n${this.getIndent()}${fromOrJoin.accept(this)}`;
75
+ }
76
+ else {
77
+ fromsAndJoinsText += `${this.getIndent()}FROM ${fromOrJoin.accept(this)}`;
78
+ }
79
+ }
80
+ }
81
+ parts.push(fromsAndJoinsText);
82
+ }
83
+ if (node['_where']) {
84
+ parts.push(`${this.getIndent()}WHERE ${node['_where'].accept(this)}`);
85
+ }
86
+ if (node['_groupBy'].length > 0) {
87
+ parts.push(`${this.getIndent()}GROUP BY ${node['_groupBy'].map(c => c.accept(this)).join(', ')}`);
88
+ }
89
+ if (node['_having']) {
90
+ parts.push(`${this.getIndent()}HAVING ${node['_having'].accept(this)}`);
91
+ }
92
+ if (node['_union'].length > 0) {
93
+ parts.push(node['_union'].map(u => `${this.getIndent()}UNION\n${u.accept(this)}`).join('\n'));
94
+ }
95
+ if (node['_orderBy'].length > 0) {
96
+ parts.push(`${this.getIndent()}ORDER BY ${node['_orderBy'].map(o => o.accept(this)).join(', ')}`);
97
+ }
98
+ if (node['_limit'] !== null && node['_limit'] !== undefined) {
99
+ parts.push(`${this.getIndent()}LIMIT ${node['_limit']}`);
100
+ if (node['_offset'] !== null && node['_offset'] !== undefined) {
101
+ parts.push(`${this.getIndent()}OFFSET ${node['_offset']}`);
102
+ }
103
+ }
104
+ this.dedent();
105
+ return parts.filter(p => p).join('\n');
106
+ }
107
+ visitTableFrom(node) {
108
+ return `${(0, QueryRenderer_1.quoteIdentifier)(node.tableName)}`;
109
+ }
110
+ visitSubqueryFrom(node) {
111
+ this.indent();
112
+ const result = `(\n${node.subquery.accept(this)}\n${this.getIndent()})`;
113
+ this.dedent();
114
+ return result;
115
+ }
116
+ visitJsonEachFrom(node) {
117
+ const expr = node.jsonExpression.accept(this);
118
+ const path = node.jsonPath ? `, ${node.jsonPath.accept(this)}` : '';
119
+ return `json_each(${expr}${path})`;
120
+ }
121
+ visitColumn(node) {
122
+ if (node.hasTableName()) {
123
+ return `${(0, QueryRenderer_1.quoteIdentifier)(node.tableName)}.${(0, QueryRenderer_1.quoteIdentifier)(node.columnName)}`;
124
+ }
125
+ else {
126
+ return `${(0, QueryRenderer_1.quoteIdentifier)(node.columnName)}`;
127
+ }
128
+ }
129
+ visitAlias(node) {
130
+ const renderedAliasName = (0, QueryRenderer_1.quoteIdentifier)(node.alias);
131
+ if (node.referent instanceof From_1.From) {
132
+ return `${node.referent.accept(this)} ${renderedAliasName}`;
133
+ }
134
+ else if (node.referent instanceof From_1.SubqueryFrom ||
135
+ node.referent instanceof SelectQuery_1.SelectQuery) {
136
+ this.indent();
137
+ const renderedSubquery = `${node.referent.accept(this)}\n`;
138
+ const result = `(\n${renderedSubquery}${this.getIndent()}) AS ${renderedAliasName}`;
139
+ this.dedent();
140
+ return result;
141
+ }
142
+ else {
143
+ return `${node.referent.accept(this)} AS ${renderedAliasName}`;
144
+ }
145
+ }
146
+ visitJoinClause(node) {
147
+ return `${node.type} JOIN ${(0, QueryRenderer_1.quoteIdentifier)(node.tableName)} ${(0, QueryRenderer_1.quoteIdentifier)(node.alias)} ON ${node.on.accept(this)}`;
148
+ }
149
+ visitOrderBy(node) {
150
+ return `${node.column.accept(this)} ${node.direction}`;
151
+ }
152
+ visitWithClause(node) {
153
+ this.indent();
154
+ const result = `${this.getIndent()}${(0, QueryRenderer_1.quoteIdentifier)(node.name)} AS (\n${node.query.accept(this)}\n${this.getIndent()})`;
155
+ this.dedent();
156
+ return result;
157
+ }
158
+ visitBinaryExpression(node) {
159
+ return `(${node.left.accept(this)} ${node.operator} ${node.right.accept(this)})`;
160
+ }
161
+ visitUnaryExpression(node) {
162
+ const operand = node.operand.accept(this);
163
+ if (node.operator === Operator_1.Operator.IS_NULL || node.operator === Operator_1.Operator.IS_NOT_NULL) {
164
+ return `(${operand} ${node.operator})`;
165
+ }
166
+ else if (node.operator === 'NOT') {
167
+ return `(NOT ${operand})`;
168
+ }
169
+ else {
170
+ return `(${node.operator}${operand})`;
171
+ }
172
+ }
173
+ visitInExpression(node) {
174
+ const leftStr = node.left.length > 1
175
+ ? `(${node.left.map(l => l.accept(this)).join(', ')})`
176
+ : node.left[0].accept(this);
177
+ const not = node.not ? ' NOT' : '';
178
+ let right;
179
+ if (node.values instanceof SelectQuery_1.SelectQuery) {
180
+ right = `(\n${node.values.accept(this)}\n${this.getIndent()})`;
181
+ }
182
+ else {
183
+ right = `(${node.values.map(set => set.length > 1 ? `(${set.map(v => v.accept(this)).join(', ')})` : set[0].accept(this)).join(', ')})`;
184
+ }
185
+ return `(${leftStr}${not} IN ${right})`;
186
+ }
187
+ visitConcat(node) {
188
+ return `(${node.expressions.map(e => e.accept(this)).join(' || ')})`;
189
+ }
190
+ visitCaseExpression(node) {
191
+ const parts = [`${this.getIndent()}CASE`];
192
+ this.indent();
193
+ for (const c of node.cases) {
194
+ this.indent();
195
+ parts.push(`${this.getIndent()}WHEN ${c.when.accept(this)} THEN ${c.then.accept(this)}`);
196
+ this.dedent();
197
+ }
198
+ if (node.else) {
199
+ this.indent();
200
+ parts.push(`${this.getIndent()}ELSE ${node.else.accept(this)}`);
201
+ this.dedent();
202
+ }
203
+ parts.push(`${this.getIndent()}END`);
204
+ this.dedent();
205
+ return parts.join('\n');
206
+ }
207
+ visitFunctionExpression(node) {
208
+ const args = node.args.map(a => a.accept(this)).join(', ');
209
+ const distinctPrefix = node.distinct ? 'DISTINCT ' : '';
210
+ return `${node.name}(${distinctPrefix}${args})`;
211
+ }
212
+ visitParamExpression(_node) {
213
+ return '?';
214
+ }
215
+ visitStringLiteral(node) {
216
+ return `'${node.value.replace(/'/g, "''")}'`;
217
+ }
218
+ visitNumberLiteral(node) {
219
+ return node.value.toString();
220
+ }
221
+ visitNullLiteral(_node) {
222
+ return 'NULL';
223
+ }
224
+ visitExistsExpression(node) {
225
+ const subquerySql = node.subquery.accept(this);
226
+ return `EXISTS (\n${subquerySql}\n${this.getIndent()})`;
227
+ }
228
+ }
229
+ exports.IndentedQueryRenderer = IndentedQueryRenderer;
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5kZW50ZWRRdWVyeVJlbmRlcmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlbmRlcmVyL0luZGVudGVkUXVlcnlSZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx3Q0FBcUM7QUFNckMsc0NBQTBFO0FBSTFFLHNDQUFtQztBQUVuQyw4Q0FBMkM7QUFFM0Msb0RBQWlEO0FBR2pELHNFQUE4SDtBQUM5SCxtREFBaUU7QUFFakUsTUFBYSxxQkFBcUI7SUFTaEMsWUFBbUIsY0FBc0I7UUFOL0IsNEJBQXVCLEdBQUcsSUFBSSxtREFBOEIsRUFBVSxDQUFDO1FBQ3ZFLHVCQUFrQixHQUFHLElBQUksOENBQXlCLEVBQVUsQ0FBQztRQUcvRCxxQkFBZ0IsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUdwQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxjQUFjLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQStCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU8sU0FBUztRQUNmLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLE1BQU07UUFDWixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBaUI7UUFDaEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FB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QUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFL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QUVELGtCQUFrQixDQUFDLElBQW1CO1FBQ3BDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMvQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBbUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFrQjtRQUNqQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBc0I7UUFDMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsT0FBTyxhQUFhLFdBQVcsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQztJQUMxRCxDQUFDO0NBQ0Y7QUFwUEQsc0RBb1BDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpYXNhYmxlRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQWJzdHJhY3Rpb25zXCI7XG5pbXBvcnQgeyBBbGlhcyB9IGZyb20gXCIuLi9hc3QvQWxpYXNcIjtcbmltcG9ydCB7IEJpbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0JpbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc2VFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9DYXNlRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQ29sdW1uIH0gZnJvbSBcIi4uL2FzdC9Db2x1bW5cIjtcbmltcG9ydCB7IENvbmNhdCB9IGZyb20gXCIuLi9hc3QvQ29uY2F0XCI7XG5pbXBvcnQgeyBFeGlzdHNFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9FeGlzdHNFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBGcm9tLCBKc29uRWFjaEZyb20sIFN1YnF1ZXJ5RnJvbSwgVGFibGVGcm9tIH0gZnJvbSBcIi4uL2FzdC9Gcm9tXCI7XG5pbXBvcnQgeyBGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Z1bmN0aW9uRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgSW5FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9JbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluc2VydFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9JbnNlcnRRdWVyeVwiO1xuaW1wb3J0IHsgSm9pbiB9IGZyb20gXCIuLi9hc3QvSm9pblwiO1xuaW1wb3J0IHsgTnVsbExpdGVyYWwsIE51bWJlckxpdGVyYWwsIFBhcmFtLCBTdHJpbmdMaXRlcmFsIH0gZnJvbSBcIi4uL2FzdC9MaXRlcmFsc1wiO1xuaW1wb3J0IHsgT3BlcmF0b3IgfSBmcm9tIFwiLi4vYXN0L09wZXJhdG9yXCI7XG5pbXBvcnQgeyBPcmRlckJ5IH0gZnJvbSBcIi4uL2FzdC9PcmRlckJ5XCI7XG5pbXBvcnQgeyBTZWxlY3RRdWVyeSB9IGZyb20gXCIuLi9hc3QvU2VsZWN0UXVlcnlcIjtcbmltcG9ydCB7IFVuYXJ5RXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvVW5hcnlFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBXaXRoIH0gZnJvbSBcIi4uL2FzdC9XaXRoXCI7XG5pbXBvcnQgeyBDb2x1bW5MaWtlVmlzaXRvckFjY2VwdG9yLCBGcm9tTGlrZUFuZEpvaW5WaXNpdG9yQWNjZXB0b3IsIFNxbFRyZWVOb2RlVmlzaXRvciB9IGZyb20gXCIuLi92aXNpdG9yL1NxbFRyZWVOb2RlVmlzaXRvclwiO1xuaW1wb3J0IHsgUXVlcnlSZW5kZXJlciwgcXVvdGVJZGVudGlmaWVyIH0gZnJvbSBcIi4vUXVlcnlSZW5kZXJlclwiO1xuXG5leHBvcnQgY2xhc3MgSW5kZW50ZWRRdWVyeVJlbmRlcmVyXG4gIGltcGxlbWVudHMgUXVlcnlSZW5kZXJlciwgU3FsVHJlZU5vZGVWaXNpdG9yPHN0cmluZz5cbntcbiAgcHJvdGVjdGVkIGZyb21MaWtlQW5kSm9pbkFjY2VwdG9yID0gbmV3IEZyb21MaWtlQW5kSm9pblZpc2l0b3JBY2NlcHRvcjxzdHJpbmc+KCk7XG4gIHByb3RlY3RlZCBjb2x1bW5MaWtlQWNjZXB0b3IgPSBuZXcgQ29sdW1uTGlrZVZpc2l0b3JBY2NlcHRvcjxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzcGFjZXNQZXJMZXZlbDogbnVtYmVyO1xuICBwcml2YXRlIGluZGVudGF0aW9uTGV2ZWw6IG51bWJlciA9IC0xO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzcGFjZXNQZXJMZXZlbDogbnVtYmVyKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHNwYWNlc1BlckxldmVsKSB8fCBzcGFjZXNQZXJMZXZlbCA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NwYWNlc1BlckxldmVsIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgfVxuICAgIHRoaXMuc3BhY2VzUGVyTGV2ZWwgPSBzcGFjZXNQZXJMZXZlbDtcbiAgfVxuXG4gIHB1YmxpYyByZW5kZXIobm9kZTogU2VsZWN0UXVlcnkgfCBJbnNlcnRRdWVyeSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUuYWNjZXB0KHRoaXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbmRlbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJyAnLnJlcGVhdCh0aGlzLmluZGVudGF0aW9uTGV2ZWwgKiB0aGlzLnNwYWNlc1BlckxldmVsKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5kZW50KCk6IHZvaWQge1xuICAgIHRoaXMuaW5kZW50YXRpb25MZXZlbCsrO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWRlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5pbmRlbnRhdGlvbkxldmVsLS07XG4gIH1cblxuICB2aXNpdEluc2VydFF1ZXJ5KG5vZGU6IEluc2VydFF1ZXJ5KTogc3RyaW5nIHtcbiAgICB0aGlzLmluZGVudCgpO1xuICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHBhcnRzLnB1c2goYCR7dGhpcy5nZXRJbmRlbnQoKX1JTlNFUlQke25vZGUuaXNPclJlcGxhY2UoKSA/ICcgT1IgUkVQTEFDRScgOiAnJ31gKTtcbiAgICBwYXJ0cy5wdXNoKGAke3RoaXMuZ2V0SW5kZW50KCl9SU5UTyAke3F1b3RlSWRlbnRpZmllcihub2RlWydfdGFibGVOYW1lJ10pfWApO1xuICAgIGlmIChub2RlWydfY29sdW1ucyddLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7dGhpcy5nZXRJbmRlbnQoKX0oJHtub2RlWydfY29sdW1ucyddLm1hcChxdW90ZUlkZW50aWZpZXIpLmpvaW4oJywgJyl9KWApO1xuICAgIH1cbiAgICBwYXJ0cy5wdXNoKGAke3RoaXMuZ2V0SW5kZW50KCl9VkFMVUVTYCk7XG4gICAgcGFydHMucHVzaChgJHt0aGlzLmdldEluZGVudCgpfSgke25vZGVbJ192YWx1ZXMnXS5tYXAodiA9PiB2LmFjY2VwdCh0aGlzKSkuam9pbignLCAnKX0pYCk7XG4gICAgdGhpcy5kZWRlbnQoKTtcbiAgICByZXR1cm4gcGFydHMuam9pbignXFxuJyk7XG4gIH1cblxuICB2aXNpdFNlbGVjdFF1ZXJ5KG5vZGU6IFNlbGVjdFF1ZXJ5KTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAobm9kZVsnX3dpdGgnXS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmluZGVudCgpO1xuICAgICAgcGFydHMucHVzaCgnV0lUSCcpO1xuICAgICAgcGFydHMucHVzaChub2RlWydfd2l0aCddLm1hcCh3ID0+IHcuYWNjZXB0KHRoaXMpKS5qb2luKCcsXFxuJykpO1xuICAgICAgdGhpcy5kZWRlbnQoKTtcbiAgICB9XG4gICAgdGhpcy5pbmRlbnQoKTtcbiAgICBwYXJ0cy5wdXNoKGAke3RoaXMuZ2V0SW5kZW50KCl9U0VMRUNUJHtub2RlLmlzRGlzdGluY3QoKSA/ICcgRElTVElOQ1QnIDogJyd9YCk7XG4gICAgaWYgKG5vZGVbJ19jb2x1bW5zJ10ubGVuZ3RoID4gMCkge1xuICAgICAgcGFydHMucHVzaChub2RlWydfY29sdW1ucyddLm1hcChjID0+IGAke3RoaXMuZ2V0SW5kZW50KCl9ICAke3RoaXMuY29sdW1uTGlrZUFjY2VwdG9yLmFjY2VwdCh0aGlzLCBjKX1gKS5qb2luKCcsXFxuJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke3RoaXMuZ2V0SW5kZW50KCl9ICAqYCk7XG4gICAgfVxuICAgIGlmIChub2RlWydfZnJvbXNBbmRKb2lucyddLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBmcm9tc0FuZEpvaW5zVGV4dCA9ICcnO1xuICAgICAgZm9yIChjb25zdCBmcm9tT3JKb2luIG9mIG5vZGVbJ19mcm9tc0FuZEpvaW5zJ10pIHtcbiAgICAgICAgaWYgKGZyb21PckpvaW4gaW5zdGFuY2VvZiBKb2luKSB7XG4gICAgICAgICAgZnJvbXNBbmRKb2luc1RleHQgKz0gYFxcbiR7dGhpcy5nZXRJbmRlbnQoKX0ke2Zyb21PckpvaW4uYWNjZXB0KHRoaXMpfWA7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgZnJvbU9ySm9pbiBpbnN0YW5jZW9mIEFsaWFzIHx8XG4gICAgICAgICAgZnJvbU9ySm9pbiBpbnN0YW5jZW9mIEZyb20gfHxcbiAgICAgICAgICBmcm9tT3JKb2luIGluc3RhbmNlb2YgVGFibGVGcm9tIHx8XG4gICAgICAgICAgZnJvbU9ySm9pbiBpbnN0YW5jZW9mIFN1YnF1ZXJ5RnJvbSB8fFxuICAgICAgICAgIGZyb21PckpvaW4gaW5zdGFuY2VvZiBKc29uRWFjaEZyb21cbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGZyb21zQW5kSm9pbnNUZXh0KSB7XG4gICAgICAgICAgICBmcm9tc0FuZEpvaW5zVGV4dCArPSBgLFxcbiR7dGhpcy5nZXRJbmRlbnQoKX0ke2Zyb21PckpvaW4uYWNjZXB0KHRoaXMpfWA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyb21zQW5kSm9pbnNUZXh0ICs9IGAke3RoaXMuZ2V0SW5kZW50KCl9RlJPTSAke2Zyb21PckpvaW4uYWNjZXB0KHRoaXMpfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwYXJ0cy5wdXNoKGZyb21zQW5kSm9pbnNUZXh0KTtcbiAgICB9XG4gICAgaWYgKG5vZGVbJ193aGVyZSddKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke3RoaXMuZ2V0SW5kZW50KCl9V0hFUkUgJHtub2RlWydfd2hlcmUnXS5hY2NlcHQodGhpcyl9YCk7XG4gICAgfVxuICAgIGlmIChub2RlWydfZ3JvdXBCeSddLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7dGhpcy5nZXRJbmRlbnQoKX1HUk9VUCBCWSAke25vZGVbJ19ncm91cEJ5J10ubWFwKGMgPT4gYy5hY2NlcHQodGhpcykpLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGlmIChub2RlWydfaGF2aW5nJ10pIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7dGhpcy5nZXRJbmRlbnQoKX1IQVZJTkcgJHtub2RlWydfaGF2aW5nJ10uYWNjZXB0KHRoaXMpfWApO1xuICAgIH1cbiAgICBpZiAobm9kZVsnX3VuaW9uJ10ubGVuZ3RoID4gMCkge1xuICAgICAgcGFydHMucHVzaChub2RlWydfdW5pb24nXS5tYXAodSA9PiBgJHt0aGlzLmdldEluZGVudCgpfVVOSU9OXFxuJHt1LmFjY2VwdCh0aGlzKX1gKS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICAgIGlmIChub2RlWydfb3JkZXJCeSddLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7dGhpcy5nZXRJbmRlbnQoKX1PUkRFUiBCWSAke25vZGVbJ19vcmRlckJ5J10ubWFwKG8gPT4gby5hY2NlcHQodGhpcykpLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGlmIChub2RlWydfbGltaXQnXSAhPT0gbnVsbCAmJiBub2RlWydfbGltaXQnXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke3RoaXMuZ2V0SW5kZW50KCl9TElNSVQgJHtub2RlWydfbGltaXQnXX1gKTtcbiAgICAgIGlmIChub2RlWydfb2Zmc2V0J10gIT09IG51bGwgJiYgbm9kZVsnX29mZnNldCddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGFydHMucHVzaChgJHt0aGlzLmdldEluZGVudCgpfU9GRlNFVCAke25vZGVbJ19vZmZzZXQnXX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5kZWRlbnQoKTtcbiAgICByZXR1cm4gcGFydHMuZmlsdGVyKHAgPT4gcCkuam9pbignXFxuJyk7XG4gIH1cblxuICB2aXNpdFRhYmxlRnJvbShub2RlOiBUYWJsZUZyb20pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtxdW90ZUlkZW50aWZpZXIobm9kZS50YWJsZU5hbWUpfWA7XG4gIH1cblxuICB2aXNpdFN1YnF1ZXJ5RnJvbShub2RlOiBTdWJxdWVyeUZyb20pOiBzdHJpbmcge1xuICAgIHRoaXMuaW5kZW50KCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYChcXG4ke25vZGUuc3VicXVlcnkuYWNjZXB0KHRoaXMpfVxcbiR7dGhpcy5nZXRJbmRlbnQoKX0pYDtcbiAgICB0aGlzLmRlZGVudCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2aXNpdEpzb25FYWNoRnJvbShub2RlOiBKc29uRWFjaEZyb20pOiBzdHJpbmcge1xuICAgIGNvbnN0IGV4cHIgPSBub2RlLmpzb25FeHByZXNzaW9uLmFjY2VwdCh0aGlzKTtcbiAgICBjb25zdCBwYXRoID0gbm9kZS5qc29uUGF0aCA/IGAsICR7bm9kZS5qc29uUGF0aC5hY2NlcHQodGhpcyl9YCA6ICcnO1xuICAgIHJldHVybiBganNvbl9lYWNoKCR7ZXhwcn0ke3BhdGh9KWA7XG4gIH1cblxuICB2aXNpdENvbHVtbihub2RlOiBDb2x1bW4pOiBzdHJpbmcge1xuICAgIGlmIChub2RlLmhhc1RhYmxlTmFtZSgpKSB7XG4gICAgICByZXR1cm4gYCR7cXVvdGVJZGVudGlmaWVyKG5vZGUudGFibGVOYW1lIGFzIHN0cmluZyl9LiR7cXVvdGVJZGVudGlmaWVyKG5vZGUuY29sdW1uTmFtZSl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke3F1b3RlSWRlbnRpZmllcihub2RlLmNvbHVtbk5hbWUpfWA7XG4gICAgfVxuICB9XG5cbiAgdmlzaXRBbGlhcyhub2RlOiBBbGlhczxGcm9tfEFsaWFzYWJsZUV4cHJlc3Npb24+KTogc3RyaW5nIHtcbiAgICBjb25zdCByZW5kZXJlZEFsaWFzTmFtZSA9IHF1b3RlSWRlbnRpZmllcihub2RlLmFsaWFzIGFzIHN0cmluZyk7XG4gICAgaWYgKG5vZGUucmVmZXJlbnQgaW5zdGFuY2VvZiBGcm9tKSB7XG4gICAgICByZXR1cm4gYCR7bm9kZS5yZWZlcmVudC5hY2NlcHQodGhpcyl9ICR7cmVuZGVyZWRBbGlhc05hbWV9YDtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgbm9kZS5yZWZlcmVudCBpbnN0YW5jZW9mIFN1YnF1ZXJ5RnJvbSB8fFxuICAgICAgbm9kZS5yZWZlcmVudCBpbnN0YW5jZW9mIFNlbGVjdFF1ZXJ5XG4gICAgKSB7XG4gICAgICB0aGlzLmluZGVudCgpO1xuICAgICAgY29uc3QgcmVuZGVyZWRTdWJxdWVyeSA9IGAke25vZGUucmVmZXJlbnQuYWNjZXB0KHRoaXMpfVxcbmA7XG4gICAgICBjb25zdCByZXN1bHQgPSBgKFxcbiR7cmVuZGVyZWRTdWJxdWVyeX0ke3RoaXMuZ2V0SW5kZW50KCl9KSBBUyAke3JlbmRlcmVkQWxpYXNOYW1lfWA7XG4gICAgICB0aGlzLmRlZGVudCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke25vZGUucmVmZXJlbnQuYWNjZXB0KHRoaXMpfSBBUyAke3JlbmRlcmVkQWxpYXNOYW1lfWA7XG4gICAgfVxuICB9XG5cbiAgdmlzaXRKb2luQ2xhdXNlKG5vZGU6IEpvaW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtub2RlLnR5cGV9IEpPSU4gJHtxdW90ZUlkZW50aWZpZXIobm9kZS50YWJsZU5hbWUpfSAke3F1b3RlSWRlbnRpZmllcihub2RlLmFsaWFzKX0gT04gJHtub2RlLm9uLmFjY2VwdCh0aGlzKX1gO1xuICB9XG5cbiAgdmlzaXRPcmRlckJ5KG5vZGU6IE9yZGVyQnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtub2RlLmNvbHVtbi5hY2NlcHQodGhpcyl9ICR7bm9kZS5kaXJlY3Rpb259YDtcbiAgfVxuXG4gIHZpc2l0V2l0aENsYXVzZShub2RlOiBXaXRoKTogc3RyaW5nIHtcbiAgICB0aGlzLmluZGVudCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGAke3RoaXMuZ2V0SW5kZW50KCl9JHtxdW90ZUlkZW50aWZpZXIobm9kZS5uYW1lKX0gQVMgKFxcbiR7bm9kZS5xdWVyeS5hY2NlcHQodGhpcyl9XFxuJHt0aGlzLmdldEluZGVudCgpfSlgO1xuICAgIHRoaXMuZGVkZW50KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZpc2l0QmluYXJ5RXhwcmVzc2lvbihub2RlOiBCaW5hcnlFeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCgke25vZGUubGVmdC5hY2NlcHQodGhpcyl9ICR7bm9kZS5vcGVyYXRvcn0gJHtub2RlLnJpZ2h0LmFjY2VwdCh0aGlzKX0pYDtcbiAgfVxuXG4gIHZpc2l0VW5hcnlFeHByZXNzaW9uKG5vZGU6IFVuYXJ5RXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IG5vZGUub3BlcmFuZC5hY2NlcHQodGhpcyk7XG4gICAgaWYgKG5vZGUub3BlcmF0b3IgPT09IE9wZXJhdG9yLklTX05VTEwgfHwgbm9kZS5vcGVyYXRvciA9PT0gT3BlcmF0b3IuSVNfTk9UX05VTEwpIHtcbiAgICAgIHJldHVybiBgKCR7b3BlcmFuZH0gJHtub2RlLm9wZXJhdG9yfSlgO1xuICAgIH0gZWxzZSBpZiAobm9kZS5vcGVyYXRvciA9PT0gJ05PVCcpIHtcbiAgICAgIHJldHVybiBgKE5PVCAke29wZXJhbmR9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgKCR7bm9kZS5vcGVyYXRvcn0ke29wZXJhbmR9KWA7XG4gICAgfVxuICB9XG5cbiAgdmlzaXRJbkV4cHJlc3Npb24obm9kZTogSW5FeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBsZWZ0U3RyID0gbm9kZS5sZWZ0Lmxlbmd0aCA+IDFcbiAgICAgID8gYCgke25vZGUubGVmdC5tYXAobCA9PiBsLmFjY2VwdCh0aGlzKSkuam9pbignLCAnKX0pYFxuICAgICAgOiBub2RlLmxlZnRbMF0uYWNjZXB0KHRoaXMpO1xuICAgIGNvbnN0IG5vdCA9IG5vZGUubm90ID8gJyBOT1QnIDogJyc7XG4gICAgbGV0IHJpZ2h0OiBzdHJpbmc7XG4gICAgaWYgKG5vZGUudmFsdWVzIGluc3RhbmNlb2YgU2VsZWN0UXVlcnkpIHtcbiAgICAgIHJpZ2h0ID0gYChcXG4ke25vZGUudmFsdWVzLmFjY2VwdCh0aGlzKX1cXG4ke3RoaXMuZ2V0SW5kZW50KCl9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJpZ2h0ID0gYCgke25vZGUudmFsdWVzLm1hcChzZXQgPT5cbiAgICAgICAgc2V0Lmxlbmd0aCA+IDEgPyBgKCR7c2V0Lm1hcCh2ID0+IHYuYWNjZXB0KHRoaXMpKS5qb2luKCcsICcpfSlgIDogc2V0WzBdLmFjY2VwdCh0aGlzKVxuICAgICAgKS5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICByZXR1cm4gYCgke2xlZnRTdHJ9JHtub3R9IElOICR7cmlnaHR9KWA7XG4gIH1cblxuICB2aXNpdENvbmNhdChub2RlOiBDb25jYXQpOiBzdHJpbmcge1xuICAgIHJldHVybiBgKCR7bm9kZS5leHByZXNzaW9ucy5tYXAoZSA9PiBlLmFjY2VwdCh0aGlzKSkuam9pbignIHx8ICcpfSlgO1xuICB9XG5cbiAgdmlzaXRDYXNlRXhwcmVzc2lvbihub2RlOiBDYXNlRXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW2Ake3RoaXMuZ2V0SW5kZW50KCl9Q0FTRWBdO1xuICAgIHRoaXMuaW5kZW50KCk7XG4gICAgZm9yIChjb25zdCBjIG9mIG5vZGUuY2FzZXMpIHtcbiAgICAgIHRoaXMuaW5kZW50KCk7XG4gICAgICBwYXJ0cy5wdXNoKGAke3RoaXMuZ2V0SW5kZW50KCl9V0hFTiAke2Mud2hlbi5hY2NlcHQodGhpcyl9IFRIRU4gJHtjLnRoZW4uYWNjZXB0KHRoaXMpfWApO1xuICAgICAgdGhpcy5kZWRlbnQoKTtcbiAgICB9XG4gICAgaWYgKG5vZGUuZWxzZSkge1xuICAgICAgdGhpcy5pbmRlbnQoKTtcbiAgICAgIHBhcnRzLnB1c2goYCR7dGhpcy5nZXRJbmRlbnQoKX1FTFNFICR7bm9kZS5lbHNlLmFjY2VwdCh0aGlzKX1gKTtcbiAgICAgIHRoaXMuZGVkZW50KCk7XG4gICAgfVxuICAgIHBhcnRzLnB1c2goYCR7dGhpcy5nZXRJbmRlbnQoKX1FTkRgKTtcbiAgICB0aGlzLmRlZGVudCgpO1xuICAgIHJldHVybiBwYXJ0cy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKG5vZGU6IEZ1bmN0aW9uRXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgY29uc3QgYXJncyA9IG5vZGUuYXJncy5tYXAoYSA9PiBhLmFjY2VwdCh0aGlzKSkuam9pbignLCAnKTtcbiAgICBjb25zdCBkaXN0aW5jdFByZWZpeCA9IG5vZGUuZGlzdGluY3QgPyAnRElTVElOQ1QgJyA6ICcnO1xuICAgIHJldHVybiBgJHtub2RlLm5hbWV9KCR7ZGlzdGluY3RQcmVmaXh9JHthcmdzfSlgO1xuICB9XG5cbiAgdmlzaXRQYXJhbUV4cHJlc3Npb24oX25vZGU6IFBhcmFtKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJz8nO1xuICB9XG5cbiAgdmlzaXRTdHJpbmdMaXRlcmFsKG5vZGU6IFN0cmluZ0xpdGVyYWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJyR7bm9kZS52YWx1ZS5yZXBsYWNlKC8nL2csIFwiJydcIil9J2A7XG4gIH1cblxuICB2aXNpdE51bWJlckxpdGVyYWwobm9kZTogTnVtYmVyTGl0ZXJhbCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUudmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZpc2l0TnVsbExpdGVyYWwoX25vZGU6IE51bGxMaXRlcmFsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ05VTEwnO1xuICB9XG5cbiAgdmlzaXRFeGlzdHNFeHByZXNzaW9uKG5vZGU6IEV4aXN0c0V4cHJlc3Npb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IHN1YnF1ZXJ5U3FsID0gbm9kZS5zdWJxdWVyeS5hY2NlcHQodGhpcyk7XG4gICAgcmV0dXJuIGBFWElTVFMgKFxcbiR7c3VicXVlcnlTcWx9XFxuJHt0aGlzLmdldEluZGVudCgpfSlgO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,8 @@
1
+ import { InsertQuery } from "../ast/InsertQuery";
2
+ import { SelectQuery } from "../ast/SelectQuery";
3
+ import { SqlTreeNodeVisitor } from "../visitor/SqlTreeNodeVisitor";
4
+ export declare function quoteIdentifier(identifier: string): string;
5
+ export interface QueryRenderer extends SqlTreeNodeVisitor<string> {
6
+ render(node: SelectQuery | InsertQuery): string;
7
+ }
8
+ export declare function shouldQuoteIdentifier(identifier: string): boolean;