@subsquid/openreader 0.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 (44) hide show
  1. package/README.md +34 -0
  2. package/dist/gql/opencrud.d.ts +4 -0
  3. package/dist/gql/opencrud.js +301 -0
  4. package/dist/gql/opencrud.js.map +1 -0
  5. package/dist/gql/schema.d.ts +4 -0
  6. package/dist/gql/schema.js +271 -0
  7. package/dist/gql/schema.js.map +1 -0
  8. package/dist/main.d.ts +3 -0
  9. package/dist/main.js +97 -0
  10. package/dist/main.js.map +1 -0
  11. package/dist/model.d.ts +70 -0
  12. package/dist/model.js +3 -0
  13. package/dist/model.js.map +1 -0
  14. package/dist/model.tools.d.ts +9 -0
  15. package/dist/model.tools.js +120 -0
  16. package/dist/model.tools.js.map +1 -0
  17. package/dist/orderBy.d.ts +16 -0
  18. package/dist/orderBy.js +80 -0
  19. package/dist/orderBy.js.map +1 -0
  20. package/dist/queryBuilder.d.ts +52 -0
  21. package/dist/queryBuilder.js +605 -0
  22. package/dist/queryBuilder.js.map +1 -0
  23. package/dist/relayConnection.d.ts +36 -0
  24. package/dist/relayConnection.js +43 -0
  25. package/dist/relayConnection.js.map +1 -0
  26. package/dist/requestedFields.d.ts +32 -0
  27. package/dist/requestedFields.js +172 -0
  28. package/dist/requestedFields.js.map +1 -0
  29. package/dist/resolver.d.ts +8 -0
  30. package/dist/resolver.js +142 -0
  31. package/dist/resolver.js.map +1 -0
  32. package/dist/scalars.d.ts +33 -0
  33. package/dist/scalars.js +239 -0
  34. package/dist/scalars.js.map +1 -0
  35. package/dist/server.d.ts +25 -0
  36. package/dist/server.js +119 -0
  37. package/dist/server.js.map +1 -0
  38. package/dist/util.d.ts +19 -0
  39. package/dist/util.js +89 -0
  40. package/dist/util.js.map +1 -0
  41. package/dist/where.d.ts +8 -0
  42. package/dist/where.js +96 -0
  43. package/dist/where.js.map +1 -0
  44. package/package.json +39 -0
