@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 CHANGED
@@ -1,11 +1,12 @@
1
- import { Container, Constructor } from '@spinajs/di';
2
- import { QueryMethod, SORT_ORDER, WhereBoolean, WhereOperators } from './enums';
1
+ import { Container, Constructor, IContainer } from '@spinajs/di';
2
+ import { ColumnType, QueryMethod, SORT_ORDER, WhereBoolean, SqlOperator } from './enums';
3
3
  import { IColumnsBuilder, ICompilerOutput, ILimitBuilder, IOrderByBuilder, IQueryBuilder, IQueryLimit, ISort, IWhereBuilder, QueryContext, IJoinBuilder, IBuilderMiddleware, IWithRecursiveBuilder, ReferentialAction, IGroupByBuilder } from './interfaces';
4
4
  import { ColumnStatement, IQueryStatement, WrapStatement } from './statements';
5
5
  import { WhereFunction } from './types';
6
6
  import { OrmDriver } from './driver';
7
7
  import { ModelBase } from './model';
8
8
  import { OrmRelation, IOrmRelation } from './relations';
9
+ import { ColumnAlterationType, IUpdateResult } from '.';
9
10
  /**
10
11
  * Trick typescript by using the inbuilt interface inheritance and declaration merging
11
12
  * for builder classes.
@@ -21,21 +22,24 @@ export interface UpdateQueryBuilder extends IColumnsBuilder, IWhereBuilder {
21
22
  }
22
23
  export interface SelectQueryBuilder extends IColumnsBuilder, IOrderByBuilder, ILimitBuilder, IWhereBuilder, IJoinBuilder, IWithRecursiveBuilder, IGroupByBuilder {
23
24
  }
24
- export declare class Builder<T = any> {
25
+ export declare class Builder<T = any> implements PromiseLike<T> {
25
26
  protected _driver: OrmDriver;
26
- protected _container: Container;
27
+ protected _container: IContainer;
27
28
  protected _model?: Constructor<ModelBase>;
28
29
  protected _nonSelect: boolean;
29
- protected _queryContext: QueryContext;
30
- protected _middlewares: IBuilderMiddleware[];
30
+ protected _middlewares: IBuilderMiddleware<T>[];
31
31
  protected _asRaw: boolean;
32
- constructor(container: Container, driver: OrmDriver, model?: Constructor<ModelBase>);
33
- middleware(middleware: IBuilderMiddleware): this;
32
+ QueryContext: QueryContext;
33
+ get Driver(): OrmDriver;
34
+ get Container(): IContainer;
35
+ get Model(): Constructor<ModelBase> | undefined;
36
+ constructor(container: IContainer, driver: OrmDriver, model?: Constructor<ModelBase>);
37
+ then<TResult1 = T, TResult2 = never>(onfulfilled?: (value: T) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): PromiseLike<TResult1 | TResult2>;
38
+ middleware(middleware: IBuilderMiddleware<T>): this;
34
39
  /**
35
40
  * Builds query that is ready to use in DB
36
41
  */
37
- toDB(): ICompilerOutput;
38
- then(resolve: (rows: any[]) => void, reject: (err: Error) => void): Promise<T>;
42
+ toDB(): ICompilerOutput | ICompilerOutput[];
39
43
  }
40
44
  /**
41
45
  * Base class for queires. Implements basic query functionality
@@ -45,8 +49,8 @@ export declare class QueryBuilder<T = any> extends Builder<T> implements IQueryB
45
49
  protected _method: QueryMethod;
46
50
  protected _table: string;
47
51
  protected _tableAlias: string;
48
- protected _schema: string;
49
- constructor(container: Container, driver: OrmDriver, model?: Constructor<ModelBase>);
52
+ protected _database: string;
53
+ constructor(container: IContainer, driver: OrmDriver, model?: Constructor<ModelBase>);
50
54
  /**
51
55
  * SQL table name that query is executed on
52
56
  *
@@ -64,13 +68,13 @@ export declare class QueryBuilder<T = any> extends Builder<T> implements IQueryB
64
68
  * @example
65
69
  * SELECT * FROM `spinejs`.`users` as u
66
70
  */
67
- get Schema(): string;
71
+ get Database(): string;
68
72
  /**
69
73
  * Sets schema to this query.
70
74
  *
71
- * @param schema - schema or database name in database
75
+ * @param database - schema or database name in database
72
76
  */
