@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.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 _ = require("lodash");
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.WhereOperators).includes(val.toLowerCase());
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
- middleware(middleware) {
40
- this._middlewares.push(middleware);
41
- return this;
63
+ get Driver() {
64
+ return this._driver;
42
65
  }
43
- /**
44
- * Builds query that is ready to use in DB
45
- */
46
- toDB() {
47
- throw new exceptions_1.MethodNotImplemented();
66
+ get Container() {
67
+ return this._container;
48
68
  }
49
- then(resolve, reject) {
50
- const compiled = this.toDB();
51
- return this._driver
52
- .execute(compiled.expression, compiled.bindings, this._queryContext)
53
- .then((result) => {
54
- try {
55
- if (this._asRaw) {
56
- resolve(result);
57
- return;
58
- }
59
- if (this._model && !this._nonSelect) {
60
- let transformedResult = result;
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
- const models = transformedResult.map((r) => {
67
- let model = null;
68
- for (const middleware of this._middlewares) {
69
- model = middleware.modelCreation(r);
70
- if (model !== null) {
71
- break;
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
- if (model === null) {
75
- model = new this._model();
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
- resolve(models);
115
+ onfulfilled(transformedResult);
90
116
  }
91
117
  }
92
- else {
93
- resolve(result);
118
+ catch (err) {
119
+ onrejected(err);
94
120
  }
95
- }
96
- catch (err) {
97
- reject(err);
98
- }
99
- })
100
- .catch((err) => {
101
- reject(err);
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", [di_1.Container, driver_1.OrmDriver, Object])
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 Schema() {
141
- return this._schema;
181
+ get Database() {
182
+ return this._database;
142
183
  }
143
184
  /**
144
185
  * Sets schema to this query.
145
186
  *
146
- * @param schema - schema or database name in database
187
+ * @param database - schema or database name in database
147
188
  */
148
- schema(schema) {
149
- if (!schema) {
189
+ database(database) {
190
+ if (!database) {
150
191
  throw new exceptions_1.InvalidArgument(`schema argument cannot be null or empty`);
151
192
  }
152
- this._schema = schema;
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", [di_1.Container, driver_1.OrmDriver, Object])
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._fail = true;
223
- return this.first();
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.WhereOperators.EQ, v, self._tableAlias, this._container]));
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.WhereOperators.NOT_NULL ? this.whereNotNull(c) : this.whereNull(c);
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.WhereOperators.EQ, obj[key]);
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.WhereOperators.NOT_NULL, null, this._tableAlias]));
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.WhereOperators.NULL, null, this._tableAlias]));
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.WhereOperators.NOT, val);
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._queryContext = interfaces_1.QueryContext.Select;
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(resolve, reject) {
753
+ then(onfulfilled, onrejected) {
701
754
  return super.then((result) => {
702
755
  if (this._first) {
703
- if (this._fail && result.length === 0) {
704
- reject(new Error('empty results'));
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
- resolve(result ? result[0] : null);
765
+ return onfulfilled(result);
708
766
  }
709
767
  }
710
768
  else {
711
- resolve(result);
769
+ return onfulfilled(result);
712
770
  }
713
- }, reject);
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._queryContext = interfaces_1.QueryContext.Delete;
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(resolve, reject) {
773
- return this._parent.then(resolve, reject);
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._queryContext = interfaces_1.QueryContext.Update;
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._queryContext = interfaces_1.QueryContext.Insert;
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
- ignore() {
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.this._model) {
922
+ if (!columnToCheck && this._model) {
863
923
  columnToCheck = (0, model_1.extractModelDescriptor)(this._model)
864
- .Columns.filter((c) => c.Unique && !c.PrimaryKey)
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._queryContext = interfaces_1.QueryContext.Schema;
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._queryContext = interfaces_1.QueryContext.Select;
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._queryContext = interfaces_1.QueryContext.Schema;
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
- async tableExists(name) {
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