@spinajs/orm-sql 2.0.180 → 2.0.181
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/builders.d.ts +9 -9
- package/lib/cjs/builders.js +41 -41
- package/lib/cjs/builders.js.map +1 -1
- package/lib/cjs/compilers.d.ts +225 -225
- package/lib/cjs/compilers.js +1006 -1006
- package/lib/cjs/compilers.js.map +1 -1
- package/lib/cjs/converters.d.ts +10 -10
- package/lib/cjs/converters.js +50 -50
- package/lib/cjs/index.d.ts +8 -8
- package/lib/cjs/index.js +80 -80
- package/lib/cjs/statements.d.ts +46 -46
- package/lib/cjs/statements.js +277 -277
- package/lib/cjs/statements.js.map +1 -1
- package/lib/mjs/builders.d.ts +9 -9
- package/lib/mjs/builders.js +38 -38
- package/lib/mjs/builders.js.map +1 -1
- package/lib/mjs/compilers.d.ts +225 -225
- package/lib/mjs/compilers.js +1000 -1000
- package/lib/mjs/compilers.js.map +1 -1
- package/lib/mjs/converters.d.ts +10 -10
- package/lib/mjs/converters.js +45 -45
- package/lib/mjs/index.d.ts +8 -8
- package/lib/mjs/index.js +62 -62
- package/lib/mjs/statements.d.ts +46 -46
- package/lib/mjs/statements.js +273 -273
- package/lib/mjs/statements.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +4 -4
package/lib/cjs/compilers.js
CHANGED
|
@@ -1,1033 +1,1033 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
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;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.SqlDropEventQueryCompiler = exports.SqlEventQueryCompiler = exports.SqlAlterColumnQueryCompiler = exports.SqlColumnQueryCompiler = exports.SqlTableQueryCompiler = exports.SqlTableHistoryQueryCompiler = exports.SqlTruncateTableQueryCompiler = exports.SqlTableCloneQueryCompiler = exports.SqlAlterTableQueryCompiler = exports.SqlDropTableQueryCompiler = exports.SqlInsertQueryCompiler = exports.SqlIndexQueryCompiler = exports.SqlOnDuplicateQueryCompiler = exports.SqlDeleteQueryCompiler = exports.SqlUpdateQueryCompiler = exports.SqlSelectQueryCompiler = exports.SqlJoinCompiler = exports.SqlWhereCompiler = exports.SqlColumnsCompiler = exports.SqlGroupByCompiler = exports.SqlLimitQueryCompiler = exports.SqlForeignKeyQueryCompiler = exports.SqlWithRecursiveCompiler = exports.SqlOrderByQueryCompiler = exports.SqlQueryCompiler = exports.SqlTableAliasCompiler = void 0;
|
|
16
|
-
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
17
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
18
|
-
/* eslint-disable @typescript-eslint/no-empty-interface */
|
|
19
|
-
/* eslint-disable prettier/prettier */
|
|
20
|
-
const exceptions_1 = require("@spinajs/exceptions");
|
|
21
|
-
const orm_1 = require("@spinajs/orm");
|
|
22
|
-
const typescript_mix_1 = require("typescript-mix");
|
|
23
|
-
const di_1 = require("@spinajs/di");
|
|
24
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
25
|
-
let SqlTableAliasCompiler = class SqlTableAliasCompiler {
|
|
26
|
-
compile(builder, tbl) {
|
|
27
|
-
let table = '';
|
|
28
|
-
if (builder.Database) {
|
|
29
|
-
table += `\`${builder.Database}\`.`;
|
|
30
|
-
}
|
|
31
|
-
table += `\`${tbl ? tbl : builder.Table}\``;
|
|
32
|
-
if (builder.TableAlias) {
|
|
33
|
-
table += ` as \`${builder.TableAlias}\``;
|
|
34
|
-
}
|
|
35
|
-
return table;
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
SqlTableAliasCompiler =
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
let SqlQueryCompiler = class SqlQueryCompiler extends orm_1.SelectQueryCompiler {
|
|
43
|
-
constructor(_builder, _container) {
|
|
44
|
-
super();
|
|
45
|
-
this._builder = _builder;
|
|
46
|
-
this._container = _container;
|
|
47
|
-
if (_builder === null && _builder === undefined) {
|
|
48
|
-
throw new exceptions_1.InvalidArgument('builder cannot be null or undefined');
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
tryConvertValue(v) {
|
|
52
|
-
let val = v;
|
|
53
|
-
const converters = this._container.get('__orm_db_value_converters__');
|
|
54
|
-
if (converters && v && converters.has(v.constructor.name)) {
|
|
55
|
-
const converter = this._container.resolve(converters.get(v.constructor.name));
|
|
56
|
-
val = converter.toDB(val, null, null);
|
|
57
|
-
}
|
|
58
|
-
return val;
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
SqlQueryCompiler =
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
let SqlOrderByQueryCompiler = class SqlOrderByQueryCompiler extends orm_1.OrderByQueryCompiler {
|
|
67
|
-
constructor(builder) {
|
|
68
|
-
super();
|
|
69
|
-
if (!builder) {
|
|
70
|
-
throw new exceptions_1.InvalidOperation('builder cannot be null or undefined');
|
|
71
|
-
}
|
|
72
|
-
this._builder = builder;
|
|
73
|
-
}
|
|
74
|
-
compile() {
|
|
75
|
-
const sort = this._builder.getSort();
|
|
76
|
-
let stmt = '';
|
|
77
|
-
const bindings = [];
|
|
78
|
-
if (sort) {
|
|
79
|
-
stmt = ` ORDER BY ${sort.column} ${sort.order}`;
|
|
80
|
-
}
|
|
81
|
-
return {
|
|
82
|
-
bindings,
|
|
83
|
-
expression: stmt,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
SqlOrderByQueryCompiler =
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
let SqlWithRecursiveCompiler = class SqlWithRecursiveCompiler {
|
|
93
|
-
recursive(builder) {
|
|
94
|
-
const statement = builder.CteRecursive.build();
|
|
95
|
-
let exprr = `WITH RECURSIVE recursive_cte(${statement.Statements[0]}) AS`;
|
|
96
|
-
exprr += ` ( `;
|
|
97
|
-
exprr += statement.Statements[1];
|
|
98
|
-
exprr += ` UNION ALL `;
|
|
99
|
-
exprr += statement.Statements[2];
|
|
100
|
-
exprr += ` ) `;
|
|
101
|
-
exprr += 'SELECT * FROM recursive_cte';
|
|
102
|
-
return {
|
|
103
|
-
bindings: statement.Bindings,
|
|
104
|
-
expression: exprr,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
SqlWithRecursiveCompiler =
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
let SqlForeignKeyQueryCompiler = class SqlForeignKeyQueryCompiler {
|
|
113
|
-
constructor(_builder) {
|
|
114
|
-
this._builder = _builder;
|
|
115
|
-
if (!_builder) {
|
|
116
|
-
throw new Error('foreign key query builder cannot be null');
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
compile() {
|
|
120
|
-
const exprr = `FOREIGN KEY (${this._builder.ForeignKeyField}) REFERENCES ${this._builder.Table}(${this._builder.PrimaryKey}) ON DELETE ${this._builder.OnDeleteAction} ON UPDATE ${this._builder.OnUpdateAction}`;
|
|
121
|
-
return {
|
|
122
|
-
bindings: [],
|
|
123
|
-
expression: exprr,
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
SqlForeignKeyQueryCompiler =
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
let SqlLimitQueryCompiler = class SqlLimitQueryCompiler extends orm_1.LimitQueryCompiler {
|
|
133
|
-
constructor(builder) {
|
|
134
|
-
super();
|
|
135
|
-
if (!builder) {
|
|
136
|
-
throw new exceptions_1.InvalidOperation('builder cannot be null or undefined');
|
|
137
|
-
}
|
|
138
|
-
this._builder = builder;
|
|
139
|
-
}
|
|
140
|
-
compile() {
|
|
141
|
-
const limits = this._builder.getLimits();
|
|
142
|
-
const bindings = [];
|
|
143
|
-
let stmt = '';
|
|
144
|
-
if (limits.limit > 0) {
|
|
145
|
-
stmt += ` LIMIT ?`;
|
|
146
|
-
bindings.push(limits.limit);
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
if (limits.offset > 0) {
|
|
150
|
-
stmt += ` LIMIT 18446744073709551615`;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
if (limits.offset > 0) {
|
|
154
|
-
stmt += ` OFFSET ?`;
|
|
155
|
-
bindings.push(limits.offset);
|
|
156
|
-
}
|
|
157
|
-
return {
|
|
158
|
-
bindings,
|
|
159
|
-
expression: stmt,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
SqlLimitQueryCompiler =
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
let SqlGroupByCompiler = class SqlGroupByCompiler {
|
|
169
|
-
group(builder) {
|
|
170
|
-
let bindings = [];
|
|
171
|
-
let stmt = ' GROUP BY ';
|
|
172
|
-
const builds = builder.GroupStatements.map((x) => x.build());
|
|
173
|
-
stmt += builds.map((x) => x.Statements).join(',');
|
|
174
|
-
bindings = builds.map((x) => x.Bindings);
|
|
175
|
-
return {
|
|
176
|
-
bindings,
|
|
177
|
-
expression: builds.length != 0 ? stmt : '',
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
};
|
|
181
|
-
SqlGroupByCompiler =
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
let SqlColumnsCompiler = class SqlColumnsCompiler {
|
|
186
|
-
columns(builder) {
|
|
187
|
-
return {
|
|
188
|
-
bindings: [],
|
|
189
|
-
expression: builder
|
|
190
|
-
.getColumns()
|
|
191
|
-
.map((c) => {
|
|
192
|
-
return c.build().Statements[0];
|
|
193
|
-
})
|
|
194
|
-
.join(','),
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
};
|
|
198
|
-
SqlColumnsCompiler =
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
let SqlWhereCompiler = class SqlWhereCompiler {
|
|
203
|
-
where(builder) {
|
|
204
|
-
const where = [];
|
|
205
|
-
const bindings = [];
|
|
206
|
-
builder.Statements.map((x) => {
|
|
207
|
-
return x.build();
|
|
208
|
-
}).forEach((r) => {
|
|
209
|
-
where.push(...r.Statements);
|
|
210
|
-
if (Array.isArray(r.Bindings)) {
|
|
211
|
-
bindings.push(...r.Bindings);
|
|
212
|
-
}
|
|
213
|
-
});
|
|
214
|
-
return {
|
|
215
|
-
bindings,
|
|
216
|
-
expression: where.join(` ${builder.Op.toUpperCase()} `),
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
};
|
|
220
|
-
SqlWhereCompiler =
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
let SqlJoinCompiler = class SqlJoinCompiler {
|
|
225
|
-
join(builder) {
|
|
226
|
-
const result = builder.JoinStatements.map((s) => s.build());
|
|
227
|
-
return {
|
|
228
|
-
bindings: lodash_1.default.flatMap(result, (r) => r.Bindings),
|
|
229
|
-
expression: lodash_1.default.flatMap(result, (r) => r.Statements).join(' '),
|
|
230
|
-
};
|
|
231
|
-
}
|
|
232
|
-
};
|
|
233
|
-
SqlJoinCompiler =
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
let SqlSelectQueryCompiler = class SqlSelectQueryCompiler extends SqlQueryCompiler {
|
|
238
|
-
constructor(_container, builder) {
|
|
239
|
-
super(builder, _container);
|
|
240
|
-
}
|
|
241
|
-
compile() {
|
|
242
|
-
if (this._builder.CteRecursive) {
|
|
243
|
-
return this.recursive(this._builder);
|
|
244
|
-
}
|
|
245
|
-
const columns = this.select();
|
|
246
|
-
const from = this.from();
|
|
247
|
-
const limit = this.limit();
|
|
248
|
-
const sort = this.sort();
|
|
249
|
-
const where = this.where(this._builder);
|
|
250
|
-
const join = this.join(this._builder);
|
|
251
|
-
const group = this.group(this._builder);
|
|
252
|
-
const expression = columns + ' ' + from + (join.expression ? ` ${join.expression}` : '') + (where.expression ? ` WHERE ${where.expression}` : '') + group.expression + sort.expression + limit.expression;
|
|
253
|
-
const bindings = [];
|
|
254
|
-
bindings.push(...join.bindings);
|
|
255
|
-
bindings.push(...where.bindings);
|
|
256
|
-
bindings.push(...sort.bindings);
|
|
257
|
-
bindings.push(...limit.bindings);
|
|
258
|
-
bindings.push(...group.bindings);
|
|
259
|
-
return {
|
|
260
|
-
bindings,
|
|
261
|
-
expression: expression.trim(),
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
limit() {
|
|
265
|
-
const compiler = this._container.resolve(orm_1.LimitQueryCompiler, [this._builder]);
|
|
266
|
-
return compiler.compile();
|
|
267
|
-
}
|
|
268
|
-
sort() {
|
|
269
|
-
const compiler = this._container.resolve(orm_1.OrderByQueryCompiler, [this._builder]);
|
|
270
|
-
return compiler.compile();
|
|
271
|
-
}
|
|
272
|
-
select() {
|
|
273
|
-
let _stmt = 'SELECT ';
|
|
274
|
-
if (this._builder.IsDistinct) {
|
|
275
|
-
_stmt += 'DISTINCT ';
|
|
276
|
-
}
|
|
277
|
-
if (this._builder.getColumns().length === 0) {
|
|
278
|
-
return _stmt + '*';
|
|
279
|
-
}
|
|
280
|
-
return _stmt + this.columns(this._builder).expression;
|
|
281
|
-
}
|
|
282
|
-
from() {
|
|
283
|
-
return 'FROM ' + this._container.resolve(orm_1.TableAliasCompiler).compile(this._builder);
|
|
284
|
-
}
|
|
285
|
-
};
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
SqlSelectQueryCompiler
|
|
291
|
-
|
|
292
|
-
(0, di_1.
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
let SqlUpdateQueryCompiler = class SqlUpdateQueryCompiler extends SqlQueryCompiler {
|
|
297
|
-
constructor(_container, builder) {
|
|
298
|
-
super(builder, _container);
|
|
299
|
-
this._container = _container;
|
|
300
|
-
}
|
|
301
|
-
compile() {
|
|
302
|
-
const table = this.table();
|
|
303
|
-
const set = this.set();
|
|
304
|
-
const where = this.where(this._builder);
|
|
305
|
-
const bindings = [];
|
|
306
|
-
bindings.push(...set.bindings);
|
|
307
|
-
bindings.push(...where.bindings);
|
|
308
|
-
return {
|
|
309
|
-
bindings,
|
|
310
|
-
expression: `${table} ${set.expression} WHERE ${where.expression}`,
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
set() {
|
|
314
|
-
let bindings = [];
|
|
315
|
-
const exprr = [];
|
|
316
|
-
for (const prop of Object.keys(this._builder.Value)) {
|
|
317
|
-
const v = this._builder.Value[`${prop}`];
|
|
318
|
-
exprr.push(`\`${prop}\` = ?`);
|
|
319
|
-
bindings = bindings.concat(this.tryConvertValue(v));
|
|
320
|
-
}
|
|
321
|
-
return {
|
|
322
|
-
bindings,
|
|
323
|
-
expression: exprr.join(','),
|
|
324
|
-
};
|
|
325
|
-
}
|
|
326
|
-
table() {
|
|
327
|
-
return `UPDATE ${this._container.resolve(orm_1.TableAliasCompiler).compile(this._builder)} SET`;
|
|
328
|
-
}
|
|
329
|
-
};
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
SqlUpdateQueryCompiler
|
|
335
|
-
|
|
336
|
-
(0, di_1.
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
let SqlDeleteQueryCompiler = class SqlDeleteQueryCompiler extends SqlQueryCompiler {
|
|
341
|
-
constructor(_container, builder) {
|
|
342
|
-
super(builder, _container);
|
|
343
|
-
}
|
|
344
|
-
compile() {
|
|
345
|
-
const _bindings = [];
|
|
346
|
-
const _from = this.from();
|
|
347
|
-
const _limit = this.limit();
|
|
348
|
-
const _where = this.where(this._builder);
|
|
349
|
-
let _expression = '';
|
|
350
|
-
_expression = _from + (_where.expression ? ` WHERE ${_where.expression}` : '') + _limit.expression;
|
|
351
|
-
_bindings.push(..._where.bindings);
|
|
352
|
-
_bindings.push(..._limit.bindings);
|
|
353
|
-
return {
|
|
354
|
-
bindings: _bindings,
|
|
355
|
-
expression: _expression.trim(),
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
|
-
limit() {
|
|
359
|
-
const compiler = this._container.resolve(orm_1.LimitQueryCompiler, [this._builder]);
|
|
360
|
-
return compiler.compile();
|
|
361
|
-
}
|
|
362
|
-
from() {
|
|
363
|
-
return `DELETE FROM ${this._container.resolve(orm_1.TableAliasCompiler).compile(this._builder)}`;
|
|
364
|
-
}
|
|
365
|
-
};
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
SqlDeleteQueryCompiler
|
|
371
|
-
|
|
372
|
-
(0, di_1.
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
let SqlOnDuplicateQueryCompiler = class SqlOnDuplicateQueryCompiler {
|
|
377
|
-
constructor(builder) {
|
|
378
|
-
this._builder = builder;
|
|
379
|
-
}
|
|
380
|
-
compile() {
|
|
381
|
-
const columns = this._builder
|
|
382
|
-
.getColumnsToUpdate()
|
|
383
|
-
.map((c) => {
|
|
384
|
-
if (lodash_1.default.isString(c)) {
|
|
385
|
-
return `\`${c}\` = ?`;
|
|
386
|
-
}
|
|
387
|
-
else {
|
|
388
|
-
return c.Query;
|
|
389
|
-
}
|
|
390
|
-
})
|
|
391
|
-
.join(',');
|
|
392
|
-
const parent = this._builder.getParent();
|
|
393
|
-
const valueMap = parent.getColumns().map((c) => c.Column);
|
|
394
|
-
const bindings = this._builder.getColumnsToUpdate().map((c) => {
|
|
395
|
-
if (lodash_1.default.isString(c)) {
|
|
396
|
-
return parent.Values[0][valueMap.indexOf(c)];
|
|
397
|
-
}
|
|
398
|
-
else {
|
|
399
|
-
return c.Bindings;
|
|
400
|
-
}
|
|
401
|
-
});
|
|
402
|
-
return {
|
|
403
|
-
bindings,
|
|
404
|
-
expression: `ON DUPLICATE KEY UPDATE ${columns}`,
|
|
405
|
-
};
|
|
406
|
-
}
|
|
407
|
-
};
|
|
408
|
-
SqlOnDuplicateQueryCompiler =
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
let SqlIndexQueryCompiler = class SqlIndexQueryCompiler extends orm_1.IndexQueryCompiler {
|
|
414
|
-
constructor(builder) {
|
|
415
|
-
super();
|
|
416
|
-
this._builder = builder;
|
|
417
|
-
}
|
|
418
|
-
compile() {
|
|
419
|
-
return {
|
|
420
|
-
bindings: [],
|
|
421
|
-
expression: `CREATE ${this._builder.Unique ? 'UNIQUE ' : ''}INDEX \`${this._builder.Name}\` ON \`${this._builder.Table}\` (${this._builder.Columns.map((c) => `\`${c}\``).join(',')});`,
|
|
422
|
-
};
|
|
423
|
-
}
|
|
424
|
-
};
|
|
425
|
-
SqlIndexQueryCompiler =
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
let SqlInsertQueryCompiler = class SqlInsertQueryCompiler extends SqlQueryCompiler {
|
|
431
|
-
constructor(_container, builder) {
|
|
432
|
-
super(builder, _container);
|
|
433
|
-
}
|
|
434
|
-
compile() {
|
|
435
|
-
const into = this.into();
|
|
436
|
-
const columns = this.columns();
|
|
437
|
-
const values = this.values();
|
|
438
|
-
const upsort = this.upsort();
|
|
439
|
-
return {
|
|
440
|
-
bindings: values.bindings.concat(upsort.bindings),
|
|
441
|
-
expression: `${into} ${columns} ${values.data} ${upsort.expression}`.trim(),
|
|
442
|
-
};
|
|
443
|
-
}
|
|
444
|
-
upsort() {
|
|
445
|
-
if (this._builder.Update) {
|
|
446
|
-
return this._container.resolve(orm_1.OnDuplicateQueryCompiler, [this._builder.DuplicateQueryBuilder]).compile();
|
|
447
|
-
}
|
|
448
|
-
return {
|
|
449
|
-
bindings: [],
|
|
450
|
-
expression: '',
|
|
451
|
-
};
|
|
452
|
-
}
|
|
453
|
-
values() {
|
|
454
|
-
if (this._builder.Values.length === 0) {
|
|
455
|
-
throw new exceptions_1.InvalidArgument('values count invalid');
|
|
456
|
-
}
|
|
457
|
-
const bindings = [];
|
|
458
|
-
let data = 'VALUES ';
|
|
459
|
-
data += this._builder.Values.map((val) => {
|
|
460
|
-
const toInsert = val
|
|
461
|
-
.filter((v, i) => {
|
|
462
|
-
// eslint-disable-next-line security/detect-object-injection
|
|
463
|
-
const descriptor = this._builder.getColumns()[i].Descriptor;
|
|
464
|
-
if (descriptor) {
|
|
465
|
-
if (!descriptor.Nullable && (v === null || v === undefined) && !descriptor.AutoIncrement) {
|
|
466
|
-
throw new exceptions_1.InvalidArgument(`value column ${descriptor.Name} cannot be null`);
|
|
467
|
-
}
|
|
468
|
-
if (descriptor.AutoIncrement && descriptor.PrimaryKey)
|
|
469
|
-
return false;
|
|
470
|
-
}
|
|
471
|
-
return true;
|
|
472
|
-
})
|
|
473
|
-
.map((v) => {
|
|
474
|
-
if (v === undefined) {
|
|
475
|
-
return 'DEFAULT';
|
|
476
|
-
}
|
|
477
|
-
if (v === null) {
|
|
478
|
-
return 'NULL';
|
|
479
|
-
}
|
|
480
|
-
bindings.push(this.tryConvertValue(v));
|
|
481
|
-
return '?';
|
|
482
|
-
});
|
|
483
|
-
return `(` + toInsert.join(',') + ')';
|
|
484
|
-
}).join(',');
|
|
485
|
-
return {
|
|
486
|
-
bindings,
|
|
487
|
-
data,
|
|
488
|
-
};
|
|
489
|
-
}
|
|
490
|
-
columns() {
|
|
491
|
-
const columns = this._builder
|
|
492
|
-
.getColumns()
|
|
493
|
-
.filter((c) => {
|
|
494
|
-
const descriptor = c.Descriptor;
|
|
495
|
-
if (descriptor && descriptor.AutoIncrement && descriptor.PrimaryKey)
|
|
496
|
-
return false;
|
|
497
|
-
return true;
|
|
498
|
-
})
|
|
499
|
-
.map((c) => {
|
|
500
|
-
return c.Column;
|
|
501
|
-
})
|
|
502
|
-
.map((c) => {
|
|
503
|
-
return `\`${c instanceof orm_1.RawQuery ? c.Query : c}\``;
|
|
504
|
-
});
|
|
505
|
-
if (columns.length === 0) {
|
|
506
|
-
throw new exceptions_1.InvalidArgument('invalid column count');
|
|
507
|
-
}
|
|
508
|
-
return `(` + columns.join(',') + ')';
|
|
509
|
-
}
|
|
510
|
-
into() {
|
|
511
|
-
return `INSERT${this._builder.Ignore ? ' IGNORE' : ''} INTO ${this._container.resolve(orm_1.TableAliasCompiler).compile(this._builder)}`;
|
|
512
|
-
}
|
|
513
|
-
};
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
SqlInsertQueryCompiler
|
|
519
|
-
|
|
520
|
-
(0, di_1.
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
let SqlDropTableQueryCompiler = class SqlDropTableQueryCompiler extends orm_1.DropTableCompiler {
|
|
525
|
-
constructor(container, builder) {
|
|
526
|
-
super();
|
|
527
|
-
this.container = container;
|
|
528
|
-
this.builder = builder;
|
|
529
|
-
}
|
|
530
|
-
compile() {
|
|
531
|
-
const exists = this.builder.Exists ? ' IF EXISTS' : '';
|
|
532
|
-
const exprr = `DROP TABLE${exists} ${this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder)}`;
|
|
533
|
-
return {
|
|
534
|
-
bindings: [],
|
|
535
|
-
expression: exprr,
|
|
536
|
-
};
|
|
537
|
-
}
|
|
538
|
-
};
|
|
539
|
-
SqlDropTableQueryCompiler =
|
|
540
|
-
|
|
541
|
-
(0, di_1.
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
let SqlAlterTableQueryCompiler = class SqlAlterTableQueryCompiler extends orm_1.AlterTableQueryCompiler {
|
|
546
|
-
constructor(container, builder) {
|
|
547
|
-
super();
|
|
548
|
-
this.container = container;
|
|
549
|
-
this.builder = builder;
|
|
550
|
-
}
|
|
551
|
-
compile() {
|
|
552
|
-
const _table = this._table();
|
|
553
|
-
let _outputs = [];
|
|
554
|
-
if (this.builder.DroppedColumns.length !== 0) {
|
|
555
|
-
_outputs = _outputs.concat(this.builder.DroppedColumns.map((c) => {
|
|
556
|
-
return {
|
|
557
|
-
bindings: [],
|
|
558
|
-
expression: `${_table} DROP COLUMN ${c}`,
|
|
559
|
-
};
|
|
560
|
-
}));
|
|
561
|
-
}
|
|
562
|
-
if (this.builder.NewTableName) {
|
|
563
|
-
_outputs.push({
|
|
564
|
-
bindings: [],
|
|
565
|
-
expression: `${_table} RENAME TO ${this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder, this.builder.NewTableName)}`,
|
|
566
|
-
});
|
|
567
|
-
}
|
|
568
|
-
if (this.builder.Columns.length !== 0) {
|
|
569
|
-
_outputs = _outputs.concat(this.builder.Columns.map((c) => {
|
|
570
|
-
const compiler = this.container.resolve(orm_1.AlterColumnQueryCompiler, [c]).compile();
|
|
571
|
-
return {
|
|
572
|
-
bindings: compiler.bindings,
|
|
573
|
-
expression: `${_table} ${compiler.expression}`,
|
|
574
|
-
};
|
|
575
|
-
}));
|
|
576
|
-
}
|
|
577
|
-
return _outputs;
|
|
578
|
-
}
|
|
579
|
-
_table() {
|
|
580
|
-
return `ALTER TABLE ${this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder)}`;
|
|
581
|
-
}
|
|
582
|
-
};
|
|
583
|
-
SqlAlterTableQueryCompiler =
|
|
584
|
-
|
|
585
|
-
(0, di_1.
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
let SqlTableCloneQueryCompiler = class SqlTableCloneQueryCompiler extends orm_1.TableCloneQueryCompiler {
|
|
590
|
-
constructor(container, builder) {
|
|
591
|
-
super();
|
|
592
|
-
this.container = container;
|
|
593
|
-
this.builder = builder;
|
|
594
|
-
}
|
|
595
|
-
compile() {
|
|
596
|
-
const _tblName = this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder, this.builder.CloneSource);
|
|
597
|
-
const _table = this._table();
|
|
598
|
-
const out1 = {
|
|
599
|
-
bindings: [],
|
|
600
|
-
expression: `${_table} LIKE ${_tblName}`,
|
|
601
|
-
};
|
|
602
|
-
if (!this.builder.Shallow) {
|
|
603
|
-
const fOut = this.builder.Filter !== undefined
|
|
604
|
-
? this.builder.Filter.toDB()
|
|
605
|
-
: {
|
|
606
|
-
bindings: [],
|
|
607
|
-
// if no filter is provided, copy all the data
|
|
608
|
-
expression: `SELECT * FROM ${_tblName}`,
|
|
609
|
-
};
|
|
610
|
-
const fExprr = `INSERT INTO \`${this.builder.Table}\` ${fOut.expression}`;
|
|
611
|
-
return [
|
|
612
|
-
out1,
|
|
613
|
-
{
|
|
614
|
-
bindings: fOut.bindings,
|
|
615
|
-
expression: fExprr,
|
|
616
|
-
},
|
|
617
|
-
];
|
|
618
|
-
}
|
|
619
|
-
return [out1];
|
|
620
|
-
}
|
|
621
|
-
_table() {
|
|
622
|
-
return `CREATE${this.builder.Temporary ? ' TEMPORARY ' : ' '}TABLE ${this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder)}`;
|
|
623
|
-
}
|
|
624
|
-
};
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
SqlTableCloneQueryCompiler
|
|
630
|
-
|
|
631
|
-
(0, di_1.
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
let SqlTruncateTableQueryCompiler = class SqlTruncateTableQueryCompiler extends orm_1.TableQueryCompiler {
|
|
636
|
-
constructor(container, builder) {
|
|
637
|
-
super();
|
|
638
|
-
this.container = container;
|
|
639
|
-
this.builder = builder;
|
|
640
|
-
}
|
|
641
|
-
compile() {
|
|
642
|
-
return {
|
|
643
|
-
bindings: [],
|
|
644
|
-
expression: `TRUNCATE TABLE ${this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder)}`,
|
|
645
|
-
};
|
|
646
|
-
}
|
|
647
|
-
};
|
|
648
|
-
SqlTruncateTableQueryCompiler =
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
let SqlTableHistoryQueryCompiler = class SqlTableHistoryQueryCompiler extends orm_1.TableHistoryQueryCompiler {
|
|
654
|
-
constructor(container, builder) {
|
|
655
|
-
super();
|
|
656
|
-
this.container = container;
|
|
657
|
-
this.builder = builder;
|
|
658
|
-
}
|
|
659
|
-
compile() {
|
|
660
|
-
const tblAliasCompiler = this.container.resolve(orm_1.TableAliasCompiler);
|
|
661
|
-
const hTtblName = tblAliasCompiler.compile(this.builder, `${this.builder.Table}__history`);
|
|
662
|
-
const tblName = tblAliasCompiler.compile(this.builder, `${this.builder.Table}`);
|
|
663
|
-
const hTriggerName = `${this.builder.Table}__history`;
|
|
664
|
-
const tblTriggerName = this.builder.Table;
|
|
665
|
-
const dropUnique = this.builder.Columns.filter((c) => c.Unique).map((c) => {
|
|
666
|
-
return {
|
|
667
|
-
bindings: [],
|
|
668
|
-
expression: `ALTER TABLE ${hTtblName} DROP INDEX ${c.Name}`,
|
|
669
|
-
};
|
|
670
|
-
});
|
|
671
|
-
const pKey = this.builder.Columns.find((c) => c.PrimaryKey);
|
|
672
|
-
return [
|
|
673
|
-
// clone table
|
|
674
|
-
{
|
|
675
|
-
bindings: [],
|
|
676
|
-
expression: `CREATE TABLE ${hTtblName} LIKE ${tblAliasCompiler.compile(this.builder)}`,
|
|
677
|
-
},
|
|
678
|
-
...dropUnique,
|
|
679
|
-
{
|
|
680
|
-
bindings: [],
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.SqlDropEventQueryCompiler = exports.SqlEventQueryCompiler = exports.SqlAlterColumnQueryCompiler = exports.SqlColumnQueryCompiler = exports.SqlTableQueryCompiler = exports.SqlTableHistoryQueryCompiler = exports.SqlTruncateTableQueryCompiler = exports.SqlTableCloneQueryCompiler = exports.SqlAlterTableQueryCompiler = exports.SqlDropTableQueryCompiler = exports.SqlInsertQueryCompiler = exports.SqlIndexQueryCompiler = exports.SqlOnDuplicateQueryCompiler = exports.SqlDeleteQueryCompiler = exports.SqlUpdateQueryCompiler = exports.SqlSelectQueryCompiler = exports.SqlJoinCompiler = exports.SqlWhereCompiler = exports.SqlColumnsCompiler = exports.SqlGroupByCompiler = exports.SqlLimitQueryCompiler = exports.SqlForeignKeyQueryCompiler = exports.SqlWithRecursiveCompiler = exports.SqlOrderByQueryCompiler = exports.SqlQueryCompiler = exports.SqlTableAliasCompiler = void 0;
|
|
16
|
+
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
17
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
18
|
+
/* eslint-disable @typescript-eslint/no-empty-interface */
|
|
19
|
+
/* eslint-disable prettier/prettier */
|
|
20
|
+
const exceptions_1 = require("@spinajs/exceptions");
|
|
21
|
+
const orm_1 = require("@spinajs/orm");
|
|
22
|
+
const typescript_mix_1 = require("typescript-mix");
|
|
23
|
+
const di_1 = require("@spinajs/di");
|
|
24
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
25
|
+
let SqlTableAliasCompiler = class SqlTableAliasCompiler {
|
|
26
|
+
compile(builder, tbl) {
|
|
27
|
+
let table = '';
|
|
28
|
+
if (builder.Database) {
|
|
29
|
+
table += `\`${builder.Database}\`.`;
|
|
30
|
+
}
|
|
31
|
+
table += `\`${tbl ? tbl : builder.Table}\``;
|
|
32
|
+
if (builder.TableAlias) {
|
|
33
|
+
table += ` as \`${builder.TableAlias}\``;
|
|
34
|
+
}
|
|
35
|
+
return table;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
exports.SqlTableAliasCompiler = SqlTableAliasCompiler;
|
|
39
|
+
exports.SqlTableAliasCompiler = SqlTableAliasCompiler = __decorate([
|
|
40
|
+
(0, di_1.NewInstance)()
|
|
41
|
+
], SqlTableAliasCompiler);
|
|
42
|
+
let SqlQueryCompiler = class SqlQueryCompiler extends orm_1.SelectQueryCompiler {
|
|
43
|
+
constructor(_builder, _container) {
|
|
44
|
+
super();
|
|
45
|
+
this._builder = _builder;
|
|
46
|
+
this._container = _container;
|
|
47
|
+
if (_builder === null && _builder === undefined) {
|
|
48
|
+
throw new exceptions_1.InvalidArgument('builder cannot be null or undefined');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
tryConvertValue(v) {
|
|
52
|
+
let val = v;
|
|
53
|
+
const converters = this._container.get('__orm_db_value_converters__');
|
|
54
|
+
if (converters && v && converters.has(v.constructor.name)) {
|
|
55
|
+
const converter = this._container.resolve(converters.get(v.constructor.name));
|
|
56
|
+
val = converter.toDB(val, null, null);
|
|
57
|
+
}
|
|
58
|
+
return val;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
exports.SqlQueryCompiler = SqlQueryCompiler;
|
|
62
|
+
exports.SqlQueryCompiler = SqlQueryCompiler = __decorate([
|
|
63
|
+
(0, di_1.NewInstance)(),
|
|
64
|
+
__metadata("design:paramtypes", [Object, Object])
|
|
65
|
+
], SqlQueryCompiler);
|
|
66
|
+
let SqlOrderByQueryCompiler = class SqlOrderByQueryCompiler extends orm_1.OrderByQueryCompiler {
|
|
67
|
+
constructor(builder) {
|
|
68
|
+
super();
|
|
69
|
+
if (!builder) {
|
|
70
|
+
throw new exceptions_1.InvalidOperation('builder cannot be null or undefined');
|
|
71
|
+
}
|
|
72
|
+
this._builder = builder;
|
|
73
|
+
}
|
|
74
|
+
compile() {
|
|
75
|
+
const sort = this._builder.getSort();
|
|
76
|
+
let stmt = '';
|
|
77
|
+
const bindings = [];
|
|
78
|
+
if (sort) {
|
|
79
|
+
stmt = ` ORDER BY ${sort.column} ${sort.order}`;
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
bindings,
|
|
83
|
+
expression: stmt,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
exports.SqlOrderByQueryCompiler = SqlOrderByQueryCompiler;
|
|
88
|
+
exports.SqlOrderByQueryCompiler = SqlOrderByQueryCompiler = __decorate([
|
|
89
|
+
(0, di_1.NewInstance)(),
|
|
90
|
+
__metadata("design:paramtypes", [orm_1.OrderByBuilder])
|
|
91
|
+
], SqlOrderByQueryCompiler);
|
|
92
|
+
let SqlWithRecursiveCompiler = class SqlWithRecursiveCompiler {
|
|
93
|
+
recursive(builder) {
|
|
94
|
+
const statement = builder.CteRecursive.build();
|
|
95
|
+
let exprr = `WITH RECURSIVE recursive_cte(${statement.Statements[0]}) AS`;
|
|
96
|
+
exprr += ` ( `;
|
|
97
|
+
exprr += statement.Statements[1];
|
|
98
|
+
exprr += ` UNION ALL `;
|
|
99
|
+
exprr += statement.Statements[2];
|
|
100
|
+
exprr += ` ) `;
|
|
101
|
+
exprr += 'SELECT * FROM recursive_cte';
|
|
102
|
+
return {
|
|
103
|
+
bindings: statement.Bindings,
|
|
104
|
+
expression: exprr,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
exports.SqlWithRecursiveCompiler = SqlWithRecursiveCompiler;
|
|
109
|
+
exports.SqlWithRecursiveCompiler = SqlWithRecursiveCompiler = __decorate([
|
|
110
|
+
(0, di_1.NewInstance)()
|
|
111
|
+
], SqlWithRecursiveCompiler);
|
|
112
|
+
let SqlForeignKeyQueryCompiler = class SqlForeignKeyQueryCompiler {
|
|
113
|
+
constructor(_builder) {
|
|
114
|
+
this._builder = _builder;
|
|
115
|
+
if (!_builder) {
|
|
116
|
+
throw new Error('foreign key query builder cannot be null');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
compile() {
|
|
120
|
+
const exprr = `FOREIGN KEY (${this._builder.ForeignKeyField}) REFERENCES ${this._builder.Table}(${this._builder.PrimaryKey}) ON DELETE ${this._builder.OnDeleteAction} ON UPDATE ${this._builder.OnUpdateAction}`;
|
|
121
|
+
return {
|
|
122
|
+
bindings: [],
|
|
123
|
+
expression: exprr,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
exports.SqlForeignKeyQueryCompiler = SqlForeignKeyQueryCompiler;
|
|
128
|
+
exports.SqlForeignKeyQueryCompiler = SqlForeignKeyQueryCompiler = __decorate([
|
|
129
|
+
(0, di_1.NewInstance)(),
|
|
130
|
+
__metadata("design:paramtypes", [orm_1.ForeignKeyBuilder])
|
|
131
|
+
], SqlForeignKeyQueryCompiler);
|
|
132
|
+
let SqlLimitQueryCompiler = class SqlLimitQueryCompiler extends orm_1.LimitQueryCompiler {
|
|
133
|
+
constructor(builder) {
|
|
134
|
+
super();
|
|
135
|
+
if (!builder) {
|
|
136
|
+
throw new exceptions_1.InvalidOperation('builder cannot be null or undefined');
|
|
137
|
+
}
|
|
138
|
+
this._builder = builder;
|
|
139
|
+
}
|
|
140
|
+
compile() {
|
|
141
|
+
const limits = this._builder.getLimits();
|
|
142
|
+
const bindings = [];
|
|
143
|
+
let stmt = '';
|
|
144
|
+
if (limits.limit > 0) {
|
|
145
|
+
stmt += ` LIMIT ?`;
|
|
146
|
+
bindings.push(limits.limit);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
if (limits.offset > 0) {
|
|
150
|
+
stmt += ` LIMIT 18446744073709551615`;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (limits.offset > 0) {
|
|
154
|
+
stmt += ` OFFSET ?`;
|
|
155
|
+
bindings.push(limits.offset);
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
bindings,
|
|
159
|
+
expression: stmt,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
exports.SqlLimitQueryCompiler = SqlLimitQueryCompiler;
|
|
164
|
+
exports.SqlLimitQueryCompiler = SqlLimitQueryCompiler = __decorate([
|
|
165
|
+
(0, di_1.NewInstance)(),
|
|
166
|
+
__metadata("design:paramtypes", [orm_1.LimitBuilder])
|
|
167
|
+
], SqlLimitQueryCompiler);
|
|
168
|
+
let SqlGroupByCompiler = class SqlGroupByCompiler {
|
|
169
|
+
group(builder) {
|
|
170
|
+
let bindings = [];
|
|
171
|
+
let stmt = ' GROUP BY ';
|
|
172
|
+
const builds = builder.GroupStatements.map((x) => x.build());
|
|
173
|
+
stmt += builds.map((x) => x.Statements).join(',');
|
|
174
|
+
bindings = builds.map((x) => x.Bindings);
|
|
175
|
+
return {
|
|
176
|
+
bindings,
|
|
177
|
+
expression: builds.length != 0 ? stmt : '',
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
exports.SqlGroupByCompiler = SqlGroupByCompiler;
|
|
182
|
+
exports.SqlGroupByCompiler = SqlGroupByCompiler = __decorate([
|
|
183
|
+
(0, di_1.NewInstance)()
|
|
184
|
+
], SqlGroupByCompiler);
|
|
185
|
+
let SqlColumnsCompiler = class SqlColumnsCompiler {
|
|
186
|
+
columns(builder) {
|
|
187
|
+
return {
|
|
188
|
+
bindings: [],
|
|
189
|
+
expression: builder
|
|
190
|
+
.getColumns()
|
|
191
|
+
.map((c) => {
|
|
192
|
+
return c.build().Statements[0];
|
|
193
|
+
})
|
|
194
|
+
.join(','),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
exports.SqlColumnsCompiler = SqlColumnsCompiler;
|
|
199
|
+
exports.SqlColumnsCompiler = SqlColumnsCompiler = __decorate([
|
|
200
|
+
(0, di_1.NewInstance)()
|
|
201
|
+
], SqlColumnsCompiler);
|
|
202
|
+
let SqlWhereCompiler = class SqlWhereCompiler {
|
|
203
|
+
where(builder) {
|
|
204
|
+
const where = [];
|
|
205
|
+
const bindings = [];
|
|
206
|
+
builder.Statements.map((x) => {
|
|
207
|
+
return x.build();
|
|
208
|
+
}).forEach((r) => {
|
|
209
|
+
where.push(...r.Statements);
|
|
210
|
+
if (Array.isArray(r.Bindings)) {
|
|
211
|
+
bindings.push(...r.Bindings);
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
return {
|
|
215
|
+
bindings,
|
|
216
|
+
expression: where.join(` ${builder.Op.toUpperCase()} `),
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
exports.SqlWhereCompiler = SqlWhereCompiler;
|
|
221
|
+
exports.SqlWhereCompiler = SqlWhereCompiler = __decorate([
|
|
222
|
+
(0, di_1.NewInstance)()
|
|
223
|
+
], SqlWhereCompiler);
|
|
224
|
+
let SqlJoinCompiler = class SqlJoinCompiler {
|
|
225
|
+
join(builder) {
|
|
226
|
+
const result = builder.JoinStatements.map((s) => s.build());
|
|
227
|
+
return {
|
|
228
|
+
bindings: lodash_1.default.flatMap(result, (r) => r.Bindings),
|
|
229
|
+
expression: lodash_1.default.flatMap(result, (r) => r.Statements).join(' '),
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
exports.SqlJoinCompiler = SqlJoinCompiler;
|
|
234
|
+
exports.SqlJoinCompiler = SqlJoinCompiler = __decorate([
|
|
235
|
+
(0, di_1.NewInstance)()
|
|
236
|
+
], SqlJoinCompiler);
|
|
237
|
+
let SqlSelectQueryCompiler = class SqlSelectQueryCompiler extends SqlQueryCompiler {
|
|
238
|
+
constructor(_container, builder) {
|
|
239
|
+
super(builder, _container);
|
|
240
|
+
}
|
|
241
|
+
compile() {
|
|
242
|
+
if (this._builder.CteRecursive) {
|
|
243
|
+
return this.recursive(this._builder);
|
|
244
|
+
}
|
|
245
|
+
const columns = this.select();
|
|
246
|
+
const from = this.from();
|
|
247
|
+
const limit = this.limit();
|
|
248
|
+
const sort = this.sort();
|
|
249
|
+
const where = this.where(this._builder);
|
|
250
|
+
const join = this.join(this._builder);
|
|
251
|
+
const group = this.group(this._builder);
|
|
252
|
+
const expression = columns + ' ' + from + (join.expression ? ` ${join.expression}` : '') + (where.expression ? ` WHERE ${where.expression}` : '') + group.expression + sort.expression + limit.expression;
|
|
253
|
+
const bindings = [];
|
|
254
|
+
bindings.push(...join.bindings);
|
|
255
|
+
bindings.push(...where.bindings);
|
|
256
|
+
bindings.push(...sort.bindings);
|
|
257
|
+
bindings.push(...limit.bindings);
|
|
258
|
+
bindings.push(...group.bindings);
|
|
259
|
+
return {
|
|
260
|
+
bindings,
|
|
261
|
+
expression: expression.trim(),
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
limit() {
|
|
265
|
+
const compiler = this._container.resolve(orm_1.LimitQueryCompiler, [this._builder]);
|
|
266
|
+
return compiler.compile();
|
|
267
|
+
}
|
|
268
|
+
sort() {
|
|
269
|
+
const compiler = this._container.resolve(orm_1.OrderByQueryCompiler, [this._builder]);
|
|
270
|
+
return compiler.compile();
|
|
271
|
+
}
|
|
272
|
+
select() {
|
|
273
|
+
let _stmt = 'SELECT ';
|
|
274
|
+
if (this._builder.IsDistinct) {
|
|
275
|
+
_stmt += 'DISTINCT ';
|
|
276
|
+
}
|
|
277
|
+
if (this._builder.getColumns().length === 0) {
|
|
278
|
+
return _stmt + '*';
|
|
279
|
+
}
|
|
280
|
+
return _stmt + this.columns(this._builder).expression;
|
|
281
|
+
}
|
|
282
|
+
from() {
|
|
283
|
+
return 'FROM ' + this._container.resolve(orm_1.TableAliasCompiler).compile(this._builder);
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
exports.SqlSelectQueryCompiler = SqlSelectQueryCompiler;
|
|
287
|
+
__decorate([
|
|
288
|
+
(0, typescript_mix_1.use)(SqlWhereCompiler, SqlColumnsCompiler, orm_1.TableAliasCompiler, SqlJoinCompiler, SqlWithRecursiveCompiler, SqlGroupByCompiler),
|
|
289
|
+
__metadata("design:type", Object)
|
|
290
|
+
], SqlSelectQueryCompiler.prototype, "this", void 0);
|
|
291
|
+
exports.SqlSelectQueryCompiler = SqlSelectQueryCompiler = __decorate([
|
|
292
|
+
(0, di_1.NewInstance)(),
|
|
293
|
+
(0, di_1.Inject)(di_1.Container),
|
|
294
|
+
__metadata("design:paramtypes", [Object, orm_1.SelectQueryBuilder])
|
|
295
|
+
], SqlSelectQueryCompiler);
|
|
296
|
+
let SqlUpdateQueryCompiler = class SqlUpdateQueryCompiler extends SqlQueryCompiler {
|
|
297
|
+
constructor(_container, builder) {
|
|
298
|
+
super(builder, _container);
|
|
299
|
+
this._container = _container;
|
|
300
|
+
}
|
|
301
|
+
compile() {
|
|
302
|
+
const table = this.table();
|
|
303
|
+
const set = this.set();
|
|
304
|
+
const where = this.where(this._builder);
|
|
305
|
+
const bindings = [];
|
|
306
|
+
bindings.push(...set.bindings);
|
|
307
|
+
bindings.push(...where.bindings);
|
|
308
|
+
return {
|
|
309
|
+
bindings,
|
|
310
|
+
expression: `${table} ${set.expression} WHERE ${where.expression}`,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
set() {
|
|
314
|
+
let bindings = [];
|
|
315
|
+
const exprr = [];
|
|
316
|
+
for (const prop of Object.keys(this._builder.Value)) {
|
|
317
|
+
const v = this._builder.Value[`${prop}`];
|
|
318
|
+
exprr.push(`\`${prop}\` = ?`);
|
|
319
|
+
bindings = bindings.concat(this.tryConvertValue(v));
|
|
320
|
+
}
|
|
321
|
+
return {
|
|
322
|
+
bindings,
|
|
323
|
+
expression: exprr.join(','),
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
table() {
|
|
327
|
+
return `UPDATE ${this._container.resolve(orm_1.TableAliasCompiler).compile(this._builder)} SET`;
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
exports.SqlUpdateQueryCompiler = SqlUpdateQueryCompiler;
|
|
331
|
+
__decorate([
|
|
332
|
+
(0, typescript_mix_1.use)(SqlWhereCompiler, orm_1.TableAliasCompiler),
|
|
333
|
+
__metadata("design:type", Object)
|
|
334
|
+
], SqlUpdateQueryCompiler.prototype, "this", void 0);
|
|
335
|
+
exports.SqlUpdateQueryCompiler = SqlUpdateQueryCompiler = __decorate([
|
|
336
|
+
(0, di_1.NewInstance)(),
|
|
337
|
+
(0, di_1.Inject)(di_1.Container),
|
|
338
|
+
__metadata("design:paramtypes", [Object, orm_1.UpdateQueryBuilder])
|
|
339
|
+
], SqlUpdateQueryCompiler);
|
|
340
|
+
let SqlDeleteQueryCompiler = class SqlDeleteQueryCompiler extends SqlQueryCompiler {
|
|
341
|
+
constructor(_container, builder) {
|
|
342
|
+
super(builder, _container);
|
|
343
|
+
}
|
|
344
|
+
compile() {
|
|
345
|
+
const _bindings = [];
|
|
346
|
+
const _from = this.from();
|
|
347
|
+
const _limit = this.limit();
|
|
348
|
+
const _where = this.where(this._builder);
|
|
349
|
+
let _expression = '';
|
|
350
|
+
_expression = _from + (_where.expression ? ` WHERE ${_where.expression}` : '') + _limit.expression;
|
|
351
|
+
_bindings.push(..._where.bindings);
|
|
352
|
+
_bindings.push(..._limit.bindings);
|
|
353
|
+
return {
|
|
354
|
+
bindings: _bindings,
|
|
355
|
+
expression: _expression.trim(),
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
limit() {
|
|
359
|
+
const compiler = this._container.resolve(orm_1.LimitQueryCompiler, [this._builder]);
|
|
360
|
+
return compiler.compile();
|
|
361
|
+
}
|
|
362
|
+
from() {
|
|
363
|
+
return `DELETE FROM ${this._container.resolve(orm_1.TableAliasCompiler).compile(this._builder)}`;
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
exports.SqlDeleteQueryCompiler = SqlDeleteQueryCompiler;
|
|
367
|
+
__decorate([
|
|
368
|
+
(0, typescript_mix_1.use)(SqlWhereCompiler, orm_1.TableAliasCompiler),
|
|
369
|
+
__metadata("design:type", Object)
|
|
370
|
+
], SqlDeleteQueryCompiler.prototype, "this", void 0);
|
|
371
|
+
exports.SqlDeleteQueryCompiler = SqlDeleteQueryCompiler = __decorate([
|
|
372
|
+
(0, di_1.NewInstance)(),
|
|
373
|
+
(0, di_1.Inject)(di_1.Container),
|
|
374
|
+
__metadata("design:paramtypes", [Object, orm_1.DeleteQueryBuilder])
|
|
375
|
+
], SqlDeleteQueryCompiler);
|
|
376
|
+
let SqlOnDuplicateQueryCompiler = class SqlOnDuplicateQueryCompiler {
|
|
377
|
+
constructor(builder) {
|
|
378
|
+
this._builder = builder;
|
|
379
|
+
}
|
|
380
|
+
compile() {
|
|
381
|
+
const columns = this._builder
|
|
382
|
+
.getColumnsToUpdate()
|
|
383
|
+
.map((c) => {
|
|
384
|
+
if (lodash_1.default.isString(c)) {
|
|
385
|
+
return `\`${c}\` = ?`;
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
return c.Query;
|
|
389
|
+
}
|
|
390
|
+
})
|
|
391
|
+
.join(',');
|
|
392
|
+
const parent = this._builder.getParent();
|
|
393
|
+
const valueMap = parent.getColumns().map((c) => c.Column);
|
|
394
|
+
const bindings = this._builder.getColumnsToUpdate().map((c) => {
|
|
395
|
+
if (lodash_1.default.isString(c)) {
|
|
396
|
+
return parent.Values[0][valueMap.indexOf(c)];
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
return c.Bindings;
|
|
400
|
+
}
|
|
401
|
+
});
|
|
402
|
+
return {
|
|
403
|
+
bindings,
|
|
404
|
+
expression: `ON DUPLICATE KEY UPDATE ${columns}`,
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
exports.SqlOnDuplicateQueryCompiler = SqlOnDuplicateQueryCompiler;
|
|
409
|
+
exports.SqlOnDuplicateQueryCompiler = SqlOnDuplicateQueryCompiler = __decorate([
|
|
410
|
+
(0, di_1.NewInstance)(),
|
|
411
|
+
__metadata("design:paramtypes", [orm_1.OnDuplicateQueryBuilder])
|
|
412
|
+
], SqlOnDuplicateQueryCompiler);
|
|
413
|
+
let SqlIndexQueryCompiler = class SqlIndexQueryCompiler extends orm_1.IndexQueryCompiler {
|
|
414
|
+
constructor(builder) {
|
|
415
|
+
super();
|
|
416
|
+
this._builder = builder;
|
|
417
|
+
}
|
|
418
|
+
compile() {
|
|
419
|
+
return {
|
|
420
|
+
bindings: [],
|
|
421
|
+
expression: `CREATE ${this._builder.Unique ? 'UNIQUE ' : ''}INDEX \`${this._builder.Name}\` ON \`${this._builder.Table}\` (${this._builder.Columns.map((c) => `\`${c}\``).join(',')});`,
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
};
|
|
425
|
+
exports.SqlIndexQueryCompiler = SqlIndexQueryCompiler;
|
|
426
|
+
exports.SqlIndexQueryCompiler = SqlIndexQueryCompiler = __decorate([
|
|
427
|
+
(0, di_1.NewInstance)(),
|
|
428
|
+
__metadata("design:paramtypes", [orm_1.IndexQueryBuilder])
|
|
429
|
+
], SqlIndexQueryCompiler);
|
|
430
|
+
let SqlInsertQueryCompiler = class SqlInsertQueryCompiler extends SqlQueryCompiler {
|
|
431
|
+
constructor(_container, builder) {
|
|
432
|
+
super(builder, _container);
|
|
433
|
+
}
|
|
434
|
+
compile() {
|
|
435
|
+
const into = this.into();
|
|
436
|
+
const columns = this.columns();
|
|
437
|
+
const values = this.values();
|
|
438
|
+
const upsort = this.upsort();
|
|
439
|
+
return {
|
|
440
|
+
bindings: values.bindings.concat(upsort.bindings),
|
|
441
|
+
expression: `${into} ${columns} ${values.data} ${upsort.expression}`.trim(),
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
upsort() {
|
|
445
|
+
if (this._builder.Update) {
|
|
446
|
+
return this._container.resolve(orm_1.OnDuplicateQueryCompiler, [this._builder.DuplicateQueryBuilder]).compile();
|
|
447
|
+
}
|
|
448
|
+
return {
|
|
449
|
+
bindings: [],
|
|
450
|
+
expression: '',
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
values() {
|
|
454
|
+
if (this._builder.Values.length === 0) {
|
|
455
|
+
throw new exceptions_1.InvalidArgument('values count invalid');
|
|
456
|
+
}
|
|
457
|
+
const bindings = [];
|
|
458
|
+
let data = 'VALUES ';
|
|
459
|
+
data += this._builder.Values.map((val) => {
|
|
460
|
+
const toInsert = val
|
|
461
|
+
.filter((v, i) => {
|
|
462
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
463
|
+
const descriptor = this._builder.getColumns()[i].Descriptor;
|
|
464
|
+
if (descriptor) {
|
|
465
|
+
if (!descriptor.Nullable && (v === null || v === undefined) && !descriptor.AutoIncrement) {
|
|
466
|
+
throw new exceptions_1.InvalidArgument(`value column ${descriptor.Name} cannot be null`);
|
|
467
|
+
}
|
|
468
|
+
if (descriptor.AutoIncrement && descriptor.PrimaryKey)
|
|
469
|
+
return false;
|
|
470
|
+
}
|
|
471
|
+
return true;
|
|
472
|
+
})
|
|
473
|
+
.map((v) => {
|
|
474
|
+
if (v === undefined) {
|
|
475
|
+
return 'DEFAULT';
|
|
476
|
+
}
|
|
477
|
+
if (v === null) {
|
|
478
|
+
return 'NULL';
|
|
479
|
+
}
|
|
480
|
+
bindings.push(this.tryConvertValue(v));
|
|
481
|
+
return '?';
|
|
482
|
+
});
|
|
483
|
+
return `(` + toInsert.join(',') + ')';
|
|
484
|
+
}).join(',');
|
|
485
|
+
return {
|
|
486
|
+
bindings,
|
|
487
|
+
data,
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
columns() {
|
|
491
|
+
const columns = this._builder
|
|
492
|
+
.getColumns()
|
|
493
|
+
.filter((c) => {
|
|
494
|
+
const descriptor = c.Descriptor;
|
|
495
|
+
if (descriptor && descriptor.AutoIncrement && descriptor.PrimaryKey)
|
|
496
|
+
return false;
|
|
497
|
+
return true;
|
|
498
|
+
})
|
|
499
|
+
.map((c) => {
|
|
500
|
+
return c.Column;
|
|
501
|
+
})
|
|
502
|
+
.map((c) => {
|
|
503
|
+
return `\`${c instanceof orm_1.RawQuery ? c.Query : c}\``;
|
|
504
|
+
});
|
|
505
|
+
if (columns.length === 0) {
|
|
506
|
+
throw new exceptions_1.InvalidArgument('invalid column count');
|
|
507
|
+
}
|
|
508
|
+
return `(` + columns.join(',') + ')';
|
|
509
|
+
}
|
|
510
|
+
into() {
|
|
511
|
+
return `INSERT${this._builder.Ignore ? ' IGNORE' : ''} INTO ${this._container.resolve(orm_1.TableAliasCompiler).compile(this._builder)}`;
|
|
512
|
+
}
|
|
513
|
+
};
|
|
514
|
+
exports.SqlInsertQueryCompiler = SqlInsertQueryCompiler;
|
|
515
|
+
__decorate([
|
|
516
|
+
(0, typescript_mix_1.use)(orm_1.TableAliasCompiler),
|
|
517
|
+
__metadata("design:type", Object)
|
|
518
|
+
], SqlInsertQueryCompiler.prototype, "this", void 0);
|
|
519
|
+
exports.SqlInsertQueryCompiler = SqlInsertQueryCompiler = __decorate([
|
|
520
|
+
(0, di_1.NewInstance)(),
|
|
521
|
+
(0, di_1.Inject)(di_1.Container),
|
|
522
|
+
__metadata("design:paramtypes", [Object, orm_1.InsertQueryBuilder])
|
|
523
|
+
], SqlInsertQueryCompiler);
|
|
524
|
+
let SqlDropTableQueryCompiler = class SqlDropTableQueryCompiler extends orm_1.DropTableCompiler {
|
|
525
|
+
constructor(container, builder) {
|
|
526
|
+
super();
|
|
527
|
+
this.container = container;
|
|
528
|
+
this.builder = builder;
|
|
529
|
+
}
|
|
530
|
+
compile() {
|
|
531
|
+
const exists = this.builder.Exists ? ' IF EXISTS' : '';
|
|
532
|
+
const exprr = `DROP TABLE${exists} ${this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder)}`;
|
|
533
|
+
return {
|
|
534
|
+
bindings: [],
|
|
535
|
+
expression: exprr,
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
exports.SqlDropTableQueryCompiler = SqlDropTableQueryCompiler;
|
|
540
|
+
exports.SqlDropTableQueryCompiler = SqlDropTableQueryCompiler = __decorate([
|
|
541
|
+
(0, di_1.NewInstance)(),
|
|
542
|
+
(0, di_1.Inject)(di_1.Container),
|
|
543
|
+
__metadata("design:paramtypes", [di_1.Container, orm_1.DropTableQueryBuilder])
|
|
544
|
+
], SqlDropTableQueryCompiler);
|
|
545
|
+
let SqlAlterTableQueryCompiler = class SqlAlterTableQueryCompiler extends orm_1.AlterTableQueryCompiler {
|
|
546
|
+
constructor(container, builder) {
|
|
547
|
+
super();
|
|
548
|
+
this.container = container;
|
|
549
|
+
this.builder = builder;
|
|
550
|
+
}
|
|
551
|
+
compile() {
|
|
552
|
+
const _table = this._table();
|
|
553
|
+
let _outputs = [];
|
|
554
|
+
if (this.builder.DroppedColumns.length !== 0) {
|
|
555
|
+
_outputs = _outputs.concat(this.builder.DroppedColumns.map((c) => {
|
|
556
|
+
return {
|
|
557
|
+
bindings: [],
|
|
558
|
+
expression: `${_table} DROP COLUMN ${c}`,
|
|
559
|
+
};
|
|
560
|
+
}));
|
|
561
|
+
}
|
|
562
|
+
if (this.builder.NewTableName) {
|
|
563
|
+
_outputs.push({
|
|
564
|
+
bindings: [],
|
|
565
|
+
expression: `${_table} RENAME TO ${this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder, this.builder.NewTableName)}`,
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
if (this.builder.Columns.length !== 0) {
|
|
569
|
+
_outputs = _outputs.concat(this.builder.Columns.map((c) => {
|
|
570
|
+
const compiler = this.container.resolve(orm_1.AlterColumnQueryCompiler, [c]).compile();
|
|
571
|
+
return {
|
|
572
|
+
bindings: compiler.bindings,
|
|
573
|
+
expression: `${_table} ${compiler.expression}`,
|
|
574
|
+
};
|
|
575
|
+
}));
|
|
576
|
+
}
|
|
577
|
+
return _outputs;
|
|
578
|
+
}
|
|
579
|
+
_table() {
|
|
580
|
+
return `ALTER TABLE ${this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder)}`;
|
|
581
|
+
}
|
|
582
|
+
};
|
|
583
|
+
exports.SqlAlterTableQueryCompiler = SqlAlterTableQueryCompiler;
|
|
584
|
+
exports.SqlAlterTableQueryCompiler = SqlAlterTableQueryCompiler = __decorate([
|
|
585
|
+
(0, di_1.NewInstance)(),
|
|
586
|
+
(0, di_1.Inject)(di_1.Container),
|
|
587
|
+
__metadata("design:paramtypes", [di_1.Container, orm_1.AlterTableQueryBuilder])
|
|
588
|
+
], SqlAlterTableQueryCompiler);
|
|
589
|
+
let SqlTableCloneQueryCompiler = class SqlTableCloneQueryCompiler extends orm_1.TableCloneQueryCompiler {
|
|
590
|
+
constructor(container, builder) {
|
|
591
|
+
super();
|
|
592
|
+
this.container = container;
|
|
593
|
+
this.builder = builder;
|
|
594
|
+
}
|
|
595
|
+
compile() {
|
|
596
|
+
const _tblName = this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder, this.builder.CloneSource);
|
|
597
|
+
const _table = this._table();
|
|
598
|
+
const out1 = {
|
|
599
|
+
bindings: [],
|
|
600
|
+
expression: `${_table} LIKE ${_tblName}`,
|
|
601
|
+
};
|
|
602
|
+
if (!this.builder.Shallow) {
|
|
603
|
+
const fOut = this.builder.Filter !== undefined
|
|
604
|
+
? this.builder.Filter.toDB()
|
|
605
|
+
: {
|
|
606
|
+
bindings: [],
|
|
607
|
+
// if no filter is provided, copy all the data
|
|
608
|
+
expression: `SELECT * FROM ${_tblName}`,
|
|
609
|
+
};
|
|
610
|
+
const fExprr = `INSERT INTO \`${this.builder.Table}\` ${fOut.expression}`;
|
|
611
|
+
return [
|
|
612
|
+
out1,
|
|
613
|
+
{
|
|
614
|
+
bindings: fOut.bindings,
|
|
615
|
+
expression: fExprr,
|
|
616
|
+
},
|
|
617
|
+
];
|
|
618
|
+
}
|
|
619
|
+
return [out1];
|
|
620
|
+
}
|
|
621
|
+
_table() {
|
|
622
|
+
return `CREATE${this.builder.Temporary ? ' TEMPORARY ' : ' '}TABLE ${this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder)}`;
|
|
623
|
+
}
|
|
624
|
+
};
|
|
625
|
+
exports.SqlTableCloneQueryCompiler = SqlTableCloneQueryCompiler;
|
|
626
|
+
__decorate([
|
|
627
|
+
(0, typescript_mix_1.use)(orm_1.TableAliasCompiler),
|
|
628
|
+
__metadata("design:type", Object)
|
|
629
|
+
], SqlTableCloneQueryCompiler.prototype, "this", void 0);
|
|
630
|
+
exports.SqlTableCloneQueryCompiler = SqlTableCloneQueryCompiler = __decorate([
|
|
631
|
+
(0, di_1.NewInstance)(),
|
|
632
|
+
(0, di_1.Inject)(di_1.Container),
|
|
633
|
+
__metadata("design:paramtypes", [di_1.Container, orm_1.CloneTableQueryBuilder])
|
|
634
|
+
], SqlTableCloneQueryCompiler);
|
|
635
|
+
let SqlTruncateTableQueryCompiler = class SqlTruncateTableQueryCompiler extends orm_1.TableQueryCompiler {
|
|
636
|
+
constructor(container, builder) {
|
|
637
|
+
super();
|
|
638
|
+
this.container = container;
|
|
639
|
+
this.builder = builder;
|
|
640
|
+
}
|
|
641
|
+
compile() {
|
|
642
|
+
return {
|
|
643
|
+
bindings: [],
|
|
644
|
+
expression: `TRUNCATE TABLE ${this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder)}`,
|
|
645
|
+
};
|
|
646
|
+
}
|
|
647
|
+
};
|
|
648
|
+
exports.SqlTruncateTableQueryCompiler = SqlTruncateTableQueryCompiler;
|
|
649
|
+
exports.SqlTruncateTableQueryCompiler = SqlTruncateTableQueryCompiler = __decorate([
|
|
650
|
+
(0, di_1.NewInstance)(),
|
|
651
|
+
__metadata("design:paramtypes", [di_1.Container, orm_1.TableQueryBuilder])
|
|
652
|
+
], SqlTruncateTableQueryCompiler);
|
|
653
|
+
let SqlTableHistoryQueryCompiler = class SqlTableHistoryQueryCompiler extends orm_1.TableHistoryQueryCompiler {
|
|
654
|
+
constructor(container, builder) {
|
|
655
|
+
super();
|
|
656
|
+
this.container = container;
|
|
657
|
+
this.builder = builder;
|
|
658
|
+
}
|
|
659
|
+
compile() {
|
|
660
|
+
const tblAliasCompiler = this.container.resolve(orm_1.TableAliasCompiler);
|
|
661
|
+
const hTtblName = tblAliasCompiler.compile(this.builder, `${this.builder.Table}__history`);
|
|
662
|
+
const tblName = tblAliasCompiler.compile(this.builder, `${this.builder.Table}`);
|
|
663
|
+
const hTriggerName = `${this.builder.Table}__history`;
|
|
664
|
+
const tblTriggerName = this.builder.Table;
|
|
665
|
+
const dropUnique = this.builder.Columns.filter((c) => c.Unique).map((c) => {
|
|
666
|
+
return {
|
|
667
|
+
bindings: [],
|
|
668
|
+
expression: `ALTER TABLE ${hTtblName} DROP INDEX ${c.Name}`,
|
|
669
|
+
};
|
|
670
|
+
});
|
|
671
|
+
const pKey = this.builder.Columns.find((c) => c.PrimaryKey);
|
|
672
|
+
return [
|
|
673
|
+
// clone table
|
|
674
|
+
{
|
|
675
|
+
bindings: [],
|
|
676
|
+
expression: `CREATE TABLE ${hTtblName} LIKE ${tblAliasCompiler.compile(this.builder)}`,
|
|
677
|
+
},
|
|
678
|
+
...dropUnique,
|
|
679
|
+
{
|
|
680
|
+
bindings: [],
|
|
681
681
|
expression: `ALTER TABLE ${hTtblName}
|
|
682
682
|
CHANGE COLUMN ${pKey.Name} ${pKey.Name} INT NOT NULL ,
|
|
683
|
-
DROP PRIMARY KEY;`,
|
|
684
|
-
},
|
|
685
|
-
// remove primary key & add history columns
|
|
686
|
-
{
|
|
687
|
-
bindings: [],
|
|
688
|
-
expression: `ALTER TABLE ${hTtblName} ADD __action__ VARCHAR(8) DEFAULT 'insert' FIRST, ADD __revision__ INT(6) NOT NULL AFTER __action__, ADD __start__ DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER __revision__, ADD __end__ DATETIME AFTER __start__`,
|
|
689
|
-
},
|
|
690
|
-
{
|
|
691
|
-
bindings: [],
|
|
692
|
-
expression: `ALTER TABLE ${hTtblName} ADD PRIMARY KEY (${pKey.Name}, __revision__)`,
|
|
693
|
-
},
|
|
694
|
-
{
|
|
695
|
-
bindings: [],
|
|
683
|
+
DROP PRIMARY KEY;`,
|
|
684
|
+
},
|
|
685
|
+
// remove primary key & add history columns
|
|
686
|
+
{
|
|
687
|
+
bindings: [],
|
|
688
|
+
expression: `ALTER TABLE ${hTtblName} ADD __action__ VARCHAR(8) DEFAULT 'insert' FIRST, ADD __revision__ INT(6) NOT NULL AFTER __action__, ADD __start__ DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER __revision__, ADD __end__ DATETIME AFTER __start__`,
|
|
689
|
+
},
|
|
690
|
+
{
|
|
691
|
+
bindings: [],
|
|
692
|
+
expression: `ALTER TABLE ${hTtblName} ADD PRIMARY KEY (${pKey.Name}, __revision__)`,
|
|
693
|
+
},
|
|
694
|
+
{
|
|
695
|
+
bindings: [],
|
|
696
696
|
expression: `DELIMITER $$
|
|
697
697
|
CREATE TRIGGER ${hTriggerName}__insert_trigger BEFORE INSERT ON ${hTtblName} FOR EACH ROW
|
|
698
698
|
BEGIN
|
|
699
699
|
DECLARE rev INT;
|
|
700
700
|
SET rev = (SELECT IFNULL(MAX(__revision__), 0) FROM ${hTtblName} WHERE Id = NEW.Id);
|
|
701
701
|
SET NEW.__revision__ = rev + 1;
|
|
702
|
-
END;`,
|
|
703
|
-
},
|
|
704
|
-
// create tracking triggers
|
|
705
|
-
{
|
|
706
|
-
bindings: [],
|
|
707
|
-
expression: `DROP TRIGGER IF EXISTS ${tblTriggerName}__insert_trigger`,
|
|
708
|
-
},
|
|
709
|
-
{
|
|
710
|
-
bindings: [],
|
|
711
|
-
expression: `DROP TRIGGER IF EXISTS ${tblTriggerName}__update_trigger`,
|
|
712
|
-
},
|
|
713
|
-
{
|
|
714
|
-
bindings: [],
|
|
715
|
-
expression: `DROP TRIGGER IF EXISTS ${tblTriggerName}__delete_trigger`,
|
|
716
|
-
},
|
|
717
|
-
// insert into history table & update __end__ date for all operations
|
|
718
|
-
{
|
|
719
|
-
bindings: [],
|
|
702
|
+
END;`,
|
|
703
|
+
},
|
|
704
|
+
// create tracking triggers
|
|
705
|
+
{
|
|
706
|
+
bindings: [],
|
|
707
|
+
expression: `DROP TRIGGER IF EXISTS ${tblTriggerName}__insert_trigger`,
|
|
708
|
+
},
|
|
709
|
+
{
|
|
710
|
+
bindings: [],
|
|
711
|
+
expression: `DROP TRIGGER IF EXISTS ${tblTriggerName}__update_trigger`,
|
|
712
|
+
},
|
|
713
|
+
{
|
|
714
|
+
bindings: [],
|
|
715
|
+
expression: `DROP TRIGGER IF EXISTS ${tblTriggerName}__delete_trigger`,
|
|
716
|
+
},
|
|
717
|
+
// insert into history table & update __end__ date for all operations
|
|
718
|
+
{
|
|
719
|
+
bindings: [],
|
|
720
720
|
expression: `DELIMITER $$
|
|
721
721
|
CREATE TRIGGER ${tblTriggerName}__insert_trigger AFTER INSERT ON ${tblName} FOR EACH ROW BEGIN
|
|
722
722
|
DECLARE rev INT;
|
|
723
723
|
SET rev = (SELECT IFNULL(MAX(__revision__), 0) FROM ${hTtblName} WHERE Id = NEW.Id);
|
|
724
724
|
UPDATE ${hTtblName} SET __end__ = NOW() WHERE Id = NEW.Id AND __revision__ = rev;
|
|
725
725
|
INSERT INTO ${hTtblName} SELECT 'insert', 0, NOW(), NULL, d.* FROM ${tblName} AS d WHERE d.${pKey.Name} = NEW.${pKey.Name};
|
|
726
|
-
END;`,
|
|
727
|
-
},
|
|
728
|
-
{
|
|
729
|
-
bindings: [],
|
|
726
|
+
END;`,
|
|
727
|
+
},
|
|
728
|
+
{
|
|
729
|
+
bindings: [],
|
|
730
730
|
expression: `DELIMITER $$
|
|
731
731
|
CREATE TRIGGER ${tblTriggerName}__update_trigger AFTER UPDATE ON ${tblName} FOR EACH ROW BEGIN
|
|
732
732
|
DECLARE rev INT;
|
|
733
733
|
SET rev = (SELECT IFNULL(MAX(__revision__), 0) FROM ${hTtblName} WHERE Id = NEW.Id);
|
|
734
734
|
UPDATE ${hTtblName} SET __end__ = NOW() WHERE Id = NEW.Id AND __revision__ = rev;
|
|
735
735
|
INSERT INTO ${hTtblName} SELECT 'update', 0, NOW(), NULL, d.* FROM ${tblName} AS d WHERE d.${pKey.Name} = NEW.${pKey.Name};
|
|
736
|
-
END;`,
|
|
737
|
-
},
|
|
738
|
-
{
|
|
739
|
-
bindings: [],
|
|
736
|
+
END;`,
|
|
737
|
+
},
|
|
738
|
+
{
|
|
739
|
+
bindings: [],
|
|
740
740
|
expression: `DELIMITER $$
|
|
741
741
|
CREATE TRIGGER ${tblTriggerName}__delete_trigger BEFORE DELETE ON ${tblName} FOR EACH ROW BEGIN
|
|
742
742
|
DECLARE rev INT;
|
|
743
743
|
SET rev = (SELECT IFNULL(MAX(__revision__), 0) FROM ${hTtblName} WHERE Id = NEW.Id);
|
|
744
744
|
UPDATE ${hTtblName} SET __end__ = NOW() WHERE Id = NEW.Id AND __revision__ = rev;
|
|
745
745
|
INSERT INTO ${hTtblName} SELECT 'delete', 0, NOW(), NULL, d.* FROM ${tblName} AS d WHERE d.${pKey.Name} = NEW.${pKey.Name};
|
|
746
|
-
END;`,
|
|
747
|
-
},
|
|
748
|
-
];
|
|
749
|
-
}
|
|
750
|
-
};
|
|
751
|
-
SqlTableHistoryQueryCompiler =
|
|
752
|
-
|
|
753
|
-
(0, di_1.
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
let SqlTableQueryCompiler = class SqlTableQueryCompiler extends orm_1.TableQueryCompiler {
|
|
758
|
-
constructor(container, builder) {
|
|
759
|
-
super();
|
|
760
|
-
this.container = container;
|
|
761
|
-
this.builder = builder;
|
|
762
|
-
}
|
|
763
|
-
compile() {
|
|
764
|
-
const _table = this._table();
|
|
765
|
-
const _columns = this._columns();
|
|
766
|
-
const _keys = this._foreignKeys();
|
|
767
|
-
const _primaryKey = this._primaryKeys();
|
|
768
|
-
const createOutput = {
|
|
769
|
-
bindings: [],
|
|
770
|
-
expression: `${_table} (${_columns} ${_primaryKey ? ',' + _primaryKey : ''} ${_keys ? ',' + _keys : ''})`,
|
|
771
|
-
};
|
|
772
|
-
if (this.builder.TrackHistory) {
|
|
773
|
-
const hCompiler = this.container.resolve(orm_1.TableHistoryQueryCompiler, [this.builder]);
|
|
774
|
-
return [createOutput, ...hCompiler.compile()];
|
|
775
|
-
}
|
|
776
|
-
else {
|
|
777
|
-
return [createOutput];
|
|
778
|
-
}
|
|
779
|
-
}
|
|
780
|
-
_columns() {
|
|
781
|
-
return this.builder.Columns.map((c) => {
|
|
782
|
-
return this.container.resolve(orm_1.ColumnQueryCompiler, [c]).compile().expression;
|
|
783
|
-
}).join(',');
|
|
784
|
-
}
|
|
785
|
-
_foreignKeys() {
|
|
786
|
-
return this.builder.ForeignKeys.map((f) => {
|
|
787
|
-
return this.container.resolve(orm_1.ForeignKeyQueryCompiler, [f]).compile().expression;
|
|
788
|
-
}).join(',');
|
|
789
|
-
}
|
|
790
|
-
_primaryKeys() {
|
|
791
|
-
const _keys = this.builder.Columns.filter((x) => x.PrimaryKey)
|
|
792
|
-
.map((c) => `\`${c.Name}\``)
|
|
793
|
-
.join(',');
|
|
794
|
-
if (!lodash_1.default.isEmpty(_keys)) {
|
|
795
|
-
return `PRIMARY KEY (${_keys})`;
|
|
796
|
-
}
|
|
797
|
-
return '';
|
|
798
|
-
}
|
|
799
|
-
_table() {
|
|
800
|
-
return `CREATE${this.builder.Temporary ? ' TEMPORARY ' : ' '}TABLE ${this.builder.CheckExists ? 'IF NOT EXISTS ' : ''}${this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder)}`;
|
|
801
|
-
}
|
|
802
|
-
};
|
|
803
|
-
SqlTableQueryCompiler =
|
|
804
|
-
|
|
805
|
-
(0, di_1.
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
let SqlColumnQueryCompiler = class SqlColumnQueryCompiler {
|
|
810
|
-
constructor(builder) {
|
|
811
|
-
this.builder = builder;
|
|
812
|
-
this._statementsMappings = {
|
|
813
|
-
set: (builder) => `SET(${builder.Args[0].map((a) => `'${a}\'`).join(',')})`,
|
|
814
|
-
string: (builder) => `VARCHAR(${builder.Args[0] ? builder.Args[0] : 255})`,
|
|
815
|
-
boolean: () => `TINYINT(1)`,
|
|
816
|
-
float: (builder) => {
|
|
817
|
-
const _precision = builder.Args[0] ? builder.Args[0] : 8;
|
|
818
|
-
const _scale = builder.Args[1] ? builder.Args[1] : 2;
|
|
819
|
-
return `${builder.Type.toUpperCase()}(${_precision},${_scale})`;
|
|
820
|
-
},
|
|
821
|
-
double: (builder) => this._statementsMappings.float(builder),
|
|
822
|
-
decimal: (builder) => this._statementsMappings.float(builder),
|
|
823
|
-
enum: (builder) => `${builder.Type.toUpperCase()}(${builder.Args[0].map((a) => `'${a}'`).join(',')})`,
|
|
824
|
-
binary: (builder) => `BINARY(${builder.Args[0] ?? 255}`,
|
|
825
|
-
smallint: (builder) => builder.Type.toUpperCase(),
|
|
826
|
-
tinyint: (builder) => builder.Type.toUpperCase(),
|
|
827
|
-
mediumint: (builder) => builder.Type.toUpperCase(),
|
|
828
|
-
int: (builder) => builder.Type.toUpperCase(),
|
|
829
|
-
bigint: (builder) => builder.Type.toUpperCase(),
|
|
830
|
-
tinytext: (builder) => builder.Type.toUpperCase(),
|
|
831
|
-
mediumtext: (builder) => builder.Type.toUpperCase(),
|
|
832
|
-
longtext: (builder) => builder.Type.toUpperCase(),
|
|
833
|
-
text: (builder) => builder.Type.toUpperCase(),
|
|
834
|
-
bit: (builder) => builder.Type.toUpperCase(),
|
|
835
|
-
date: (builder) => builder.Type.toUpperCase(),
|
|
836
|
-
time: (builder) => builder.Type.toUpperCase(),
|
|
837
|
-
dateTime: (builder) => builder.Type.toUpperCase(),
|
|
838
|
-
timestamp: (builder) => builder.Type.toUpperCase(),
|
|
839
|
-
json: (builder) => builder.Type.toUpperCase(),
|
|
840
|
-
tinyblob: (builder) => builder.Type.toUpperCase(),
|
|
841
|
-
mediumblob: (builder) => builder.Type.toUpperCase(),
|
|
842
|
-
longblob: (builder) => builder.Type.toUpperCase(),
|
|
843
|
-
// COLUMN ADDITIONA PROPS
|
|
844
|
-
unsigned: () => 'UNSIGNED',
|
|
845
|
-
charset: (builder) => `CHARACTER SET '${builder.Charset}'`,
|
|
846
|
-
collation: (builder) => `COLLATE '${builder.Collation}'`,
|
|
847
|
-
notnull: () => `NOT NULL`,
|
|
848
|
-
default: () => this._defaultCompiler(),
|
|
849
|
-
autoincrement: () => `AUTO_INCREMENT`,
|
|
850
|
-
comment: (builder) => `COMMENT '${builder.Comment}'`,
|
|
851
|
-
};
|
|
852
|
-
if (!builder) {
|
|
853
|
-
throw new Error('column query builder cannot be null');
|
|
854
|
-
}
|
|
855
|
-
}
|
|
856
|
-
compile() {
|
|
857
|
-
const _stmt = [];
|
|
858
|
-
_stmt.push(`\`${this.builder.Name}\``);
|
|
859
|
-
_stmt.push(this._statementsMappings[this.builder.Type](this.builder));
|
|
860
|
-
if (this.builder.Unsigned) {
|
|
861
|
-
_stmt.push(this._statementsMappings.unsigned());
|
|
862
|
-
}
|
|
863
|
-
if (this.builder.Charset) {
|
|
864
|
-
_stmt.push(this._statementsMappings.charset(this.builder));
|
|
865
|
-
}
|
|
866
|
-
if (this.builder.Collation) {
|
|
867
|
-
_stmt.push(this._statementsMappings.collation(this.builder));
|
|
868
|
-
}
|
|
869
|
-
if (this.builder.NotNull) {
|
|
870
|
-
_stmt.push(this._statementsMappings.notnull());
|
|
871
|
-
}
|
|
872
|
-
if (this.builder.Default) {
|
|
873
|
-
_stmt.push(this._statementsMappings.default());
|
|
874
|
-
}
|
|
875
|
-
if (this.builder.AutoIncrement) {
|
|
876
|
-
_stmt.push(this._statementsMappings.autoincrement());
|
|
877
|
-
}
|
|
878
|
-
if (this.builder.Comment) {
|
|
879
|
-
_stmt.push(this._statementsMappings.comment(this.builder));
|
|
880
|
-
}
|
|
881
|
-
if (this.builder.Unique) {
|
|
882
|
-
_stmt.push('UNIQUE');
|
|
883
|
-
}
|
|
884
|
-
return {
|
|
885
|
-
bindings: [],
|
|
886
|
-
expression: _stmt.filter((x) => !lodash_1.default.isEmpty(x)).join(' '),
|
|
887
|
-
};
|
|
888
|
-
}
|
|
889
|
-
_defaultCompiler() {
|
|
890
|
-
let _stmt = '';
|
|
891
|
-
if (lodash_1.default.isNil(this.builder.Default) || (lodash_1.default.isNil(this.builder.Default.Query) && lodash_1.default.isNil(this.builder.Default.Value))) {
|
|
892
|
-
return _stmt;
|
|
893
|
-
}
|
|
894
|
-
if (lodash_1.default.isString(this.builder.Default.Value)) {
|
|
895
|
-
_stmt = `DEFAULT '${this.builder.Default.Value.trim()}'`;
|
|
896
|
-
}
|
|
897
|
-
else if (lodash_1.default.isNumber(this.builder.Default.Value)) {
|
|
898
|
-
_stmt = `DEFAULT ${this.builder.Default.Value}`;
|
|
899
|
-
}
|
|
900
|
-
else if (this.builder.Default.Query instanceof orm_1.RawQuery) {
|
|
901
|
-
_stmt = `DEFAULT ${this.builder.Default.Query.Query}`;
|
|
902
|
-
}
|
|
903
|
-
return _stmt;
|
|
904
|
-
}
|
|
905
|
-
};
|
|
906
|
-
SqlColumnQueryCompiler =
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
let SqlAlterColumnQueryCompiler = class SqlAlterColumnQueryCompiler extends SqlColumnQueryCompiler {
|
|
912
|
-
constructor(builder) {
|
|
913
|
-
super(builder);
|
|
914
|
-
}
|
|
915
|
-
compile() {
|
|
916
|
-
const builder = this.builder;
|
|
917
|
-
if (builder.AlterType === orm_1.ColumnAlterationType.Rename) {
|
|
918
|
-
const bld = this.builder;
|
|
919
|
-
return {
|
|
920
|
-
bindings: [],
|
|
921
|
-
expression: `RENAME COLUMN \`${bld.OldName}\` TO \`${bld.Name}\``,
|
|
922
|
-
};
|
|
923
|
-
}
|
|
924
|
-
const cDefinition = super.compile();
|
|
925
|
-
if (builder.AlterType === orm_1.ColumnAlterationType.Add) {
|
|
926
|
-
return {
|
|
927
|
-
bindings: cDefinition.bindings,
|
|
928
|
-
expression: `ADD ${cDefinition.expression} ${builder.AfterColumn ? `AFTER \`${builder.AfterColumn}\`` : ''}`,
|
|
929
|
-
};
|
|
930
|
-
}
|
|
931
|
-
if (builder.AlterType === orm_1.ColumnAlterationType.Modify) {
|
|
932
|
-
return {
|
|
933
|
-
bindings: cDefinition.bindings,
|
|
934
|
-
expression: `MODIFY ${cDefinition.expression}`,
|
|
935
|
-
};
|
|
936
|
-
}
|
|
937
|
-
}
|
|
938
|
-
};
|
|
939
|
-
SqlAlterColumnQueryCompiler =
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
let SqlEventQueryCompiler = class SqlEventQueryCompiler extends SqlQueryCompiler {
|
|
945
|
-
constructor(container, builder) {
|
|
946
|
-
super(builder, container);
|
|
947
|
-
}
|
|
948
|
-
compile() {
|
|
949
|
-
const schedule = this._createSchedule();
|
|
950
|
-
const action = this._action();
|
|
951
|
-
return {
|
|
952
|
-
bindings: action.bindings,
|
|
953
|
-
expression: `CREATE EVENT ${this._builder.Name} ON SCHEDULE ${schedule} DO BEGIN ${action.expression} END`,
|
|
954
|
-
};
|
|
955
|
-
}
|
|
956
|
-
_createSchedule() {
|
|
957
|
-
if (this._builder.FromNowInverval) {
|
|
958
|
-
return `AT CURRENT_TIMESTAMP + INTERVAL ${this._getInterval(this._builder.FromNowInverval)}`;
|
|
959
|
-
}
|
|
960
|
-
if (this._builder.At) {
|
|
961
|
-
return `AT ${this._builder.At.toFormat(`yyyy-mm-dd HH:mm:ss`)}`;
|
|
962
|
-
}
|
|
963
|
-
if (this._builder.EveryInterval) {
|
|
964
|
-
return `EVERY ${this._getInterval(this._builder.EveryInterval)}`;
|
|
965
|
-
}
|
|
966
|
-
}
|
|
967
|
-
_getInterval(desc) {
|
|
968
|
-
return Object.getOwnPropertyNames(desc)
|
|
969
|
-
.map((x) => {
|
|
970
|
-
if (desc[`${x}`] > 0) {
|
|
971
|
-
return `${desc[`${x}`]} ${x.toUpperCase()}`;
|
|
972
|
-
}
|
|
973
|
-
return null;
|
|
974
|
-
})
|
|
975
|
-
.find((x) => x !== null);
|
|
976
|
-
}
|
|
977
|
-
_action() {
|
|
978
|
-
if (this._builder.RawSql) {
|
|
979
|
-
const res = this._builder.RawSql.build();
|
|
980
|
-
return {
|
|
981
|
-
expression: res.Statements.join(';'),
|
|
982
|
-
bindings: res.Bindings,
|
|
983
|
-
};
|
|
984
|
-
}
|
|
985
|
-
else {
|
|
986
|
-
const qResult = this._builder.Queries.reduce((prev, curr) => {
|
|
987
|
-
const res = curr.toDB();
|
|
988
|
-
if (Array.isArray(res)) {
|
|
989
|
-
res.forEach((x) => {
|
|
990
|
-
prev.bindings = prev.bindings.concat(x.bindings);
|
|
991
|
-
prev.expression.push(x.expression);
|
|
992
|
-
});
|
|
993
|
-
}
|
|
994
|
-
else {
|
|
995
|
-
prev.bindings = prev.bindings.concat(res.bindings);
|
|
996
|
-
prev.expression.push(res.expression);
|
|
997
|
-
}
|
|
998
|
-
return prev;
|
|
999
|
-
}, {
|
|
1000
|
-
expression: [],
|
|
1001
|
-
bindings: [],
|
|
1002
|
-
});
|
|
1003
|
-
return {
|
|
1004
|
-
expression: qResult.expression.join(';'),
|
|
1005
|
-
bindings: qResult.bindings,
|
|
1006
|
-
};
|
|
1007
|
-
}
|
|
1008
|
-
}
|
|
1009
|
-
};
|
|
1010
|
-
SqlEventQueryCompiler =
|
|
1011
|
-
|
|
1012
|
-
(0, di_1.
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
let SqlDropEventQueryCompiler = class SqlDropEventQueryCompiler extends SqlQueryCompiler {
|
|
1017
|
-
constructor(container, builder) {
|
|
1018
|
-
super(builder, container);
|
|
1019
|
-
}
|
|
1020
|
-
compile() {
|
|
1021
|
-
return {
|
|
1022
|
-
bindings: [],
|
|
1023
|
-
expression: `DROP EVENT IF EXISTS ${this._builder.Name}`,
|
|
1024
|
-
};
|
|
1025
|
-
}
|
|
1026
|
-
};
|
|
1027
|
-
SqlDropEventQueryCompiler =
|
|
1028
|
-
|
|
1029
|
-
(0, di_1.
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
746
|
+
END;`,
|
|
747
|
+
},
|
|
748
|
+
];
|
|
749
|
+
}
|
|
750
|
+
};
|
|
751
|
+
exports.SqlTableHistoryQueryCompiler = SqlTableHistoryQueryCompiler;
|
|
752
|
+
exports.SqlTableHistoryQueryCompiler = SqlTableHistoryQueryCompiler = __decorate([
|
|
753
|
+
(0, di_1.NewInstance)(),
|
|
754
|
+
(0, di_1.Inject)(di_1.Container),
|
|
755
|
+
__metadata("design:paramtypes", [di_1.Container, orm_1.TableQueryBuilder])
|
|
756
|
+
], SqlTableHistoryQueryCompiler);
|
|
757
|
+
let SqlTableQueryCompiler = class SqlTableQueryCompiler extends orm_1.TableQueryCompiler {
|
|
758
|
+
constructor(container, builder) {
|
|
759
|
+
super();
|
|
760
|
+
this.container = container;
|
|
761
|
+
this.builder = builder;
|
|
762
|
+
}
|
|
763
|
+
compile() {
|
|
764
|
+
const _table = this._table();
|
|
765
|
+
const _columns = this._columns();
|
|
766
|
+
const _keys = this._foreignKeys();
|
|
767
|
+
const _primaryKey = this._primaryKeys();
|
|
768
|
+
const createOutput = {
|
|
769
|
+
bindings: [],
|
|
770
|
+
expression: `${_table} (${_columns} ${_primaryKey ? ',' + _primaryKey : ''} ${_keys ? ',' + _keys : ''})`,
|
|
771
|
+
};
|
|
772
|
+
if (this.builder.TrackHistory) {
|
|
773
|
+
const hCompiler = this.container.resolve(orm_1.TableHistoryQueryCompiler, [this.builder]);
|
|
774
|
+
return [createOutput, ...hCompiler.compile()];
|
|
775
|
+
}
|
|
776
|
+
else {
|
|
777
|
+
return [createOutput];
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
_columns() {
|
|
781
|
+
return this.builder.Columns.map((c) => {
|
|
782
|
+
return this.container.resolve(orm_1.ColumnQueryCompiler, [c]).compile().expression;
|
|
783
|
+
}).join(',');
|
|
784
|
+
}
|
|
785
|
+
_foreignKeys() {
|
|
786
|
+
return this.builder.ForeignKeys.map((f) => {
|
|
787
|
+
return this.container.resolve(orm_1.ForeignKeyQueryCompiler, [f]).compile().expression;
|
|
788
|
+
}).join(',');
|
|
789
|
+
}
|
|
790
|
+
_primaryKeys() {
|
|
791
|
+
const _keys = this.builder.Columns.filter((x) => x.PrimaryKey)
|
|
792
|
+
.map((c) => `\`${c.Name}\``)
|
|
793
|
+
.join(',');
|
|
794
|
+
if (!lodash_1.default.isEmpty(_keys)) {
|
|
795
|
+
return `PRIMARY KEY (${_keys})`;
|
|
796
|
+
}
|
|
797
|
+
return '';
|
|
798
|
+
}
|
|
799
|
+
_table() {
|
|
800
|
+
return `CREATE${this.builder.Temporary ? ' TEMPORARY ' : ' '}TABLE ${this.builder.CheckExists ? 'IF NOT EXISTS ' : ''}${this.container.resolve(orm_1.TableAliasCompiler).compile(this.builder)}`;
|
|
801
|
+
}
|
|
802
|
+
};
|
|
803
|
+
exports.SqlTableQueryCompiler = SqlTableQueryCompiler;
|
|
804
|
+
exports.SqlTableQueryCompiler = SqlTableQueryCompiler = __decorate([
|
|
805
|
+
(0, di_1.NewInstance)(),
|
|
806
|
+
(0, di_1.Inject)(di_1.Container),
|
|
807
|
+
__metadata("design:paramtypes", [di_1.Container, orm_1.TableQueryBuilder])
|
|
808
|
+
], SqlTableQueryCompiler);
|
|
809
|
+
let SqlColumnQueryCompiler = class SqlColumnQueryCompiler {
|
|
810
|
+
constructor(builder) {
|
|
811
|
+
this.builder = builder;
|
|
812
|
+
this._statementsMappings = {
|
|
813
|
+
set: (builder) => `SET(${builder.Args[0].map((a) => `'${a}\'`).join(',')})`,
|
|
814
|
+
string: (builder) => `VARCHAR(${builder.Args[0] ? builder.Args[0] : 255})`,
|
|
815
|
+
boolean: () => `TINYINT(1)`,
|
|
816
|
+
float: (builder) => {
|
|
817
|
+
const _precision = builder.Args[0] ? builder.Args[0] : 8;
|
|
818
|
+
const _scale = builder.Args[1] ? builder.Args[1] : 2;
|
|
819
|
+
return `${builder.Type.toUpperCase()}(${_precision},${_scale})`;
|
|
820
|
+
},
|
|
821
|
+
double: (builder) => this._statementsMappings.float(builder),
|
|
822
|
+
decimal: (builder) => this._statementsMappings.float(builder),
|
|
823
|
+
enum: (builder) => `${builder.Type.toUpperCase()}(${builder.Args[0].map((a) => `'${a}'`).join(',')})`,
|
|
824
|
+
binary: (builder) => `BINARY(${builder.Args[0] ?? 255}`,
|
|
825
|
+
smallint: (builder) => builder.Type.toUpperCase(),
|
|
826
|
+
tinyint: (builder) => builder.Type.toUpperCase(),
|
|
827
|
+
mediumint: (builder) => builder.Type.toUpperCase(),
|
|
828
|
+
int: (builder) => builder.Type.toUpperCase(),
|
|
829
|
+
bigint: (builder) => builder.Type.toUpperCase(),
|
|
830
|
+
tinytext: (builder) => builder.Type.toUpperCase(),
|
|
831
|
+
mediumtext: (builder) => builder.Type.toUpperCase(),
|
|
832
|
+
longtext: (builder) => builder.Type.toUpperCase(),
|
|
833
|
+
text: (builder) => builder.Type.toUpperCase(),
|
|
834
|
+
bit: (builder) => builder.Type.toUpperCase(),
|
|
835
|
+
date: (builder) => builder.Type.toUpperCase(),
|
|
836
|
+
time: (builder) => builder.Type.toUpperCase(),
|
|
837
|
+
dateTime: (builder) => builder.Type.toUpperCase(),
|
|
838
|
+
timestamp: (builder) => builder.Type.toUpperCase(),
|
|
839
|
+
json: (builder) => builder.Type.toUpperCase(),
|
|
840
|
+
tinyblob: (builder) => builder.Type.toUpperCase(),
|
|
841
|
+
mediumblob: (builder) => builder.Type.toUpperCase(),
|
|
842
|
+
longblob: (builder) => builder.Type.toUpperCase(),
|
|
843
|
+
// COLUMN ADDITIONA PROPS
|
|
844
|
+
unsigned: () => 'UNSIGNED',
|
|
845
|
+
charset: (builder) => `CHARACTER SET '${builder.Charset}'`,
|
|
846
|
+
collation: (builder) => `COLLATE '${builder.Collation}'`,
|
|
847
|
+
notnull: () => `NOT NULL`,
|
|
848
|
+
default: () => this._defaultCompiler(),
|
|
849
|
+
autoincrement: () => `AUTO_INCREMENT`,
|
|
850
|
+
comment: (builder) => `COMMENT '${builder.Comment}'`,
|
|
851
|
+
};
|
|
852
|
+
if (!builder) {
|
|
853
|
+
throw new Error('column query builder cannot be null');
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
compile() {
|
|
857
|
+
const _stmt = [];
|
|
858
|
+
_stmt.push(`\`${this.builder.Name}\``);
|
|
859
|
+
_stmt.push(this._statementsMappings[this.builder.Type](this.builder));
|
|
860
|
+
if (this.builder.Unsigned) {
|
|
861
|
+
_stmt.push(this._statementsMappings.unsigned());
|
|
862
|
+
}
|
|
863
|
+
if (this.builder.Charset) {
|
|
864
|
+
_stmt.push(this._statementsMappings.charset(this.builder));
|
|
865
|
+
}
|
|
866
|
+
if (this.builder.Collation) {
|
|
867
|
+
_stmt.push(this._statementsMappings.collation(this.builder));
|
|
868
|
+
}
|
|
869
|
+
if (this.builder.NotNull) {
|
|
870
|
+
_stmt.push(this._statementsMappings.notnull());
|
|
871
|
+
}
|
|
872
|
+
if (this.builder.Default) {
|
|
873
|
+
_stmt.push(this._statementsMappings.default());
|
|
874
|
+
}
|
|
875
|
+
if (this.builder.AutoIncrement) {
|
|
876
|
+
_stmt.push(this._statementsMappings.autoincrement());
|
|
877
|
+
}
|
|
878
|
+
if (this.builder.Comment) {
|
|
879
|
+
_stmt.push(this._statementsMappings.comment(this.builder));
|
|
880
|
+
}
|
|
881
|
+
if (this.builder.Unique) {
|
|
882
|
+
_stmt.push('UNIQUE');
|
|
883
|
+
}
|
|
884
|
+
return {
|
|
885
|
+
bindings: [],
|
|
886
|
+
expression: _stmt.filter((x) => !lodash_1.default.isEmpty(x)).join(' '),
|
|
887
|
+
};
|
|
888
|
+
}
|
|
889
|
+
_defaultCompiler() {
|
|
890
|
+
let _stmt = '';
|
|
891
|
+
if (lodash_1.default.isNil(this.builder.Default) || (lodash_1.default.isNil(this.builder.Default.Query) && lodash_1.default.isNil(this.builder.Default.Value))) {
|
|
892
|
+
return _stmt;
|
|
893
|
+
}
|
|
894
|
+
if (lodash_1.default.isString(this.builder.Default.Value)) {
|
|
895
|
+
_stmt = `DEFAULT '${this.builder.Default.Value.trim()}'`;
|
|
896
|
+
}
|
|
897
|
+
else if (lodash_1.default.isNumber(this.builder.Default.Value)) {
|
|
898
|
+
_stmt = `DEFAULT ${this.builder.Default.Value}`;
|
|
899
|
+
}
|
|
900
|
+
else if (this.builder.Default.Query instanceof orm_1.RawQuery) {
|
|
901
|
+
_stmt = `DEFAULT ${this.builder.Default.Query.Query}`;
|
|
902
|
+
}
|
|
903
|
+
return _stmt;
|
|
904
|
+
}
|
|
905
|
+
};
|
|
906
|
+
exports.SqlColumnQueryCompiler = SqlColumnQueryCompiler;
|
|
907
|
+
exports.SqlColumnQueryCompiler = SqlColumnQueryCompiler = __decorate([
|
|
908
|
+
(0, di_1.NewInstance)(),
|
|
909
|
+
__metadata("design:paramtypes", [orm_1.ColumnQueryBuilder])
|
|
910
|
+
], SqlColumnQueryCompiler);
|
|
911
|
+
let SqlAlterColumnQueryCompiler = class SqlAlterColumnQueryCompiler extends SqlColumnQueryCompiler {
|
|
912
|
+
constructor(builder) {
|
|
913
|
+
super(builder);
|
|
914
|
+
}
|
|
915
|
+
compile() {
|
|
916
|
+
const builder = this.builder;
|
|
917
|
+
if (builder.AlterType === orm_1.ColumnAlterationType.Rename) {
|
|
918
|
+
const bld = this.builder;
|
|
919
|
+
return {
|
|
920
|
+
bindings: [],
|
|
921
|
+
expression: `RENAME COLUMN \`${bld.OldName}\` TO \`${bld.Name}\``,
|
|
922
|
+
};
|
|
923
|
+
}
|
|
924
|
+
const cDefinition = super.compile();
|
|
925
|
+
if (builder.AlterType === orm_1.ColumnAlterationType.Add) {
|
|
926
|
+
return {
|
|
927
|
+
bindings: cDefinition.bindings,
|
|
928
|
+
expression: `ADD ${cDefinition.expression} ${builder.AfterColumn ? `AFTER \`${builder.AfterColumn}\`` : ''}`,
|
|
929
|
+
};
|
|
930
|
+
}
|
|
931
|
+
if (builder.AlterType === orm_1.ColumnAlterationType.Modify) {
|
|
932
|
+
return {
|
|
933
|
+
bindings: cDefinition.bindings,
|
|
934
|
+
expression: `MODIFY ${cDefinition.expression}`,
|
|
935
|
+
};
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
};
|
|
939
|
+
exports.SqlAlterColumnQueryCompiler = SqlAlterColumnQueryCompiler;
|
|
940
|
+
exports.SqlAlterColumnQueryCompiler = SqlAlterColumnQueryCompiler = __decorate([
|
|
941
|
+
(0, di_1.NewInstance)(),
|
|
942
|
+
__metadata("design:paramtypes", [orm_1.AlterColumnQueryBuilder])
|
|
943
|
+
], SqlAlterColumnQueryCompiler);
|
|
944
|
+
let SqlEventQueryCompiler = class SqlEventQueryCompiler extends SqlQueryCompiler {
|
|
945
|
+
constructor(container, builder) {
|
|
946
|
+
super(builder, container);
|
|
947
|
+
}
|
|
948
|
+
compile() {
|
|
949
|
+
const schedule = this._createSchedule();
|
|
950
|
+
const action = this._action();
|
|
951
|
+
return {
|
|
952
|
+
bindings: action.bindings,
|
|
953
|
+
expression: `CREATE EVENT ${this._builder.Name} ON SCHEDULE ${schedule} DO BEGIN ${action.expression} END`,
|
|
954
|
+
};
|
|
955
|
+
}
|
|
956
|
+
_createSchedule() {
|
|
957
|
+
if (this._builder.FromNowInverval) {
|
|
958
|
+
return `AT CURRENT_TIMESTAMP + INTERVAL ${this._getInterval(this._builder.FromNowInverval)}`;
|
|
959
|
+
}
|
|
960
|
+
if (this._builder.At) {
|
|
961
|
+
return `AT ${this._builder.At.toFormat(`yyyy-mm-dd HH:mm:ss`)}`;
|
|
962
|
+
}
|
|
963
|
+
if (this._builder.EveryInterval) {
|
|
964
|
+
return `EVERY ${this._getInterval(this._builder.EveryInterval)}`;
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
_getInterval(desc) {
|
|
968
|
+
return Object.getOwnPropertyNames(desc)
|
|
969
|
+
.map((x) => {
|
|
970
|
+
if (desc[`${x}`] > 0) {
|
|
971
|
+
return `${desc[`${x}`]} ${x.toUpperCase()}`;
|
|
972
|
+
}
|
|
973
|
+
return null;
|
|
974
|
+
})
|
|
975
|
+
.find((x) => x !== null);
|
|
976
|
+
}
|
|
977
|
+
_action() {
|
|
978
|
+
if (this._builder.RawSql) {
|
|
979
|
+
const res = this._builder.RawSql.build();
|
|
980
|
+
return {
|
|
981
|
+
expression: res.Statements.join(';'),
|
|
982
|
+
bindings: res.Bindings,
|
|
983
|
+
};
|
|
984
|
+
}
|
|
985
|
+
else {
|
|
986
|
+
const qResult = this._builder.Queries.reduce((prev, curr) => {
|
|
987
|
+
const res = curr.toDB();
|
|
988
|
+
if (Array.isArray(res)) {
|
|
989
|
+
res.forEach((x) => {
|
|
990
|
+
prev.bindings = prev.bindings.concat(x.bindings);
|
|
991
|
+
prev.expression.push(x.expression);
|
|
992
|
+
});
|
|
993
|
+
}
|
|
994
|
+
else {
|
|
995
|
+
prev.bindings = prev.bindings.concat(res.bindings);
|
|
996
|
+
prev.expression.push(res.expression);
|
|
997
|
+
}
|
|
998
|
+
return prev;
|
|
999
|
+
}, {
|
|
1000
|
+
expression: [],
|
|
1001
|
+
bindings: [],
|
|
1002
|
+
});
|
|
1003
|
+
return {
|
|
1004
|
+
expression: qResult.expression.join(';'),
|
|
1005
|
+
bindings: qResult.bindings,
|
|
1006
|
+
};
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
};
|
|
1010
|
+
exports.SqlEventQueryCompiler = SqlEventQueryCompiler;
|
|
1011
|
+
exports.SqlEventQueryCompiler = SqlEventQueryCompiler = __decorate([
|
|
1012
|
+
(0, di_1.NewInstance)(),
|
|
1013
|
+
(0, di_1.Inject)(di_1.Container),
|
|
1014
|
+
__metadata("design:paramtypes", [Object, orm_1.EventQueryBuilder])
|
|
1015
|
+
], SqlEventQueryCompiler);
|
|
1016
|
+
let SqlDropEventQueryCompiler = class SqlDropEventQueryCompiler extends SqlQueryCompiler {
|
|
1017
|
+
constructor(container, builder) {
|
|
1018
|
+
super(builder, container);
|
|
1019
|
+
}
|
|
1020
|
+
compile() {
|
|
1021
|
+
return {
|
|
1022
|
+
bindings: [],
|
|
1023
|
+
expression: `DROP EVENT IF EXISTS ${this._builder.Name}`,
|
|
1024
|
+
};
|
|
1025
|
+
}
|
|
1026
|
+
};
|
|
1027
|
+
exports.SqlDropEventQueryCompiler = SqlDropEventQueryCompiler;
|
|
1028
|
+
exports.SqlDropEventQueryCompiler = SqlDropEventQueryCompiler = __decorate([
|
|
1029
|
+
(0, di_1.NewInstance)(),
|
|
1030
|
+
(0, di_1.Inject)(di_1.Container),
|
|
1031
|
+
__metadata("design:paramtypes", [Object, orm_1.DropEventQueryBuilder])
|
|
1032
|
+
], SqlDropEventQueryCompiler);
|
|
1033
1033
|
//# sourceMappingURL=compilers.js.map
|