drizzle-orm 0.9.18 → 0.10.2

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.
Files changed (62) hide show
  1. package/README.md +39 -9
  2. package/builders/aggregators/abstractAggregator.d.ts +4 -2
  3. package/builders/aggregators/abstractAggregator.js +11 -4
  4. package/builders/aggregators/selectAggregator.d.ts +12 -4
  5. package/builders/aggregators/selectAggregator.js +29 -12
  6. package/builders/highLvlBuilders/abstractRequestBuilder.d.ts +10 -4
  7. package/builders/highLvlBuilders/abstractRequestBuilder.js +14 -3
  8. package/builders/highLvlBuilders/deleteRequestBuilder.d.ts +4 -2
  9. package/builders/highLvlBuilders/insertRequestBuilder.d.ts +4 -2
  10. package/builders/highLvlBuilders/insertRequestBuilder.js +1 -0
  11. package/builders/highLvlBuilders/selectRequestBuilder.d.ts +21 -16
  12. package/builders/highLvlBuilders/selectRequestBuilder.js +22 -11
  13. package/builders/highLvlBuilders/updateRequestBuilder.d.ts +4 -2
  14. package/builders/joinBuilders/builders/abstractJoinBuilder.d.ts +16 -3
  15. package/builders/joinBuilders/builders/abstractJoinBuilder.js +19 -2
  16. package/builders/joinBuilders/builders/selectWithFiveJoins.d.ts +16 -4
  17. package/builders/joinBuilders/builders/selectWithFiveJoins.js +19 -10
  18. package/builders/joinBuilders/builders/selectWithFourJoins.d.ts +31 -12
  19. package/builders/joinBuilders/builders/selectWithFourJoins.js +31 -21
  20. package/builders/joinBuilders/builders/selectWithJoin.d.ts +28 -12
  21. package/builders/joinBuilders/builders/selectWithJoin.js +23 -18
  22. package/builders/joinBuilders/builders/selectWithThreeJoins.d.ts +30 -12
  23. package/builders/joinBuilders/builders/selectWithThreeJoins.js +28 -20
  24. package/builders/joinBuilders/builders/selectWithTwoJoins.d.ts +29 -12
  25. package/builders/joinBuilders/builders/selectWithTwoJoins.js +25 -19
  26. package/builders/joinBuilders/responses/selectResponseFiveJoins.d.ts +14 -13
  27. package/builders/joinBuilders/responses/selectResponseFourJoins.d.ts +13 -12
  28. package/builders/joinBuilders/responses/selectResponseThreeJoins.d.ts +8 -7
  29. package/builders/joinBuilders/responses/selectResponseTwoJoins.d.ts +8 -7
  30. package/builders/joinBuilders/responses/selectResponseWithJoin.d.ts +8 -7
  31. package/builders/lowLvlBuilders/selects/select.d.ts +5 -1
  32. package/builders/lowLvlBuilders/selects/select.js +3 -2
  33. package/builders/lowLvlBuilders/selects/selectFrom.d.ts +9 -3
  34. package/builders/lowLvlBuilders/selects/selectJoined.d.ts +8 -2
  35. package/builders/lowLvlBuilders/selects/whereSelect.d.ts +1 -1
  36. package/builders/requestBuilders/updates/static.d.ts +2 -2
  37. package/builders/requestBuilders/where/const.js +3 -0
  38. package/builders/requestBuilders/where/constArray.js +3 -0
  39. package/builders/requestBuilders/where/static.d.ts +9 -9
  40. package/columns/column.d.ts +24 -20
  41. package/columns/column.js +8 -1
  42. package/docs/cases/simple_delete.js +1 -1
  43. package/docs/cases/simple_insert.js +9 -4
  44. package/docs/cases/simple_join.js +20 -6
  45. package/docs/cases/simple_select.js +15 -9
  46. package/docs/cases/simple_update.js +1 -1
  47. package/docs/tables/citiesTable.d.ts +5 -5
  48. package/docs/tables/citiesTable.js +1 -2
  49. package/docs/tables/userGroupsTable.d.ts +3 -3
  50. package/docs/tables/usersTable.d.ts +9 -10
  51. package/docs/tables/usersTable.js +2 -2
  52. package/docs/tables/usersToUserGroups.d.ts +2 -2
  53. package/mappers/responseMapper.d.ts +4 -1
  54. package/mappers/responseMapper.js +18 -6
  55. package/migrator/migrator.js +6 -5
  56. package/package.json +1 -1
  57. package/serializer/serializer.js +14 -1
  58. package/tables/abstractTable.d.ts +19 -20
  59. package/tables/abstractTable.js +4 -3
  60. package/tables/inferTypes.d.ts +14 -0
  61. package/tables/migrationsTable.d.ts +3 -3
  62. package/test.js +71 -16
@@ -4,31 +4,48 @@ import ColumnType from '../../../columns/types/columnType';
4
4
  import DB from '../../../db/db';
5
5
  import { ISession } from '../../../db/session';
6
6
  import AbstractTable from '../../../tables/abstractTable';
7
+ import { CheckThreeTypes, PartialFor } from '../../../tables/inferTypes';
7
8
  import Order from '../../highLvlBuilders/order';
8
9
  import Expr from '../../requestBuilders/where/where';
9
10
  import Join from '../join';
10
11
  import SelectResponseTwoJoins from '../responses/selectResponseTwoJoins';
11
12
  import AbstractJoined from './abstractJoinBuilder';
12
13
  import SelectTRBWithThreeJoins from './selectWithThreeJoins';
