@spinajs/orm 1.2.77 → 1.2.79
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/builders.d.ts +131 -32
- package/lib/builders.js +320 -101
- package/lib/builders.js.map +1 -1
- package/lib/dehydrators.d.ts +7 -0
- package/lib/dehydrators.js +31 -0
- package/lib/dehydrators.js.map +1 -0
- package/lib/driver.d.ts +5 -1
- package/lib/driver.js +11 -0
- package/lib/driver.js.map +1 -1
- package/lib/enums.d.ts +4 -1
- package/lib/enums.js +19 -17
- package/lib/enums.js.map +1 -1
- package/lib/index.d.ts +3 -0
- package/lib/index.js +8 -1
- package/lib/index.js.map +1 -1
- package/lib/interfaces.d.ts +69 -17
- package/lib/interfaces.js +49 -8
- package/lib/interfaces.js.map +1 -1
- package/lib/model.d.ts +65 -8
- package/lib/model.js +265 -90
- package/lib/model.js.map +1 -1
- package/lib/orm.js +27 -4
- package/lib/orm.js.map +1 -1
- package/lib/relations.d.ts +1 -1
- package/lib/relations.js +34 -11
- package/lib/relations.js.map +1 -1
- package/lib/statements.d.ts +3 -3
- package/lib/statements.js +24 -1
- package/lib/statements.js.map +1 -1
- package/package.json +8 -8
package/lib/builders.js
CHANGED
|
@@ -1,20 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/* eslint-disable prettier/prettier */
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
3
19
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
4
20
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
5
21
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
6
22
|
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;
|
|
7
23
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
8
24
|
};
|
|
25
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
|
+
if (mod && mod.__esModule) return mod;
|
|
27
|
+
var result = {};
|
|
28
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
|
+
__setModuleDefault(result, mod);
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
9
32
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
10
33
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
11
34
|
};
|
|
12
35
|
var RawQuery_1, WhereBuilder_1;
|
|
13
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.SchemaQueryBuilder = exports.TableQueryBuilder = exports.TableExistsQueryBuilder = 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
|
+
exports.SchemaQueryBuilder = exports.CloneTableQueryBuilder = exports.TruncateTableQueryBuilder = exports.TableQueryBuilder = exports.AlterTableQueryBuilder = 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;
|
|
15
38
|
const di_1 = require("@spinajs/di");
|
|
16
39
|
const exceptions_1 = require("@spinajs/exceptions");
|
|
17
|
-
const
|
|
40
|
+
const exceptions_2 = require("./exceptions");
|
|
41
|
+
const _ = __importStar(require("lodash"));
|
|
18
42
|
const typescript_mix_1 = require("typescript-mix");
|
|
19
43
|
const enums_1 = require("./enums");
|
|
20
44
|
const interfaces_1 = require("./interfaces");
|
|
@@ -25,7 +49,7 @@ const relations_1 = require("./relations");
|
|
|
25
49
|
const orm_1 = require("./orm");
|
|
26
50
|
const _1 = require(".");
|
|
27
51
|
function isWhereOperator(val) {
|
|
28
|
-
return _.isString(val) && Object.values(enums_1.
|
|
52
|
+
return _.isString(val) && Object.values(enums_1.SqlOperator).includes(val.toLowerCase());
|
|
29
53
|
}
|
|
30
54
|
let Builder = class Builder {
|
|
31
55
|
constructor(container, driver, model) {
|
|
@@ -36,76 +60,93 @@ let Builder = class Builder {
|
|
|
36
60
|
this._nonSelect = true;
|
|
37
61
|
this._asRaw = false;
|
|
38
62
|
}
|
|
39
|
-
|
|
40
|
-
this.
|
|
41
|
-
return this;
|
|
63
|
+
get Driver() {
|
|
64
|
+
return this._driver;
|
|
42
65
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
*/
|
|
46
|
-
toDB() {
|
|
47
|
-
throw new exceptions_1.MethodNotImplemented();
|
|
66
|
+
get Container() {
|
|
67
|
+
return this._container;
|
|
48
68
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (this._middlewares.length > 0) {
|
|
62
|
-
transformedResult = this._middlewares.reduce((_, current) => {
|
|
63
|
-
return current.afterData(result);
|
|
64
|
-
}, []);
|
|
69
|
+
get Model() {
|
|
70
|
+
return this._model;
|
|
71
|
+
}
|
|
72
|
+
then(onfulfilled, onrejected) {
|
|
73
|
+
const execute = (compiled) => {
|
|
74
|
+
return this._driver
|
|
75
|
+
.execute(compiled.expression, compiled.bindings, this.QueryContext)
|
|
76
|
+
.then((result) => {
|
|
77
|
+
try {
|
|
78
|
+
if (this._asRaw) {
|
|
79
|
+
onfulfilled(result);
|
|
80
|
+
return;
|
|
65
81
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
82
|
+
let transformedResult = result;
|
|
83
|
+
this._middlewares.forEach((m) => {
|
|
84
|
+
Object.assign(transformedResult, m.afterQuery(transformedResult));
|
|
85
|
+
});
|
|
86
|
+
if (this._model && !this._nonSelect) {
|
|
87
|
+
// TODO: rething this casting
|
|
88
|
+
const models = transformedResult.map((r) => {
|
|
89
|
+
let model = null;
|
|
90
|
+
for (const middleware of this._middlewares.reverse()) {
|
|
91
|
+
model = middleware.modelCreation(r);
|
|
92
|
+
if (model !== null) {
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
72
95
|
}
|
|
96
|
+
if (model === null) {
|
|
97
|
+
model = new this._model();
|
|
98
|
+
model.hydrate(r);
|
|
99
|
+
}
|
|
100
|
+
return model;
|
|
101
|
+
});
|
|
102
|
+
const afterMiddlewarePromises = this._middlewares.reduce((prev, current) => {
|
|
103
|
+
return prev.concat([current.afterHydration(models)]);
|
|
104
|
+
}, []);
|
|
105
|
+
if (this._middlewares.length > 0) {
|
|
106
|
+
Promise.all(afterMiddlewarePromises).then(() => {
|
|
107
|
+
onfulfilled(models);
|
|
108
|
+
}, onrejected);
|
|
73
109
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
model.hydrate(r);
|
|
110
|
+
else {
|
|
111
|
+
onfulfilled(models);
|
|
77
112
|
}
|
|
78
|
-
return model;
|
|
79
|
-
});
|
|
80
|
-
const afterMiddlewarePromises = this._middlewares.reduce((prev, current) => {
|
|
81
|
-
return prev.concat([current.afterHydration(models)]);
|
|
82
|
-
}, []);
|
|
83
|
-
if (this._middlewares.length > 0) {
|
|
84
|
-
Promise.all(afterMiddlewarePromises).then(() => {
|
|
85
|
-
resolve(models);
|
|
86
|
-
}, reject);
|
|
87
113
|
}
|
|
88
114
|
else {
|
|
89
|
-
|
|
115
|
+
onfulfilled(transformedResult);
|
|
90
116
|
}
|
|
91
117
|
}
|
|
92
|
-
|
|
93
|
-
|
|
118
|
+
catch (err) {
|
|
119
|
+
onrejected(err);
|
|
94
120
|
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
121
|
+
})
|
|
122
|
+
.catch((err) => {
|
|
123
|
+
onrejected(err);
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
const compiled = this.toDB();
|
|
127
|
+
if (Array.isArray(compiled)) {
|
|
128
|
+
// TODO: rethink this cast
|
|
129
|
+
return Promise.all(compiled.map((c) => execute(c)));
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
return execute(compiled);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
middleware(middleware) {
|
|
136
|
+
this._middlewares.push(middleware);
|
|
137
|
+
return this;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Builds query that is ready to use in DB
|
|
141
|
+
*/
|
|
142
|
+
toDB() {
|
|
143
|
+
throw new exceptions_1.MethodNotImplemented();
|
|
103
144
|
}
|
|
104
145
|
};
|
|
105
146
|
Builder = __decorate([
|
|
106
147
|
(0, di_1.NewInstance)(),
|
|
107
148
|
(0, di_1.Inject)(di_1.Container),
|
|
108
|
-
__metadata("design:paramtypes", [
|
|
149
|
+
__metadata("design:paramtypes", [Object, driver_1.OrmDriver, Object])
|
|
109
150
|
], Builder);
|
|
110
151
|
exports.Builder = Builder;
|
|
111
152
|
/**
|
|
@@ -137,19 +178,19 @@ let QueryBuilder = class QueryBuilder extends Builder {
|
|
|
137
178
|
* @example
|
|
138
179
|
* SELECT * FROM `spinejs`.`users` as u
|
|
139
180
|
*/
|
|
140
|
-
get
|
|
141
|
-
return this.
|
|
181
|
+
get Database() {
|
|
182
|
+
return this._database;
|
|
142
183
|
}
|
|
143
184
|
/**
|
|
144
185
|
* Sets schema to this query.
|
|
145
186
|
*
|
|
146
|
-
* @param
|
|
187
|
+
* @param database - schema or database name in database
|
|
147
188
|
*/
|
|
148
|
-
|
|
149
|
-
if (!
|
|
189
|
+
database(database) {
|
|
190
|
+
if (!database) {
|
|
150
191
|
throw new exceptions_1.InvalidArgument(`schema argument cannot be null or empty`);
|
|
151
192
|
}
|
|
152
|
-
this.
|
|
193
|
+
this._database = database;
|
|
153
194
|
return this;
|
|
154
195
|
}
|
|
155
196
|
/**
|
|
@@ -187,12 +228,11 @@ let QueryBuilder = class QueryBuilder extends Builder {
|
|
|
187
228
|
QueryBuilder = __decorate([
|
|
188
229
|
(0, di_1.NewInstance)(),
|
|
189
230
|
(0, di_1.Inject)(di_1.Container),
|
|
190
|
-
__metadata("design:paramtypes", [
|
|
231
|
+
__metadata("design:paramtypes", [Object, driver_1.OrmDriver, Object])
|
|
191
232
|
], QueryBuilder);
|
|
192
233
|
exports.QueryBuilder = QueryBuilder;
|
|
193
234
|
let LimitBuilder = class LimitBuilder {
|
|
194
235
|
constructor() {
|
|
195
|
-
this._fail = false;
|
|
196
236
|
this._first = false;
|
|
197
237
|
this._limit = {
|
|
198
238
|
limit: -1,
|
|
@@ -218,9 +258,22 @@ let LimitBuilder = class LimitBuilder {
|
|
|
218
258
|
this._limit.limit = 1;
|
|
219
259
|
return (await this);
|
|
220
260
|
}
|
|
221
|
-
firstOrFail() {
|
|
222
|
-
this.
|
|
223
|
-
|
|
261
|
+
async firstOrFail() {
|
|
262
|
+
return this.firstOrThrow(new exceptions_2.OrmException('not found'));
|
|
263
|
+
}
|
|
264
|
+
async orThrow(error) {
|
|
265
|
+
const result = (await this);
|
|
266
|
+
if (result === undefined || (Array.isArray(result) && result.length === 0)) {
|
|
267
|
+
throw error;
|
|
268
|
+
}
|
|
269
|
+
return result;
|
|
270
|
+
}
|
|
271
|
+
async firstOrThrow(error) {
|
|
272
|
+
const result = await this.first();
|
|
273
|
+
if (result === undefined) {
|
|
274
|
+
throw error;
|
|
275
|
+
}
|
|
276
|
+
return result;
|
|
224
277
|
}
|
|
225
278
|
getLimits() {
|
|
226
279
|
return this._limit;
|
|
@@ -477,7 +530,7 @@ let WhereBuilder = WhereBuilder_1 = class WhereBuilder {
|
|
|
477
530
|
if (v === null) {
|
|
478
531
|
return this.whereNull(c);
|
|
479
532
|
}
|
|
480
|
-
self._statements.push(self._container.resolve(statements_1.WhereStatement, [c, enums_1.
|
|
533
|
+
self._statements.push(self._container.resolve(statements_1.WhereStatement, [c, enums_1.SqlOperator.EQ, v, self._tableAlias, this._container]));
|
|
481
534
|
return self;
|
|
482
535
|
}
|
|
483
536
|
/**
|
|
@@ -495,7 +548,7 @@ let WhereBuilder = WhereBuilder_1 = class WhereBuilder {
|
|
|
495
548
|
return this.whereNull(c);
|
|
496
549
|
}
|
|
497
550
|
if (v === null) {
|
|
498
|
-
return o === enums_1.
|
|
551
|
+
return o === enums_1.SqlOperator.NOT_NULL ? this.whereNotNull(c) : this.whereNull(c);
|
|
499
552
|
}
|
|
500
553
|
self._statements.push(self._container.resolve(statements_1.WhereStatement, [c, o, v, self._tableAlias, this._container]));
|
|
501
554
|
return this;
|
|
@@ -511,20 +564,20 @@ let WhereBuilder = WhereBuilder_1 = class WhereBuilder {
|
|
|
511
564
|
}
|
|
512
565
|
whereObject(obj) {
|
|
513
566
|
for (const key of Object.keys(obj)) {
|
|
514
|
-
this.andWhere(key, enums_1.
|
|
567
|
+
this.andWhere(key, enums_1.SqlOperator.EQ, obj[key]);
|
|
515
568
|
}
|
|
516
569
|
return this;
|
|
517
570
|
}
|
|
518
571
|
whereNotNull(column) {
|
|
519
|
-
this._statements.push(this._container.resolve(statements_1.WhereStatement, [column, enums_1.
|
|
572
|
+
this._statements.push(this._container.resolve(statements_1.WhereStatement, [column, enums_1.SqlOperator.NOT_NULL, null, this._tableAlias]));
|
|
520
573
|
return this;
|
|
521
574
|
}
|
|
522
575
|
whereNull(column) {
|
|
523
|
-
this._statements.push(this._container.resolve(statements_1.WhereStatement, [column, enums_1.
|
|
576
|
+
this._statements.push(this._container.resolve(statements_1.WhereStatement, [column, enums_1.SqlOperator.NULL, null, this._tableAlias]));
|
|
524
577
|
return this;
|
|
525
578
|
}
|
|
526
579
|
whereNot(column, val) {
|
|
527
|
-
return this.where(column, enums_1.
|
|
580
|
+
return this.where(column, enums_1.SqlOperator.NOT, val);
|
|
528
581
|
}
|
|
529
582
|
whereIn(column, val) {
|
|
530
583
|
this._statements.push(this._container.resolve(statements_1.InStatement, [column, val, false, this._tableAlias]));
|
|
@@ -592,7 +645,7 @@ class SelectQueryBuilder extends QueryBuilder {
|
|
|
592
645
|
offset: -1,
|
|
593
646
|
};
|
|
594
647
|
this._nonSelect = false;
|
|
595
|
-
this.
|
|
648
|
+
this.QueryContext = interfaces_1.QueryContext.Select;
|
|
596
649
|
this._owner = owner;
|
|
597
650
|
}
|
|
598
651
|
get IsDistinct() {
|
|
@@ -697,20 +750,25 @@ class SelectQueryBuilder extends QueryBuilder {
|
|
|
697
750
|
const compiler = this._container.resolve(interfaces_1.SelectQueryCompiler, [this]);
|
|
698
751
|
return compiler.compile();
|
|
699
752
|
}
|
|
700
|
-
then(
|
|
753
|
+
then(onfulfilled, onrejected) {
|
|
701
754
|
return super.then((result) => {
|
|
702
755
|
if (this._first) {
|
|
703
|
-
if (
|
|
704
|
-
|
|
756
|
+
if (Array.isArray(result)) {
|
|
757
|
+
if (result.length !== 0) {
|
|
758
|
+
return onfulfilled(result ? result[0] : null);
|
|
759
|
+
}
|
|
760
|
+
else {
|
|
761
|
+
return onfulfilled(undefined);
|
|
762
|
+
}
|
|
705
763
|
}
|
|
706
764
|
else {
|
|
707
|
-
|
|
765
|
+
return onfulfilled(result);
|
|
708
766
|
}
|
|
709
767
|
}
|
|
710
768
|
else {
|
|
711
|
-
|
|
769
|
+
return onfulfilled(result);
|
|
712
770
|
}
|
|
713
|
-
},
|
|
771
|
+
}, onrejected);
|
|
714
772
|
}
|
|
715
773
|
async execute() {
|
|
716
774
|
return (await this);
|
|
@@ -724,7 +782,6 @@ exports.SelectQueryBuilder = SelectQueryBuilder;
|
|
|
724
782
|
class DeleteQueryBuilder extends QueryBuilder {
|
|
725
783
|
constructor(container, driver, model) {
|
|
726
784
|
super(container, driver, model);
|
|
727
|
-
this._truncate = false;
|
|
728
785
|
this._method = enums_1.QueryMethod.DELETE;
|
|
729
786
|
this._statements = [];
|
|
730
787
|
this._boolean = enums_1.WhereBoolean.AND;
|
|
@@ -732,18 +789,11 @@ class DeleteQueryBuilder extends QueryBuilder {
|
|
|
732
789
|
limit: -1,
|
|
733
790
|
offset: -1,
|
|
734
791
|
};
|
|
735
|
-
this.
|
|
736
|
-
}
|
|
737
|
-
get Truncate() {
|
|
738
|
-
return this._truncate;
|
|
792
|
+
this.QueryContext = interfaces_1.QueryContext.Delete;
|
|
739
793
|
}
|
|
740
794
|
toDB() {
|
|
741
795
|
return this._container.resolve(interfaces_1.DeleteQueryCompiler, [this]).compile();
|
|
742
796
|
}
|
|
743
|
-
truncate() {
|
|
744
|
-
this._truncate = true;
|
|
745
|
-
return this;
|
|
746
|
-
}
|
|
747
797
|
}
|
|
748
798
|
__decorate([
|
|
749
799
|
(0, typescript_mix_1.use)(WhereBuilder, LimitBuilder),
|
|
@@ -769,8 +819,8 @@ class OnDuplicateQueryBuilder {
|
|
|
769
819
|
this._columnsToUpdate = columns;
|
|
770
820
|
return this;
|
|
771
821
|
}
|
|
772
|
-
then(
|
|
773
|
-
return this._parent.then(
|
|
822
|
+
then(onfulfilled, onrejected) {
|
|
823
|
+
return this._parent.then(onfulfilled, onrejected);
|
|
774
824
|
}
|
|
775
825
|
toDB() {
|
|
776
826
|
return this._parent.toDB();
|
|
@@ -784,7 +834,7 @@ class UpdateQueryBuilder extends QueryBuilder {
|
|
|
784
834
|
this._method = enums_1.QueryMethod.UPDATE;
|
|
785
835
|
this._boolean = enums_1.WhereBoolean.AND;
|
|
786
836
|
this._statements = [];
|
|
787
|
-
this.
|
|
837
|
+
this.QueryContext = interfaces_1.QueryContext.Update;
|
|
788
838
|
}
|
|
789
839
|
get Value() {
|
|
790
840
|
return this._value;
|
|
@@ -812,7 +862,7 @@ class InsertQueryBuilder extends QueryBuilder {
|
|
|
812
862
|
this._method = enums_1.QueryMethod.INSERT;
|
|
813
863
|
this._columns = [];
|
|
814
864
|
this._values = [];
|
|
815
|
-
this.
|
|
865
|
+
this.QueryContext = interfaces_1.QueryContext.Insert;
|
|
816
866
|
}
|
|
817
867
|
get Values() {
|
|
818
868
|
return this._values;
|
|
@@ -820,13 +870,23 @@ class InsertQueryBuilder extends QueryBuilder {
|
|
|
820
870
|
get Ignore() {
|
|
821
871
|
return this._ignore;
|
|
822
872
|
}
|
|
873
|
+
get Update() {
|
|
874
|
+
return this._update;
|
|
875
|
+
}
|
|
876
|
+
get Replace() {
|
|
877
|
+
return this._replace;
|
|
878
|
+
}
|
|
823
879
|
/**
|
|
824
880
|
* Sets insert to ignore on duplicate
|
|
825
881
|
*/
|
|
826
|
-
|
|
882
|
+
orIgnore() {
|
|
827
883
|
this._ignore = true;
|
|
828
884
|
return this;
|
|
829
885
|
}
|
|
886
|
+
orReplace() {
|
|
887
|
+
this._update = true;
|
|
888
|
+
return this;
|
|
889
|
+
}
|
|
830
890
|
values(data) {
|
|
831
891
|
const self = this;
|
|
832
892
|
if (Array.isArray(data)) {
|
|
@@ -859,11 +919,12 @@ class InsertQueryBuilder extends QueryBuilder {
|
|
|
859
919
|
}
|
|
860
920
|
onDuplicate(column) {
|
|
861
921
|
let columnToCheck = column;
|
|
862
|
-
if (!columnToCheck && this.
|
|
922
|
+
if (!columnToCheck && this._model) {
|
|
863
923
|
columnToCheck = (0, model_1.extractModelDescriptor)(this._model)
|
|
864
|
-
.Columns.filter((c) => c.Unique
|
|
924
|
+
.Columns.filter((c) => c.Unique)
|
|
865
925
|
.map((c) => c.Name);
|
|
866
926
|
}
|
|
927
|
+
this._update = true;
|
|
867
928
|
this.DuplicateQueryBuilder = new OnDuplicateQueryBuilder(this._container, this, columnToCheck);
|
|
868
929
|
return this.DuplicateQueryBuilder;
|
|
869
930
|
}
|
|
@@ -879,7 +940,7 @@ exports.InsertQueryBuilder = InsertQueryBuilder;
|
|
|
879
940
|
let IndexQueryBuilder = class IndexQueryBuilder extends Builder {
|
|
880
941
|
constructor(container, driver) {
|
|
881
942
|
super(container, driver);
|
|
882
|
-
this.
|
|
943
|
+
this.QueryContext = interfaces_1.QueryContext.Schema;
|
|
883
944
|
}
|
|
884
945
|
name(name) {
|
|
885
946
|
this.Name = name;
|
|
@@ -1025,17 +1086,70 @@ ColumnQueryBuilder = __decorate([
|
|
|
1025
1086
|
__metadata("design:paramtypes", [String, String, Object])
|
|
1026
1087
|
], ColumnQueryBuilder);
|
|
1027
1088
|
exports.ColumnQueryBuilder = ColumnQueryBuilder;
|
|
1089
|
+
class AlterColumnQueryBuilder extends ColumnQueryBuilder {
|
|
1090
|
+
constructor(name, type, ...args) {
|
|
1091
|
+
super(name, type, ...args);
|
|
1092
|
+
this.OldName = name;
|
|
1093
|
+
// we assume add by default
|
|
1094
|
+
this.AlterType = _1.ColumnAlterationType.Add;
|
|
1095
|
+
}
|
|
1096
|
+
addColumn() {
|
|
1097
|
+
this.AlterType = _1.ColumnAlterationType.Add;
|
|
1098
|
+
return this;
|
|
1099
|
+
}
|
|
1100
|
+
modify() {
|
|
1101
|
+
this.AlterType = _1.ColumnAlterationType.Modify;
|
|
1102
|
+
return this;
|
|
1103
|
+
}
|
|
1104
|
+
rename(newName) {
|
|
1105
|
+
this.AlterType = _1.ColumnAlterationType.Rename;
|
|
1106
|
+
this.Name = newName;
|
|
1107
|
+
return this;
|
|
1108
|
+
}
|
|
1109
|
+
after(columnName) {
|
|
1110
|
+
this.AfterColumn = columnName;
|
|
1111
|
+
return this;
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
exports.AlterColumnQueryBuilder = AlterColumnQueryBuilder;
|
|
1028
1115
|
class TableExistsQueryBuilder extends QueryBuilder {
|
|
1029
1116
|
constructor(container, driver, name) {
|
|
1030
1117
|
super(container, driver, null);
|
|
1031
1118
|
this.setTable(name);
|
|
1032
|
-
this.
|
|
1119
|
+
this.QueryContext = interfaces_1.QueryContext.Select;
|
|
1033
1120
|
}
|
|
1034
1121
|
toDB() {
|
|
1035
1122
|
return this._container.resolve(_1.TableExistsCompiler, [this]).compile();
|
|
1036
1123
|
}
|
|
1037
1124
|
}
|
|
1038
1125
|
exports.TableExistsQueryBuilder = TableExistsQueryBuilder;
|
|
1126
|
+
class AlterTableQueryBuilder extends QueryBuilder {
|
|
1127
|
+
constructor(container, driver, name) {
|
|
1128
|
+
super(container, driver, null);
|
|
1129
|
+
this.setTable(name);
|
|
1130
|
+
this.QueryContext = interfaces_1.QueryContext.Schema;
|
|
1131
|
+
this._columns = [];
|
|
1132
|
+
this.DroppedColumns = [];
|
|
1133
|
+
}
|
|
1134
|
+
get Columns() {
|
|
1135
|
+
return this._columns;
|
|
1136
|
+
}
|
|
1137
|
+
/**
|
|
1138
|
+
* Renames table
|
|
1139
|
+
*
|
|
1140
|
+
* @param newTableName - new table name
|
|
1141
|
+
*/
|
|
1142
|
+
rename(newTableName) {
|
|
1143
|
+
this.NewTableName = newTableName;
|
|
1144
|
+
}
|
|
1145
|
+
dropColumn(column) {
|
|
1146
|
+
this.DroppedColumns.push(column);
|
|
1147
|
+
}
|
|
1148
|
+
toDB() {
|
|
1149
|
+
return this._container.resolve(interfaces_1.AlterTableQueryCompiler, [this]).compile();
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
exports.AlterTableQueryBuilder = AlterTableQueryBuilder;
|
|
1039
1153
|
class TableQueryBuilder extends QueryBuilder {
|
|
1040
1154
|
constructor(container, driver, name) {
|
|
1041
1155
|
super(container, driver, null);
|
|
@@ -1043,13 +1157,18 @@ class TableQueryBuilder extends QueryBuilder {
|
|
|
1043
1157
|
this._comment = '';
|
|
1044
1158
|
this._columns = [];
|
|
1045
1159
|
this._foreignKeys = [];
|
|
1160
|
+
this._temporary = false;
|
|
1046
1161
|
this.setTable(name);
|
|
1047
|
-
this.
|
|
1162
|
+
this.QueryContext = interfaces_1.QueryContext.Schema;
|
|
1048
1163
|
}
|
|
1049
1164
|
ifExists() {
|
|
1050
1165
|
this._checkExists = true;
|
|
1051
1166
|
return this;
|
|
1052
1167
|
}
|
|
1168
|
+
temporary() {
|
|
1169
|
+
this._temporary = true;
|
|
1170
|
+
return this;
|
|
1171
|
+
}
|
|
1053
1172
|
get Columns() {
|
|
1054
1173
|
return this._columns;
|
|
1055
1174
|
}
|
|
@@ -1059,6 +1178,9 @@ class TableQueryBuilder extends QueryBuilder {
|
|
|
1059
1178
|
get CheckExists() {
|
|
1060
1179
|
return this._checkExists;
|
|
1061
1180
|
}
|
|
1181
|
+
get Temporary() {
|
|
1182
|
+
return this._temporary;
|
|
1183
|
+
}
|
|
1062
1184
|
increments(name) {
|
|
1063
1185
|
return this.int(name).autoIncrement().notNull().primaryKey();
|
|
1064
1186
|
}
|
|
@@ -1079,6 +1201,83 @@ class TableQueryBuilder extends QueryBuilder {
|
|
|
1079
1201
|
}
|
|
1080
1202
|
}
|
|
1081
1203
|
exports.TableQueryBuilder = TableQueryBuilder;
|
|
1204
|
+
let TruncateTableQueryBuilder = class TruncateTableQueryBuilder extends QueryBuilder {
|
|
1205
|
+
constructor(container, driver) {
|
|
1206
|
+
super(container, driver);
|
|
1207
|
+
this.container = container;
|
|
1208
|
+
this.driver = driver;
|
|
1209
|
+
}
|
|
1210
|
+
toDB() {
|
|
1211
|
+
return this._container.resolve(interfaces_1.TruncateTableQueryCompiler, [this]).compile();
|
|
1212
|
+
}
|
|
1213
|
+
};
|
|
1214
|
+
TruncateTableQueryBuilder = __decorate([
|
|
1215
|
+
(0, di_1.NewInstance)(),
|
|
1216
|
+
(0, di_1.Inject)(di_1.Container),
|
|
1217
|
+
__metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver])
|
|
1218
|
+
], TruncateTableQueryBuilder);
|
|
1219
|
+
exports.TruncateTableQueryBuilder = TruncateTableQueryBuilder;
|
|
1220
|
+
let CloneTableQueryBuilder = class CloneTableQueryBuilder extends QueryBuilder {
|
|
1221
|
+
constructor(container, driver) {
|
|
1222
|
+
super(container, driver);
|
|
1223
|
+
this.container = container;
|
|
1224
|
+
this.driver = driver;
|
|
1225
|
+
this._shallow = true;
|
|
1226
|
+
this._cloneSrc = '';
|
|
1227
|
+
this._temporary = false;
|
|
1228
|
+
}
|
|
1229
|
+
get CloneSource() {
|
|
1230
|
+
return this._cloneSrc;
|
|
1231
|
+
}
|
|
1232
|
+
get Temporary() {
|
|
1233
|
+
return this._temporary;
|
|
1234
|
+
}
|
|
1235
|
+
get Shallow() {
|
|
1236
|
+
return this._shallow;
|
|
1237
|
+
}
|
|
1238
|
+
get Filter() {
|
|
1239
|
+
return this._filter;
|
|
1240
|
+
}
|
|
1241
|
+
/**
|
|
1242
|
+
* Clones table structure without data
|
|
1243
|
+
* Shorthand for createTable(( table) => table.clone("new"));
|
|
1244
|
+
*
|
|
1245
|
+
* @param srcTable - source table name
|
|
1246
|
+
* @param newTable - target table name
|
|
1247
|
+
*/
|
|
1248
|
+
shallowClone(srcTable, newTable) {
|
|
1249
|
+
this.setTable(newTable);
|
|
1250
|
+
this._cloneSrc = srcTable;
|
|
1251
|
+
return this;
|
|
1252
|
+
}
|
|
1253
|
+
/**
|
|
1254
|
+
* Clones table with data
|
|
1255
|
+
*
|
|
1256
|
+
* @param srcTable - source table name
|
|
1257
|
+
* @param newTable - target table name
|
|
1258
|
+
* @param filter - data filter, set null if all data is to be cloned
|
|
1259
|
+
*/
|
|
1260
|
+
async deepClone(srcTable, newTable, filter) {
|
|
1261
|
+
this.setTable(newTable);
|
|
1262
|
+
this._cloneSrc = srcTable;
|
|
1263
|
+
this._shallow = false;
|
|
1264
|
+
if (filter) {
|
|
1265
|
+
this._filter = new SelectQueryBuilder(this._container, this._driver);
|
|
1266
|
+
this._filter.setTable(this._cloneSrc);
|
|
1267
|
+
filter(this._filter);
|
|
1268
|
+
}
|
|
1269
|
+
return this;
|
|
1270
|
+
}
|
|
1271
|
+
toDB() {
|
|
1272
|
+
return this._container.resolve(_1.TableCloneQueryCompiler, [this]).compile();
|
|
1273
|
+
}
|
|
1274
|
+
};
|
|
1275
|
+
CloneTableQueryBuilder = __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
|
+
], CloneTableQueryBuilder);
|
|
1280
|
+
exports.CloneTableQueryBuilder = CloneTableQueryBuilder;
|
|
1082
1281
|
let SchemaQueryBuilder = class SchemaQueryBuilder {
|
|
1083
1282
|
constructor(container, driver) {
|
|
1084
1283
|
this.container = container;
|
|
@@ -1089,8 +1288,21 @@ let SchemaQueryBuilder = class SchemaQueryBuilder {
|
|
|
1089
1288
|
callback.call(this, builder);
|
|
1090
1289
|
return builder;
|
|
1091
1290
|
}
|
|
1092
|
-
|
|
1291
|
+
cloneTable(callback) {
|
|
1292
|
+
const builder = new CloneTableQueryBuilder(this.container, this.driver);
|
|
1293
|
+
callback(builder);
|
|
1294
|
+
return builder;
|
|
1295
|
+
}
|
|
1296
|
+
alterTable(name, callback) {
|
|
1297
|
+
const builder = new AlterTableQueryBuilder(this.container, this.driver, name);
|
|
1298
|
+
callback.call(this, builder);
|
|
1299
|
+
return builder;
|
|
1300
|
+
}
|
|
1301
|
+
async tableExists(name, schema) {
|
|
1093
1302
|
const query = new TableExistsQueryBuilder(this.container, this.driver, name);
|
|
1303
|
+
if (schema) {
|
|
1304
|
+
query.database(schema);
|
|
1305
|
+
}
|
|
1094
1306
|
const exists = await query;
|
|
1095
1307
|
return exists !== null && exists.length === 1;
|
|
1096
1308
|
}
|
|
@@ -1108,4 +1320,11 @@ Object.values(enums_1.ColumnType).forEach((type) => {
|
|
|
1108
1320
|
return _builder;
|
|
1109
1321
|
};
|
|
1110
1322
|
});
|
|
1323
|
+
Object.values(enums_1.ColumnType).forEach((type) => {
|
|
1324
|
+
AlterTableQueryBuilder.prototype[type] = function (name, ...args) {
|
|
1325
|
+
const _builder = new AlterColumnQueryBuilder(name, type, ...args);
|
|
1326
|
+
this._columns.push(_builder);
|
|
1327
|
+
return _builder;
|
|
1328
|
+
};
|
|
1329
|
+
});
|
|
1111
1330
|
//# sourceMappingURL=builders.js.map
|