@@ -0,0 +1,605 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.QueryBuilder = void 0;
7
+ const assert_1 = __importDefault(require("assert"));
8
+ const model_tools_1 = require("./model.tools");
9
+ const orderBy_1 = require("./orderBy");
10
+ const scalars_1 = require("./scalars");
11
+ const util_1 = require("./util");
12
+ const where_1 = require("./where");
13
+ class QueryBuilder {
14
+ constructor(ctx) {
15
+ this.params = [];
16
+ this.aliases = new AliasSet();
17
+ this.db = ctx.db;
18
+ this.model = ctx.model;
19
+ }
20
+ param(value) {
21
+ return '$' + this.params.push(value);
22
+ }
23
+ ident(name) {
24
+ return this.db.escapeIdentifier(name);
25
+ }
26
+ select(entityName, args, fields, variant) {
27
+ let entity = (0, model_tools_1.getEntity)(this.model, entityName);
28
+ let table = (0, util_1.toTable)(entityName);
29
+ let alias = this.aliases.add(table);
30
+ let join = new FkJoinSet(this.aliases);
31
+ let cursor = new Cursor(this.model, this.ident.bind(this), this.aliases, join, entity, alias, '');
32
+ let whereExps = [];
33
+ let orderByExps = [];
34
+ let columns = new ColumnSet();
35
+ let out = '';
36
+ if (fields) {
37
+ this.populateColumns(columns, cursor, fields);
38
+ }
39
+ switch (variant?.kind) {
40
+ case 'fts':
41
+ out += 'SELECT\n';
42
+ out += ` '${entityName}' AS isTypeOf`;
43
+ out += ',\n';
44
+ out += ` ts_rank(${cursor.tsv(variant.queryName)}, phraseto_tsquery('english', ${variant.textParam})) AS rank`;
45
+ out += ',\n';
46
+ out += ` ts_headline(${cursor.doc(variant.queryName)}, phraseto_tsquery('english', ${variant.textParam})) AS highlight`;
47
+ out += ',\n';
48
+ out += columns.size() ? ` json_build_array(${columns.render()})` : " '[]'::json";
49
+ out += ' AS item\n';
50
+ break;
51
+ case 'list-subquery':
52
+ if (columns.size()) {
53
+ out += `SELECT json_build_array(${columns.render()}) `;
54
+ }
55
+ break;
56
+ default:
57
+ if (columns.size()) {
58
+ out += `SELECT ${columns.render()}\n`;
59
+ }
60
+ }
61
+ out += `FROM ${this.ident(table)} ${this.ident(alias)}`;
62
+ if ((0, where_1.hasConditions)(args.where)) {
63
+ whereExps.push(this.generateWhere(cursor, args.where));
64
+ }
65
+ if (variant?.kind == 'list-subquery') {
66
+ whereExps.push(`${cursor.fk(variant.field)} = ${variant.parent}`);
67
+ }
68
+ if (variant?.kind == 'fts') {
69
+ whereExps.push(`phraseto_tsquery('english', ${variant.textParam}) @@ ${cursor.tsv(variant.queryName)}`);
70
+ }
71
+ let orderByInput = args.orderBy && (0, util_1.ensureArray)(args.orderBy);
72
+ if (orderByInput?.length) {
73
+ let orderBy = (0, orderBy_1.parseOrderBy)(this.model, entityName, orderByInput);
74
+ this.populateOrderBy(orderByExps, cursor, orderBy);
75
+ }
76
+ if (join.isNotEmpty()) {
77
+ out += join.render(name => this.ident(name));
78
+ }
79
+ if (whereExps.length) {
80
+ out += '\nWHERE ' + whereExps.join(' AND ');
81
+ }
82
+ if (orderByExps.length > 0) {
83
+ out += '\nORDER BY ' + orderByExps.join(', ');
84
+ }
85
+ if (args.limit) {
86
+ out += '\nLIMIT ' + this.param(args.limit);
87
+ }
88
+ if (args.offset) {
89
+ out += '\nOFFSET ' + this.param(args.offset);
90
+ }
91
+ if (variant?.kind == 'list-subquery') {
92
+ out = out.replace(/\n/g, ' ');
93
+ }
94
+ return out;
95
+ }
96
+ populateOrderBy(exps, cursor, orderBy) {
97
+ for (let key in orderBy) {
98
+ let spec = orderBy[key];
99
+ let propType = cursor.object.properties[key].type;
100
+ switch (propType.kind) {
101
+ case 'scalar':
102
+ case 'enum':
103
+ (0, assert_1.default)(typeof spec == 'string');
104
+ exps.push(`${cursor.native(key)} ${spec}`);
105
+ break;
106
+ case 'object':
107
+ case 'union':
108
+ case 'fk':
109
+ (0, assert_1.default)(typeof spec == 'object');
110
+ this.populateOrderBy(exps, cursor.child(key), spec);
111
+ break;
112
+ default:
113
+ throw (0, util_1.unsupportedCase)(propType.kind);
114
+ }
115
+ }
116
+ }
117
+ populateColumns(columns, cursor, fields$) {
118
+ for (let fieldName in fields$) {
119
+ let field = fields$[fieldName];
120
+ for (let i = 0; i < field.requests.length; i++) {
121
+ let req = field.requests[i];
122
+ switch (field.propType.kind) {
123
+ case 'scalar':
124
+ case 'enum':
125
+ case 'list':
126
+ req.index = columns.add(cursor.transport(fieldName));
127
+ break;
128
+ case 'object':
129
+ req.index = columns.add(cursor.field(fieldName) + ' IS NULL');
130
+ this.populateColumns(columns, cursor.child(fieldName), req.children);
131
+ break;
132
+ case 'union':
133
+ let cu = cursor.child(fieldName);
134
+ req.index = columns.add(cu.transport('isTypeOf'));
135
+ this.populateColumns(columns, cu, req.children);
136
+ break;
137
+ case 'fk': {
138
+ let cu = cursor.child(fieldName);
139
+ req.index = columns.add(cu.transport('id'));
140
+ this.populateColumns(columns, cu, req.children);
141
+ break;
142
+ }
143
+ case 'list-relation':
144
+ req.index = columns.add('array(' + this.select(field.propType.entity, req.args, req.children, {
145
+ kind: 'list-subquery',
146
+ field: field.propType.field,
147
+ parent: cursor.native('id')
148
+ }) + ')');
149
+ break;
150
+ default:
151
+ throw (0, util_1.unsupportedCase)(field.propType.kind);
152
+ }
153
+ }
154
+ }
155
+ }
156
+ generateWhere(cursor, where) {
157
+ let { AND, OR, ...conditions } = where;
158
+ let exps = [];
159
+ for (let key in conditions) {
160
+ let opArg = conditions[key];
161
+ let f = (0, where_1.parseWhereField)(key);
162
+ switch (f.op) {
163
+ case 'every':
164
+ if ((0, where_1.hasConditions)(opArg)) {
165
+ let rel = cursor.object.properties[f.field].type;
166
+ (0, assert_1.default)(rel.kind == 'list-relation');
167
+ let conditionedFrom = this.select(rel.entity, { where: opArg }, undefined, { kind: 'list-subquery', parent: cursor.native('id'), field: rel.field });
168
+ let allFrom = this.select(rel.entity, {}, undefined, { kind: 'list-subquery', parent: cursor.native('id'), field: rel.field });
169
+ exps.push(`(SELECT count(*) ${conditionedFrom}) = (SELECT count(*) ${allFrom})`);
170
+ }
171
+ break;
172
+ case 'some':
173
+ case 'none':
174
+ let rel = cursor.object.properties[f.field].type;
175
+ (0, assert_1.default)(rel.kind == 'list-relation');
176
+ let q = '(SELECT true ' + this.select(rel.entity, { where: opArg }, undefined, { kind: 'list-subquery', parent: cursor.native('id'), field: rel.field }) + ' LIMIT 1)';
177
+ if (f.op == 'some') {
178
+ exps.push(q);
179
+ }
180
+ else {
181
+ exps.push(`(SELECT count(*) FROM ${q} ${this.ident(this.aliases.add(key))}) = 0`);
182
+ }
183
+ break;
184
+ default: {
185
+ let prop = cursor.object.properties[f.field];
186
+ (0, assert_1.default)(prop != null);
187
+ this.addPropCondition(exps, cursor, f.field, f.op, opArg);
188
+ }
189
+ }
190
+ }
191
+ if (AND) {
192
+ // We are getting objects here, although we have array in schema
193
+ (0, util_1.ensureArray)(AND).forEach((andWhere) => {
194
+ if ((0, where_1.hasConditions)(andWhere)) {
195
+ exps.push(this.generateWhere(cursor, andWhere));
196
+ }
197
+ });
198
+ }
199
+ if (OR) {
200
+ let ors = [];
201
+ if (exps.length) {
202
+ ors.push('(' + exps.join(' AND ') + ')');
203
+ }
204
+ // We are getting objects here, although we have array in schema
205
+ (0, util_1.ensureArray)(OR).forEach((orWhere) => {
206
+ if ((0, where_1.hasConditions)(orWhere)) {
207
+ ors.push('(' + this.generateWhere(cursor, orWhere) + ')');
208
+ }
209
+ });
210
+ return '(' + ors.join(' OR ') + ')';
211
+ }
212
+ else {
213
+ return exps.join(' AND ');
214
+ }
215
+ }
216
+ addPropCondition(exps, cursor, field, op, arg) {
217
+ let propType = cursor.object.properties[field].type;
218
+ switch (propType.kind) {
219
+ case 'scalar':
220
+ case 'enum': {
221
+ let lhs = cursor.native(field);
222
+ let typeName = propType.name;
223
+ switch (op) {
224
+ case 'in':
225
+ case 'not_in': {
226
+ // We have 2 options here
227
+ // 1. use array parameter and do: WHERE col IN (SELECT * FROM unnest($array_param))
228
+ // 2. use arg list
229
+ // Let's try second option first.
230
+ let list = (0, util_1.ensureArray)(arg).map(a => (0, scalars_1.fromTransportCast)(typeName, this.param(a)));
231
+ let param = `(${list.join(', ')})`;
232
+ exps.push(`${lhs} ${(0, where_1.whereOpToSqlOperator)(op)} ${param}`);
233
+ break;
234
+ }
235
+ case 'startsWith':
236
+ exps.push(`starts_with(${lhs}, ${this.param(arg)})`);
237
+ break;
238
+ case 'not_startsWith':
239
+ exps.push(`NOT starts_with(${lhs}, ${this.param(arg)})`);
240
+ break;
241
+ case 'endsWith': {
242
+ let param = this.param(arg);
243
+ exps.push(`right(${lhs}, length(${param})) = ${param}`);
244
+ break;
245
+ }
246
+ case 'not_endsWith': {
247
+ let param = this.param(arg);
248
+ exps.push(`right(${lhs}, length(${param})) != ${param}`);
249
+ break;
250
+ }
251
+ case 'contains':
252
+ exps.push(`position(${this.param(arg)} in ${lhs}) > 0`);
253
+ break;
254
+ case 'not_contains':
255
+ exps.push(`position(${this.param(arg)} in ${lhs}) = 0`);
256
+ break;
257
+ default: {
258
+ let param = (0, scalars_1.fromTransportCast)(propType.name, this.param(arg));
259
+ exps.push(`${lhs} ${(0, where_1.whereOpToSqlOperator)(op)} ${param}`);
260
+ }
261
+ }
262
+ break;
263
+ }
264
+ case 'list': {
265
+ let item = propType.item.type;
266
+ (0, assert_1.default)(item.kind == 'scalar' || item.kind == 'enum');
267
+ let param = (0, scalars_1.fromTransportArrayCast)(item.name, this.param(arg));
268
+ let lhs = cursor.native(field);
269
+ switch (op) {
270
+ case 'containsAll':
271
+ exps.push(`${lhs} @> ${param}`);
272
+ break;
273
+ case 'containsAny':
274
+ exps.push(`${lhs} && ${param}`);
275
+ break;
276
+ case 'containsNone':
277
+ exps.push(`NOT (${lhs} && ${param})`);
278
+ break;
279
+ default:
280
+ throw (0, util_1.unsupportedCase)(op);
281
+ }
282
+ break;
283
+ }
284
+ case 'object':
285
+ case 'union': {
286
+ (0, assert_1.default)(op == '-');
287
+ let cu = cursor.child(field);
288
+ for (let key in arg) {
289
+ let f = (0, where_1.parseWhereField)(key);
290
+ this.addPropCondition(exps, cu, f.field, f.op, arg[key]);
291
+ }
292
+ break;
293
+ }
294
+ case 'fk': {
295
+ (0, assert_1.default)(op == '-');
296
+ if ((0, where_1.hasConditions)(arg)) {
297
+ exps.push(this.generateWhere(cursor.child(field), arg));
298
+ }
299
+ break;
300
+ }
301
+ default:
302
+ throw (0, util_1.unsupportedCase)(propType.kind);
303
+ }
304
+ }
305
+ toResult(rows, fields) {
306
+ let out = new Array(rows.length);
307
+ for (let i = 0; i < rows.length; i++) {
308
+ out[i] = this.mapRow(rows[i], fields);
309
+ }
310
+ return out;
311
+ }
312
+ mapRow(row, fields, ifType) {
313
+ let rec = {};
314
+ for (let key in fields) {
315
+ let f = fields[key];
316
+ for (let i = 0; i < f.requests.length; i++) {
317
+ let req = f.requests[i];
318
+ if (req.ifType != ifType)
319
+ continue;
320
+ switch (f.propType.kind) {
321
+ case 'scalar':
322
+ case 'enum':
323
+ case 'list':
324
+ rec[req.alias] = row[req.index];
325
+ break;
326
+ case 'object': {
327
+ let isNull = row[req.index];
328
+ if (!isNull) {
329
+ rec[req.alias] = this.mapRow(row, req.children);
330
+ }
331
+ break;
332
+ }
333
+ case 'union': {
334
+ let isTypeOf = row[req.index];
335
+ if (isTypeOf != null) {
336
+ let obj = this.mapRow(row, req.children, isTypeOf);
337
+ obj.isTypeOf = isTypeOf;
338
+ rec[req.alias] = obj;
339
+ }
340
+ break;
341
+ }
342
+ case 'fk': {
343
+ let id = row[req.index];
344
+ if (id != null) {
345
+ rec[req.alias] = this.mapRow(row, req.children);
346
+ }
347
+ break;
348
+ }
349
+ case 'list-relation':
350
+ rec[req.alias] = this.toResult(row[req.index], req.children);
351
+ break;
352
+ default:
353
+ throw (0, util_1.unsupportedCase)(f.propType.kind);
354
+ }
355
+ }
356
+ }
357
+ return rec;
358
+ }
359
+ async executeSelect(entityName, args, fields$) {
360
+ let sql = this.select(entityName, args, fields$);
361
+ let result = await this.query(sql);
362
+ return this.toResult(result.rows, fields$);
363
+ }
364
+ async executeSelectCount(entityName, where) {
365
+ let sql = `SELECT count(*) ${this.select(entityName, { where })}`;
366
+ let result = await this.query(sql);
367
+ return (0, util_1.toInt)(result.rows[0][0]);
368
+ }
369
+ async executeListCount(entityName, args) {
370
+ let sql = `SELECT count(*) FROM (SELECT true ${this.select(entityName, args)}) AS ${this.aliases.add('list')}`;
371
+ let result = await this.query(sql);
372
+ return (0, util_1.toInt)(result.rows[0][0]);
373
+ }
374
+ query(sql) {
375
+ // console.log('\n' + sql)
376
+ return this.db.query({ text: sql, rowMode: 'array' }, this.params);
377
+ }
378
+ fulltextSearchSelect(queryName, args, $fields) {
379
+ let query = (0, model_tools_1.getFtsQuery)(this.model, queryName);
380
+ let { limit, offset, text } = args;
381
+ let textParam = this.param(text);
382
+ let srcSelects = [];
383
+ query.sources.forEach(src => {
384
+ let where = args[`where${src.entity}`];
385
+ let itemFields = $fields.item?.[src.entity];
386
+ let sql = this.select(src.entity, { where }, itemFields, { kind: 'fts', textParam, queryName });
387
+ srcSelects.push(sql);
388
+ });
389
+ let cols = [];
390
+ cols.push('isTypeOf');
391
+ cols.push('rank');
392
+ if ($fields.highlight) {
393
+ cols.push('highlight');
394
+ }
395
+ if ($fields.item) {
396
+ cols.push('item');
397
+ }
398
+ let sql = `SELECT ${cols.join(', ')} FROM (\n\n`;
399
+ sql += srcSelects.join('\n\nUNION ALL\n\n');
400
+ sql += `\n\n) AS ${this.aliases.add('tsv')}`;
401
+ sql += ` ORDER BY rank DESC`;
402
+ if (limit != null) {
403
+ sql += ` LIMIT ${this.param(limit)}`;
404
+ }
405
+ if (offset != null) {
406
+ sql += ` OFFSET ${this.param(offset)}`;
407
+ }
408
+ return sql;
409
+ }
410
+ toFulltextSearchResult(rows, fields) {
411
+ let out = new Array(rows.length);
412
+ for (let i = 0; i < rows.length; i++) {
413
+ let row = rows[i];
414
+ let isTypeOf = row[0];
415
+ let highlight = fields.highlight ? row[2] : undefined;
416
+ let itemIdx = fields.highlight ? 3 : 2;
417
+ let itemFields = fields.item?.[isTypeOf];
418
+ let item;
419
+ if (itemFields) {
420
+ item = this.mapRow(row[itemIdx], itemFields);
421
+ item.isTypeOf = isTypeOf;
422
+ }
423
+ else {
424
+ item = { isTypeOf };
425
+ }
426
+ out[i] = {
427
+ rank: row[1],
428
+ highlight,
429
+ item
430
+ };
431
+ }
432
+ return out;
433
+ }
434
+ async executeFulltextSearch(queryName, args, $fields) {
435
+ let sql = this.fulltextSearchSelect(queryName, args, $fields);
436
+ let result = await this.query(sql);
437
+ return this.toFulltextSearchResult(result.rows, $fields);
438
+ }
439
+ }
440
+ exports.QueryBuilder = QueryBuilder;
441
+ class Cursor {
442
+ constructor(model, ident, aliases, join, object, alias, prefix) {
443
+ this.model = model;
444
+ this.ident = ident;
445
+ this.aliases = aliases;
446
+ this.join = join;
447
+ this.object = object;
448
+ this.alias = alias;
449
+ this.prefix = prefix;
450
+ }
451
+ transport(propName) {
452
+ let prop = this.object.properties[propName];
453
+ switch (prop.type.kind) {
454
+ case 'scalar':
455
+ case 'enum':
456
+ if (this.object.kind == 'object') {
457
+ return (0, scalars_1.fromJsonToTransportCast)(prop.type.name, this.prefix, propName);
458
+ }
459
+ else {
460
+ return (0, scalars_1.toTransportCast)(prop.type.name, this.column(propName));
461
+ }
462
+ case 'list':
463
+ let itemType = prop.type.item.type;
464
+ if (this.object.kind == 'object' || itemType.kind != 'scalar' && itemType.kind != 'enum') {
465
+ // this is json
466
+ return this.field(propName);
467
+ }
468
+ else {
469
+ return (0, scalars_1.toTransportArrayCast)(itemType.name, this.column(propName));
470
+ }
471
+ default:
472
+ throw (0, util_1.unsupportedCase)(prop.type.kind);
473
+ }
474
+ }
475
+ native(propName) {
476
+ let prop = this.object.properties[propName];
477
+ if (prop.type.kind == 'list') {
478
+ let item = prop.type.item.type;
479
+ (0, assert_1.default)(item.kind == 'scalar' || item.kind == 'enum');
480
+ return this.column(propName);
481
+ }
482
+ (0, assert_1.default)(prop.type.kind == 'scalar' || prop.type.kind == 'enum');
483
+ if (this.object.kind == 'object') {
484
+ return (0, scalars_1.fromJsonCast)(prop.type.name, this.prefix, propName);
485
+ }
486
+ else {
487
+ return this.column(propName);
488
+ }
489
+ }
490
+ child(propName) {
491
+ let object;
492
+ let alias;
493
+ let prefix;
494
+ let prop = this.object.properties[propName];
495
+ switch (prop.type.kind) {
496
+ case 'object':
497
+ object = this.model[prop.type.name];
498
+ alias = this.alias;
499
+ prefix = this.field(propName);
500
+ break;
501
+ case 'union':
502
+ object = (0, model_tools_1.getUnionProps)(this.model, prop.type.name);
503
+ alias = this.alias;
504
+ prefix = this.field(propName);
505
+ break;
506
+ case 'fk':
507
+ object = this.model[prop.type.foreignEntity];
508
+ alias = this.join.add((0, util_1.toTable)(prop.type.foreignEntity), this.fk(propName));
509
+ prefix = '';
510
+ break;
511
+ default:
512
+ throw (0, util_1.unsupportedCase)(prop.type.kind);
513
+ }
514
+ return new Cursor(this.model, this.ident, this.aliases, this.join, object, alias, prefix);
515
+ }
516
+ field(name) {
517
+ if (this.object.kind == 'entity') {
518
+ return this.column(name);
519
+ }
520
+ else {
521
+ return `${this.prefix}->'${name}'`;
522
+ }
523
+ }
524
+ column(name) {
525
+ (0, assert_1.default)(this.object.kind == 'entity');
526
+ return this.ident(this.alias) + '.' + this.ident((0, util_1.toColumn)(name));
527
+ }
528
+ fk(propName) {
529
+ return this.object.kind == 'entity'
530
+ ? this.ident(this.alias) + '.' + this.ident((0, util_1.toFkColumn)(propName))
531
+ : (0, scalars_1.fromJsonCast)('ID', this.prefix, propName);
532
+ }
533
+ tsv(queryName) {
534
+ (0, assert_1.default)(this.object.kind == 'entity');
535
+ return this.ident(this.alias) + '.' + this.ident((0, util_1.snakeCase)(queryName) + '_tsv');
536
+ }
537
+ doc(queryName) {
538
+ (0, assert_1.default)(this.object.kind == 'entity');
539
+ return this.ident(this.alias) + '.' + this.ident((0, util_1.snakeCase)(queryName) + '_doc');
540
+ }
541
+ }
542
+ class ColumnSet {
543
+ constructor() {
544
+ this.columns = new Map();
545
+ }
546
+ add(column) {
547
+ let idx = this.columns.get(column);
548
+ if (idx == null) {
549
+ idx = this.columns.size;
550
+ this.columns.set(column, idx);
551
+ }
552
+ return idx;
553
+ }
554
+ render() {
555
+ return Array.from(this.columns.keys()).join(', ');
556
+ }
557
+ size() {
558
+ return this.columns.size;
559
+ }
560
+ }
561
+ class FkJoinSet {
562
+ constructor(aliases) {
563
+ this.aliases = aliases;
564
+ this.joins = new Map();
565
+ }
566
+ add(table, on) {
567
+ let key = table + ' ' + on;
568
+ let e = this.joins.get(key);
569
+ if (!e) {
570
+ e = {
571
+ table,
572
+ alias: this.aliases.add(table),
573
+ on
574
+ };
575
+ this.joins.set(key, e);
576
+ }
577
+ return e.alias;
578
+ }
579
+ isNotEmpty() {
580
+ return this.joins.size > 0;
581
+ }
582
+ render(escapeIdentifier) {
583
+ let e = escapeIdentifier;
584
+ let out = '';
585
+ this.joins.forEach(join => {
586
+ out += `\nLEFT OUTER JOIN ${e(join.table)} ${e(join.alias)} ON ${e(join.alias)}."id" = ${join.on}`;
587
+ });
588
+ return out;
589
+ }
590
+ }
591
+ class AliasSet {
592
+ constructor() {
593
+ this.aliases = {};
594
+ }
595
+ add(name) {
596
+ if (this.aliases[name]) {
597
+ return name + '_' + (this.aliases[name]++);
598
+ }
599
+ else {
600
+ this.aliases[name] = 1;
601
+ return name;
602
+ }
603
+ }
604
+ }
605
+ //# sourceMappingURL=queryBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryBuilder.js","sourceRoot":"","sources":["../src/queryBuilder.ts"],"names":[],"mappings":"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"}