@spinajs/orm 2.0.38 → 2.0.44
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 +97 -9
- package/lib/builders.js +161 -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 +81 -16
- package/lib/interfaces.js +49 -3
- package/lib/interfaces.js.map +1 -1
- package/lib/model.d.ts +60 -33
- package/lib/model.js +97 -40
- 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 +51 -14
- package/lib/relations.js +54 -76
- 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 +10 -11
- 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, 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.
|
|
@@ -20,7 +20,7 @@ export interface DeleteQueryBuilder<T> extends IWhereBuilder<T>, ILimitBuilder<T
|
|
|
20
20
|
}
|
|
21
21
|
export interface UpdateQueryBuilder<T> extends IColumnsBuilder, IWhereBuilder<T> {
|
|
22
22
|
}
|
|
23
|
-
export interface SelectQueryBuilder<T> extends IColumnsBuilder, IOrderByBuilder, ILimitBuilder<T>, IWhereBuilder<T>, IJoinBuilder, IWithRecursiveBuilder, IGroupByBuilder
|
|
23
|
+
export interface SelectQueryBuilder<T> extends IColumnsBuilder, IOrderByBuilder, ILimitBuilder<T>, IWhereBuilder<T>, IJoinBuilder, IWithRecursiveBuilder, IGroupByBuilder {
|
|
24
24
|
}
|
|
25
25
|
export declare class Builder<T = any> implements PromiseLike<T> {
|
|
26
26
|
protected _driver: OrmDriver;
|
|
@@ -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
|
/**
|
|
@@ -251,6 +259,8 @@ export declare class SelectQueryBuilder<T = any> extends QueryBuilder<T> {
|
|
|
251
259
|
then<TResult1 = T, TResult2 = never>(onfulfilled?: (value: T) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): PromiseLike<TResult1 | TResult2>;
|
|
252
260
|
execute(): Promise<T>;
|
|
253
261
|
}
|
|
262
|
+
export declare class SelectQueryBuilderC<T = any> extends SelectQueryBuilder<T> {
|
|
263
|
+
}
|
|
254
264
|
export declare class DeleteQueryBuilder<T> extends QueryBuilder<IUpdateResult> {
|
|
255
265
|
/**
|
|
256
266
|
* where query props
|
|
@@ -483,7 +493,15 @@ export declare class TableQueryBuilder extends QueryBuilder {
|
|
|
483
493
|
mediumblob: (name: string) => ColumnQueryBuilder;
|
|
484
494
|
longblob: (name: string) => ColumnQueryBuilder;
|
|
485
495
|
ifExists(): TableQueryBuilder;
|
|
496
|
+
/**
|
|
497
|
+
* Mark table as temporary
|
|
498
|
+
*/
|
|
486
499
|
temporary(): TableQueryBuilder;
|
|
500
|
+
/**
|
|
501
|
+
* Turn on history trackign for this table
|
|
502
|
+
* Each change & row will be tracked, and all history of changes can be accessed
|
|
503
|
+
*/
|
|
504
|
+
trackHistory(): this;
|
|
487
505
|
set: (name: string, allowed: string[]) => ColumnQueryBuilder;
|
|
488
506
|
get Columns(): ColumnQueryBuilder[];
|
|
489
507
|
get ForeignKeys(): ForeignKeyBuilder[];
|
|
@@ -493,14 +511,16 @@ export declare class TableQueryBuilder extends QueryBuilder {
|
|
|
493
511
|
protected _charset: string;
|
|
494
512
|
protected _checkExists: boolean;
|
|
495
513
|
protected _temporary: boolean;
|
|
514
|
+
protected _trackHistory: boolean;
|
|
496
515
|
get CheckExists(): boolean;
|
|
497
516
|
get Temporary(): boolean;
|
|
517
|
+
get TrackHistory(): boolean;
|
|
498
518
|
constructor(container: Container, driver: OrmDriver, name: string);
|
|
499
519
|
increments(name: string): ColumnQueryBuilder;
|
|
500
520
|
comment(comment: string): void;
|
|
501
521
|
charset(charset: string): void;
|
|
502
522
|
foreignKey(foreignKey: string): ForeignKeyBuilder;
|
|
503
|
-
toDB(): ICompilerOutput;
|
|
523
|
+
toDB(): ICompilerOutput | ICompilerOutput[];
|
|
504
524
|
}
|
|
505
525
|
export declare class TruncateTableQueryBuilder extends QueryBuilder {
|
|
506
526
|
protected container: Container;
|
|
@@ -538,6 +558,72 @@ export declare class CloneTableQueryBuilder extends QueryBuilder {
|
|
|
538
558
|
deepClone(srcTable: string, newTable: string, filter?: (query: SelectQueryBuilder) => void): Promise<any>;
|
|
539
559
|
toDB(): ICompilerOutput[];
|
|
540
560
|
}
|
|
561
|
+
export declare class EventIntervalDesc {
|
|
562
|
+
Year: number;
|
|
563
|
+
Month: number;
|
|
564
|
+
Minute: number;
|
|
565
|
+
Hour: number;
|
|
566
|
+
Second: number;
|
|
567
|
+
}
|
|
568
|
+
export declare class EventQueryBuilder extends QueryBuilder {
|
|
569
|
+
protected container: Container;
|
|
570
|
+
protected driver: OrmDriver;
|
|
571
|
+
Name: string;
|
|
572
|
+
EveryInterval: EventIntervalDesc;
|
|
573
|
+
FromNowInverval: EventIntervalDesc;
|
|
574
|
+
Comment: string;
|
|
575
|
+
At: DateTime;
|
|
576
|
+
RawSql: RawQueryStatement;
|
|
577
|
+
Queries: QueryBuilder[];
|
|
578
|
+
constructor(container: Container, driver: OrmDriver, Name: string);
|
|
579
|
+
/**
|
|
580
|
+
* execute every time with specified interval ( days, hours, seconds, minutes etc)
|
|
581
|
+
*/
|
|
582
|
+
every(): EventIntervalDesc;
|
|
583
|
+
/**
|
|
584
|
+
*
|
|
585
|
+
* Execute at specific time
|
|
586
|
+
*
|
|
587
|
+
* @param dateTime - specific time
|
|
588
|
+
*/
|
|
589
|
+
at(dateTime: DateTime): void;
|
|
590
|
+
/**
|
|
591
|
+
* execute once at specific interfal from now eg. now + 1 day
|
|
592
|
+
*/
|
|
593
|
+
fromNow(): EventIntervalDesc;
|
|
594
|
+
/**
|
|
595
|
+
*
|
|
596
|
+
* @param sql - code to execute, could be raw sql query, single builder, or multiple builders that will be executed on by one
|
|
597
|
+
*/
|
|
598
|
+
do(sql: RawQueryStatement | QueryBuilder[] | QueryBuilder): void;
|
|
599
|
+
/**
|
|
600
|
+
*
|
|
601
|
+
* Add comment to schedule for documentation. It is passed to sql engine
|
|
602
|
+
*
|
|
603
|
+
* @param comment - comment text
|
|
604
|
+
*/
|
|
605
|
+
comment(comment: string): void;
|
|
606
|
+
toDB(): ICompilerOutput[];
|
|
607
|
+
}
|
|
608
|
+
export declare class DropEventQueryBuilder extends QueryBuilder {
|
|
609
|
+
protected container: Container;
|
|
610
|
+
protected driver: OrmDriver;
|
|
611
|
+
Name: string;
|
|
612
|
+
constructor(container: Container, driver: OrmDriver, Name: string);
|
|
613
|
+
toDB(): ICompilerOutput[];
|
|
614
|
+
}
|
|
615
|
+
/**
|
|
616
|
+
* Creates schedule job in database engine.
|
|
617
|
+
* Note, some engines does not support this, so it will implemented
|
|
618
|
+
* as nodejs interval
|
|
619
|
+
*/
|
|
620
|
+
export declare class ScheduleQueryBuilder {
|
|
621
|
+
protected container: Container;
|
|
622
|
+
protected driver: OrmDriver;
|
|
623
|
+
constructor(container: Container, driver: OrmDriver);
|
|
624
|
+
create(name: string, callback: (event: EventQueryBuilder) => void): EventQueryBuilder;
|
|
625
|
+
drop(name: string): DropEventQueryBuilder;
|
|
626
|
+
}
|
|
541
627
|
export declare class SchemaQueryBuilder {
|
|
542
628
|
protected container: Container;
|
|
543
629
|
protected driver: OrmDriver;
|
|
@@ -547,4 +633,6 @@ export declare class SchemaQueryBuilder {
|
|
|
547
633
|
alterTable(name: string, callback: (table: AlterTableQueryBuilder) => void): AlterTableQueryBuilder;
|
|
548
634
|
dropTable(name: string, schema?: string): DropTableQueryBuilder;
|
|
549
635
|
tableExists(name: string, schema?: string): Promise<boolean>;
|
|
636
|
+
event(name: string): Promise<any>;
|
|
637
|
+
dropEvent(name: string): Promise<any>;
|
|
550
638
|
}
|
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.SelectQueryBuilderC = 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)(),
|
|
@@ -816,6 +796,9 @@ __decorate([
|
|
|
816
796
|
__metadata("design:type", Object)
|
|
817
797
|
], SelectQueryBuilder.prototype, "this", void 0);
|
|
818
798
|
exports.SelectQueryBuilder = SelectQueryBuilder;
|
|
799
|
+
class SelectQueryBuilderC extends SelectQueryBuilder {
|
|
800
|
+
}
|
|
801
|
+
exports.SelectQueryBuilderC = SelectQueryBuilderC;
|
|
819
802
|
class DeleteQueryBuilder extends QueryBuilder {
|
|
820
803
|
constructor(container, driver, model) {
|
|
821
804
|
super(container, driver, model);
|
|
@@ -1097,7 +1080,7 @@ let ColumnQueryBuilder = class ColumnQueryBuilder {
|
|
|
1097
1080
|
return this;
|
|
1098
1081
|
}
|
|
1099
1082
|
default() {
|
|
1100
|
-
this.Default = this.container.resolve((
|
|
1083
|
+
this.Default = this.container.resolve((interfaces_1.DefaultValueBuilder), [this]);
|
|
1101
1084
|
return this.Default;
|
|
1102
1085
|
}
|
|
1103
1086
|
primaryKey() {
|
|
@@ -1128,18 +1111,18 @@ let AlterColumnQueryBuilder = class AlterColumnQueryBuilder extends ColumnQueryB
|
|
|
1128
1111
|
super(container, name, type, ...args);
|
|
1129
1112
|
this.OldName = name;
|
|
1130
1113
|
// we assume add by default
|
|
1131
|
-
this.AlterType =
|
|
1114
|
+
this.AlterType = interfaces_1.ColumnAlterationType.Add;
|
|
1132
1115
|
}
|
|
1133
1116
|
addColumn() {
|
|
1134
|
-
this.AlterType =
|
|
1117
|
+
this.AlterType = interfaces_1.ColumnAlterationType.Add;
|
|
1135
1118
|
return this;
|
|
1136
1119
|
}
|
|
1137
1120
|
modify() {
|
|
1138
|
-
this.AlterType =
|
|
1121
|
+
this.AlterType = interfaces_1.ColumnAlterationType.Modify;
|
|
1139
1122
|
return this;
|
|
1140
1123
|
}
|
|
1141
1124
|
rename(newName) {
|
|
1142
|
-
this.AlterType =
|
|
1125
|
+
this.AlterType = interfaces_1.ColumnAlterationType.Rename;
|
|
1143
1126
|
this.Name = newName;
|
|
1144
1127
|
return this;
|
|
1145
1128
|
}
|
|
@@ -1160,7 +1143,7 @@ class TableExistsQueryBuilder extends QueryBuilder {
|
|
|
1160
1143
|
this.QueryContext = interfaces_1.QueryContext.Select;
|
|
1161
1144
|
}
|
|
1162
1145
|
toDB() {
|
|
1163
|
-
return this._container.resolve(
|
|
1146
|
+
return this._container.resolve(interfaces_1.TableExistsCompiler, [this]).compile();
|
|
1164
1147
|
}
|
|
1165
1148
|
}
|
|
1166
1149
|
exports.TableExistsQueryBuilder = TableExistsQueryBuilder;
|
|
@@ -1179,7 +1162,7 @@ class DropTableQueryBuilder extends QueryBuilder {
|
|
|
1179
1162
|
return this;
|
|
1180
1163
|
}
|
|
1181
1164
|
toDB() {
|
|
1182
|
-
return this._container.resolve(
|
|
1165
|
+
return this._container.resolve(interfaces_1.DropTableCompiler, [this]).compile();
|
|
1183
1166
|
}
|
|
1184
1167
|
}
|
|
1185
1168
|
exports.DropTableQueryBuilder = DropTableQueryBuilder;
|
|
@@ -1218,6 +1201,7 @@ class TableQueryBuilder extends QueryBuilder {
|
|
|
1218
1201
|
this._columns = [];
|
|
1219
1202
|
this._foreignKeys = [];
|
|
1220
1203
|
this._temporary = false;
|
|
1204
|
+
this._trackHistory = false;
|
|
1221
1205
|
this.setTable(name);
|
|
1222
1206
|
this.QueryContext = interfaces_1.QueryContext.Schema;
|
|
1223
1207
|
}
|
|
@@ -1231,10 +1215,21 @@ class TableQueryBuilder extends QueryBuilder {
|
|
|
1231
1215
|
this._checkExists = true;
|
|
1232
1216
|
return this;
|
|
1233
1217
|
}
|
|
1218
|
+
/**
|
|
1219
|
+
* Mark table as temporary
|
|
1220
|
+
*/
|
|
1234
1221
|
temporary() {
|
|
1235
1222
|
this._temporary = true;
|
|
1236
1223
|
return this;
|
|
1237
1224
|
}
|
|
1225
|
+
/**
|
|
1226
|
+
* Turn on history trackign for this table
|
|
1227
|
+
* Each change & row will be tracked, and all history of changes can be accessed
|
|
1228
|
+
*/
|
|
1229
|
+
trackHistory() {
|
|
1230
|
+
this._trackHistory = true;
|
|
1231
|
+
return this;
|
|
1232
|
+
}
|
|
1238
1233
|
get Columns() {
|
|
1239
1234
|
return this._columns;
|
|
1240
1235
|
}
|
|
@@ -1247,6 +1242,9 @@ class TableQueryBuilder extends QueryBuilder {
|
|
|
1247
1242
|
get Temporary() {
|
|
1248
1243
|
return this._temporary;
|
|
1249
1244
|
}
|
|
1245
|
+
get TrackHistory() {
|
|
1246
|
+
return this._trackHistory;
|
|
1247
|
+
}
|
|
1250
1248
|
increments(name) {
|
|
1251
1249
|
return this.int(name).autoIncrement().notNull().primaryKey();
|
|
1252
1250
|
}
|
|
@@ -1335,7 +1333,7 @@ let CloneTableQueryBuilder = class CloneTableQueryBuilder extends QueryBuilder {
|
|
|
1335
1333
|
return this;
|
|
1336
1334
|
}
|
|
1337
1335
|
toDB() {
|
|
1338
|
-
return this._container.resolve(
|
|
1336
|
+
return this._container.resolve(interfaces_1.TableCloneQueryCompiler, [this]).compile();
|
|
1339
1337
|
}
|
|
1340
1338
|
};
|
|
1341
1339
|
CloneTableQueryBuilder = __decorate([
|
|
@@ -1344,6 +1342,115 @@ CloneTableQueryBuilder = __decorate([
|
|
|
1344
1342
|
__metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver])
|
|
1345
1343
|
], CloneTableQueryBuilder);
|
|
1346
1344
|
exports.CloneTableQueryBuilder = CloneTableQueryBuilder;
|
|
1345
|
+
class EventIntervalDesc {
|
|
1346
|
+
}
|
|
1347
|
+
exports.EventIntervalDesc = EventIntervalDesc;
|
|
1348
|
+
let EventQueryBuilder = class EventQueryBuilder extends QueryBuilder {
|
|
1349
|
+
constructor(container, driver, Name) {
|
|
1350
|
+
super(container, driver);
|
|
1351
|
+
this.container = container;
|
|
1352
|
+
this.driver = driver;
|
|
1353
|
+
this.Name = Name;
|
|
1354
|
+
}
|
|
1355
|
+
/**
|
|
1356
|
+
* execute every time with specified interval ( days, hours, seconds, minutes etc)
|
|
1357
|
+
*/
|
|
1358
|
+
every() {
|
|
1359
|
+
this.EveryInterval = new EventIntervalDesc();
|
|
1360
|
+
return this.EveryInterval;
|
|
1361
|
+
}
|
|
1362
|
+
/**
|
|
1363
|
+
*
|
|
1364
|
+
* Execute at specific time
|
|
1365
|
+
*
|
|
1366
|
+
* @param dateTime - specific time
|
|
1367
|
+
*/
|
|
1368
|
+
at(dateTime) {
|
|
1369
|
+
this.At = dateTime;
|
|
1370
|
+
}
|
|
1371
|
+
/**
|
|
1372
|
+
* execute once at specific interfal from now eg. now + 1 day
|
|
1373
|
+
*/
|
|
1374
|
+
fromNow() {
|
|
1375
|
+
this.FromNowInverval = new EventIntervalDesc();
|
|
1376
|
+
return this.FromNowInverval;
|
|
1377
|
+
}
|
|
1378
|
+
/**
|
|
1379
|
+
*
|
|
1380
|
+
* @param sql - code to execute, could be raw sql query, single builder, or multiple builders that will be executed on by one
|
|
1381
|
+
*/
|
|
1382
|
+
do(sql) {
|
|
1383
|
+
if (sql instanceof statements_1.RawQueryStatement) {
|
|
1384
|
+
this.RawSql = sql;
|
|
1385
|
+
}
|
|
1386
|
+
else if (Array.isArray(sql)) {
|
|
1387
|
+
this.Queries = sql;
|
|
1388
|
+
}
|
|
1389
|
+
else {
|
|
1390
|
+
this.Queries = [sql];
|
|
1391
|
+
}
|
|
1392
|
+
}
|
|
1393
|
+
/**
|
|
1394
|
+
*
|
|
1395
|
+
* Add comment to schedule for documentation. It is passed to sql engine
|
|
1396
|
+
*
|
|
1397
|
+
* @param comment - comment text
|
|
1398
|
+
*/
|
|
1399
|
+
comment(comment) {
|
|
1400
|
+
this.Comment = comment;
|
|
1401
|
+
}
|
|
1402
|
+
toDB() {
|
|
1403
|
+
return this._container.resolve(interfaces_1.EventQueryCompiler, [this]).compile();
|
|
1404
|
+
}
|
|
1405
|
+
};
|
|
1406
|
+
EventQueryBuilder = __decorate([
|
|
1407
|
+
(0, di_1.NewInstance)(),
|
|
1408
|
+
(0, di_1.Inject)(di_1.Container),
|
|
1409
|
+
__metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver, String])
|
|
1410
|
+
], EventQueryBuilder);
|
|
1411
|
+
exports.EventQueryBuilder = EventQueryBuilder;
|
|
1412
|
+
let DropEventQueryBuilder = class DropEventQueryBuilder extends QueryBuilder {
|
|
1413
|
+
constructor(container, driver, Name) {
|
|
1414
|
+
super(container, driver);
|
|
1415
|
+
this.container = container;
|
|
1416
|
+
this.driver = driver;
|
|
1417
|
+
this.Name = Name;
|
|
1418
|
+
}
|
|
1419
|
+
toDB() {
|
|
1420
|
+
return this._container.resolve(interfaces_1.DropEventQueryCompiler, [this]).compile();
|
|
1421
|
+
}
|
|
1422
|
+
};
|
|
1423
|
+
DropEventQueryBuilder = __decorate([
|
|
1424
|
+
(0, di_1.NewInstance)(),
|
|
1425
|
+
(0, di_1.Inject)(di_1.Container),
|
|
1426
|
+
__metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver, String])
|
|
1427
|
+
], DropEventQueryBuilder);
|
|
1428
|
+
exports.DropEventQueryBuilder = DropEventQueryBuilder;
|
|
1429
|
+
/**
|
|
1430
|
+
* Creates schedule job in database engine.
|
|
1431
|
+
* Note, some engines does not support this, so it will implemented
|
|
1432
|
+
* as nodejs interval
|
|
1433
|
+
*/
|
|
1434
|
+
let ScheduleQueryBuilder = class ScheduleQueryBuilder {
|
|
1435
|
+
constructor(container, driver) {
|
|
1436
|
+
this.container = container;
|
|
1437
|
+
this.driver = driver;
|
|
1438
|
+
}
|
|
1439
|
+
create(name, callback) {
|
|
1440
|
+
const builder = new EventQueryBuilder(this.container, this.driver, name);
|
|
1441
|
+
callback.call(this, builder);
|
|
1442
|
+
return builder;
|
|
1443
|
+
}
|
|
1444
|
+
drop(name) {
|
|
1445
|
+
return new DropEventQueryBuilder(this.container, this.driver, name);
|
|
1446
|
+
}
|
|
1447
|
+
};
|
|
1448
|
+
ScheduleQueryBuilder = __decorate([
|
|
1449
|
+
(0, di_1.NewInstance)(),
|
|
1450
|
+
(0, di_1.Inject)(di_1.Container),
|
|
1451
|
+
__metadata("design:paramtypes", [di_1.Container, driver_1.OrmDriver])
|
|
1452
|
+
], ScheduleQueryBuilder);
|
|
1453
|
+
exports.ScheduleQueryBuilder = ScheduleQueryBuilder;
|
|
1347
1454
|
let SchemaQueryBuilder = class SchemaQueryBuilder {
|
|
1348
1455
|
constructor(container, driver) {
|
|
1349
1456
|
this.container = container;
|
|
@@ -1375,6 +1482,12 @@ let SchemaQueryBuilder = class SchemaQueryBuilder {
|
|
|
1375
1482
|
const exists = await query;
|
|
1376
1483
|
return exists !== null && exists.length === 1;
|
|
1377
1484
|
}
|
|
1485
|
+
async event(name) {
|
|
1486
|
+
return new EventQueryBuilder(this.container, this.driver, name);
|
|
1487
|
+
}
|
|
1488
|
+
async dropEvent(name) {
|
|
1489
|
+
return new DropEventQueryBuilder(this.container, this.driver, name);
|
|
1490
|
+
}
|
|
1378
1491
|
};
|
|
1379
1492
|
SchemaQueryBuilder = __decorate([
|
|
1380
1493
|
(0, di_1.NewInstance)(),
|