73
- schema(schema: string): this;
77
+ database(database: string): this;
74
78
  /**
75
79
  * Sets table that query is executed on
76
80
  *
@@ -92,7 +96,6 @@ export declare class QueryBuilder<T = any> extends Builder<T> implements IQueryB
92
96
  from(table: string, alias?: string): this;
93
97
  }
94
98
  export declare class LimitBuilder implements ILimitBuilder {
95
- protected _fail: boolean;
96
99
  protected _first: boolean;
97
100
  protected _limit: IQueryLimit;
98
101
  constructor();
@@ -100,6 +103,8 @@ export declare class LimitBuilder implements ILimitBuilder {
100
103
  skip(count: number): this;
101
104
  first(): Promise<any>;
102
105
  firstOrFail(): Promise<any>;
106
+ orThrow(error: Error): Promise<any>;
107
+ firstOrThrow(error: Error): Promise<any>;
103
108
  getLimits(): IQueryLimit;
104
109
  }
105
110
  export declare class OrderByBuilder implements IOrderByBuilder {
@@ -181,7 +186,7 @@ export declare class WhereBuilder implements IWhereBuilder {
181
186
  get Statements(): IQueryStatement[];
182
187
  get Op(): WhereBoolean;
183
188
  constructor(container: Container, tableAlias?: string);
184
- where(column: string | boolean | WhereFunction | RawQuery | WrapStatement | {}, operator?: WhereOperators | any, value?: any): this;
189
+ where(column: string | boolean | WhereFunction | RawQuery | WrapStatement | {}, operator?: SqlOperator | any, value?: any): this;
185
190
  orWhere(column: string | boolean | WhereFunction | {}, ..._args: any[]): this;
186
191
  andWhere(column: string | boolean | WhereFunction | {}, ..._args: any[]): this;
187
192
  whereObject(obj: any): this;
@@ -228,7 +233,7 @@ export declare class SelectQueryBuilder<T = any> extends QueryBuilder<T> {
228
233
  get IsDistinct(): boolean;
229
234
  get Owner(): IOrmRelation;
230
235
  get Relations(): IOrmRelation[];
231
- constructor(container: Container, driver: OrmDriver, model: Constructor<any>, owner?: IOrmRelation);
236
+ constructor(container: IContainer, driver: OrmDriver, model?: Constructor<any>, owner?: IOrmRelation);
232
237
  asRaw<T>(): Promise<T>;
233
238
  setAlias(alias: string): this;
234
239
  clone(): this;
@@ -241,37 +246,34 @@ export declare class SelectQueryBuilder<T = any> extends QueryBuilder<T> {
241
246
  avg(column: string, as?: string): this;
242
247
  distinct(): this;
243
248
  toDB(): ICompilerOutput;
244
- then(resolve: (rows: any[]) => void, reject: (err: Error) => void): Promise<T>;
249
+ then<TResult1 = T, TResult2 = never>(onfulfilled?: (value: T) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): PromiseLike<TResult1 | TResult2>;
245
250
  execute(): Promise<T>;
246
251
  }
247
- export declare class DeleteQueryBuilder extends QueryBuilder {
252
+ export declare class DeleteQueryBuilder extends QueryBuilder<IUpdateResult> {
248
253
  /**
249
254
  * where query props
250
255
  */
251
256
  protected _statements: IQueryStatement[];
252
257
  protected _boolean: WhereBoolean;
253
- protected _truncate: boolean;
254
258
  protected _limit: IQueryLimit;
255
- get Truncate(): boolean;
256
259
  private this;
257
260
  constructor(container: Container, driver: OrmDriver, model: Constructor<any>);
258
261
  toDB(): ICompilerOutput;
259
- truncate(): this;
260
262
  }
261
263
  export declare class OnDuplicateQueryBuilder {
262
264
  protected _column: string[];
263
265
  protected _parent: InsertQueryBuilder;
264
266
  protected _columnsToUpdate: Array<string | RawQuery>;
265
- protected _container: Container;
266
- constructor(container: Container, insertQueryBuilder: InsertQueryBuilder, column?: string | string[]);
267
+ protected _container: IContainer;
268
+ constructor(container: IContainer, insertQueryBuilder: InsertQueryBuilder, column?: string | string[]);
267
269
  getColumn(): string[];
268
270
  getColumnsToUpdate(): (string | RawQuery)[];
269
271
  getParent(): InsertQueryBuilder;
270
272
  update(columns: string[] | RawQuery[]): this;
271
- then(resolve: (rows: any[]) => void, reject: (err: Error) => void): Promise<any>;
273
+ then<TResult1, TResult2 = never>(onfulfilled?: (value: any) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): PromiseLike<TResult1 | TResult2>;
272
274
  toDB(): ICompilerOutput;
273
275
  }
