@spinajs/orm-sql 2.0.46 → 2.0.48

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 (79) hide show
  1. package/README.md +11 -11
  2. package/lib/builders.d.ts +1 -2
  3. package/lib/builders.d.ts.map +1 -0
  4. package/lib/builders.js +7 -10
  5. package/lib/builders.js.map +1 -1
  6. package/lib/compilers.d.ts +1 -0
  7. package/lib/compilers.d.ts.map +1 -0
  8. package/lib/compilers.js +138 -146
  9. package/lib/compilers.js.map +1 -1
  10. package/lib/converters.d.ts +1 -0
  11. package/lib/converters.d.ts.map +1 -0
  12. package/lib/converters.js +9 -14
  13. package/lib/converters.js.map +1 -1
  14. package/lib/index.d.ts +3 -2
  15. package/lib/index.d.ts.map +1 -0
  16. package/lib/index.js +47 -65
  17. package/lib/index.js.map +1 -1
  18. package/lib/statements.d.ts +1 -0
  19. package/lib/statements.d.ts.map +1 -0
  20. package/lib/statements.js +45 -51
  21. package/lib/statements.js.map +1 -1
  22. package/package.json +53 -50
  23. package/lib/orm/src/builders.d.ts +0 -636
  24. package/lib/orm/src/builders.js +0 -1509
  25. package/lib/orm/src/builders.js.map +0 -1
  26. package/lib/orm/src/converters.d.ts +0 -14
  27. package/lib/orm/src/converters.js +0 -57
  28. package/lib/orm/src/converters.js.map +0 -1
  29. package/lib/orm/src/decorators.d.ts +0 -152
  30. package/lib/orm/src/decorators.js +0 -454
  31. package/lib/orm/src/decorators.js.map +0 -1
  32. package/lib/orm/src/dehydrators.d.ts +0 -7
  33. package/lib/orm/src/dehydrators.js +0 -41
  34. package/lib/orm/src/dehydrators.js.map +0 -1
  35. package/lib/orm/src/driver.d.ts +0 -80
  36. package/lib/orm/src/driver.js +0 -104
  37. package/lib/orm/src/driver.js.map +0 -1
  38. package/lib/orm/src/enums.d.ts +0 -115
  39. package/lib/orm/src/enums.js +0 -125
  40. package/lib/orm/src/enums.js.map +0 -1
  41. package/lib/orm/src/exceptions.d.ts +0 -6
  42. package/lib/orm/src/exceptions.js +0 -11
  43. package/lib/orm/src/exceptions.js.map +0 -1
  44. package/lib/orm/src/hydrators.d.ts +0 -19
  45. package/lib/orm/src/hydrators.js +0 -110
  46. package/lib/orm/src/hydrators.js.map +0 -1
  47. package/lib/orm/src/interfaces.d.ts +0 -794
  48. package/lib/orm/src/interfaces.js +0 -293
  49. package/lib/orm/src/interfaces.js.map +0 -1
  50. package/lib/orm/src/model.d.ts +0 -310
  51. package/lib/orm/src/model.js +0 -779
  52. package/lib/orm/src/model.js.map +0 -1
  53. package/lib/orm/src/orm.d.ts +0 -61
  54. package/lib/orm/src/orm.js +0 -341
  55. package/lib/orm/src/orm.js.map +0 -1
  56. package/lib/orm/src/relations.d.ts +0 -150
  57. package/lib/orm/src/relations.js +0 -681
  58. package/lib/orm/src/relations.js.map +0 -1
  59. package/lib/orm/src/statements.d.ts +0 -140
  60. package/lib/orm/src/statements.js +0 -314
  61. package/lib/orm/src/statements.js.map +0 -1
  62. package/lib/orm/src/types.d.ts +0 -11
  63. package/lib/orm/src/types.js +0 -3
  64. package/lib/orm/src/types.js.map +0 -1
  65. package/lib/orm-sql/src/builders.d.ts +0 -11
  66. package/lib/orm-sql/src/builders.js +0 -42
  67. package/lib/orm-sql/src/builders.js.map +0 -1
  68. package/lib/orm-sql/src/compilers.d.ts +0 -226
  69. package/lib/orm-sql/src/compilers.js +0 -1016
  70. package/lib/orm-sql/src/compilers.js.map +0 -1
  71. package/lib/orm-sql/src/converters.d.ts +0 -10
  72. package/lib/orm-sql/src/converters.js +0 -39
  73. package/lib/orm-sql/src/converters.js.map +0 -1
  74. package/lib/orm-sql/src/index.d.ts +0 -6
  75. package/lib/orm-sql/src/index.js +0 -70
  76. package/lib/orm-sql/src/index.js.map +0 -1
  77. package/lib/orm-sql/src/statements.d.ts +0 -46
  78. package/lib/orm-sql/src/statements.js +0 -268
  79. package/lib/orm-sql/src/statements.js.map +0 -1
