@spinajs/orm 2.0.19 → 2.0.39
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 +94 -8
- package/lib/builders.js +158 -48
- package/lib/builders.js.map +1 -1
- package/lib/converters.d.ts +6 -1
- package/lib/converters.js +36 -1
- package/lib/converters.js.map +1 -1
- package/lib/decorators.d.ts +33 -3
- package/lib/decorators.js +87 -18
- package/lib/decorators.js.map +1 -1
- package/lib/dehydrators.js +1 -1
- package/lib/dehydrators.js.map +1 -1
- package/lib/driver.d.ts +4 -5
- package/lib/driver.js +2 -3
- package/lib/driver.js.map +1 -1
- package/lib/enums.d.ts +3 -2
- package/lib/enums.js +1 -0
- package/lib/enums.js.map +1 -1
- package/lib/hydrators.js +1 -1
- package/lib/hydrators.js.map +1 -1
- package/lib/interfaces.d.ts +78 -13
- package/lib/interfaces.js +49 -3
- package/lib/interfaces.js.map +1 -1
- package/lib/model.d.ts +52 -33
- package/lib/model.js +81 -39
- package/lib/model.js.map +1 -1
- package/lib/orm.d.ts +4 -3
- package/lib/orm.js +18 -18
- package/lib/orm.js.map +1 -1
- package/lib/relations.d.ts +13 -7
- package/lib/relations.js +14 -7
- package/lib/relations.js.map +1 -1
- package/lib/statements.d.ts +11 -3
- package/lib/statements.js +42 -8
- package/lib/statements.js.map +1 -1
- package/lib/types.d.ts +8 -0
- package/package.json +8 -8
- package/lib/cli.d.ts +0 -1
- package/lib/cli.js +0 -2
- package/lib/cli.js.map +0 -1
package/lib/builders.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Container, Constructor, IContainer } from '@spinajs/di';
|
|
2
2
|
import { ColumnType, QueryMethod, SordOrder, WhereBoolean, SqlOperator } from './enums';
|
|
3
|
-
import { IColumnsBuilder, ICompilerOutput, ILimitBuilder, IOrderByBuilder, IQueryBuilder, IQueryLimit, ISort, IWhereBuilder, QueryContext, IJoinBuilder, IBuilderMiddleware, IWithRecursiveBuilder, ReferentialAction, IGroupByBuilder } from './interfaces';
|
|
4
|
-
import { ColumnStatement, IQueryStatement, Wrap } from './statements';
|
|
5
|
-
import { WhereFunction } from './types';
|
|
3
|
+
import { IColumnsBuilder, ICompilerOutput, ILimitBuilder, IOrderByBuilder, IQueryBuilder, IQueryLimit, ISort, IWhereBuilder, QueryContext, IJoinBuilder, IBuilderMiddleware, IWithRecursiveBuilder, ReferentialAction, IGroupByBuilder, IUpdateResult, DefaultValueBuilder, ColumnAlterationType, ISelectBuilderExtensions, QueryMiddleware } from './interfaces';
|
|
4
|
+
import { ColumnStatement, IQueryStatement, RawQueryStatement, Wrap } from './statements';
|
|
5
|
+
import { PartialModel, PickRelations, WhereFunction } from './types';
|
|
6
6
|
import { OrmDriver } from './driver';
|
|
7
7
|
import { ModelBase } from './model';
|
|
8
|
-
import { OrmRelation, IOrmRelation } from './relations';
|
|
9
|
-
import {
|
|
8
|
+
import { OrmRelation, IOrmRelation, Relation } from './relations';
|
|
9
|
+
import { DateTime } from 'luxon';
|
|
10
10
|
/**
|
|
11
11
|
* Trick typescript by using the inbuilt interface inheritance and declaration merging
|
|
12
12
|
* for builder classes.
|
|
@@ -151,24 +151,32 @@ export declare class GroupByBuilder implements IGroupByBuilder {
|
|
|
151
151
|
groupBy(expression: string | RawQuery): this;
|
|
152
152
|
}
|
|
153
153
|
export declare class JoinBuilder implements IJoinBuilder {
|
|
154
|
+
protected _model?: Constructor<ModelBase>;
|
|
154
155
|
get JoinStatements(): IQueryStatement[];
|
|
155
156
|
protected _joinStatements: IQueryStatement[];
|
|
156
157
|
protected _container: Container;
|
|
157
158
|
protected _tableAlias: string;
|
|
158
159
|
constructor(container: Container);
|
|
159
160
|
clearJoins(): this;
|
|
161
|
+
innerJoin<R extends ModelBase>(model: R, where?: (this: SelectQueryBuilder<R>) => void): this;
|
|
160
162
|
innerJoin(query: RawQuery): this;
|
|
161
163
|
innerJoin(table: string, foreignKey: string, primaryKey: string): this;
|
|
164
|
+
leftJoin<R extends ModelBase>(model: R, where?: (this: SelectQueryBuilder<R>) => void): this;
|
|
162
165
|
leftJoin(query: RawQuery): this;
|
|
163
166
|
leftJoin(table: string, foreignKey: string, primaryKey: string): this;
|
|
167
|
+
leftOuterJoin<R extends ModelBase>(model: R, where?: (this: SelectQueryBuilder<R>) => void): this;
|
|
164
168
|
leftOuterJoin(query: RawQuery): this;
|
|
165
169
|
leftOuterJoin(table: string, foreignKey: string, primaryKey: string): this;
|
|
170
|
+
rightJoin<R extends ModelBase>(model: R, where?: (this: SelectQueryBuilder<R>) => void): this;
|
|
166
171
|
rightJoin(query: RawQuery): this;
|
|
167
172
|
rightJoin(table: string, foreignKey: string, primaryKey: string): this;
|
|
173
|
+
rightOuterJoin<R extends ModelBase>(model: R, where?: (this: SelectQueryBuilder<R>) => void): this;
|
|
168
174
|
rightOuterJoin(query: RawQuery): this;
|
|
169
175
|
rightOuterJoin(table: string, foreignKey: string, primaryKey: string): this;
|
|
176
|
+
fullOuterJoin<R extends ModelBase>(model: R, where?: (this: SelectQueryBuilder<R>) => void): this;
|
|
170
177
|
fullOuterJoin(query: RawQuery): this;
|
|
171
178
|
fullOuterJoin(table: string, foreignKey: string, primaryKey: string): this;
|
|
179
|
+
crossJoin<R extends ModelBase>(model: R, where?: (this: SelectQueryBuilder<R>) => void): this;
|
|
172
180
|
crossJoin(query: RawQuery): this;
|
|
173
181
|
crossJoin(table: string, foreignKey: string, primaryKey: string): this;
|
|
174
182
|
private addJoinStatement;
|
|
@@ -184,10 +192,11 @@ export declare class WhereBuilder<T> implements IWhereBuilder<T> {
|
|
|
184
192
|
protected _boolean: WhereBoolean;
|
|
185
193
|
protected _container: Container;
|
|
186
194
|
protected _tableAlias: string;
|
|
195
|
+
protected _model: Constructor<ModelBase>;
|
|
187
196
|
get Statements(): IQueryStatement[];
|
|
188
197
|
get Op(): WhereBoolean;
|
|
189
198
|
constructor(container: Container, tableAlias?: string);
|
|
190
|
-
where(column: string | boolean | WhereFunction<T> | RawQuery | Wrap |
|
|
199
|
+
where(column: string | boolean | WhereFunction<T> | RawQuery | Wrap | PartialModel<T> | PickRelations<T, Relation<any, any>>, operator?: SqlOperator | any, value?: any): this;
|
|
191
200
|
orWhere(column: string | boolean | WhereFunction<T> | {}, ..._args: any[]): this;
|
|
192
201
|
andWhere(column: string | boolean | WhereFunction<T> | {}, ..._args: any[]): this;
|
|
193
202
|
whereObject(obj: any): this;
|
|
@@ -203,7 +212,6 @@ export declare class WhereBuilder<T> implements IWhereBuilder<T> {
|
|
|
203
212
|
whereInSet(column: string, val: any[]): this;
|
|
204
213
|
whereNotInSet(column: string, val: any[]): this;
|
|
205
214
|
clearWhere(): this;
|
|
206
|
-
protected mapValues(val: unknown | unknown[]): any;
|
|
207
215
|
}
|
|
208
216
|
export declare class SelectQueryBuilder<T = any> extends QueryBuilder<T> {
|
|
209
217
|
/**
|
|
@@ -483,7 +491,15 @@ export declare class TableQueryBuilder extends QueryBuilder {
|
|
|
483
491
|
mediumblob: (name: string) => ColumnQueryBuilder;
|
|
484
492
|
longblob: (name: string) => ColumnQueryBuilder;
|
|
485
493
|
ifExists(): TableQueryBuilder;
|
|
494
|
+
/**
|
|
495
|
+
* Mark table as temporary
|
|
496
|
+
*/
|
|
486
497
|
temporary(): TableQueryBuilder;
|
|
498
|
+
/**
|
|
499
|
+
* Turn on history trackign for this table
|
|
500
|
+
* Each change & row will be tracked, and all history of changes can be accessed
|
|
501
|
+
*/
|
|
502
|
+
trackHistory(): this;
|
|
487
503
|
set: (name: string, allowed: string[]) => ColumnQueryBuilder;
|
|
488
504
|
get Columns(): ColumnQueryBuilder[];
|
|
489
505
|
get ForeignKeys(): ForeignKeyBuilder[];
|
|
@@ -493,14 +509,16 @@ export declare class TableQueryBuilder extends QueryBuilder {
|
|
|
493
509
|
protected _charset: string;
|
|
494
510
|
protected _checkExists: boolean;
|
|
495
511
|
protected _temporary: boolean;
|
|
512
|
+
protected _trackHistory: boolean;
|
|
496
513
|
get CheckExists(): boolean;
|
|
497
514
|
get Temporary(): boolean;
|
|
515
|
+
get TrackHistory(): boolean;
|
|
498
516
|
constructor(container: Container, driver: OrmDriver, name: string);
|
|
499
517
|
increments(name: string): ColumnQueryBuilder;
|
|
500
518
|
comment(comment: string): void;
|
|
501
519
|
charset(charset: string): void;
|
|
502
520
|
foreignKey(foreignKey: string): ForeignKeyBuilder;
|
|
503
|
-
toDB(): ICompilerOutput;
|
|
521
|
+
toDB(): ICompilerOutput | ICompilerOutput[];
|
|
504
522
|
}
|
|
505
523
|
export declare class TruncateTableQueryBuilder extends QueryBuilder {
|
|
506
524
|
protected container: Container;
|
|
@@ -538,6 +556,72 @@ export declare class CloneTableQueryBuilder extends QueryBuilder {
|
|
|
538
556
|
deepClone(srcTable: string, newTable: string, filter?: (query: SelectQueryBuilder) => void): Promise<any>;
|
|
539
557
|
toDB(): ICompilerOutput[];
|
|
540
558
|
}
|
|
559
|
+
export declare class EventIntervalDesc {
|
|
560
|
+
Year: number;
|
|
561
|
+
Month: number;
|
|
562
|
+
Minute: number;
|
|
563
|
+
Hour: number;
|
|
564
|
+
Second: number;
|
|
565
|
+
}
|
|
566
|
+
export declare class EventQueryBuilder extends QueryBuilder {
|
|
567
|
+
protected container: Container;
|
|
568
|
+
protected driver: OrmDriver;
|
|
569
|
+
Name: string;
|
|
570
|
+
EveryInterval: EventIntervalDesc;
|
|
571
|
+
FromNowInverval: EventIntervalDesc;
|
|
572
|
+
Comment: string;
|
|
573
|
+
At: DateTime;
|
|
574
|
+
RawSql: RawQueryStatement;
|
|
575
|
+
Queries: QueryBuilder[];
|
|
576
|
+
constructor(container: Container, driver: OrmDriver, Name: string);
|
|
577
|
+
/**
|
|
578
|
+
* execute every time with specified interval ( days, hours, seconds, minutes etc)
|
|
579
|
+
*/
|
|
580
|
+
every(): EventIntervalDesc;
|
|
581
|
+
/**
|
|
582
|
+
*
|
|
583
|
+
* Execute at specific time
|
|
584
|
+
*
|
|
585
|
+
* @param dateTime - specific time
|
|
586
|
+
*/
|
|
587
|
+
at(dateTime: DateTime): void;
|
|
588
|
+
/**
|
|
589
|
+
* execute once at specific interfal from now eg. now + 1 day
|
|
590
|
+
*/
|
|
591
|
+
fromNow(): EventIntervalDesc;
|
|
592
|
+
/**
|
|
593
|
+
*
|
|
594
|
+
* @param sql - code to execute, could be raw sql query, single builder, or multiple builders that will be executed on by one
|
|
595
|
+
*/
|
|
596
|
+
do(sql: RawQueryStatement | QueryBuilder[] | QueryBuilder): void;
|
|
597
|
+
/**
|
|
598
|
+
*
|
|
599
|
+
* Add comment to schedule for documentation. It is passed to sql engine
|
|
600
|
+
*
|
|
601
|
+
* @param comment - comment text
|
|
602
|
+
*/
|
|
603
|
+
comment(comment: string): void;
|
|
604
|
+
toDB(): ICompilerOutput[];
|
|
605
|
+
}
|
|
606
|
+
export declare class DropEventQueryBuilder extends QueryBuilder {
|
|
607
|
+
protected container: Container;
|
|
608
|
+
protected driver: OrmDriver;
|
|
609
|
+
Name: string;
|
|
610
|
+
constructor(container: Container, driver: OrmDriver, Name: string);
|
|
611
|
+
toDB(): ICompilerOutput[];
|
|
612
|
+
}
|
|
613
|
+
/**
|
|
614
|
+
* Creates schedule job in database engine.
|
|
615
|
+
* Note, some engines does not support this, so it will implemented
|
|
616
|
+
* as nodejs interval
|
|
617
|
+
*/
|
|
618
|
+
export declare class ScheduleQueryBuilder {
|
|
619
|
+
protected container: Container;
|
|
620
|
+
protected driver: OrmDriver;
|
|
621
|
+
constructor(container: Container, driver: OrmDriver);
|
|
622
|
+
create(name: string, callback: (event: EventQueryBuilder) => void): EventQueryBuilder;
|
|
623
|
+
drop(name: string): DropEventQueryBuilder;
|
|
624
|
+
}
|
|
541
625
|
export declare class SchemaQueryBuilder {
|
|
542
626
|
protected container: Container;
|
|
543
627
|
protected driver: OrmDriver;
|
|
@@ -547,4 +631,6 @@ export declare class SchemaQueryBuilder {
|
|
|
547
631
|
alterTable(name: string, callback: (table: AlterTableQueryBuilder) => void): AlterTableQueryBuilder;
|
|
548
632
|
dropTable(name: string, schema?: string): DropTableQueryBuilder;
|
|
549
633
|
tableExists(name: string, schema?: string): Promise<boolean>;
|
|
634
|
+
event(name: string): Promise<any>;
|
|
635
|
+
dropEvent(name: string): Promise<any>;
|
|
550
636
|
}
|
package/lib/builders.js
CHANGED
|
@@ -33,9 +33,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
33
33
|
};
|
|
34
34
|
var RawQuery_1, WhereBuilder_1;
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.SchemaQueryBuilder = exports.CloneTableQueryBuilder = exports.TruncateTableQueryBuilder = exports.TableQueryBuilder = exports.AlterTableQueryBuilder = exports.DropTableQueryBuilder = exports.TableExistsQueryBuilder = exports.AlterColumnQueryBuilder = exports.ColumnQueryBuilder = exports.ForeignKeyBuilder = exports.IndexQueryBuilder = exports.InsertQueryBuilder = exports.UpdateQueryBuilder = exports.OnDuplicateQueryBuilder = exports.DeleteQueryBuilder = exports.SelectQueryBuilder = exports.WhereBuilder = exports.WithRecursiveBuilder = exports.JoinBuilder = exports.GroupByBuilder = exports.RawQuery = exports.ColumnsBuilder = exports.OrderByBuilder = exports.LimitBuilder = exports.QueryBuilder = exports.Builder = void 0;
|
|
36
|
+
exports.SchemaQueryBuilder = exports.ScheduleQueryBuilder = exports.DropEventQueryBuilder = exports.EventQueryBuilder = exports.EventIntervalDesc = exports.CloneTableQueryBuilder = exports.TruncateTableQueryBuilder = exports.TableQueryBuilder = exports.AlterTableQueryBuilder = exports.DropTableQueryBuilder = exports.TableExistsQueryBuilder = exports.AlterColumnQueryBuilder = exports.ColumnQueryBuilder = exports.ForeignKeyBuilder = exports.IndexQueryBuilder = exports.InsertQueryBuilder = exports.UpdateQueryBuilder = exports.OnDuplicateQueryBuilder = exports.DeleteQueryBuilder = exports.SelectQueryBuilder = exports.WhereBuilder = exports.WithRecursiveBuilder = exports.JoinBuilder = exports.GroupByBuilder = exports.RawQuery = exports.ColumnsBuilder = exports.OrderByBuilder = exports.LimitBuilder = exports.QueryBuilder = exports.Builder = void 0;
|
|
37
37
|
/* eslint-disable prettier/prettier */
|
|
38
|
-
const luxon_1 = require("luxon");
|
|
39
38
|
const di_1 = require("@spinajs/di");
|
|
40
39
|
const exceptions_1 = require("@spinajs/exceptions");
|
|
41
40
|
const exceptions_2 = require("./exceptions");
|
|
@@ -48,7 +47,6 @@ const driver_1 = require("./driver");
|
|
|
48
47
|
const model_1 = require("./model");
|
|
49
48
|
const relations_1 = require("./relations");
|
|
50
49
|
const orm_1 = require("./orm");
|
|
51
|
-
const _1 = require(".");
|
|
52
50
|
function isWhereOperator(val) {
|
|
53
51
|
return _.isString(val) && Object.values(enums_1.SqlOperator).includes(val.toLowerCase());
|
|
54
52
|
}
|
|
@@ -61,7 +59,7 @@ let Builder = class Builder {
|
|
|
61
59
|
this._model = model;
|
|
62
60
|
this._nonSelect = true;
|
|
63
61
|
this._asRaw = false;
|
|
64
|
-
this._queryMiddlewares = di_1.DI.resolve(Array.ofType(
|
|
62
|
+
this._queryMiddlewares = di_1.DI.resolve(Array.ofType(interfaces_1.QueryMiddleware));
|
|
65
63
|
}
|
|
66
64
|
get Driver() {
|
|
67
65
|
return this._driver;
|
|
@@ -456,14 +454,17 @@ class JoinBuilder {
|
|
|
456
454
|
}
|
|
457
455
|
addJoinStatement(method, table, AliasOrForeignKey, fkOrPkKey, primaryKey) {
|
|
458
456
|
let stmt = null;
|
|
459
|
-
if (arguments.length ===
|
|
460
|
-
stmt = this._container.resolve(statements_1.JoinStatement, [
|
|
457
|
+
if (arguments.length === 3) {
|
|
458
|
+
stmt = this._container.resolve(statements_1.JoinStatement, [this, this._model, table, method, AliasOrForeignKey]);
|
|
459
|
+
}
|
|
460
|
+
else if (arguments.length === 4) {
|
|
461
|
+
stmt = this._container.resolve(statements_1.JoinStatement, [this, this._model, table, method, AliasOrForeignKey, fkOrPkKey, null, this._tableAlias]);
|
|
461
462
|
}
|
|
462
463
|
else if (arguments.length === 5) {
|
|
463
|
-
stmt = this._container.resolve(statements_1.JoinStatement, [table, method, fkOrPkKey, primaryKey, AliasOrForeignKey, this._tableAlias]);
|
|
464
|
+
stmt = this._container.resolve(statements_1.JoinStatement, [this, this._model, table, method, fkOrPkKey, primaryKey, AliasOrForeignKey, this._tableAlias]);
|
|
464
465
|
}
|
|
465
466
|
else {
|
|
466
|
-
stmt = this._container.resolve(statements_1.JoinStatement, [table, method]);
|
|
467
|
+
stmt = this._container.resolve(statements_1.JoinStatement, [this, this._model, table, method]);
|
|
467
468
|
}
|
|
468
469
|
this.JoinStatements.push(stmt);
|
|
469
470
|
}
|
|
@@ -537,10 +538,7 @@ let WhereBuilder = WhereBuilder_1 = class WhereBuilder {
|
|
|
537
538
|
if (sVal === null) {
|
|
538
539
|
return this.whereNull(c);
|
|
539
540
|
}
|
|
540
|
-
|
|
541
|
-
sVal = self._container.resolve(interfaces_1.DatetimeValueConverter).toDB(sVal);
|
|
542
|
-
}
|
|
543
|
-
self._statements.push(self._container.resolve(statements_1.WhereStatement, [c, enums_1.SqlOperator.EQ, sVal, self._tableAlias, this._container]));
|
|
541
|
+
self._statements.push(self._container.resolve(statements_1.WhereStatement, [c, enums_1.SqlOperator.EQ, sVal, self._tableAlias, this._container, self._model]));
|
|
544
542
|
return self;
|
|
545
543
|
}
|
|
546
544
|
/**
|
|
@@ -561,10 +559,7 @@ let WhereBuilder = WhereBuilder_1 = class WhereBuilder {
|
|
|
561
559
|
if (sVal === null) {
|
|
562
560
|
return o === enums_1.SqlOperator.NOT_NULL ? this.whereNotNull(c) : this.whereNull(c);
|
|
563
561
|
}
|
|
564
|
-
|
|
565
|
-
sVal = self._container.resolve(interfaces_1.DatetimeValueConverter).toDB(sVal);
|
|
566
|
-
}
|
|
567
|
-
self._statements.push(self._container.resolve(statements_1.WhereStatement, [c, o, sVal, self._tableAlias, this._container]));
|
|
562
|
+
self._statements.push(self._container.resolve(statements_1.WhereStatement, [c, o, sVal, self._tableAlias, this._container, self._model]));
|
|
568
563
|
return this;
|
|
569
564
|
}
|
|
570
565
|
}
|
|
@@ -583,22 +578,22 @@ let WhereBuilder = WhereBuilder_1 = class WhereBuilder {
|
|
|
583
578
|
return this;
|
|
584
579
|
}
|
|
585
580
|
whereNotNull(column) {
|
|
586
|
-
this._statements.push(this._container.resolve(statements_1.WhereStatement, [column, enums_1.SqlOperator.NOT_NULL, null, this._tableAlias]));
|
|
581
|
+
this._statements.push(this._container.resolve(statements_1.WhereStatement, [column, enums_1.SqlOperator.NOT_NULL, null, this._tableAlias, this._container]));
|
|
587
582
|
return this;
|
|
588
583
|
}
|
|
589
584
|
whereNull(column) {
|
|
590
|
-
this._statements.push(this._container.resolve(statements_1.WhereStatement, [column, enums_1.SqlOperator.NULL, null, this._tableAlias]));
|
|
585
|
+
this._statements.push(this._container.resolve(statements_1.WhereStatement, [column, enums_1.SqlOperator.NULL, null, this._tableAlias, this._container]));
|
|
591
586
|
return this;
|
|
592
587
|
}
|
|
593
588
|
whereNot(column, val) {
|
|
594
|
-
return this.where(column, enums_1.SqlOperator.NOT,
|
|
589
|
+
return this.where(column, enums_1.SqlOperator.NOT, val);
|
|
595
590
|
}
|
|
596
591
|
whereIn(column, val) {
|
|
597
|
-
this._statements.push(this._container.resolve(statements_1.InStatement, [column,
|
|
592
|
+
this._statements.push(this._container.resolve(statements_1.InStatement, [column, val, false, this._tableAlias, this._container]));
|
|
598
593
|
return this;
|
|
599
594
|
}
|
|
600
595
|
whereNotIn(column, val) {
|
|
601
|
-
this._statements.push(this._container.resolve(statements_1.InStatement, [column,
|
|
596
|
+
this._statements.push(this._container.resolve(statements_1.InStatement, [column, val, true, this._tableAlias, this._container]));
|
|
602
597
|
return this;
|
|
603
598
|
}
|
|
604
599
|
whereExist(query) {
|
|
@@ -610,40 +605,25 @@ let WhereBuilder = WhereBuilder_1 = class WhereBuilder {
|
|
|
610
605
|
return this;
|
|
611
606
|
}
|
|
612
607
|
whereBetween(column, val) {
|
|
613
|
-
this._statements.push(this._container.resolve(statements_1.BetweenStatement, [column,
|
|
608
|
+
this._statements.push(this._container.resolve(statements_1.BetweenStatement, [column, val, false, this._tableAlias]));
|
|
614
609
|
return this;
|
|
615
610
|
}
|
|
616
611
|
whereNotBetween(column, val) {
|
|
617
|
-
this._statements.push(this._container.resolve(statements_1.BetweenStatement, [column,
|
|
612
|
+
this._statements.push(this._container.resolve(statements_1.BetweenStatement, [column, val, true, this._tableAlias]));
|
|
618
613
|
return this;
|
|
619
614
|
}
|
|
620
615
|
whereInSet(column, val) {
|
|
621
|
-
this._statements.push(this._container.resolve(statements_1.InSetStatement, [column,
|
|
616
|
+
this._statements.push(this._container.resolve(statements_1.InSetStatement, [column, val, false, this._tableAlias]));
|
|
622
617
|
return this;
|
|
623
618
|
}
|
|
624
619
|
whereNotInSet(column, val) {
|
|
625
|
-
this._statements.push(this._container.resolve(statements_1.InSetStatement, [column,
|
|
620
|
+
this._statements.push(this._container.resolve(statements_1.InSetStatement, [column, val, true, this._tableAlias]));
|
|
626
621
|
return this;
|
|
627
622
|
}
|
|
628
623
|
clearWhere() {
|
|
629
624
|
this._statements = [];
|
|
630
625
|
return this;
|
|
631
626
|
}
|
|
632
|
-
mapValues(val) {
|
|
633
|
-
const dConverter = this._container.resolve(interfaces_1.DatetimeValueConverter);
|
|
634
|
-
const mapVal = (d) => {
|
|
635
|
-
if (d instanceof luxon_1.DateTime || d instanceof Date) {
|
|
636
|
-
return dConverter.toDB(d);
|
|
637
|
-
}
|
|
638
|
-
return d;
|
|
639
|
-
};
|
|
640
|
-
if (Array.isArray(val)) {
|
|
641
|
-
return val.map(mapVal);
|
|
642
|
-
}
|
|
643
|
-
else {
|
|
644
|
-
return mapVal(val);
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
627
|
};
|
|
648
628
|
WhereBuilder = WhereBuilder_1 = __decorate([
|
|
649
629
|
(0, di_1.NewInstance)(),
|
|
@@ -1097,7 +1077,7 @@ let ColumnQueryBuilder = class ColumnQueryBuilder {
|
|
|
1097
1077
|
return this;
|
|
1098
1078
|
}
|
|
1099
1079
|
default() {
|
|
1100
|
-
this.Default = this.container.resolve((
|
|
1080
|
+
this.Default = this.container.resolve((interfaces_1.DefaultValueBuilder), [this]);
|
|
1101
1081
|
return this.Default;
|
|
1102
1082
|
}
|
|
1103
1083
|
primaryKey() {
|
|
@@ -1128,18 +1108,18 @@ let AlterColumnQueryBuilder = class AlterColumnQueryBuilder extends ColumnQueryB
|
|
|
1128
1108
|
super(container, name, type, ...args);
|
|
1129
1109
|
this.OldName = name;
|
|
1130
1110
|
// we assume add by default
|
|
1131
|
-
this.AlterType =
|
|
1111
|
+
this.AlterType = interfaces_1.ColumnAlterationType.Add;
|
|
1132
1112
|
}
|
|
1133
1113
|
addColumn() {
|
|
1134
|
-
this.AlterType =
|
|
1114
|
+
this.AlterType = interfaces_1.ColumnAlterationType.Add;
|
|
1135
1115
|
return this;
|
|
1136
1116
|
}
|
|
1137
1117
|
modify() {
|
|
1138
|
-
this.AlterType =
|
|
1118
|
+
this.AlterType = interfaces_1.ColumnAlterationType.Modify;
|
|
1139
1119
|
return this;
|
|
1140
1120
|
}
|
|
1141
1121
|
rename(newName) {
|
|
1142
|
-
this.AlterType =
|
|
1122
|
+
this.AlterType = interfaces_1.ColumnAlterationType.Rename;
|
|
1143
1123
|
this.Name = newName;
|
|
1144
1124
|
return this;
|
|
1145
1125
|
}
|
|
@@ -1160,7 +1140,7 @@ class TableExistsQueryBuilder extends QueryBuilder {
|
|
|
1160
1140
|
this.QueryContext = interfaces_1.QueryContext.Select;
|
|
1161
1141
|
}
|
|
1162
1142
|
toDB() {
|
|
1163
|
-
return this._container.resolve(
|
|
1143
|
+
return this._container.resolve(interfaces_1.TableExistsCompiler, [this]).compile();
|
|
1164
1144
|
}
|
|
1165
1145
|
}
|
|
1166
1146
|
exports.TableExistsQueryBuilder = TableExistsQueryBuilder;
|
|
@@ -1179,7 +1159,7 @@ class DropTableQueryBuilder extends QueryBuilder {
|
|
|
1179
1159
|
return this;
|
|
1180
1160
|
}
|
|
1181
1161
|
toDB() {
|
|
1182
|
-
return this._container.resolve(
|
|
1162
|
+
return this._container.resolve(interfaces_1.DropTableCompiler, [this]).compile();
|
|
1183
1163
|
}
|
|
1184
1164
|
}
|
|
1185
1165
|
exports.DropTableQueryBuilder = DropTableQueryBuilder;
|
|
@@ -1218,6 +1198,7 @@ class TableQueryBuilder extends QueryBuilder {
|
|
|
1218
1198
|
this._columns = [];
|
|
1219
1199
|
this._foreignKeys = [];
|
|
1220
1200
|
this._temporary = false;
|
|
1201
|
+
this._trackHistory = false;
|
|
1221
1202
|
this.setTable(name);
|
|
1222
1203
|
this.QueryContext = interfaces_1.QueryContext.Schema;
|
|
1223
1204
|
}
|
|
@@ -1231,10 +1212,21 @@ class TableQueryBuilder extends QueryBuilder {
|
|
|
1231
1212
|
this._checkExists = true;
|
|
1232
1213
|
return this;
|
|
1233
1214
|
}
|
|
1215
|
+
/**
|
|
1216
|
+
* Mark table as temporary
|
|
1217
|
+
*/
|
|
1234
1218
|
temporary() {
|
|
1235
1219
|
this._temporary = true;
|
|
1236
1220
|
return this;
|
|
1237
1221
|
}
|
|
1222
|
+
/**
|
|
1223
|
+
* Turn on history trackign for this table
|
|
1224
|
+
* Each change & row will be tracked, and all history of changes can be accessed
|
|
1225
|
+
*/
|
|
1226
|
+
trackHistory() {
|
|
1227
|
+
this._trackHistory = true;
|
|
1228
|
+
return this;
|
|
1229
|
+
}
|
|
1238
1230
|
get Columns() {
|
|
1239
1231
|
return this._columns;
|
|
1240
1232
|
}
|
|
@@ -1247,6 +1239,9 @@ class TableQueryBuilder extends QueryBuilder {
|
|
|
1247
1239
|
get Temporary() {
|
|
1248
1240
|
return this._temporary;
|
|
1249
1241
|
}
|
|
1242
|
+
get TrackHistory() {
|
|
1243
|
+
return this._trackHistory;
|
|
1244
|
+
}
|
|
1250
1245
|
increments(name) {
|
|
1251
1246
|
return this.int(name).autoIncrement().notNull().primaryKey();
|
|
1252
1247
|
}
|
|
@@ -1335,7 +1330,7 @@ let CloneTableQueryBuilder = class CloneTableQueryBuilder extends QueryBuilder {
|
|
|
1335
1330
|
return this;
|
|
1336
1331
|
}
|
|
1337
1332
|
toDB() {
|
|
1338
|
-
return this._container.resolve(
|
|
1333
|
+
return this._container.resolve(interfaces_1.TableCloneQueryCompiler, [this]).compile();
|
|
1339
1334
|
}
|
|
1340
1335
|
};
|
|
1341
1336
|
CloneTableQueryBuilder = __decorate([
|
|
@@ -1344,6 +1339,115 @@ CloneTableQueryBuilder = __decorate([
|
|
|
1344
1339
|
__metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver])
|
|
1345
1340
|
], CloneTableQueryBuilder);
|
|
1346
1341
|
exports.CloneTableQueryBuilder = CloneTableQueryBuilder;
|
|
1342
|
+
class EventIntervalDesc {
|
|
1343
|
+
}
|
|
1344
|
+
exports.EventIntervalDesc = EventIntervalDesc;
|
|
1345
|
+
let EventQueryBuilder = class EventQueryBuilder extends QueryBuilder {
|
|
1346
|
+
constructor(container, driver, Name) {
|
|
1347
|
+
super(container, driver);
|
|
1348
|
+
this.container = container;
|
|
1349
|
+
this.driver = driver;
|
|
1350
|
+
this.Name = Name;
|
|
1351
|
+
}
|
|
1352
|
+
/**
|
|
1353
|
+
* execute every time with specified interval ( days, hours, seconds, minutes etc)
|
|
1354
|
+
*/
|
|
1355
|
+
every() {
|
|
1356
|
+
this.EveryInterval = new EventIntervalDesc();
|
|
1357
|
+
return this.EveryInterval;
|
|
1358
|
+
}
|
|
1359
|
+
/**
|
|
1360
|
+
*
|
|
1361
|
+
* Execute at specific time
|
|
1362
|
+
*
|
|
1363
|
+
* @param dateTime - specific time
|
|
1364
|
+
*/
|
|
1365
|
+
at(dateTime) {
|
|
1366
|
+
this.At = dateTime;
|
|
1367
|
+
}
|
|
1368
|
+
/**
|
|
1369
|
+
* execute once at specific interfal from now eg. now + 1 day
|
|
1370
|
+
*/
|
|
1371
|
+
fromNow() {
|
|
1372
|
+
this.FromNowInverval = new EventIntervalDesc();
|
|
1373
|
+
return this.FromNowInverval;
|
|
1374
|
+
}
|
|
1375
|
+
/**
|
|
1376
|
+
*
|
|
1377
|
+
* @param sql - code to execute, could be raw sql query, single builder, or multiple builders that will be executed on by one
|
|
1378
|
+
*/
|
|
1379
|
+
do(sql) {
|
|
1380
|
+
if (sql instanceof statements_1.RawQueryStatement) {
|
|
1381
|
+
this.RawSql = sql;
|
|
1382
|
+
}
|
|
1383
|
+
else if (Array.isArray(sql)) {
|
|
1384
|
+
this.Queries = sql;
|
|
1385
|
+
}
|
|
1386
|
+
else {
|
|
1387
|
+
this.Queries = [sql];
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
/**
|
|
1391
|
+
*
|
|
1392
|
+
* Add comment to schedule for documentation. It is passed to sql engine
|
|
1393
|
+
*
|
|
1394
|
+
* @param comment - comment text
|
|
1395
|
+
*/
|
|
1396
|
+
comment(comment) {
|
|
1397
|
+
this.Comment = comment;
|
|
1398
|
+
}
|
|
1399
|
+
toDB() {
|
|
1400
|
+
return this._container.resolve(interfaces_1.EventQueryCompiler, [this]).compile();
|
|
1401
|
+
}
|
|
1402
|
+
};
|
|
1403
|
+
EventQueryBuilder = __decorate([
|
|
1404
|
+
(0, di_1.NewInstance)(),
|
|
1405
|
+
(0, di_1.Inject)(di_1.Container),
|
|
1406
|
+
__metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver, String])
|
|
1407
|
+
], EventQueryBuilder);
|
|
1408
|
+
exports.EventQueryBuilder = EventQueryBuilder;
|
|
1409
|
+
let DropEventQueryBuilder = class DropEventQueryBuilder extends QueryBuilder {
|
|
1410
|
+
constructor(container, driver, Name) {
|
|
1411
|
+
super(container, driver);
|
|
1412
|
+
this.container = container;
|
|
1413
|
+
this.driver = driver;
|
|
1414
|
+
this.Name = Name;
|
|
1415
|
+
}
|
|
1416
|
+
toDB() {
|
|
1417
|
+
return this._container.resolve(interfaces_1.DropEventQueryCompiler, [this]).compile();
|
|
1418
|
+
}
|
|
1419
|
+
};
|
|
1420
|
+
DropEventQueryBuilder = __decorate([
|
|
1421
|
+
(0, di_1.NewInstance)(),
|
|
1422
|
+
(0, di_1.Inject)(di_1.Container),
|
|
1423
|
+
__metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver, String])
|
|
1424
|
+
], DropEventQueryBuilder);
|
|
1425
|
+
exports.DropEventQueryBuilder = DropEventQueryBuilder;
|
|
1426
|
+
/**
|
|
1427
|
+
* Creates schedule job in database engine.
|
|
1428
|
+
* Note, some engines does not support this, so it will implemented
|
|
1429
|
+
* as nodejs interval
|
|
1430
|
+
*/
|
|
1431
|
+
let ScheduleQueryBuilder = class ScheduleQueryBuilder {
|
|
1432
|
+
constructor(container, driver) {
|
|
1433
|
+
this.container = container;
|
|
1434
|
+
this.driver = driver;
|
|
1435
|
+
}
|
|
1436
|
+
create(name, callback) {
|
|
1437
|
+
const builder = new EventQueryBuilder(this.container, this.driver, name);
|
|
1438
|
+
callback.call(this, builder);
|
|
1439
|
+
return builder;
|
|
1440
|
+
}
|
|
1441
|
+
drop(name) {
|
|
1442
|
+
return new DropEventQueryBuilder(this.container, this.driver, name);
|
|
1443
|
+
}
|
|
1444
|
+
};
|
|
1445
|
+
ScheduleQueryBuilder = __decorate([
|
|
1446
|
+
(0, di_1.NewInstance)(),
|
|
1447
|
+
(0, di_1.Inject)(di_1.Container),
|
|
1448
|
+
__metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver])
|
|
1449
|
+
], ScheduleQueryBuilder);
|
|
1450
|
+
exports.ScheduleQueryBuilder = ScheduleQueryBuilder;
|
|
1347
1451
|
let SchemaQueryBuilder = class SchemaQueryBuilder {
|
|
1348
1452
|
constructor(container, driver) {
|
|
1349
1453
|
this.container = container;
|
|
@@ -1375,6 +1479,12 @@ let SchemaQueryBuilder = class SchemaQueryBuilder {
|
|
|
1375
1479
|
const exists = await query;
|
|
1376
1480
|
return exists !== null && exists.length === 1;
|
|
1377
1481
|
}
|
|
1482
|
+
async event(name) {
|
|
1483
|
+
return new EventQueryBuilder(this.container, this.driver, name);
|
|
1484
|
+
}
|
|
1485
|
+
async dropEvent(name) {
|
|
1486
|
+
return new DropEventQueryBuilder(this.container, this.driver, name);
|
|
1487
|
+
}
|
|
1378
1488
|
};
|
|
1379
1489
|
SchemaQueryBuilder = __decorate([
|
|
1380
1490
|
(0, di_1.NewInstance)(),
|