274
- export declare class UpdateQueryBuilder extends QueryBuilder {
276
+ export declare class UpdateQueryBuilder extends QueryBuilder<IUpdateResult> {
275
277
  /**
276
278
  * where query props
277
279
  */
@@ -285,19 +287,24 @@ export declare class UpdateQueryBuilder extends QueryBuilder {
285
287
  update(value: {}): this;
286
288
  toDB(): ICompilerOutput;
287
289
  }
288
- export declare class InsertQueryBuilder extends QueryBuilder {
290
+ export declare class InsertQueryBuilder extends QueryBuilder<IUpdateResult> {
289
291
  DuplicateQueryBuilder: OnDuplicateQueryBuilder;
290
292
  protected _values: any[][];
291
293
  protected _columns: ColumnStatement[];
292
294
  protected _ignore: boolean;
295
+ protected _update: boolean;
296
+ protected _replace: boolean;
293
297
  this: this;
294
298
  get Values(): any[][];
295
299
  get Ignore(): boolean;
300
+ get Update(): boolean;
301
+ get Replace(): boolean;
296
302
  constructor(container: Container, driver: OrmDriver, model: Constructor<any>);
297
303
  /**
298
304
  * Sets insert to ignore on duplicate
299
305
  */
300
- ignore(): this;
306
+ orIgnore(): this;
307
+ orReplace(): this;
301
308
  values(data: {} | Array<{}>): this;
302
309
  into(table: string, schema?: string): this;
303
310
  onDuplicate(column?: string | string[]): OnDuplicateQueryBuilder;
@@ -367,9 +374,9 @@ export declare class ColumnQueryBuilder {
367
374
  Charset: string;
368
375
  Collation: string;
369
376
  NotNull: boolean;
370
- Type: string;
377
+ Type: ColumnType;
371
378
  Args: any[];
372
- constructor(name: string, type: string, ...args: any[]);
379
+ constructor(name: string, type: ColumnType, ...args: any[]);
373
380
  notNull(): this;
374
381
  unique(): this;
375
382
  unsigned(): this;
@@ -380,10 +387,61 @@ export declare class ColumnQueryBuilder {
380
387
  charset(charset: string): this;
381
388
  collation(collation: string): this;
382
389
  }
390
+ export declare class AlterColumnQueryBuilder extends ColumnQueryBuilder {
391
+ AlterType: ColumnAlterationType;
392
+ AfterColumn: string;
393
+ OldName: string;
394
+ constructor(name: string, type: ColumnType, ...args: any[]);
395
+ addColumn(): this;
396
+ modify(): this;
397
+ rename(newName: string): this;
398
+ after(columnName: string): this;
399
+ }
383
400
  export declare class TableExistsQueryBuilder extends QueryBuilder {
384
401
  constructor(container: Container, driver: OrmDriver, name: string);
385
402
  toDB(): ICompilerOutput;
386
403
  }
404
+ export declare class AlterTableQueryBuilder extends QueryBuilder {
405
+ protected _columns: ColumnQueryBuilder[];
406
+ NewTableName: string;
407
+ DroppedColumns: string[];
408
+ get Columns(): ColumnQueryBuilder[];
409
+ constructor(container: Container, driver: OrmDriver, name: string);
410
+ int: (name: string) => AlterColumnQueryBuilder;
411
+ bigint: (name: string) => AlterColumnQueryBuilder;
412
+ tinyint: (name: string) => AlterColumnQueryBuilder;
413
+ smallint: (name: string) => AlterColumnQueryBuilder;
414
+ mediumint: (name: string) => AlterColumnQueryBuilder;
415
+ text: (name: string) => AlterColumnQueryBuilder;
416
+ tinytext: (name: string) => AlterColumnQueryBuilder;
417
+ mediumtext: (name: string) => AlterColumnQueryBuilder;
418
+ smalltext: (name: string) => AlterColumnQueryBuilder;
419
+ longtext: (name: string) => AlterColumnQueryBuilder;
420
+ string: (name: string, length?: number) => AlterColumnQueryBuilder;
421
+ float: (name: string, precision?: number, scale?: number) => AlterColumnQueryBuilder;
422
+ double: (name: string, precision?: number, scale?: number) => AlterColumnQueryBuilder;
423
+ decimal: (name: string, precision?: number, scale?: number) => AlterColumnQueryBuilder;
424
+ boolean: (name: string) => AlterColumnQueryBuilder;
425
+ bit: (name: string) => AlterColumnQueryBuilder;
426
+ date: (name: string) => AlterColumnQueryBuilder;
427
+ dateTime: (name: string) => AlterColumnQueryBuilder;
428
+ time: (name: string) => AlterColumnQueryBuilder;
429
+ timestamp: (name: string) => AlterColumnQueryBuilder;
430
+ enum: (name: string, values: any[]) => AlterColumnQueryBuilder;
431
+ json: (name: string) => AlterColumnQueryBuilder;
432
+ binary: (name: string, size: number) => AlterColumnQueryBuilder;
433
+ tinyblob: (name: string) => AlterColumnQueryBuilder;
434
+ mediumblob: (name: string) => AlterColumnQueryBuilder;
435
+ longblob: (name: string) => AlterColumnQueryBuilder;
436
+ /**
437
+ * Renames table
438
+ *
439
+ * @param newTableName - new table name
440
+ */
441
+ rename(newTableName: string): void;
442
+ dropColumn(column: string): void;
443
+ toDB(): ICompilerOutput[];
444
+ }
387
445
  export declare class TableQueryBuilder extends QueryBuilder {
388
446
  int: (name: string) => ColumnQueryBuilder;
389
447
  bigint: (name: string) => ColumnQueryBuilder;
@@ -412,6 +470,7 @@ export declare class TableQueryBuilder extends QueryBuilder {
412
470
  mediumblob: (name: string) => ColumnQueryBuilder;
413
471
  longblob: (name: string) => ColumnQueryBuilder;
414
472
  ifExists(): TableQueryBuilder;
473
+ temporary(): TableQueryBuilder;
415
474
  set: (name: string, allowed: string[]) => ColumnQueryBuilder;
416
475
  get Columns(): ColumnQueryBuilder[];
417
476
  get ForeignKeys(): ForeignKeyBuilder[];
@@ -420,7 +479,9 @@ export declare class TableQueryBuilder extends QueryBuilder {
420
479
  protected _comment: string;
421
480
  protected _charset: string;
422
481
  protected _checkExists: boolean;
482
+ protected _temporary: boolean;
423
483
  get CheckExists(): boolean;
484
+ get Temporary(): boolean;
424
485
  constructor(container: Container, driver: OrmDriver, name: string);
425
486
  increments(name: string): ColumnQueryBuilder;
426
487
  comment(comment: string): void;
@@ -428,10 +489,48 @@ export declare class TableQueryBuilder extends QueryBuilder {
428
489
  foreignKey(foreignKey: string): ForeignKeyBuilder;
429
490
  toDB(): ICompilerOutput;
430
491
  }
492
+ export declare class TruncateTableQueryBuilder extends QueryBuilder {
493
+ protected container: Container;
494
+ protected driver: OrmDriver;
495
+ constructor(container: Container, driver: OrmDriver);
496
+ toDB(): ICompilerOutput;
497
+ }
498
+ export declare class CloneTableQueryBuilder extends QueryBuilder {
499
+ protected container: Container;
500
+ protected driver: OrmDriver;
501
+ protected _cloneSrc: string;
502
+ protected _temporary: boolean;
503
+ protected _shallow: boolean;
504
+ protected _filter: SelectQueryBuilder;
505
+ get CloneSource(): string;
506
+ get Temporary(): boolean;
507
+ get Shallow(): boolean;
508
+ get Filter(): SelectQueryBuilder<any>;
509
+ constructor(container: Container, driver: OrmDriver);
510
+ /**
511
+ * Clones table structure without data
512
+ * Shorthand for createTable(( table) => table.clone("new"));
513
+ *
514
+ * @param srcTable - source table name
515
+ * @param newTable - target table name
516
+ */
517
+ shallowClone(srcTable: string, newTable: string): this;
518
+ /**
519
+ * Clones table with data
520
+ *
521
+ * @param srcTable - source table name
522
+ * @param newTable - target table name
523
+ * @param filter - data filter, set null if all data is to be cloned
524
+ */
525
+ deepClone(srcTable: string, newTable: string, filter?: (query: SelectQueryBuilder) => void): Promise<any>;
526
+ toDB(): ICompilerOutput[];
527
+ }
431
528
  export declare class SchemaQueryBuilder {
432
529
  protected container: Container;
433
530
  protected driver: OrmDriver;
434
531
  constructor(container: Container, driver: OrmDriver);
435
532
  createTable(name: string, callback: (table: TableQueryBuilder) => void): TableQueryBuilder;
436
- tableExists(name: string): Promise<boolean>;
533
+ cloneTable(callback: (clone: CloneTableQueryBuilder) => void): CloneTableQueryBuilder;
534
+ alterTable(name: string, callback: (table: AlterTableQueryBuilder) => void): AlterTableQueryBuilder;
535
+ tableExists(name: string, schema?: string): Promise<boolean>;
437
536
  }