@@ -1,1509 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
- return c > 3 && r && Object.defineProperty(target, key, r), r;
23
- };
24
- var __importStar = (this && this.__importStar) || function (mod) {
25
- if (mod && mod.__esModule) return mod;
26
- var result = {};
27
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
- __setModuleDefault(result, mod);
29
- return result;
30
- };
31
- var __metadata = (this && this.__metadata) || function (k, v) {
32
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
- };
34
- var RawQuery_1, WhereBuilder_1;
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.SchemaQueryBuilder = exports.ScheduleQueryBuilder = exports.DropEventQueryBuilder = exports.EventQueryBuilder = exports.EventIntervalDesc = exports.CloneTableQueryBuilder = exports.TruncateTableQueryBuilder = exports.TableQueryBuilder = exports.AlterTableQueryBuilder = exports.DropTableQueryBuilder = exports.TableExistsQueryBuilder = exports.AlterColumnQueryBuilder = exports.ColumnQueryBuilder = exports.ForeignKeyBuilder = exports.IndexQueryBuilder = exports.InsertQueryBuilder = exports.UpdateQueryBuilder = exports.OnDuplicateQueryBuilder = exports.DeleteQueryBuilder = exports.SelectQueryBuilder = exports.WhereBuilder = exports.WithRecursiveBuilder = exports.JoinBuilder = exports.GroupByBuilder = exports.RawQuery = exports.ColumnsBuilder = exports.OrderByBuilder = exports.LimitBuilder = exports.QueryBuilder = exports.Builder = void 0;
37
- /* eslint-disable prettier/prettier */
38
- const di_1 = require("@spinajs/di");
39
- const exceptions_1 = require("@spinajs/exceptions");
40
- const exceptions_2 = require("./exceptions");
41
- const _ = __importStar(require("lodash"));
42
- const typescript_mix_1 = require("typescript-mix");
43
- const enums_1 = require("./enums");
44
- const interfaces_1 = require("./interfaces");
45
- const statements_1 = require("./statements");
46
- const driver_1 = require("./driver");
47
- const model_1 = require("./model");
48
- const relations_1 = require("./relations");
49
- const orm_1 = require("./orm");
50
- function isWhereOperator(val) {
51
- return _.isString(val) && Object.values(enums_1.SqlOperator).includes(val.toLowerCase());
52
- }
53
- let Builder = class Builder {
54
- constructor(container, driver, model) {
55
- this._middlewares = [];
56
- this._queryMiddlewares = [];
57
- this._driver = driver;
58
- this._container = container;
59
- this._model = model;
60
- this._nonSelect = true;
61
- this._asRaw = false;
62
- this._queryMiddlewares = di_1.DI.resolve(Array.ofType(interfaces_1.QueryMiddleware));
63
- }
64
- get Driver() {
65
- return this._driver;
66
- }
67
- get Container() {
68
- return this._container;
69
- }
70
- get Model() {
71
- return this._model;
72
- }
73
- then(onfulfilled, onrejected) {
74
- const execute = (compiled) => {
75
- return this._driver
76
- .execute(compiled.expression, compiled.bindings, this.QueryContext)
77
- .then((result) => {
78
- try {
79
- if (this._asRaw) {
80
- onfulfilled(result);
81
- return;
82
- }
83
- let transformedResult = result;
84
- // if we have something to transform ...
85
- if (transformedResult) {
86
- this._middlewares.forEach((m) => {
87
- Object.assign(transformedResult, m.afterQuery(transformedResult));
88
- });
89
- }
90
- if (this._model && !this._nonSelect) {
91
- // TODO: rething this casting
92
- const models = transformedResult.map((r) => {
93
- let model = null;
94
- for (const middleware of this._middlewares.reverse()) {
95
- model = middleware.modelCreation(r);
96
- if (model !== null) {
97
- break;
98
- }
99
- }
100
- if (model === null) {
101
- model = new this._model();
102
- model.hydrate(r);
103
- }
104
- return model;
105
- });
106
- const afterMiddlewarePromises = this._middlewares.reduce((prev, current) => {
107
- return prev.concat([current.afterHydration(models)]);
108
- }, []);
109
- if (this._middlewares.length > 0) {
110
- Promise.all(afterMiddlewarePromises).then(() => {
111
- onfulfilled(models);
112
- }, onrejected);
113
- }
114
- else {
115
- onfulfilled(models);
116
- }
117
- }
118
- else {
119
- onfulfilled(transformedResult);
120
- }
121
- }
122
- catch (err) {
123
- onrejected(err);
124
- }
125
- })
126
- .catch((err) => {
127
- onrejected(err);
128
- });
129
- };
130
- const compiled = this.toDB();
131
- if (Array.isArray(compiled)) {
132
- // TODO: rethink this cast
133
- return Promise.all(compiled.map((c) => execute(c)));
134
- }
135
- else {
136
- return execute(compiled);
137
- }
138
- }
139
- middleware(middleware) {
140
- this._middlewares.push(middleware);
141
- return this;
142
- }
143
- /**
144
- * Builds query that is ready to use in DB
145
- */
146
- toDB() {
147
- throw new exceptions_1.MethodNotImplemented();
148
- }
149
- };
150
- Builder = __decorate([
151
- (0, di_1.NewInstance)(),
152
- (0, di_1.Inject)(di_1.Container),
153
- __metadata("design:paramtypes", [Object, driver_1.OrmDriver, Object])
154
- ], Builder);
155
- exports.Builder = Builder;
156
- /**
157
- * Base class for queires. Implements basic query functionality
158
- *
159
- */
160
- let QueryBuilder = class QueryBuilder extends Builder {
161
- constructor(container, driver, model) {
162
- super(container, driver, model);
163
- }
164
- /**
165
- * SQL table name that query is executed on
166
- *
167
- * @example
168
- * SELECT * FROM `users`
169
- */
170
- get Table() {
171
- return this._table;
172
- }
173
- /**
174
- * DB table alias
175
- */
176
- get TableAlias() {
177
- return this._tableAlias;
178
- }
179
- /**
180
- * SQL schema/database name that query is executed on.
181
- *
182
- * @example
183
- * SELECT * FROM `spinejs`.`users` as u
184
- */
185
- get Database() {
186
- return this._database;
187
- }
188
- /**
189
- * Sets schema to this query.
190
- *
191
- * @param database - schema or database name in database
192
- */
193
- database(database) {
194
- if (!database) {
195
- throw new exceptions_1.InvalidArgument(`schema argument cannot be null or empty`);
196
- }
197
- this._database = database;
198
- return this;
199
- }
200
- /**
201
- * Sets table that query is executed on
202
- *
203
- * @param table - sql table name
204
- * @param alias - sql table alias
205
- *
206
- * @example
207
- *
208
- * this.setTable("user","u")
209
- *
210
- */
211
- setTable(table, alias) {
212
- if (!table.trim()) {
213
- throw new exceptions_1.InvalidArgument('table name is empty');
214
- }
215
- this._table = table;
216
- this.setAlias(alias);
217
- return this;
218
- }
219
- /**
220
- * Sets table alias for query
221
- *
222
- * @param alias - sql table alias
223
- */
224
- setAlias(alias) {
225
- this._tableAlias = alias;
226
- return this;
227
- }
228
- from(table, alias) {
229
- return this.setTable(table, alias);
230
- }
231
- };
232
- QueryBuilder = __decorate([
233
- (0, di_1.NewInstance)(),
234
- (0, di_1.Inject)(di_1.Container),
235
- __metadata("design:paramtypes", [Object, driver_1.OrmDriver, Object])
236
- ], QueryBuilder);
237
- exports.QueryBuilder = QueryBuilder;
238
- let LimitBuilder = class LimitBuilder {
239
- constructor() {
240
- this._first = false;
241
- this._limit = {
242
- limit: -1,
243
- offset: -1,
244
- };
245
- }
246
- take(count) {
247
- if (count <= 0) {
248
- throw new exceptions_1.InvalidArgument(`take count cannot be negative number`);
249
- }
250
- this._limit.limit = count;
251
- return this;
252
- }
253
- skip(count) {
254
- if (count < 0) {
255
- throw new exceptions_1.InvalidArgument(`skip count cannot be negative number`);
256
- }
257
- this._limit.offset = count;
258
- return this;
259
- }
260
- async first() {
261
- this._first = true;
262
- this._limit.limit = 1;
263
- return (await this);
264
- }
265
- async firstOrFail() {
266
- return this.firstOrThrow(new exceptions_2.OrmException('not found'));
267
- }
268
- async orThrow(error) {
269
- const result = (await this);
270
- if (result === undefined || (Array.isArray(result) && result.length === 0)) {
271
- throw error;
272
- }
273
- return result;
274
- }
275
- async firstOrThrow(error) {
276
- const result = await this.first();
277
- if (result === undefined) {
278
- throw error;
279
- }
280
- return result;
281
- }
282
- getLimits() {
283
- return this._limit;
284
- }
285
- };
286
- LimitBuilder = __decorate([
287
- (0, di_1.NewInstance)(),
288
- __metadata("design:paramtypes", [])
289
- ], LimitBuilder);
290
- exports.LimitBuilder = LimitBuilder;
291
- let OrderByBuilder = class OrderByBuilder {
292
- constructor() {
293
- this._sort = {
294
- column: '',
295
- order: enums_1.SordOrder.ASC,
296
- };
297
- }
298
- order(column, direction) {
299
- this._sort = {
300
- column,
301
- order: direction,
302
- };
303
- return this;
304
- }
305
- orderBy(column) {
306
- this._sort = {
307
- column,
308
- order: enums_1.SordOrder.ASC,
309
- };
310
- return this;
311
- }
312
- orderByDescending(column) {
313
- this._sort = {
314
- column,
315
- order: enums_1.SordOrder.DESC,
316
- };
317
- return this;
318
- }
319
- getSort() {
320
- return this._sort.column.trim() !== '' ? this._sort : null;
321
- }
322
- };
323
- OrderByBuilder = __decorate([
324
- (0, di_1.NewInstance)(),
325
- __metadata("design:paramtypes", [])
326
- ], OrderByBuilder);
327
- exports.OrderByBuilder = OrderByBuilder;
328
- let ColumnsBuilder = class ColumnsBuilder {
329
- constructor() {
330
- this._columns = [];
331
- }
332
- /**
333
- * Clears all select clauses from the query.
334
- *
335
- * @example
336
- *
337
- * query.columns()
338
- *
339
- */
340
- clearColumns() {
341
- this._columns = [];
342
- return this;
343
- }
344
- columns(names) {
345
- const descriptor = (0, model_1.extractModelDescriptor)(this._model);
346
- this._columns = names.map((n) => {
347
- return this._container.resolve(statements_1.ColumnStatement, [n, null, this._tableAlias, descriptor === null || descriptor === void 0 ? void 0 : descriptor.Columns.find((c) => c.Name === n)]);
348
- });
349
- return this;
350
- }
351
- select(column, alias) {
352
- const descriptor = (0, model_1.extractModelDescriptor)(this._model);
353
- if (column instanceof Map) {
354
- column.forEach((alias, colName) => {
355
- this._columns.push(this._container.resolve(statements_1.ColumnStatement, [colName, alias, this._tableAlias, descriptor === null || descriptor === void 0 ? void 0 : descriptor.Columns.find((c) => c.Name === colName)]));
356
- });
357
- }
358
- if (column instanceof RawQuery) {
359
- this._columns.push(this._container.resolve(statements_1.ColumnRawStatement, [column, null, this._tableAlias]));
360
- }
361
- else {
362
- this._columns.push(this._container.resolve(statements_1.ColumnStatement, [column, alias, this._tableAlias, descriptor === null || descriptor === void 0 ? void 0 : descriptor.Columns.find((c) => c.Name === column)]));
363
- }
364
- return this;
365
- }
366
- getColumns() {
367
- return this._columns;
368
- }
369
- };
370
- ColumnsBuilder = __decorate([
371
- (0, di_1.NewInstance)(),
372
- __metadata("design:paramtypes", [])
373
- ], ColumnsBuilder);
374
- exports.ColumnsBuilder = ColumnsBuilder;
375
- let RawQuery = RawQuery_1 = class RawQuery {
376
- constructor(query, bindings) {
377
- this._query = '';
378
- this._bindings = [];
379
- this._query = query;
380
- this._bindings = bindings;
381
- }
382
- get Query() {
383
- return this._query;
384
- }
385
- get Bindings() {
386
- return this._bindings;
387
- }
388
- static create(query, bindings) {
389
- return new RawQuery_1(query, bindings);
390
- }
391
- };
392
- RawQuery = RawQuery_1 = __decorate([
393
- (0, di_1.NewInstance)(),
394
- __metadata("design:paramtypes", [String, Array])
395
- ], RawQuery);
396
- exports.RawQuery = RawQuery;
397
- class GroupByBuilder {
398
- constructor() {
399
- this._groupStatements = [];
400
- }
401
- get GroupStatements() {
402
- return this._groupStatements;
403
- }
404
- clearGroupBy() {
405
- this._groupStatements = [];
406
- return this;
407
- }
408
- groupBy(expression) {
409
- this._groupStatements.push(this._container.resolve(statements_1.GroupByStatement, [expression]));
410
- return this;
411
- }
412
- }
413
- exports.GroupByBuilder = GroupByBuilder;
414
- class JoinBuilder {
415
- constructor(container) {
416
- this._joinStatements = [];
417
- this._container = container;
418
- this._joinStatements = [];
419
- }
420
- get JoinStatements() {
421
- return this._joinStatements;
422
- }
423
- clearJoins() {
424
- this._joinStatements = [];
425
- return this;
426
- }
427
- innerJoin(_table, _AliasOrForeignKey, _fkOrPkKey, _primaryKey) {
428
- this.addJoinStatement.call(this, enums_1.JoinMethod.INNER, ...arguments);
429
- return this;
430
- }
431
- leftJoin(_table, _AliasOrForeignKey, _fkOrPkKey, _primaryKey) {
432
- this.addJoinStatement.call(this, enums_1.JoinMethod.LEFT, ...arguments);
433
- return this;
434
- }
435
- leftOuterJoin(_table, _AliasOrForeignKey, _fkOrPkKey, _primaryKey) {
436
- this.addJoinStatement.call(this, enums_1.JoinMethod.LEFT_OUTER, ...arguments);
437
- return this;
438
- }
439
- rightJoin(_table, _AliasOrForeignKey, _fkOrPkKey, _primaryKey) {
440
- this.addJoinStatement.call(this, enums_1.JoinMethod.RIGHT, ...arguments);
441
- return this;
442
- }
443
- rightOuterJoin(_table, _AliasOrForeignKey, _fkOrPkKey, _primaryKey) {
444
- this.addJoinStatement.call(this, enums_1.JoinMethod.RIGHT_OUTER, ...arguments);
445
- return this;
446
- }
447
- fullOuterJoin(_table, _AliasOrForeignKey, _fkOrPkKey, _primaryKey) {
448
- this.addJoinStatement.call(this, enums_1.JoinMethod.FULL_OUTER, ...arguments);
449
- return this;
450
- }
451
- crossJoin(_table, _AliasOrForeignKey, _fkOrPkKey, _primaryKey) {
452
- this.addJoinStatement.call(this, enums_1.JoinMethod.CROSS, ...arguments);
453
- return this;
454
- }
455
- addJoinStatement(method, table, AliasOrForeignKey, fkOrPkKey, primaryKey) {
456
- let stmt = null;
457
- if (arguments.length === 3) {
458
- stmt = this._container.resolve(statements_1.JoinStatement, [this, this._model, table, method, AliasOrForeignKey]);
459
- }
460
- else if (arguments.length === 4) {
461
- stmt = this._container.resolve(statements_1.JoinStatement, [this, this._model, table, method, AliasOrForeignKey, fkOrPkKey, null, this._tableAlias]);
462
- }
463
- else if (arguments.length === 5) {
464
- stmt = this._container.resolve(statements_1.JoinStatement, [this, this._model, table, method, fkOrPkKey, primaryKey, AliasOrForeignKey, this._tableAlias]);
465
- }
466
- else {
467
- stmt = this._container.resolve(statements_1.JoinStatement, [this, this._model, table, method]);
468
- }
469
- this.JoinStatements.push(stmt);
470
- }
471
- }
472
- exports.JoinBuilder = JoinBuilder;
473
- let WithRecursiveBuilder = class WithRecursiveBuilder {
474
- get CteRecursive() {
475
- return this._cteStatement;
476
- }
477
- withRecursive(rcKeyName, pkName) {
478
- this._cteStatement = this._container.resolve(statements_1.WithRecursiveStatement, ['cte', this, rcKeyName, pkName]);
479
- return this;
480
- }
481
- };
482
- WithRecursiveBuilder = __decorate([
483
- (0, di_1.NewInstance)()
484
- ], WithRecursiveBuilder);
485
- exports.WithRecursiveBuilder = WithRecursiveBuilder;
486
- let WhereBuilder = WhereBuilder_1 = class WhereBuilder {
487
- constructor(container, tableAlias) {
488
- this._statements = [];
489
- this._boolean = enums_1.WhereBoolean.AND;
490
- this._container = container;
491
- this._boolean = enums_1.WhereBoolean.AND;
492
- this._statements = [];
493
- this._tableAlias = tableAlias;
494
- }
495
- get Statements() {
496
- return this._statements;
497
- }
498
- get Op() {
499
- return this._boolean;
500
- }
501
- where(column, operator, value) {
502
- const self = this;
503
- // Support "where true || where false"
504
- if (_.isBoolean(column)) {
505
- return this.where(RawQuery.create(column ? 'TRUE' : 'FALSE'));
506
- }
507
- if (column instanceof RawQuery) {
508
- this.Statements.push(this._container.resolve(statements_1.RawQueryStatement, [column.Query, column.Bindings, self._tableAlias]));
509
- return this;
510
- }
511
- // handle nested where's
512
- if (_.isFunction(column)) {
513
- const builder = new WhereBuilder_1(this._container, this._tableAlias);
514
- column.call(builder);
515
- self.Statements.push(this._container.resolve(statements_1.WhereQueryStatement, [builder, self._tableAlias]));
516
- return this;
517
- }
518
- // handle simple key = object[key] AND ....
519
- if (_.isObject(column) && !(column instanceof statements_1.Wrap)) {
520
- return this.whereObject(column);
521
- }
522
- if (typeof value === 'undefined') {
523
- return _handleForTwo.call(this, column, operator);
524
- }
525
- return _handleForThree.call(this, column, operator, value);
526
- /**
527
- * handles for where("foo", 1).where(...) cases
528
- * it produces WHERE foo = 1
529
- */
530
- function _handleForTwo(c, v) {
531
- let sVal = v;
532
- if (sVal === undefined) {
533
- throw new exceptions_1.InvalidArgument(`value cannot be undefined`);
534
- }
535
- if (!_.isString(c) && !(c instanceof statements_1.Wrap)) {
536
- throw new exceptions_1.InvalidArgument(`column is not of type string or wrapped.`);
537
- }
538
- if (sVal === null) {
539
- return this.whereNull(c);
540
- }
541
- self._statements.push(self._container.resolve(statements_1.WhereStatement, [c, enums_1.SqlOperator.EQ, sVal, self._tableAlias, this._container, self._model]));
542
- return self;
543
- }
544
- /**
545
- * Handles for where("foo",'!=',1) etc
546
- * it produces WHERE foo != 1
547
- */
548
- function _handleForThree(c, o, v) {
549
- let sVal = v;
550
- if (!isWhereOperator(o)) {
551
- throw new exceptions_1.InvalidArgument(`operator ${o} is invalid`);
552
- }
553
- if (!_.isString(c) && !(c instanceof statements_1.Wrap)) {
554
- throw new exceptions_1.InvalidArgument(`column is not of type string or wrapped.`);
555
- }
556
- if (sVal === null) {
557
- return this.whereNull(c);
558
- }
559
- if (sVal === null) {
560
- return o === enums_1.SqlOperator.NOT_NULL ? this.whereNotNull(c) : this.whereNull(c);
561
- }
562
- self._statements.push(self._container.resolve(statements_1.WhereStatement, [c, o, sVal, self._tableAlias, this._container, self._model]));
563
- return this;
564
- }
565
- }
566
- orWhere(column, ..._args) {
567
- this._boolean = enums_1.WhereBoolean.OR;
568
- return this.where(column, ...Array.from(arguments).slice(1));
569
- }
570
- andWhere(column, ..._args) {
571
- this._boolean = enums_1.WhereBoolean.AND;
572
- return this.where(column, ...Array.from(arguments).slice(1));
573
- }
574
- whereObject(obj) {
575
- for (const key of Object.keys(obj)) {
576
- this.andWhere(key, enums_1.SqlOperator.EQ, obj[key]);
577
- }
578
- return this;
579
- }
580
- whereNotNull(column) {
581
- this._statements.push(this._container.resolve(statements_1.WhereStatement, [column, enums_1.SqlOperator.NOT_NULL, null, this._tableAlias, this._container]));
582
- return this;
583
- }
584
- whereNull(column) {
585
- this._statements.push(this._container.resolve(statements_1.WhereStatement, [column, enums_1.SqlOperator.NULL, null, this._tableAlias, this._container]));
586
- return this;
587
- }
588
- whereNot(column, val) {
589
- return this.where(column, enums_1.SqlOperator.NOT, val);
590
- }
591
- whereIn(column, val) {
592
- this._statements.push(this._container.resolve(statements_1.InStatement, [column, val, false, this._tableAlias, this._container]));
593
- return this;
594
- }
595
- whereNotIn(column, val) {
596
- this._statements.push(this._container.resolve(statements_1.InStatement, [column, val, true, this._tableAlias, this._container]));
597
- return this;
598
- }
599
- whereExist(query) {
600
- this._statements.push(this._container.resolve(statements_1.ExistsQueryStatement, [query, false]));
601
- return this;
602
- }
603
- whereNotExists(query) {
604
- this._statements.push(this._container.resolve(statements_1.ExistsQueryStatement, [query, true]));
605
- return this;
606
- }
607
- whereBetween(column, val) {
608
- this._statements.push(this._container.resolve(statements_1.BetweenStatement, [column, val, false, this._tableAlias]));
609
- return this;
610
- }
611
- whereNotBetween(column, val) {
612
- this._statements.push(this._container.resolve(statements_1.BetweenStatement, [column, val, true, this._tableAlias]));
613
- return this;
614
- }
615
- whereInSet(column, val) {
616
- this._statements.push(this._container.resolve(statements_1.InSetStatement, [column, val, false, this._tableAlias]));
617
- return this;
618
- }
619
- whereNotInSet(column, val) {
620
- this._statements.push(this._container.resolve(statements_1.InSetStatement, [column, val, true, this._tableAlias]));
621
- return this;
622
- }
623
- clearWhere() {
624
- this._statements = [];
625
- return this;
626
- }
627
- };
628
- WhereBuilder = WhereBuilder_1 = __decorate([
629
- (0, di_1.NewInstance)(),
630
- __metadata("design:paramtypes", [di_1.Container, String])
631
- ], WhereBuilder);
632
- exports.WhereBuilder = WhereBuilder;
633
- class SelectQueryBuilder extends QueryBuilder {
634
- constructor(container, driver, model, owner) {
635
- super(container, driver, model);
636
- this._columns = [];
637
- /**
638
- * where query props
639
- */
640
- this._statements = [];
641
- this._joinStatements = [];
642
- this._groupStatements = [];
643
- this._relations = [];
644
- this._owner = owner;
645
- this._distinct = false;
646
- this._method = enums_1.QueryMethod.SELECT;
647
- this._boolean = enums_1.WhereBoolean.AND;
648
- this._sort = {
649
- column: '',
650
- order: enums_1.SordOrder.ASC,
651
- };
652
- this._first = false;
653
- this._limit = {
654
- limit: -1,
655
- offset: -1,
656
- };
657
- this._nonSelect = false;
658
- this.QueryContext = interfaces_1.QueryContext.Select;
659
- this._queryMiddlewares.forEach((x) => x.afterQueryCreation(this));
660
- }
661
- get Owner() {
662
- return this._owner;
663
- }
664
- get IsDistinct() {
665
- return this._distinct;
666
- }
667
- get Relations() {
668
- return this._relations;
669
- }
670
- async asRaw() {
671
- this._asRaw = true;
672
- return (await this);
673
- }
674
- setAlias(alias) {
675
- this._tableAlias = alias;
676
- this._columns.forEach((c) => (c.TableAlias = alias));
677
- this._joinStatements.forEach((c) => (c.TableAlias = alias));
678
- this._statements.forEach((c) => (c.TableAlias = alias));
679
- return this;
680
- }
681
- clone() {
682
- const builder = new SelectQueryBuilder(this._container, this._driver, this._model, this._owner);
683
- builder._columns = this._columns.slice(0);
684
- builder._joinStatements = this._joinStatements.slice(0);
685
- builder._statements = this._statements.slice(0);
686
- builder._limit = Object.assign({}, this._limit);
687
- builder._sort = Object.assign({}, this._sort);
688
- builder._boolean = this._boolean;
689
- builder._distinct = this._distinct;
690
- builder._table = this._table;
691
- builder._tableAlias = this._tableAlias;
692
- return builder;
693
- }
694
- populate(relation, callback) {
695
- var _a;
696
- // if relation was already populated, just call callback on it
697
- const fRelation = this._relations.find((r) => r.Name === relation);
698
- if (fRelation) {
699
- fRelation.executeOnQuery(callback);
700
- return;
701
- }
702
- let relInstance = null;
703
- const descriptor = (0, model_1.extractModelDescriptor)(this._model);
704
- if (!descriptor.Relations.has(relation)) {
705
- throw new exceptions_1.InvalidArgument(`Relation ${relation} not exists in model ${(_a = this._model) === null || _a === void 0 ? void 0 : _a.constructor.name}`);
706
- }
707
- const relDescription = descriptor.Relations.get(relation);
708
- if (relDescription.Type === interfaces_1.RelationType.One && relDescription.Recursive) {
709
- relInstance = this._container.resolve(relations_1.BelongsToRecursiveRelation, [this._container.get(orm_1.Orm), this, relDescription, this._owner]);
710
- }
711
- else {
712
- if (relDescription.Recursive) {
713
- throw new exceptions_1.InvalidOperation(`cannot mark relation as recursive with non one-to-one relation type`);
714
- }
715
- switch (relDescription.Type) {
716
- case interfaces_1.RelationType.One:
717
- relInstance = this._container.resolve(relations_1.BelongsToRelation, [this._container.get(orm_1.Orm), this, relDescription, this._owner]);
718
- break;
719
- case interfaces_1.RelationType.Many:
720
- relInstance = this._container.resolve(relations_1.OneToManyRelation, [this._container.get(orm_1.Orm), this, relDescription, this._owner]);
721
- break;
722
- case interfaces_1.RelationType.ManyToMany:
723
- relInstance = this._container.resolve(relations_1.ManyToManyRelation, [this._container.get(orm_1.Orm), this, relDescription, null]);
724
- break;
725
- }
726
- }
727
- relInstance.execute(callback);
728
- relInstance.Name = relation;
729
- this._relations.push(relInstance);
730
- return this;
731
- }
732
- mergeStatements(builder) {
733
- this._joinStatements = this._joinStatements.concat(builder._joinStatements);
734
- this._columns = this._columns.concat(builder._columns);
735
- this._statements = this._statements.concat(builder._statements);
736
- this._relations = this._relations.concat(builder._relations);
737
- this._middlewares = this._middlewares.concat(builder._middlewares);
738
- }
739
- min(column, as) {
740
- this._columns.push(this._container.resolve(statements_1.ColumnMethodStatement, [column, enums_1.ColumnMethods.MIN, as, this._tableAlias]));
741
- return this;
742
- }
743
- max(column, as) {
744
- this._columns.push(this._container.resolve(statements_1.ColumnMethodStatement, [column, enums_1.ColumnMethods.MAX, as, this._tableAlias]));
745
- return this;
746
- }
747
- count(column, as) {
748
- this._columns.push(this._container.resolve(statements_1.ColumnMethodStatement, [column, enums_1.ColumnMethods.COUNT, as, this._tableAlias]));
749
- return this;
750
- }
751
- sum(column, as) {
752
- this._columns.push(this._container.resolve(statements_1.ColumnMethodStatement, [column, enums_1.ColumnMethods.SUM, as, this._tableAlias]));
753
- return this;
754
- }
755
- avg(column, as) {
756
- this._columns.push(this._container.resolve(statements_1.ColumnMethodStatement, [column, enums_1.ColumnMethods.AVG, as, this._tableAlias]));
757
- return this;
758
- }
759
- distinct() {
760
- if (this._columns.length === 0 || this._columns[0].IsWildcard) {
761
- throw new exceptions_1.InvalidOperation('Cannot force DISTINCT on unknown column');
762
- }
763
- this._distinct = true;
764
- return this;
765
- }
766
- toDB() {
767
- const compiler = this._container.resolve(interfaces_1.SelectQueryCompiler, [this]);
768
- return compiler.compile();
769
- }
770
- then(onfulfilled, onrejected) {
771
- return super.then((result) => {
772
- if (this._first) {
773
- if (Array.isArray(result)) {
774
- if (result.length !== 0) {
775
- return onfulfilled(result ? result[0] : null);
776
- }
777
- else {
778
- return onfulfilled(undefined);
779
- }
780
- }
781
- else {
782
- return onfulfilled(result);
783
- }
784
- }
785
- else {
786
- return onfulfilled(result);
787
- }
788
- }, onrejected);
789
- }
790
- async execute() {
791
- return (await this);
792
- }
793
- }
794
- __decorate([
795
- (0, typescript_mix_1.use)(WhereBuilder, LimitBuilder, OrderByBuilder, ColumnsBuilder, JoinBuilder, WithRecursiveBuilder, GroupByBuilder),
796
- __metadata("design:type", Object)
797
- ], SelectQueryBuilder.prototype, "this", void 0);
798
- exports.SelectQueryBuilder = SelectQueryBuilder;
799
- class DeleteQueryBuilder extends QueryBuilder {
800
- constructor(container, driver, model) {
801
- super(container, driver, model);
802
- this._method = enums_1.QueryMethod.DELETE;
803
- this._statements = [];
804
- this._boolean = enums_1.WhereBoolean.AND;
805
- this._limit = {
806
- limit: -1,
807
- offset: -1,
808
- };
809
- this.QueryContext = interfaces_1.QueryContext.Delete;
810
- }
811
- toDB() {
812
- return this._container.resolve(interfaces_1.DeleteQueryCompiler, [this]).compile();
813
- }
814
- }
815
- __decorate([
816
- (0, typescript_mix_1.use)(WhereBuilder, LimitBuilder),
817
- __metadata("design:type", Object)
818
- ], DeleteQueryBuilder.prototype, "this", void 0);
819
- exports.DeleteQueryBuilder = DeleteQueryBuilder;
820
- class OnDuplicateQueryBuilder {
821
- constructor(container, insertQueryBuilder, column) {
822
- this._parent = insertQueryBuilder;
823
- this._container = container;
824
- this._column = _.isArray(column) ? column : [column];
825
- }
826
- getColumn() {
827
- return this._column;
828
- }
829
- getColumnsToUpdate() {
830
- return this._columnsToUpdate;
831
- }
832
- getParent() {
833
- return this._parent;
834
- }
835
- update(columns) {
836
- this._columnsToUpdate = columns;
837
- return this;
838
- }
839
- then(onfulfilled, onrejected) {
840
- return this._parent.then(onfulfilled, onrejected);
841
- }
842
- toDB() {
843
- return this._parent.toDB();
844
- }
845
- }
846
- exports.OnDuplicateQueryBuilder = OnDuplicateQueryBuilder;
847
- class UpdateQueryBuilder extends QueryBuilder {
848
- constructor(container, driver, model) {
849
- super(container, driver, model);
850
- this._value = {};
851
- this._method = enums_1.QueryMethod.UPDATE;
852
- this._boolean = enums_1.WhereBoolean.AND;
853
- this._statements = [];
854
- this.QueryContext = interfaces_1.QueryContext.Update;
855
- }
856
- get Value() {
857
- return this._value;
858
- }
859
- in(name) {
860
- this.setTable(name);
861
- return this;
862
- }
863
- update(value) {
864
- this._value = value;
865
- return this;
866
- }
867
- toDB() {
868
- return this._container.resolve(interfaces_1.UpdateQueryCompiler, [this]).compile();
869
- }
870
- }
871
- __decorate([
872
- (0, typescript_mix_1.use)(WhereBuilder),
873
- __metadata("design:type", Object)
874
- ], UpdateQueryBuilder.prototype, "this", void 0);
875
- exports.UpdateQueryBuilder = UpdateQueryBuilder;
876
- class InsertQueryBuilder extends QueryBuilder {
877
- constructor(container, driver, model) {
878
- super(container, driver, model);
879
- this._method = enums_1.QueryMethod.INSERT;
880
- this._columns = [];
881
- this._values = [];
882
- this.QueryContext = interfaces_1.QueryContext.Insert;
883
- }
884
- get Values() {
885
- return this._values;
886
- }
887
- get Ignore() {
888
- return this._ignore;
889
- }
890
- get Update() {
891
- return this._update;
892
- }
893
- get Replace() {
894
- return this._replace;
895
- }
896
- /**
897
- * Sets insert to ignore on duplicate
898
- */
899
- orIgnore() {
900
- this._ignore = true;
901
- return this;
902
- }
903
- orReplace() {
904
- this._update = true;
905
- return this;
906
- }
907
- values(data) {
908
- const self = this;
909
- if (Array.isArray(data)) {
910
- this.columns(_.chain(data).map(_.keys).flatten().uniq().value());
911
- data.forEach((d) => {
912
- _addData(d);
913
- });
914
- }
915
- else {
916
- this.columns(_.keysIn(data));
917
- _addData(data);
918
- }
919
- function _addData(d) {
920
- const binding = [];
921
- self._columns
922
- .filter((c) => !(c.Column instanceof RawQuery))
923
- .map((c) => {
924
- return c.Column;
925
- })
926
- .forEach((c) => {
927
- binding.push(d[c]);
928
- });
929
- self._values.push(binding);
930
- }
931
- return this;
932
- }
933
- into(table, schema) {
934
- this.setTable(table, schema);
935
- return this;
936
- }
937
- onDuplicate(column) {
938
- let columnToCheck = column;
939
- if (!columnToCheck && this._model) {
940
- const dsc = (0, model_1.extractModelDescriptor)(this._model);
941
- columnToCheck = dsc.Columns.filter((c) => c.Unique).map((c) => c.Name);
942
- }
943
- this._update = true;
944
- this.DuplicateQueryBuilder = new OnDuplicateQueryBuilder(this._container, this, columnToCheck);
945
- return this.DuplicateQueryBuilder;
946
- }
947
- toDB() {
948
- return this._container.resolve(interfaces_1.InsertQueryCompiler, [this]).compile();
949
- }
950
- }
951
- __decorate([
952
- (0, typescript_mix_1.use)(ColumnsBuilder),
953
- __metadata("design:type", Object)
954
- ], InsertQueryBuilder.prototype, "this", void 0);
955
- exports.InsertQueryBuilder = InsertQueryBuilder;
956
- let IndexQueryBuilder = class IndexQueryBuilder extends Builder {
957
- constructor(container, driver) {
958
- super(container, driver);
959
- this.QueryContext = interfaces_1.QueryContext.Schema;
960
- }
961
- name(name) {
962
- this.Name = name;
963
- return this;
964
- }
965
- unique() {
966
- this.Unique = true;
967
- return this;
968
- }
969
- table(name) {
970
- this.Table = name;
971
- return this;
972
- }
973
- columns(colNames) {
974
- this.Columns = colNames;
975
- return this;
976
- }
977
- toDB() {
978
- return this._container.resolve(interfaces_1.IndexQueryCompiler, [this]).compile();
979
- }
980
- };
981
- IndexQueryBuilder = __decorate([
982
- (0, di_1.NewInstance)(),
983
- (0, di_1.Inject)(di_1.Container),
984
- __metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver])
985
- ], IndexQueryBuilder);
986
- exports.IndexQueryBuilder = IndexQueryBuilder;
987
- let ForeignKeyBuilder = class ForeignKeyBuilder {
988
- constructor() {
989
- this.OnDeleteAction = interfaces_1.ReferentialAction.NoAction;
990
- this.OnUpdateAction = interfaces_1.ReferentialAction.NoAction;
991
- }
992
- /**
993
- *
994
- * Referenced field in child table
995
- *
996
- * @param fkName - name of foreign field in child table
997
- */
998
- foreignKey(fkName) {
999
- this.ForeignKeyField = fkName;
1000
- return this;
1001
- }
1002
- /**
1003
- *
1004
- * Referenced parent table & key
1005
- *
1006
- * @param table - parent table
1007
- * @param pKey - parant table key field
1008
- */
1009
- references(table, pKey) {
1010
- this.Table = table;
1011
- this.PrimaryKey = pKey;
1012
- return this;
1013
- }
1014
- /**
1015
- *
1016
- * On delete action
1017
- *
1018
- * @param action - action to take on delete
1019
- */
1020
- onDelete(action) {
1021
- this.OnDeleteAction = action;
1022
- return this;
1023
- }
1024
- /**
1025
- *
1026
- * On update action
1027
- *
1028
- * @param action - action to take on update
1029
- */
1030
- onUpdate(action) {
1031
- this.OnUpdateAction = action;
1032
- return this;
1033
- }
1034
- /**
1035
- * Shorhand for on update and on delete cascade settings
1036
- */
1037
- cascade() {
1038
- this.OnUpdateAction = interfaces_1.ReferentialAction.Cascade;
1039
- this.OnDeleteAction = interfaces_1.ReferentialAction.Cascade;
1040
- return this;
1041
- }
1042
- };
1043
- ForeignKeyBuilder = __decorate([
1044
- (0, di_1.NewInstance)(),
1045
- __metadata("design:paramtypes", [])
1046
- ], ForeignKeyBuilder);
1047
- exports.ForeignKeyBuilder = ForeignKeyBuilder;
1048
- let ColumnQueryBuilder = class ColumnQueryBuilder {
1049
- constructor(container, name, type, ...args) {
1050
- this.container = container;
1051
- this.Name = name;
1052
- this.Type = type;
1053
- this.Charset = '';
1054
- this.Args = [];
1055
- this.AutoIncrement = false;
1056
- this.NotNull = false;
1057
- this.Collation = '';
1058
- this.Comment = '';
1059
- this.Unique = false;
1060
- this.Unsigned = false;
1061
- this.Args.push(...args);
1062
- }
1063
- notNull() {
1064
- this.NotNull = true;
1065
- return this;
1066
- }
1067
- unique() {
1068
- this.Unique = true;
1069
- return this;
1070
- }
1071
- unsigned() {
1072
- this.Unsigned = true;
1073
- return this;
1074
- }
1075
- autoIncrement() {
1076
- this.AutoIncrement = true;
1077
- return this;
1078
- }
1079
- default() {
1080
- this.Default = this.container.resolve((interfaces_1.DefaultValueBuilder), [this]);
1081
- return this.Default;
1082
- }
1083
- primaryKey() {
1084
- this.PrimaryKey = true;
1085
- return this;
1086
- }
1087
- comment(comment) {
1088
- this.Comment = comment;
1089
- return this;
1090
- }
1091
- charset(charset) {
1092
- this.Charset = charset;
1093
- return this;
1094
- }
1095
- collation(collation) {
1096
- this.Collation = collation;
1097
- return this;
1098
- }
1099
- };
1100
- ColumnQueryBuilder = __decorate([
1101
- (0, di_1.NewInstance)(),
1102
- (0, di_1.Inject)(di_1.Container),
1103
- __metadata("design:paramtypes", [Object, String, String, Object])
1104
- ], ColumnQueryBuilder);
1105
- exports.ColumnQueryBuilder = ColumnQueryBuilder;
1106
- let AlterColumnQueryBuilder = class AlterColumnQueryBuilder extends ColumnQueryBuilder {
1107
- constructor(container, name, type, ...args) {
1108
- super(container, name, type, ...args);
1109
- this.OldName = name;
1110
- // we assume add by default
1111
- this.AlterType = interfaces_1.ColumnAlterationType.Add;
1112
- }
1113
- addColumn() {
1114
- this.AlterType = interfaces_1.ColumnAlterationType.Add;
1115
- return this;
1116
- }
1117
- modify() {
1118
- this.AlterType = interfaces_1.ColumnAlterationType.Modify;
1119
- return this;
1120
- }
1121
- rename(newName) {
1122
- this.AlterType = interfaces_1.ColumnAlterationType.Rename;
1123
- this.Name = newName;
1124
- return this;
1125
- }
1126
- after(columnName) {
1127
- this.AfterColumn = columnName;
1128
- return this;
1129
- }
1130
- };
1131
- AlterColumnQueryBuilder = __decorate([
1132
- (0, di_1.Inject)(di_1.Container),
1133
- __metadata("design:paramtypes", [Object, String, String, Object])
1134
- ], AlterColumnQueryBuilder);
1135
- exports.AlterColumnQueryBuilder = AlterColumnQueryBuilder;
1136
- class TableExistsQueryBuilder extends QueryBuilder {
1137
- constructor(container, driver, name) {
1138
- super(container, driver, null);
1139
- this.setTable(name);
1140
- this.QueryContext = interfaces_1.QueryContext.Select;
1141
- }
1142
- toDB() {
1143
- return this._container.resolve(interfaces_1.TableExistsCompiler, [this]).compile();
1144
- }
1145
- }
1146
- exports.TableExistsQueryBuilder = TableExistsQueryBuilder;
1147
- class DropTableQueryBuilder extends QueryBuilder {
1148
- constructor(container, driver, name, database) {
1149
- super(container, driver, null);
1150
- this.setTable(name);
1151
- if (database) {
1152
- this.database(database);
1153
- }
1154
- this.Exists = false;
1155
- this.QueryContext = interfaces_1.QueryContext.Schema;
1156
- }
1157
- ifExists() {
1158
- this.Exists = true;
1159
- return this;
1160
- }
1161
- toDB() {
1162
- return this._container.resolve(interfaces_1.DropTableCompiler, [this]).compile();
1163
- }
1164
- }
1165
- exports.DropTableQueryBuilder = DropTableQueryBuilder;
1166
- class AlterTableQueryBuilder extends QueryBuilder {
1167
- constructor(container, driver, name) {
1168
- super(container, driver, null);
1169
- this.setTable(name);
1170
- this.QueryContext = interfaces_1.QueryContext.Schema;
1171
- this._columns = [];
1172
- this.DroppedColumns = [];
1173
- }
1174
- get Columns() {
1175
- return this._columns;
1176
- }
1177
- /**
1178
- * Renames table
1179
- *
1180
- * @param newTableName - new table name
1181
- */
1182
- rename(newTableName) {
1183
- this.NewTableName = newTableName;
1184
- }
1185
- dropColumn(column) {
1186
- this.DroppedColumns.push(column);
1187
- }
1188
- toDB() {
1189
- return this._container.resolve(interfaces_1.AlterTableQueryCompiler, [this]).compile();
1190
- }
1191
- }
1192
- exports.AlterTableQueryBuilder = AlterTableQueryBuilder;
1193
- class TableQueryBuilder extends QueryBuilder {
1194
- constructor(container, driver, name) {
1195
- super(container, driver, null);
1196
- this._charset = '';
1197
- this._comment = '';
1198
- this._columns = [];
1199
- this._foreignKeys = [];
1200
- this._temporary = false;
1201
- this._trackHistory = false;
1202
- this.setTable(name);
1203
- this.QueryContext = interfaces_1.QueryContext.Schema;
1204
- }
1205
- /**
1206
- * Alias for string(name, 36 )
1207
- */
1208
- uuid(name) {
1209
- return this.string(name, 36);
1210
- }
1211
- ifExists() {
1212
- this._checkExists = true;
1213
- return this;
1214
- }
1215
- /**
1216
- * Mark table as temporary
1217
- */
1218
- temporary() {
1219
- this._temporary = true;
1220
- return this;
1221
- }
1222
- /**
1223
- * Turn on history trackign for this table
1224
- * Each change & row will be tracked, and all history of changes can be accessed
1225
- */
1226
- trackHistory() {
1227
- this._trackHistory = true;
1228
- return this;
1229
- }
1230
- get Columns() {
1231
- return this._columns;
1232
- }
1233
- get ForeignKeys() {
1234
- return this._foreignKeys;
1235
- }
1236
- get CheckExists() {
1237
- return this._checkExists;
1238
- }
1239
- get Temporary() {
1240
- return this._temporary;
1241
- }
1242
- get TrackHistory() {
1243
- return this._trackHistory;
1244
- }
1245
- increments(name) {
1246
- return this.int(name).autoIncrement().notNull().primaryKey();
1247
- }
1248
- comment(comment) {
1249
- this._comment = comment;
1250
- }
1251
- charset(charset) {
1252
- this._charset = charset;
1253
- }
1254
- foreignKey(foreignKey) {
1255
- const builder = new ForeignKeyBuilder();
1256
- builder.foreignKey(foreignKey);
1257
- this._foreignKeys.push(builder);
1258
- return builder;
1259
- }
1260
- toDB() {
1261
- return this._container.resolve(interfaces_1.TableQueryCompiler, [this]).compile();
1262
- }
1263
- }
1264
- exports.TableQueryBuilder = TableQueryBuilder;
1265
- let TruncateTableQueryBuilder = class TruncateTableQueryBuilder extends QueryBuilder {
1266
- constructor(container, driver) {
1267
- super(container, driver);
1268
- this.container = container;
1269
- this.driver = driver;
1270
- }
1271
- toDB() {
1272
- return this._container.resolve(interfaces_1.TruncateTableQueryCompiler, [this]).compile();
1273
- }
1274
- };
1275
- TruncateTableQueryBuilder = __decorate([
1276
- (0, di_1.NewInstance)(),
1277
- (0, di_1.Inject)(di_1.Container),
1278
- __metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver])
1279
- ], TruncateTableQueryBuilder);
1280
- exports.TruncateTableQueryBuilder = TruncateTableQueryBuilder;
1281
- let CloneTableQueryBuilder = class CloneTableQueryBuilder extends QueryBuilder {
1282
- constructor(container, driver) {
1283
- super(container, driver);
1284
- this.container = container;
1285
- this.driver = driver;
1286
- this._shallow = true;
1287
- this._cloneSrc = '';
1288
- this._temporary = false;
1289
- }
1290
- get CloneSource() {
1291
- return this._cloneSrc;
1292
- }
1293
- get Temporary() {
1294
- return this._temporary;
1295
- }
1296
- get Shallow() {
1297
- return this._shallow;
1298
- }
1299
- get Filter() {
1300
- return this._filter;
1301
- }
1302
- /**
1303
- * Clones table structure without data
1304
- * Shorthand for createTable(( table) => table.clone("new"));
1305
- *
1306
- * @param srcTable - source table name
1307
- * @param newTable - target table name
1308
- */
1309
- shallowClone(srcTable, newTable) {
1310
- this.setTable(newTable);
1311
- this._cloneSrc = srcTable;
1312
- return this;
1313
- }
1314
- /**
1315
- * Clones table with data
1316
- *
1317
- * @param srcTable - source table name
1318
- * @param newTable - target table name
1319
- * @param filter - data filter, set null if all data is to be cloned
1320
- */
1321
- async deepClone(srcTable, newTable, filter) {
1322
- this.setTable(newTable);
1323
- this._cloneSrc = srcTable;
1324
- this._shallow = false;
1325
- if (filter) {
1326
- this._filter = new SelectQueryBuilder(this._container, this._driver);
1327
- this._filter.setTable(this._cloneSrc);
1328
- filter(this._filter);
1329
- }
1330
- return this;
1331
- }
1332
- toDB() {
1333
- return this._container.resolve(interfaces_1.TableCloneQueryCompiler, [this]).compile();
1334
- }
1335
- };
1336
- CloneTableQueryBuilder = __decorate([
1337
- (0, di_1.NewInstance)(),
1338
- (0, di_1.Inject)(di_1.Container),
1339
- __metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver])
1340
- ], CloneTableQueryBuilder);
1341
- exports.CloneTableQueryBuilder = CloneTableQueryBuilder;
1342
- class EventIntervalDesc {
1343
- }
1344
- exports.EventIntervalDesc = EventIntervalDesc;
1345
- let EventQueryBuilder = class EventQueryBuilder extends QueryBuilder {
1346
- constructor(container, driver, Name) {
1347
- super(container, driver);
1348
- this.container = container;
1349
- this.driver = driver;
1350
- this.Name = Name;
1351
- }
1352
- /**
1353
- * execute every time with specified interval ( days, hours, seconds, minutes etc)
1354
- */
1355
- every() {
1356
- this.EveryInterval = new EventIntervalDesc();
1357
- return this.EveryInterval;
1358
- }
1359
- /**
1360
- *
1361
- * Execute at specific time
1362
- *
1363
- * @param dateTime - specific time
1364
- */
1365
- at(dateTime) {
1366
- this.At = dateTime;
1367
- }
1368
- /**
1369
- * execute once at specific interfal from now eg. now + 1 day
1370
- */
1371
- fromNow() {
1372
- this.FromNowInverval = new EventIntervalDesc();
1373
- return this.FromNowInverval;
1374
- }
1375
- /**
1376
- *
1377
- * @param sql - code to execute, could be raw sql query, single builder, or multiple builders that will be executed on by one
1378
- */
1379
- do(sql) {
1380
- if (sql instanceof statements_1.RawQueryStatement) {
1381
- this.RawSql = sql;
1382
- }
1383
- else if (Array.isArray(sql)) {
1384
- this.Queries = sql;
1385
- }
1386
- else {
1387
- this.Queries = [sql];
1388
- }
1389
- }
1390
- /**
1391
- *
1392
- * Add comment to schedule for documentation. It is passed to sql engine
1393
- *
1394
- * @param comment - comment text
1395
- */
1396
- comment(comment) {
1397
- this.Comment = comment;
1398
- }
1399
- toDB() {
1400
- return this._container.resolve(interfaces_1.EventQueryCompiler, [this]).compile();
1401
- }
1402
- };
1403
- EventQueryBuilder = __decorate([
1404
- (0, di_1.NewInstance)(),
1405
- (0, di_1.Inject)(di_1.Container),
1406
- __metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver, String])
1407
- ], EventQueryBuilder);
1408
- exports.EventQueryBuilder = EventQueryBuilder;
1409
- let DropEventQueryBuilder = class DropEventQueryBuilder extends QueryBuilder {
1410
- constructor(container, driver, Name) {
1411
- super(container, driver);
1412
- this.container = container;
1413
- this.driver = driver;
1414
- this.Name = Name;
1415
- }
1416
- toDB() {
1417
- return this._container.resolve(interfaces_1.DropEventQueryCompiler, [this]).compile();
1418
- }
1419
- };
1420
- DropEventQueryBuilder = __decorate([
1421
- (0, di_1.NewInstance)(),
1422
- (0, di_1.Inject)(di_1.Container),
1423
- __metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver, String])
1424
- ], DropEventQueryBuilder);
1425
- exports.DropEventQueryBuilder = DropEventQueryBuilder;
1426
- /**
1427
- * Creates schedule job in database engine.
1428
- * Note, some engines does not support this, so it will implemented
1429
- * as nodejs interval
1430
- */
1431
- let ScheduleQueryBuilder = class ScheduleQueryBuilder {
1432
- constructor(container, driver) {
1433
- this.container = container;
1434
- this.driver = driver;
1435
- }
1436
- create(name, callback) {
1437
- const builder = new EventQueryBuilder(this.container, this.driver, name);
1438
- callback.call(this, builder);
1439
- return builder;
1440
- }
1441
- drop(name) {
1442
- return new DropEventQueryBuilder(this.container, this.driver, name);
1443
- }
1444
- };
1445
- ScheduleQueryBuilder = __decorate([
1446
- (0, di_1.NewInstance)(),
1447
- (0, di_1.Inject)(di_1.Container),
1448
- __metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver])
1449
- ], ScheduleQueryBuilder);
1450
- exports.ScheduleQueryBuilder = ScheduleQueryBuilder;
1451
- let SchemaQueryBuilder = class SchemaQueryBuilder {
1452
- constructor(container, driver) {
1453
- this.container = container;
1454
- this.driver = driver;
1455
- }
1456
- createTable(name, callback) {
1457
- const builder = new TableQueryBuilder(this.container, this.driver, name);
1458
- callback.call(this, builder);
1459
- return builder;
1460
- }
1461
- cloneTable(callback) {
1462
- const builder = new CloneTableQueryBuilder(this.container, this.driver);
1463
- callback(builder);
1464
- return builder;
1465
- }
1466
- alterTable(name, callback) {
1467
- const builder = new AlterTableQueryBuilder(this.container, this.driver, name);
1468
- callback.call(this, builder);
1469
- return builder;
1470
- }
1471
- dropTable(name, schema) {
1472
- return new DropTableQueryBuilder(this.container, this.driver, name, schema);
1473
- }
1474
- async tableExists(name, schema) {
1475
- const query = new TableExistsQueryBuilder(this.container, this.driver, name);
1476
- if (schema) {
1477
- query.database(schema);
1478
- }
1479
- const exists = await query;
1480
- return exists !== null && exists.length === 1;
1481
- }
1482
- async event(name) {
1483
- return new EventQueryBuilder(this.container, this.driver, name);
1484
- }
1485
- async dropEvent(name) {
1486
- return new DropEventQueryBuilder(this.container, this.driver, name);
1487
- }
1488
- };
1489
- SchemaQueryBuilder = __decorate([
1490
- (0, di_1.NewInstance)(),
1491
- (0, di_1.Inject)(di_1.Container),
1492
- __metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver])
1493
- ], SchemaQueryBuilder);
1494
- exports.SchemaQueryBuilder = SchemaQueryBuilder;
1495
- Object.values(enums_1.ColumnType).forEach((type) => {
1496
- TableQueryBuilder.prototype[type] = function (name, ...args) {
1497
- const _builder = new ColumnQueryBuilder(this.Container, name, type, ...args);
1498
- this._columns.push(_builder);
1499
- return _builder;
1500
- };
1501
- });
1502
- Object.values(enums_1.ColumnType).forEach((type) => {
1503
- AlterTableQueryBuilder.prototype[type] = function (name, ...args) {
1504
- const _builder = new AlterColumnQueryBuilder(this.Container, name, type, ...args);
1505
- this._columns.push(_builder);
1506
- return _builder;
1507
- };
1508
- });
1509
- //# sourceMappingURL=builders.js.map