13
- export default class SelectTRBWithTwoJoins<TTable extends AbstractTable<TTable>, TTable1, TTable2> extends AbstractJoined<TTable, SelectResponseTwoJoins<TTable, TTable1, TTable2>> {
14
+ export default class SelectTRBWithTwoJoins<TTable extends AbstractTable<TTable>, TTable1 extends AbstractTable<TTable1>, TTable2 extends AbstractTable<TTable2>, TPartial extends PartialFor<TTable> = {}, TPartial1 extends PartialFor<TTable1> = {}, TPartial2 extends PartialFor<TTable2> = {}> extends AbstractJoined<TTable, SelectResponseTwoJoins<TTable, TTable1, TTable2, TPartial, TPartial1, TPartial2>, TPartial> {
14
15
  private _join1;
15
16
  private _join2;
17
+ private _joinedPartial?;
18
+ private _joinedPartial1?;
16
19
  constructor(table: TTable, session: ISession, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, props: {
17
20
  limit?: number;
18
21
  offset?: number;
19
- }, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
20
- innerJoin<TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>>(table: {
22
+ }, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>, tablePartial?: TPartial, joinedPartial?: TPartial1, joinedPartial1?: TPartial2);
23
+ innerJoin<InputTable extends AbstractTable<InputTable>, TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>, IToPartial extends PartialFor<IToTable> = {}>(fromTable: {
24
+ new (db: DB): InputTable;
25
+ }, table: {
21
26
  new (db: DB): IToTable;
22
- }, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean>, to: (table: IToTable) => AbstractColumn<TColumn, boolean, boolean>): SelectTRBWithThreeJoins<TTable, TTable1, TTable2, IToTable>;
23
- leftJoin<TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>>(table: {
27
+ }, from: (table: CheckThreeTypes<InputTable, TTable, TTable1, TTable2>) => AbstractColumn<TColumn, boolean, boolean, CheckThreeTypes<InputTable, TTable, TTable1, TTable2>>, to: (table: IToTable) => AbstractColumn<TColumn, boolean, boolean, IToTable>, partial?: IToPartial): SelectTRBWithThreeJoins<TTable, TTable1, TTable2, IToTable, TPartial, TPartial1, TPartial2, IToPartial>;
28
+ leftJoin<InputTable extends AbstractTable<InputTable>, TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>, IToPartial extends PartialFor<IToTable> = {}>(fromTable: {
29
+ new (db: DB): InputTable;
30
+ }, table: {
24
31
  new (db: DB): IToTable;
25
- }, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean>, to: (table: IToTable) => AbstractColumn<TColumn, boolean, boolean>): SelectTRBWithThreeJoins<TTable, TTable1, TTable2, IToTable>;
26
- rightJoin<TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>>(table: {
32
+ }, from: (table: CheckThreeTypes<InputTable, TTable, TTable1, TTable2>) => AbstractColumn<TColumn, boolean, boolean, CheckThreeTypes<InputTable, TTable, TTable1, TTable2>>, to: (table: IToTable) => AbstractColumn<TColumn, boolean, boolean, IToTable>, partial?: IToPartial): SelectTRBWithThreeJoins<TTable, TTable1, TTable2, IToTable, TPartial, TPartial1, TPartial2, IToPartial>;
33
+ rightJoin<InputTable extends AbstractTable<InputTable>, TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>, IToPartial extends PartialFor<IToTable> = {}>(fromTable: {
34
+ new (db: DB): InputTable;
35
+ }, table: {
27
36
  new (db: DB): IToTable;
28
- }, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean>, to: (table: IToTable) => AbstractColumn<TColumn, boolean, boolean>): SelectTRBWithThreeJoins<TTable, TTable1, TTable2, IToTable>;
29
- fullJoin<TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>>(table: {
37
+ }, from: (table: CheckThreeTypes<InputTable, TTable, TTable1, TTable2>) => AbstractColumn<TColumn, boolean, boolean, CheckThreeTypes<InputTable, TTable, TTable1, TTable2>>, to: (table: IToTable) => AbstractColumn<TColumn, boolean, boolean, IToTable>, partial?: IToPartial): SelectTRBWithThreeJoins<TTable, TTable1, TTable2, IToTable, TPartial, TPartial1, TPartial2, IToPartial>;
38
+ fullJoin<InputTable extends AbstractTable<InputTable>, TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>, IToPartial extends PartialFor<IToTable> = {}>(fromTable: {
39
+ new (db: DB): InputTable;
40
+ }, table: {
30
41
  new (db: DB): IToTable;
31
- }, from: (table: TTable) => AbstractColumn<TColumn>, to: (table: IToTable) => AbstractColumn<TColumn>): SelectTRBWithThreeJoins<TTable, TTable1, TTable2, IToTable>;
32
- protected mapResponse(result: QueryResult<any>): SelectResponseTwoJoins<TTable, TTable1, TTable2>;
33
- protected joins(): Join<any>[];
42
+ }, from: (table: CheckThreeTypes<InputTable, TTable, TTable1, TTable2>) => AbstractColumn<TColumn, boolean, boolean, CheckThreeTypes<InputTable, TTable, TTable1, TTable2>>, to: (table: IToTable) => AbstractColumn<TColumn, boolean, boolean, IToTable>, partial?: IToPartial): SelectTRBWithThreeJoins<TTable, TTable1, TTable2, IToTable, TPartial, TPartial1, TPartial2, IToPartial>;
43
+ protected mapResponse(result: QueryResult<any>): SelectResponseTwoJoins<TTable, TTable1, TTable2, TPartial, TPartial1, TPartial2>;
44
+ protected joins(): Array<{
45
+ join: Join<any>;
46
+ partial?: {
47
+ [name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, any>;
48
+ };
49
+ id?: number;
50
+ }>;
34
51
  }
@@ -1,59 +1,65 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const responseMapper_1 = require("../../../mappers/responseMapper");
4
3
  const join_1 = require("../join");
5
4
  const joinWith_1 = require("../joinWith");
6
5
  const selectResponseTwoJoins_1 = require("../responses/selectResponseTwoJoins");
7
6
  const abstractJoinBuilder_1 = require("./abstractJoinBuilder");
8
7
  const selectWithThreeJoins_1 = require("./selectWithThreeJoins");
9
8
  class SelectTRBWithTwoJoins extends abstractJoinBuilder_1.default {
10
- constructor(table, session, filter, join1, join2, props, orderBy, order, distinct) {
11
- super(table, filter, session, props, orderBy, order, distinct);
9
+ constructor(table, session, filter, join1, join2, props, orderBy, order, distinct, tablePartial, joinedPartial, joinedPartial1) {
10
+ super(table, filter, session, props, orderBy, order, distinct, tablePartial);
12
11
  this._join1 = join1;
13
12
  this._join2 = join2;
13
+ this._joinedPartial = joinedPartial;
14
+ this._joinedPartial1 = joinedPartial1;
14
15
  }
15
- innerJoin(table, from, to) {
16
+ innerJoin(fromTable, table, from, to, partial) {
16
17
  const toTable = this._table.db.create(table);
17
- const fromColumn = from(this._table);
18
+ const tableFrom = this._table.db.create(fromTable);
19
+ const fromColumn = from(tableFrom);
18
20
  const toColumn = to(toTable);
19
21
  const join = new joinWith_1.default(toTable.tableName(), toTable.mapServiceToDb())
20
22
  .columns(fromColumn, toColumn).joinStrategy(join_1.JoinStrategy.INNER_JOIN);
21
- return new selectWithThreeJoins_1.default(this._table, this._session, this._filter, this._join1, this._join2, join, this._props, this._orderBy, this._order, this._distinct);
23
+ return new selectWithThreeJoins_1.default(this._table, this._session, this._filter, this._join1, this._join2, join, this._props, this._orderBy, this._order, this._distinct, this._partial, this._joinedPartial, this._joinedPartial1, partial);
22
24
  }
23
- leftJoin(table, from, to) {
25
+ leftJoin(fromTable, table, from, to, partial) {
24
26
  const toTable = this._table.db.create(table);
25
- const fromColumn = from(this._table);
27
+ const tableFrom = this._table.db.create(fromTable);
28
+ const fromColumn = from(tableFrom);
26
29
  const toColumn = to(toTable);
27
30
  const join = new joinWith_1.default(toTable.tableName(), toTable.mapServiceToDb())
28
31
  .columns(fromColumn, toColumn).joinStrategy(join_1.JoinStrategy.LEFT_JOIN);
29
- return new selectWithThreeJoins_1.default(this._table, this._session, this._filter, this._join1, this._join2, join, this._props, this._orderBy, this._order, this._distinct);
32
+ return new selectWithThreeJoins_1.default(this._table, this._session, this._filter, this._join1, this._join2, join, this._props, this._orderBy, this._order, this._distinct, this._partial, this._joinedPartial, this._joinedPartial1, partial);
30
33
  }
31
- rightJoin(table, from, to) {
34
+ rightJoin(fromTable, table, from, to, partial) {
32
35
  const toTable = this._table.db.create(table);
33
- const fromColumn = from(this._table);
36
+ const tableFrom = this._table.db.create(fromTable);
37
+ const fromColumn = from(tableFrom);
34
38
  const toColumn = to(toTable);
35
39
  const join = new joinWith_1.default(toTable.tableName(), toTable.mapServiceToDb())
36
40
  .columns(fromColumn, toColumn).joinStrategy(join_1.JoinStrategy.RIGHT_JOIN);
37
- return new selectWithThreeJoins_1.default(this._table, this._session, this._filter, this._join1, this._join2, join, this._props, this._orderBy, this._order, this._distinct);
41
+ return new selectWithThreeJoins_1.default(this._table, this._session, this._filter, this._join1, this._join2, join, this._props, this._orderBy, this._order, this._distinct, this._partial, this._joinedPartial, this._joinedPartial1, partial);
38
42
  }
39
- fullJoin(table, from, to) {
43
+ fullJoin(fromTable, table, from, to, partial) {
40
44
  const toTable = this._table.db.create(table);
41
- const fromColumn = from(this._table);
45
+ const tableFrom = this._table.db.create(fromTable);
46
+ const fromColumn = from(tableFrom);
42
47
  const toColumn = to(toTable);
43
48
  const join = new joinWith_1.default(toTable.tableName(), toTable.mapServiceToDb())
44
49
  .columns(fromColumn, toColumn).joinStrategy(join_1.JoinStrategy.FULL_JOIN);
45
- return new selectWithThreeJoins_1.default(this._table, this._session, this._filter, this._join1, this._join2, join, this._props, this._orderBy, this._order, this._distinct);
50
+ return new selectWithThreeJoins_1.default(this._table, this._session, this._filter, this._join1, this._join2, join, this._props, this._orderBy, this._order, this._distinct, this._partial, this._joinedPartial, this._joinedPartial1, partial);
46
51
  }
47
52
  mapResponse(result) {
48
53
  const parent = this._join1.mappedServiceToDb;
49
54
  const parentTwo = this._join2.mappedServiceToDb;
50
- const response = responseMapper_1.default.map(this._table.mapServiceToDb(), result);
51
- const objects = responseMapper_1.default.map(parent, result);
52
- const objectsTwo = responseMapper_1.default.map(parentTwo, result);
55
+ const response = this.fullOrPartial(this._table.mapServiceToDb(), result, this._partial);
56
+ const objects = this.fullOrPartial(parent, result, this._joinedPartial, 1);
57
+ const objectsTwo = this.fullOrPartial(parentTwo, result, this._joinedPartial1, 2);
53
58
  return new selectResponseTwoJoins_1.default(response, objects, objectsTwo);
54
59
  }
55
60
  joins() {
56
- return [this._join1, this._join2];
61
+ return [{ join: this._join1, partial: this._joinedPartial, id: 1 },
62
+ { join: this._join2, partial: this._joinedPartial1, id: 2 }];
57
63
  }
58
64
  }
59
65
  exports.default = SelectTRBWithTwoJoins;
@@ -1,17 +1,18 @@
1
- import { ExtractModel } from '../../../tables/inferTypes';
2
- export default class SelectResponseFiveJoins<T1, T2, T3, T4, T5, T6> {
3
- _t1: Array<ExtractModel<T1> | undefined>;
4
- _t2: Array<ExtractModel<T2> | undefined>;
5
- _t3: Array<ExtractModel<T3> | undefined>;
6
- _t4: Array<ExtractModel<T4> | undefined>;
7
- _t5: Array<ExtractModel<T5> | undefined>;
8
- _t6: Array<ExtractModel<T6> | undefined>;
9
- constructor(t1: Array<ExtractModel<T1> | undefined>, t2: Array<ExtractModel<T2> | undefined>, t3: Array<ExtractModel<T3> | undefined>, t4: Array<ExtractModel<T4> | undefined>, t5: Array<ExtractModel<T5> | undefined>, t6: Array<ExtractModel<T6> | undefined>);
10
- map: <M>(imac: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined, t4: ExtractModel<T4> | undefined, t5: ExtractModel<T5> | undefined, t6: ExtractModel<T6> | undefined) => M) => M[];
11
- foreach: (imac: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined, t4: ExtractModel<T4> | undefined, t5: ExtractModel<T5> | undefined, t6: ExtractModel<T6> | undefined) => void) => void;
1
+ import AbstractTable from '../../../tables/abstractTable';
2
+ import { FullOrPartial, PartialFor } from '../../../tables/inferTypes';
3
+ export default class SelectResponseFiveJoins<T1 extends AbstractTable<T1>, T2 extends AbstractTable<T2>, T3 extends AbstractTable<T3>, T4 extends AbstractTable<T4>, T5 extends AbstractTable<T5>, T6 extends AbstractTable<T6>, TPartial1 extends PartialFor<T1>, TPartial2 extends PartialFor<T2>, TPartial3 extends PartialFor<T3>, TPartial4 extends PartialFor<T4>, TPartial5 extends PartialFor<T5>, TPartial6 extends PartialFor<T6>> {
4
+ _t1: Array<FullOrPartial<T1, TPartial1>>;
5
+ _t2: Array<FullOrPartial<T2, TPartial2>>;
6
+ _t3: Array<FullOrPartial<T3, TPartial3>>;
7
+ _t4: Array<FullOrPartial<T4, TPartial4>>;
8
+ _t5: Array<FullOrPartial<T5, TPartial5>>;
9
+ _t6: Array<FullOrPartial<T6, TPartial6>>;
10
+ constructor(t1: Array<FullOrPartial<T1, TPartial1>>, t2: Array<FullOrPartial<T2, TPartial2>>, t3: Array<FullOrPartial<T3, TPartial3>>, t4: Array<FullOrPartial<T4, TPartial4>>, t5: Array<FullOrPartial<T5, TPartial5>>, t6: Array<FullOrPartial<T6, TPartial6>>);
11
+ map: <M>(imac: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>, t4: FullOrPartial<T4, TPartial4>, t5: FullOrPartial<T5, TPartial5>, t6: FullOrPartial<T6, TPartial6>) => M) => M[];
12
+ foreach: (imac: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>, t4: FullOrPartial<T4, TPartial4>, t5: FullOrPartial<T5, TPartial5>, t6: FullOrPartial<T6, TPartial6>) => void) => void;
12
13
  group: <TOne, TMany>({ one, many, }: {
13
- one: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined, t4: ExtractModel<T4> | undefined, t5: ExtractModel<T5> | undefined, t6: ExtractModel<T6> | undefined) => TOne;
14
- many: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined, t4: ExtractModel<T4> | undefined, t5: ExtractModel<T5> | undefined, t6: ExtractModel<T6> | undefined) => TMany;
14
+ one: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>, t4: FullOrPartial<T4, TPartial4>, t5: FullOrPartial<T5, TPartial5>, t6: FullOrPartial<T6, TPartial6>) => TOne;
15
+ many: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>, t4: FullOrPartial<T4, TPartial4>, t5: FullOrPartial<T5, TPartial5>, t6: FullOrPartial<T6, TPartial6>) => TMany;
15
16
  }) => {
16
17
  one: TOne;
17
18
  many: TMany[];
@@ -1,16 +1,17 @@
1
- import { ExtractModel } from '../../../tables/inferTypes';
2
- export default class SelectResponseFourJoins<T1, T2, T3, T4, T5> {
3
- _t1: Array<ExtractModel<T1> | undefined>;
4
- _t2: Array<ExtractModel<T2> | undefined>;
5
- _t3: Array<ExtractModel<T3> | undefined>;
6
- _t4: Array<ExtractModel<T4> | undefined>;
7
- _t5: Array<ExtractModel<T5> | undefined>;
8
- constructor(t1: Array<ExtractModel<T1> | undefined>, t2: Array<ExtractModel<T2> | undefined>, t3: Array<ExtractModel<T3> | undefined>, t4: Array<ExtractModel<T4> | undefined>, t5: Array<ExtractModel<T5> | undefined>);
9
- map: <M>(imac: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined, t4: ExtractModel<T4> | undefined, t5: ExtractModel<T5> | undefined) => M) => M[];
10
- foreach: (imac: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined, t4: ExtractModel<T4> | undefined, t5: ExtractModel<T5> | undefined) => void) => void;
1
+ import AbstractTable from '../../../tables/abstractTable';
2
+ import { FullOrPartial, PartialFor } from '../../../tables/inferTypes';
3
+ export default class SelectResponseFourJoins<T1 extends AbstractTable<T1>, T2 extends AbstractTable<T2>, T3 extends AbstractTable<T3>, T4 extends AbstractTable<T4>, T5 extends AbstractTable<T5>, TPartial1 extends PartialFor<T1>, TPartial2 extends PartialFor<T2>, TPartial3 extends PartialFor<T3>, TPartial4 extends PartialFor<T4>, TPartial5 extends PartialFor<T5>> {
4
+ _t1: Array<FullOrPartial<T1, TPartial1>>;
5
+ _t2: Array<FullOrPartial<T2, TPartial2>>;
6
+ _t3: Array<FullOrPartial<T3, TPartial3>>;
7
+ _t4: Array<FullOrPartial<T4, TPartial4>>;
8
+ _t5: Array<FullOrPartial<T5, TPartial5>>;
9
+ constructor(t1: Array<FullOrPartial<T1, TPartial1>>, t2: Array<FullOrPartial<T2, TPartial2>>, t3: Array<FullOrPartial<T3, TPartial3>>, t4: Array<FullOrPartial<T4, TPartial4>>, t5: Array<FullOrPartial<T5, TPartial5>>);
10
+ map: <M>(imac: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>, t4: FullOrPartial<T4, TPartial4>, t5: FullOrPartial<T5, TPartial5>) => M) => M[];
11
+ foreach: (imac: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>, t4: FullOrPartial<T4, TPartial4>, t5: FullOrPartial<T5, TPartial5>) => void) => void;
11
12
  group: <TOne, TMany>({ one, many, }: {
12
- one: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined, t4: ExtractModel<T4> | undefined, t5: ExtractModel<T5> | undefined) => TOne;
13
- many: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined, t4: ExtractModel<T4> | undefined, t5: ExtractModel<T5> | undefined) => TMany;
13
+ one: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>, t4: FullOrPartial<T4, TPartial4>, t5: FullOrPartial<T5, TPartial5>) => TOne;
14
+ many: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>, t4: FullOrPartial<T4, TPartial4>, t5: FullOrPartial<T5, TPartial5>) => TMany;
14
15
  }) => {
15
16
  one: TOne;
16
17
  many: TMany[];
@@ -1,15 +1,16 @@
1
- import { ExtractModel } from '../../../tables/inferTypes';
2
- export default class SelectResponseThreeJoins<T1, T2, T3, T4> {
1
+ import AbstractTable from '../../../tables/abstractTable';
2
+ import { FullOrPartial, PartialFor } from '../../../tables/inferTypes';
3
+ export default class SelectResponseThreeJoins<T1 extends AbstractTable<T1>, T2 extends AbstractTable<T2>, T3 extends AbstractTable<T3>, T4 extends AbstractTable<T4>, TPartial1 extends PartialFor<T1>, TPartial2 extends PartialFor<T2>, TPartial3 extends PartialFor<T3>, TPartial4 extends PartialFor<T4>> {
3
4
  private _t1;
4
5
  private _t2;
5
6
  private _t3;
6
7
  private _t4;
7
- constructor(t1: Array<ExtractModel<T1> | undefined>, t2: Array<ExtractModel<T2> | undefined>, t3: Array<ExtractModel<T3> | undefined>, t4: Array<ExtractModel<T4> | undefined>);
8
- map: <M>(imac: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined, t4: ExtractModel<T4> | undefined) => M) => M[];
9
- foreach: (imac: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined, t4: ExtractModel<T4> | undefined) => void) => void;
8
+ constructor(t1: Array<FullOrPartial<T1, TPartial1>>, t2: Array<FullOrPartial<T2, TPartial2>>, t3: Array<FullOrPartial<T3, TPartial3>>, t4: Array<FullOrPartial<T4, TPartial4>>);
9
+ map: <M>(imac: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>, t4: FullOrPartial<T4, TPartial4>) => M) => M[];
10
+ foreach: (imac: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>, t4: FullOrPartial<T4, TPartial4>) => void) => void;
10
11
  group: <TOne, TMany>({ one, many, }: {
11
- one: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined, t4: ExtractModel<T4> | undefined) => TOne;
12
- many: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined, t4: ExtractModel<T4> | undefined) => TMany;
12
+ one: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>, t4: FullOrPartial<T4, TPartial4>) => TOne;
13
+ many: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>, t4: FullOrPartial<T4, TPartial4>) => TMany;
13
14
  }) => {
14
15
  one: TOne;
15
16
  many: TMany[];
@@ -1,14 +1,15 @@
1
- import { ExtractModel } from '../../../tables/inferTypes';
2
- export default class SelectResponseTwoJoins<T1, T2, T3> {
1
+ import AbstractTable from '../../../tables/abstractTable';
2
+ import { FullOrPartial, PartialFor } from '../../../tables/inferTypes';
3
+ export default class SelectResponseTwoJoins<T1 extends AbstractTable<T1>, T2 extends AbstractTable<T2>, T3 extends AbstractTable<T3>, TPartial1 extends PartialFor<T1>, TPartial2 extends PartialFor<T2>, TPartial3 extends PartialFor<T3>> {
3
4
  private _t1;
4
5
  private _t2;
5
6
  private _t3;
6
- constructor(t1: Array<ExtractModel<T1> | undefined>, t2: Array<ExtractModel<T2> | undefined>, t3: Array<ExtractModel<T3> | undefined>);
7
- map: <M>(imac: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined) => M) => M[];
8
- foreach: (imac: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined) => void) => void;
7
+ constructor(t1: Array<FullOrPartial<T1, TPartial1>>, t2: Array<FullOrPartial<T2, TPartial2>>, t3: Array<FullOrPartial<T3, TPartial3>>);
8
+ map: <M>(imac: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>) => M) => M[];
9
+ foreach: (imac: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>) => void) => void;
9
10
  group: <TOne, TMany>({ one, many, }: {
10
- one: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined) => TOne;
11
- many: (t1: ExtractModel<T1> | undefined, t2: ExtractModel<T2> | undefined, t3: ExtractModel<T3> | undefined) => TMany;
11
+ one: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>) => TOne;
12
+ many: (t1: FullOrPartial<T1, TPartial1>, t2: FullOrPartial<T2, TPartial2>, t3: FullOrPartial<T3, TPartial3>) => TMany;
12
13
  }) => {
13
14
  one: TOne;
14
15
  many: TMany[];
@@ -1,13 +1,14 @@
1
- import { ExtractModel } from '../../../tables/inferTypes';
2
- export default class SelectResponseJoin<TTable1, TTable2> {
1
+ import AbstractTable from '../../../tables/abstractTable';
2
+ import { FullOrPartial, PartialFor } from '../../../tables/inferTypes';
3
+ export default class SelectResponseJoin<TTable1 extends AbstractTable<TTable1>, TTable2 extends AbstractTable<TTable2>, TPartial1 extends PartialFor<TTable1>, TPartial2 extends PartialFor<TTable2>> {
3
4
  private _t1;
4
5
  private _t2;
5
- constructor(t1: Array<ExtractModel<TTable1> | undefined>, t2: Array<ExtractModel<TTable2> | undefined>);
6
- map: <M>(imac: (t1: ExtractModel<TTable1> | undefined, t2: ExtractModel<TTable2> | undefined) => M) => M[];
7
- foreach: (imac: (t1: ExtractModel<TTable1> | undefined, t2: ExtractModel<TTable2> | undefined) => void) => void;
6
+ constructor(t1: Array<FullOrPartial<TTable1, TPartial1>>, t2: Array<FullOrPartial<TTable2, TPartial2>>);
7
+ map: <M>(imac: (t1: FullOrPartial<TTable1, TPartial1>, t2: FullOrPartial<TTable2, TPartial2>) => M) => M[];
8
+ foreach: (imac: (t1: FullOrPartial<TTable1, TPartial1>, t2: FullOrPartial<TTable2, TPartial2>) => void) => void;
8
9
  group: <TOne, TMany>({ one, many, }: {
9
- one: (t1: ExtractModel<TTable1> | undefined, t2: ExtractModel<TTable2> | undefined) => TOne;
10
- many: (t1: ExtractModel<TTable1> | undefined, t2: ExtractModel<TTable2> | undefined) => TMany;
10
+ one: (t1: FullOrPartial<TTable1, TPartial1>, t2: FullOrPartial<TTable2, TPartial2>) => TOne;
11
+ many: (t1: FullOrPartial<TTable1, TPartial1>, t2: FullOrPartial<TTable2, TPartial2>) => TMany;
11
12
  }) => {
12
13
  one: TOne;
13
14
  many: TMany[];
@@ -1,5 +1,9 @@
1
+ import { AbstractColumn } from '../../../columns/column';
2
+ import ColumnType from '../../../columns/types/columnType';
1
3
  import { AbstractTable } from '../../../tables';
2
4
  import SelectFrom from './selectFrom';
3
5
  export default class Select {
4
- static from: <TTable extends AbstractTable<TTable>>(table: AbstractTable<TTable>) => SelectFrom;
6
+ static from: <TTable extends AbstractTable<TTable>, TType extends ColumnType<any>, TColumn extends AbstractColumn<TType, boolean, boolean, TTable>, T extends {
7
+ [name: string]: TColumn;
8
+ } = {}>(table: AbstractTable<TTable>, partial?: T | undefined) => SelectFrom;
5
9
  }
@@ -5,8 +5,9 @@ const selectFrom_1 = require("./selectFrom");
5
5
  class Select {
6
6
  }
7
7
  exports.default = Select;
8
- Select.from = (table) => {
9
- const aggregator = new selectAggregator_1.default(table);
8
+ // eslint-disable-next-line max-len
9
+ Select.from = (table, partial) => {
10
+ const aggregator = new selectAggregator_1.default(table, partial);
10
11
  aggregator.appendFrom(table.tableName());
11
12
  return new selectFrom_1.default(aggregator);
12
13
  };
@@ -9,11 +9,17 @@ import WhereSelect from './whereSelect';
9
9
  export default class SelectFrom {
10
10
  private _aggregator;
11
11
  constructor(aggregator: SelectAggregator);
12
- joined: (joins: Array<Join<any> | undefined>) => SelectJoined;
12
+ joined: (joins: {
13
+ join: Join<any>;
14
+ partial?: {
15
+ [name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, any>;
16
+ } | undefined;
17
+ id?: number | undefined;
18
+ }[]) => SelectJoined;
13
19
  limit: (limit?: number | undefined) => SelectFrom;
14
20
  offset: (offset?: number | undefined) => SelectFrom;
15
- orderBy: (orderBy?: AbstractColumn<ColumnType<{}>, boolean, boolean> | undefined, order?: Order | undefined) => SelectFrom;
16
- distinct: (column?: AbstractColumn<ColumnType<{}>, boolean, boolean> | undefined) => SelectFrom;
21
+ orderBy: (orderBy?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined, order?: Order | undefined) => SelectFrom;
22
+ distinct: (column?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined) => SelectFrom;
17
23
  filteredBy: (filters: Expr) => WhereSelect;
18
24
  build: () => string;
19
25
  }
@@ -8,10 +8,16 @@ import WhereSelect from './whereSelect';
8
8
  export default class SelectJoined {
9
9
  private _aggregator;
10
10
  constructor(aggregator: SelectAggregator);
11
- apply: (joins: Array<Join<any> | undefined>) => SelectJoined;
11
+ apply: (joins: {
12
+ join: Join<any>;
13
+ partial?: {
14
+ [name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, any>;
15
+ } | undefined;
16
+ id?: number | undefined;
17
+ }[]) => SelectJoined;
12
18
  limit: (limit?: number | undefined) => SelectJoined;
13
19
  offset: (offset?: number | undefined) => SelectJoined;
14
- orderBy: (orderBy?: AbstractColumn<ColumnType<{}>, boolean, boolean> | undefined, order?: Order | undefined) => SelectJoined;
20
+ orderBy: (orderBy?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined, order?: Order | undefined) => SelectJoined;
15
21
  filteredBy: (filters: Expr) => WhereSelect;
16
22
  build: () => string;
17
23
  }
@@ -8,7 +8,7 @@ export default class WhereSelect {
8
8
  constructor(aggregator: SelectAggregator);
9
9
  limit: (limit?: number | undefined) => WhereSelect;
10
10
  offset: (offset?: number | undefined) => WhereSelect;
11
- orderBy: (orderBy?: AbstractColumn<ColumnType<{}>, boolean, boolean> | undefined, order?: Order | undefined) => WhereSelect;
11
+ orderBy: (orderBy?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined, order?: Order | undefined) => WhereSelect;
12
12
  apply: (filters: Expr) => WhereSelect;
13
13
  build: () => string;
14
14
  }
@@ -2,6 +2,6 @@ import { AbstractColumn } from '../../../columns/column';
2
2
  import ColumnType from '../../../columns/types/columnType';
3
3
  import { ExtractCodeType } from '../../../tables/inferTypes';
4
4
  import { UpdateCustomExpr, UpdateExpr } from './updates';
5
- export declare const set: <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(column: T, value: ExtractCodeType<T>) => UpdateExpr;
6
- export declare const incrementBy: <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(value: number) => UpdateCustomExpr<T>;
5
+ export declare const set: <T extends AbstractColumn<ColumnType<any>, boolean, boolean, any>>(column: T, value: ExtractCodeType<T>) => UpdateExpr;
6
+ export declare const incrementBy: <T extends AbstractColumn<ColumnType<any>, boolean, boolean, any>>(value: number) => UpdateCustomExpr<T>;
7
7
  export declare const combine: (updates: Array<UpdateExpr>) => UpdateExpr;
@@ -6,6 +6,9 @@ class Const extends where_1.default {
6
6
  constructor(value) {
7
7
  super();
8
8
  this.toQuery = () => {
9
+ if (this.value instanceof Date) {
10
+ return `'${this.value.toISOString()}'`;
11
+ }
9
12
  if (ecranate_1.shouldEcranate(this.value)) {
10
13
  return `'${this.value.toString()}'`;
11
14
  }
@@ -9,6 +9,9 @@ class ConstArray extends where_1.default {
9
9
  const finalArray = [];
10
10
  for (let i = 0; i < this.values.length; i += 1) {
11
11
  const value = this.values[i];
12
+ if (value instanceof Date) {
13
+ return `'${value.toISOString()}'`;
14
+ }
12
15
  if (ecranate_1.shouldEcranate(value)) {
13
16
  finalArray.push(`'${value.toString()}'`);
14
17
  }
@@ -2,15 +2,15 @@ import { AbstractColumn } from '../../../columns/column';
2
2
  import ColumnType from '../../../columns/types/columnType';
3
3
  import { ExtractCodeType } from '../../../tables/inferTypes';
4
4
  import Expr from './where';
5
- export declare const eq: <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T, value: ExtractCodeType<T>) => Expr;
5
+ export declare const eq: <T extends AbstractColumn<ColumnType<any>, boolean, boolean, any>>(left: T, value: ExtractCodeType<T>) => Expr;
6
6
  export declare const raw: (customQuery: string) => Expr;
7
7
  export declare const and: (expressions: Expr[]) => Expr;
8
8
  export declare const or: (expressions: Expr[]) => Expr;
9
- export declare const like: <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T, value: ExtractCodeType<T>) => Expr;
10
- export declare const inArray: <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T, value: ExtractCodeType<T>[]) => Expr;
11
- export declare const greater: <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T, value: ExtractCodeType<T>) => Expr;
12
- export declare const less: <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T, value: ExtractCodeType<T>) => Expr;
13
- export declare const greaterEq: <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T, value: ExtractCodeType<T>) => Expr;
14
- export declare const lessEq: <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T, value: ExtractCodeType<T>) => Expr;
15
- export declare const isNull: <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T) => Expr;
16
- export declare const notEq: <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T, value: ExtractCodeType<T>) => Expr;
9
+ export declare const like: <T extends AbstractColumn<ColumnType<any>, boolean, boolean, any>>(left: T, value: ExtractCodeType<T>) => Expr;
10
+ export declare const inArray: <T extends AbstractColumn<ColumnType<any>, boolean, boolean, any>>(left: T, value: ExtractCodeType<T>[]) => Expr;
11
+ export declare const greater: <T extends AbstractColumn<ColumnType<any>, boolean, boolean, any>>(left: T, value: ExtractCodeType<T>) => Expr;
12
+ export declare const less: <T extends AbstractColumn<ColumnType<any>, boolean, boolean, any>>(left: T, value: ExtractCodeType<T>) => Expr;
13
+ export declare const greaterEq: <T extends AbstractColumn<ColumnType<any>, boolean, boolean, any>>(left: T, value: ExtractCodeType<T>) => Expr;
14
+ export declare const lessEq: <T extends AbstractColumn<ColumnType<any>, boolean, boolean, any>>(left: T, value: ExtractCodeType<T>) => Expr;
15
+ export declare const isNull: <T extends AbstractColumn<ColumnType<any>, boolean, boolean, any>>(left: T) => Expr;
16
+ export declare const notEq: <T extends AbstractColumn<ColumnType<any>, boolean, boolean, any>>(left: T, value: ExtractCodeType<T>) => Expr;
@@ -8,19 +8,19 @@ export declare enum Defaults {
8
8
  }
9
9
  declare type PgTimes = PgTimestamptz | PgTime | PgTimestamp;
10
10
  export declare type ExtractColumnType<T extends ColumnType> = T extends ColumnType<infer TCodeType> ? T extends PgTimes ? TCodeType | Defaults : TCodeType : never;
11
- export declare abstract class AbstractColumn<T extends ColumnType, TNullable extends boolean = true, TAutoIncrement extends boolean = false> {
11
+ export declare abstract class AbstractColumn<T extends ColumnType, TNullable extends boolean = true, TAutoIncrement extends boolean = false, TParent extends AbstractTable<any> = any> {
12
12
  isNullableFlag: boolean;
13
13
  primaryKeyName?: string;
14
14
  uniqueKeyName?: string;
15
15
  protected onDelete?: string;
16
16
  protected onUpdate?: string;
17
- protected parent: AbstractTable<any>;
17
+ protected parent: TParent;
18
18
  protected parentTableName: string;
19
19
  protected columnType: T;
20
20
  protected columnName: string;
21
21
  protected defaultParam: any;
22
- protected referenced: AbstractColumn<T, boolean, boolean>;
23
- constructor(parent: AbstractTable<any>, columnName: string, columnType: T);
22
+ protected referenced: AbstractColumn<T, boolean, boolean, TParent>;
23
+ constructor(parent: TParent, columnName: string, columnType: T);
24
24
  getOnDelete: () => string | undefined;
25
25
  getOnUpdate: () => string | undefined;
26
26
  getAlias: () => string;
@@ -28,35 +28,39 @@ export declare abstract class AbstractColumn<T extends ColumnType, TNullable ext
28
28
  getParentName: () => string;
29
29
  abstract foreignKey<ITable extends AbstractTable<ITable>>(table: {
30
30
  new (db: DB): ITable;
31
- }, callback: (table: ITable) => AbstractColumn<T, boolean, boolean>, onConstraint: {
31
+ }, callback: (table: ITable) => AbstractColumn<T, boolean, boolean, TParent>, onConstraint: {
32
32
  onDelete?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT';
33
33
  onUpdate?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT';
34
34
  }): AbstractColumn<T, TNullable, TAutoIncrement>;
35
35
  defaultValue: (value: ExtractColumnType<T>) => this;
36
- abstract primaryKey(): AbstractColumn<T, boolean, boolean>;
36
+ abstract primaryKey(): AbstractColumn<T, boolean, boolean, TParent>;
37
37
  unique: () => this;
38
- abstract notNull(): AbstractColumn<T, boolean, boolean>;
38
+ abstract notNull(): AbstractColumn<T, boolean, boolean, TParent>;
39
39
  getColumnName: () => string;
40
- getReferenced: () => AbstractColumn<T, boolean, boolean>;
40
+ getReferenced: () => AbstractColumn<T, boolean, boolean, TParent>;
41
41
  getColumnType: () => T;
42
42
  getDefaultValue: () => any;
43
43
  }
44
- export declare class Column<T extends ColumnType, TNullable extends boolean = true, TAutoIncrement extends boolean = false> extends AbstractColumn<T, TNullable, TAutoIncrement> {
45
- constructor(parent: AbstractTable<any>, columnName: string, columnType: T);
46
- notNull(): Column<T, TAutoIncrement extends true ? true : TNullable extends true ? false : true, TAutoIncrement>;
47
- primaryKey(): Column<T, TAutoIncrement extends true ? true : false, TAutoIncrement>;
48
- foreignKey<ITable extends AbstractTable<ITable>>(table: new (db: DB) => ITable, callback: (table: ITable) => Column<T, boolean, boolean>, onConstraint?: {
44
+ export declare class Column<T extends ColumnType, TNullable extends boolean = true, TAutoIncrement extends boolean = false, TParent extends AbstractTable<any> = any> extends AbstractColumn<T, TNullable, TAutoIncrement, TParent> {
45
+ constructor(parent: TParent, columnName: string, columnType: T);
46
+ notNull(): Column<T, TAutoIncrement extends true ? true : TNullable extends true ? false : true, TAutoIncrement, TParent>;
47
+ primaryKey(): Column<T, TAutoIncrement extends true ? true : false, TAutoIncrement, TParent>;
48
+ foreignKey(table: new (db: DB) => TParent, callback: (table: this) => Column<T, boolean, boolean, TParent>, onConstraint?: {
49
49
  onDelete?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT';
50
50
  onUpdate?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT';
51
- }): Column<T, TNullable, TAutoIncrement>;
51
+ }): Column<T, TNullable, TAutoIncrement, TParent>;
52
+ foreignKey<ITable extends AbstractTable<ITable>>(table: new (db: DB) => ITable, callback: (table: ITable) => Column<T, boolean, boolean, ITable>, onConstraint?: {
53
+ onDelete?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT';
54
+ onUpdate?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT';
55
+ }): Column<T, TNullable, TAutoIncrement, TParent>;
52
56
  }
53
- export declare class IndexedColumn<T extends ColumnType, TNullable extends boolean = true, TAutoIncrement extends boolean = false> extends AbstractColumn<T, TNullable, TAutoIncrement> {
54
- constructor(parent: AbstractTable<any>, columnName: string, columnType: T, nullable: TNullable);
55
- notNull(): IndexedColumn<T, TAutoIncrement extends true ? true : TNullable extends true ? false : true, TAutoIncrement>;
56
- primaryKey(): IndexedColumn<T, TAutoIncrement extends true ? true : false, TAutoIncrement>;
57
- foreignKey<ITable extends AbstractTable<ITable>>(table: new (db: DB) => ITable, callback: (table: ITable) => IndexedColumn<T, boolean, boolean>, onConstraint?: {
57
+ export declare class IndexedColumn<T extends ColumnType, TNullable extends boolean = true, TAutoIncrement extends boolean = false, TParent extends AbstractTable<any> = any> extends AbstractColumn<T, TNullable, TAutoIncrement, TParent> {
58
+ constructor(parent: TParent, columnName: string, columnType: T, nullable: TNullable);
59
+ notNull(): IndexedColumn<T, TAutoIncrement extends true ? true : TNullable extends true ? false : true, TAutoIncrement, TParent>;
60
+ primaryKey(): IndexedColumn<T, TAutoIncrement extends true ? true : false, TAutoIncrement, TParent>;
61
+ foreignKey<ITable extends AbstractTable<ITable>>(table: new (db: DB) => ITable, callback: (table: ITable) => IndexedColumn<T, boolean, boolean, TParent>, onConstraint?: {
58
62
  onDelete?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT';
59
63
  onUpdate?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT';
60
- }): IndexedColumn<T, TNullable, TAutoIncrement>;
64
+ }): IndexedColumn<T, TNullable, TAutoIncrement, TParent>;
61
65
  }
62
66
  export {};
package/columns/column.js CHANGED
@@ -48,7 +48,14 @@ class Column extends AbstractColumn {
48
48
  return this;
49
49
  }
50
50
  foreignKey(table, callback, onConstraint) {
51
- const tableInstance = this.getParent().db.create(table);
51
+ let tableInstance;
52
+ // eslint-disable-next-line new-cap
53
+ if (typeof this !== typeof this.getParent()) {
54
+ tableInstance = this.getParent().db.create(table);
55
+ }
56
+ else {
57
+ tableInstance = this;
58
+ }
52
59
  this.referenced = callback(tableInstance);
53
60
  this.onDelete = (onConstraint === null || onConstraint === void 0 ? void 0 : onConstraint.onDelete) ? `ON DELETE ${onConstraint.onDelete}` : undefined;
54
61
  this.onUpdate = (onConstraint === null || onConstraint === void 0 ? void 0 : onConstraint.onUpdate) ? `ON UPDATE ${onConstraint.onUpdate}` : undefined;
@@ -22,7 +22,7 @@ const usersTable_1 = require("../tables/usersTable");
22
22
  .all();
23
23
  const deletedUserGroup = await userGroupsTable.delete()
24
24
  .where(builders_1.eq(userGroupsTable.id, 3))
25
- .first();
25
+ .findOne();
26
26
  }
27
27
  catch (e) {
28
28
  console.log(e);
@@ -1,19 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  /* eslint-disable @typescript-eslint/no-unused-vars */
4
- const __1 = require("../..");
4
+ const create_1 = require("../../builders/lowLvlBuilders/create");
5
+ const dbConnector_1 = require("../../db/dbConnector");
6
+ const consoleLogger_1 = require("../../logger/consoleLogger");
5
7
  const citiesTable_1 = require("../tables/citiesTable");
6
8
  const userGroupsTable_1 = require("../tables/userGroupsTable");
7
9
  const usersTable_1 = require("../tables/usersTable");
8
10
  (async () => {
9
11
  try {
10
- const db = await new __1.DbConnector()
12
+ const db = await new dbConnector_1.default()
11
13
  .connectionString('postgresql://postgres@127.0.0.1/drizzle-docs')
12
14
  .connect();
13
15
  const usersTable = new usersTable_1.default(db);
14
16
  const citiesTable = new citiesTable_1.default(db);
15
17
  const userGroupsTable = new userGroupsTable_1.default(db);
16
- await db.session().execute(__1.Create.table(usersTable).build());
18
+ await db.session().execute(create_1.default.table(usersTable).build());
19
+ await db.session().execute(create_1.default.table(citiesTable).build());
20
+ await db.session().execute(create_1.default.table(userGroupsTable).build());
21
+ db.useLogger(new consoleLogger_1.default());
17
22
  await usersTable.insert({
18
23
  decimalField: 12.4,
19
24
  createdAt: new Date(),
@@ -24,7 +29,7 @@ const usersTable_1 = require("../tables/usersTable");
24
29
  }).all();
25
30
  const insertedUserGroup = await userGroupsTable.insert({
26
31
  name: 'firstGroup',
27
- }).first();
32
+ }).findOne();
28
33
  const manyInsertedCities = await citiesTable.insertMany([{
29
34
  foundationDate: new Date(),
30
35
  location: 'USA',