drizzle-orm 0.9.1 → 0.9.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 (133) hide show
  1. package/builders/aggregators/abstractAggregator.d.ts +3 -4
  2. package/builders/aggregators/abstractAggregator.js +5 -8
  3. package/builders/aggregators/deleteAggregator.d.ts +2 -1
  4. package/builders/aggregators/deleteAggregator.js +10 -4
  5. package/builders/aggregators/insertAggregator.d.ts +4 -6
  6. package/builders/aggregators/insertAggregator.js +37 -44
  7. package/builders/aggregators/selectAggregator.d.ts +8 -5
  8. package/builders/aggregators/selectAggregator.js +50 -31
  9. package/builders/aggregators/updateAggregator.d.ts +2 -1
  10. package/builders/aggregators/updateAggregator.js +6 -4
  11. package/builders/highLvlBuilders/abstractRequestBuilder.d.ts +4 -3
  12. package/builders/highLvlBuilders/abstractRequestBuilder.js +2 -2
  13. package/builders/highLvlBuilders/deleteRequestBuilder.d.ts +5 -4
  14. package/builders/highLvlBuilders/deleteRequestBuilder.js +8 -9
  15. package/builders/highLvlBuilders/insertRequestBuilder.d.ts +2 -4
  16. package/builders/highLvlBuilders/insertRequestBuilder.js +17 -24
  17. package/builders/highLvlBuilders/selectRequestBuilder.d.ts +5 -4
  18. package/builders/highLvlBuilders/selectRequestBuilder.js +29 -32
  19. package/builders/highLvlBuilders/updateRequestBuilder.d.ts +5 -4
  20. package/builders/highLvlBuilders/updateRequestBuilder.js +9 -9
  21. package/builders/index.d.ts +1 -1
  22. package/builders/index.js +2 -1
  23. package/builders/joinBuilders/builders/abstractJoinBuilder.d.ts +18 -9
  24. package/builders/joinBuilders/builders/abstractJoinBuilder.js +34 -4
  25. package/builders/joinBuilders/builders/selectWithFiveJoins.d.ts +23 -0
  26. package/builders/joinBuilders/builders/selectWithFiveJoins.js +33 -0
  27. package/builders/joinBuilders/builders/selectWithFourJoins.d.ts +23 -6
  28. package/builders/joinBuilders/builders/selectWithFourJoins.js +52 -36
  29. package/builders/joinBuilders/builders/selectWithJoin.d.ts +9 -6
  30. package/builders/joinBuilders/builders/selectWithJoin.js +15 -35
  31. package/builders/joinBuilders/builders/selectWithThreeJoins.d.ts +9 -6
  32. package/builders/joinBuilders/builders/selectWithThreeJoins.js +19 -39
  33. package/builders/joinBuilders/builders/selectWithTwoJoins.d.ts +9 -6
  34. package/builders/joinBuilders/builders/selectWithTwoJoins.js +17 -38
  35. package/builders/joinBuilders/responses/selectResponseFiveJoins.d.ts +19 -0
  36. package/builders/joinBuilders/responses/selectResponseFiveJoins.js +35 -0
  37. package/builders/joinBuilders/responses/selectResponseFourJoins.d.ts +8 -0
  38. package/builders/joinBuilders/responses/selectResponseFourJoins.js +15 -4
  39. package/builders/joinBuilders/responses/selectResponseThreeJoins.d.ts +8 -0
  40. package/builders/joinBuilders/responses/selectResponseThreeJoins.js +15 -0
  41. package/builders/joinBuilders/responses/selectResponseTwoJoins.d.ts +8 -0
  42. package/builders/joinBuilders/responses/selectResponseTwoJoins.js +15 -0
  43. package/builders/joinBuilders/responses/selectResponseWithJoin.d.ts +8 -0
  44. package/builders/joinBuilders/responses/selectResponseWithJoin.js +15 -0
  45. package/builders/lowLvlBuilders/create.js +1 -1
  46. package/builders/lowLvlBuilders/delets/delete.d.ts +2 -1
  47. package/builders/lowLvlBuilders/delets/delete.js +3 -3
  48. package/builders/lowLvlBuilders/inserts/insert.d.ts +2 -3
  49. package/builders/lowLvlBuilders/inserts/insert.js +3 -3
  50. package/builders/lowLvlBuilders/inserts/insertInto.d.ts +2 -4
  51. package/builders/lowLvlBuilders/inserts/insertInto.js +2 -1
  52. package/builders/lowLvlBuilders/inserts/valuesInsert.d.ts +3 -5
  53. package/builders/lowLvlBuilders/inserts/valuesInsert.js +3 -3
  54. package/builders/lowLvlBuilders/selects/select.d.ts +2 -3
  55. package/builders/lowLvlBuilders/selects/select.js +3 -3
  56. package/builders/lowLvlBuilders/selects/selectFrom.d.ts +5 -4
  57. package/builders/lowLvlBuilders/selects/selectFrom.js +6 -0
  58. package/builders/lowLvlBuilders/selects/selectJoined.d.ts +5 -5
  59. package/builders/lowLvlBuilders/selects/whereSelect.d.ts +4 -4
  60. package/builders/lowLvlBuilders/updates/update.d.ts +2 -1
  61. package/builders/lowLvlBuilders/updates/update.js +3 -3
  62. package/builders/lowLvlBuilders/updates/updateIn.d.ts +1 -3
  63. package/builders/lowLvlBuilders/updates/updateIn.js +1 -4
  64. package/builders/requestBuilders/where/const.js +1 -1
  65. package/builders/requestBuilders/where/constArray.js +1 -1
  66. package/builders/requestBuilders/where/isNull.d.ts +6 -0
  67. package/builders/requestBuilders/where/isNull.js +11 -0
  68. package/builders/requestBuilders/where/notEqWhere.d.ts +7 -0
  69. package/builders/requestBuilders/where/notEqWhere.js +12 -0
  70. package/builders/requestBuilders/where/rawWhere.d.ts +6 -0
  71. package/builders/requestBuilders/where/rawWhere.js +11 -0
  72. package/builders/requestBuilders/where/static.d.ts +3 -0
  73. package/builders/requestBuilders/where/static.js +10 -1
  74. package/builders/requestBuilders/where/var.js +1 -1
  75. package/db/session.js +2 -2
  76. package/{manual.d.ts → docs/cases/simple_delete.d.ts} +0 -0
  77. package/docs/cases/simple_delete.js +30 -0
  78. package/{tests/cases/commentsTable.test.d.ts → docs/cases/simple_insert.d.ts} +0 -0
  79. package/docs/cases/simple_insert.js +51 -0
  80. package/docs/cases/simple_join.d.ts +1 -0
  81. package/docs/cases/simple_join.js +95 -0
  82. package/docs/cases/simple_select.d.ts +1 -0
  83. package/docs/cases/simple_select.js +39 -0
  84. package/docs/cases/simple_update.d.ts +1 -0
  85. package/docs/cases/simple_update.js +33 -0
  86. package/docs/tables/citiesTable.d.ts +14 -0
  87. package/{examples/tables/authOtpTable.js → docs/tables/citiesTable.js} +6 -9
  88. package/docs/tables/citiesToUsers.d.ts +7 -0
  89. package/docs/tables/citiesToUsers.js +18 -0
  90. package/docs/tables/userGroupsTable.d.ts +7 -0
  91. package/docs/tables/userGroupsTable.js +15 -0
  92. package/{examples → docs}/tables/usersTable.d.ts +7 -4
  93. package/{examples → docs}/tables/usersTable.js +11 -6
  94. package/docs/tables/usersToUserGroups.d.ts +7 -0
  95. package/docs/tables/usersToUserGroups.js +18 -0
  96. package/{examples → docs}/types/rolesType.d.ts +0 -0
  97. package/{examples → docs}/types/rolesType.js +1 -1
  98. package/indexes/tableIndex.d.ts +3 -1
  99. package/indexes/tableIndex.js +3 -1
  100. package/package.json +1 -1
  101. package/serializer/serializer.d.ts +39 -0
  102. package/serializer/serializer.js +73 -0
  103. package/tables/abstractTable.d.ts +4 -2
  104. package/tables/abstractTable.js +10 -10
  105. package/test.d.ts +1 -0
  106. package/test.js +38 -25
  107. package/examples/tables/authOtpTable.d.ts +0 -12
  108. package/examples/tables/cityTable.d.ts +0 -8
  109. package/examples/tables/cityTable.js +0 -17
  110. package/examples/testEnum.d.ts +0 -6
  111. package/examples/testEnum.js +0 -10
  112. package/manual.js +0 -27
  113. package/tests/cases/commentsTable.test.js +0 -66
  114. package/tests/cases/messagesTable.test1.d.ts +0 -0
  115. package/tests/cases/messagesTable.test1.js +0 -1
  116. package/tests/cases/postsTable.test1.d.ts +0 -0
  117. package/tests/cases/postsTable.test1.js +0 -1
  118. package/tests/cases/usersTable.test1.d.ts +0 -0
  119. package/tests/cases/usersTable.test1.js +0 -1
  120. package/tests/tables/citiesTable.d.ts +0 -6
  121. package/tests/tables/citiesTable.js +0 -14
  122. package/tests/tables/commentsTable.d.ts +0 -0
  123. package/tests/tables/commentsTable.js +0 -1
  124. package/tests/tables/likesTable.d.ts +0 -0
  125. package/tests/tables/likesTable.js +0 -1
  126. package/tests/tables/messagesTable.d.ts +0 -0
  127. package/tests/tables/messagesTable.js +0 -1
  128. package/tests/tables/postsTable.d.ts +0 -0
  129. package/tests/tables/postsTable.js +0 -1
  130. package/tests/tables/userFollowers.d.ts +0 -0
  131. package/tests/tables/userFollowers.js +0 -1
  132. package/tests/tables/usersTable.d.ts +0 -8
  133. package/tests/tables/usersTable.js +0 -20
@@ -1,4 +1,4 @@
1
- import { AbstractColumn, Column } from '../../columns/column';
1
+ import { AbstractColumn } from '../../columns/column';
2
2
  import ColumnType from '../../columns/types/columnType';
3
3
  import DB from '../../db/db';
4
4
  import Session from '../../db/session';
@@ -15,15 +15,16 @@ export default class SelectTRB<TTable extends AbstractTable<TTable>> extends Tab
15
15
  private __orderBy?;
16
16
  private __groupBy?;
17
17
  private __order?;
18
- private __table;
19
- constructor(tableName: string, session: Session, mappedServiceToDb: {
20
- [name in keyof ExtractModel<TTable>]: Column<ColumnType>;
18
+ private __distinct;
19
+ constructor(session: Session, mappedServiceToDb: {
20
+ [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
21
21
  }, props: {
22
22
  limit?: number;
23
23
  offset?: number;
24
24
  }, table: AbstractTable<TTable>, logger?: BaseLogger);
25
25
  where: (expr: Expr) => SelectTRB<TTable>;
26
26
  orderBy<TColumnType extends ColumnType>(callback: (table: TTable) => AbstractColumn<TColumnType, boolean, boolean>, order: Order): SelectTRB<TTable>;
27
+ distinct: (column: AbstractColumn<ColumnType<any>, boolean, boolean>) => SelectTRB<TTable>;
27
28
  innerJoin<TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>>(table: {
28
29
  new (db: DB): IToTable;
29
30
  }, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean>, to: (table: IToTable) => AbstractColumn<TColumn, boolean, boolean>): SelectTRBWithJoin<TTable, IToTable>;
@@ -9,55 +9,52 @@ const selectWithJoin_1 = require("../joinBuilders/builders/selectWithJoin");
9
9
  const join_1 = require("../joinBuilders/join");
10
10
  const abstractRequestBuilder_1 = require("./abstractRequestBuilder");
11
11
  class SelectTRB extends abstractRequestBuilder_1.default {
12
- constructor(tableName, session, mappedServiceToDb, props, table, logger) {
13
- super(tableName, session, mappedServiceToDb, logger);
12
+ constructor(session, mappedServiceToDb, props, table, logger) {
13
+ super(table, session, mappedServiceToDb, logger);
14
14
  this.where = (expr) => {
15
15
  this._filter = expr;
16
16
  return this;
17
17
  };
18
+ this.distinct = (column) => {
19
+ this.__distinct = column;
20
+ return this;
21
+ };
18
22
  this.execute = async () => {
19
23
  const res = await this._execute();
20
24
  return res;
21
25
  };
22
26
  this._execute = async () => {
23
27
  // Select.from().filteredBy().limit().offset().orderBy().groupBy().build()
24
- const queryBuilder = __1.Select.from(this._tableName, this._columns);
25
- if (this._filter) {
26
- queryBuilder.filteredBy(this._filter);
27
- }
28
- if (this.props.limit) {
29
- queryBuilder.limit(this.props.limit);
30
- }
31
- if (this.props.offset) {
32
- queryBuilder.offset(this.props.offset);
33
- }
34
- if (this.__orderBy) {
35
- queryBuilder.orderBy(this.__orderBy, this.__order);
36
- }
28
+ const queryBuilder = __1.Select
29
+ .from(this._table)
30
+ .distinct(this.__distinct)
31
+ .filteredBy(this._filter)
32
+ .limit(this.props.limit)
33
+ .offset(this.props.offset)
34
+ .orderBy(this.__orderBy, this.__order);
37
35
  let query = '';
38
36
  try {
39
37
  query = queryBuilder.build();
40
38
  }
41
39
  catch (e) {
42
- throw new builderError_1.default(builderError_1.BuilderType.SELECT, this._tableName, this._columns, e, this._filter);
40
+ throw new builderError_1.default(builderError_1.BuilderType.SELECT, this._table.tableName(), this._columns, e, this._filter);
43
41
  }
44
42
  if (this._logger) {
45
- this._logger.info(`Selecting from ${this._tableName} using query:\n ${query}`);
43
+ this._logger.info(`Selecting from ${this._table.tableName()} using query:\n ${query}`);
46
44
  }
47
45
  const result = await this._session.execute(query);
48
46
  if (result.isLeft()) {
49
47
  const { reason } = result.value;
50
- throw new dbErrors_1.DatabaseSelectError(this._tableName, reason, query);
48
+ throw new dbErrors_1.DatabaseSelectError(this._table.tableName(), reason, query);
51
49
  }
52
50
  else {
53
51
  return responseMapper_1.default.map(this._mappedServiceToDb, result.value);
54
52
  }
55
53
  };
56
54
  this.props = props;
57
- this.__table = table;
58
55
  }
59
56
  orderBy(callback, order) {
60
- this.__orderBy = callback(this.__table);
57
+ this.__orderBy = callback(this._table);
61
58
  this.__order = order;
62
59
  return this;
63
60
  }
@@ -67,36 +64,36 @@ class SelectTRB extends abstractRequestBuilder_1.default {
67
64
  // return this;
68
65
  // }
69
66
  innerJoin(table, from, to) {
70
- const toTable = this.__table.db.create(table);
71
- const fromColumn = from(this.__table);
67
+ const toTable = this._table.db.create(table);
68
+ const fromColumn = from(this._table);
72
69
  const toColumn = to(toTable);
73
70
  const join = new __1.JoinWith(toTable.tableName(), toTable.mapServiceToDb())
74
71
  .columns(fromColumn, toColumn).joinStrategy(join_1.JoinStrategy.INNER_JOIN);
75
- return new selectWithJoin_1.default(this._tableName, this._session, this._filter, join, this._mappedServiceToDb, this.__table);
72
+ return new selectWithJoin_1.default(this._table, this._session, this._filter, join, this.props, this.__orderBy, this.__order, this.__distinct);
76
73
  }
77
74
  leftJoin(table, from, to) {
78
- const toTable = this.__table.db.create(table);
79
- const fromColumn = from(this.__table);
75
+ const toTable = this._table.db.create(table);
76
+ const fromColumn = from(this._table);
80
77
  const toColumn = to(toTable);
81
78
  const join = new __1.JoinWith(toTable.tableName(), toTable.mapServiceToDb())
82
79
  .columns(fromColumn, toColumn).joinStrategy(join_1.JoinStrategy.LEFT_JOIN);
83
- return new selectWithJoin_1.default(this._tableName, this._session, this._filter, join, this._mappedServiceToDb, this.__table);
80
+ return new selectWithJoin_1.default(this._table, this._session, this._filter, join, this.props, this.__orderBy, this.__order, this.__distinct);
84
81
  }
85
82
  rightJoin(table, from, to) {
86
- const toTable = this.__table.db.create(table);
87
- const fromColumn = from(this.__table);
83
+ const toTable = this._table.db.create(table);
84
+ const fromColumn = from(this._table);
88
85
  const toColumn = to(toTable);
89
86
  const join = new __1.JoinWith(toTable.tableName(), toTable.mapServiceToDb())
90
87
  .columns(fromColumn, toColumn).joinStrategy(join_1.JoinStrategy.RIGHT_JOIN);
91
- return new selectWithJoin_1.default(this._tableName, this._session, this._filter, join, this._mappedServiceToDb, this.__table);
88
+ return new selectWithJoin_1.default(this._table, this._session, this._filter, join, this.props, this.__orderBy, this.__order, this.__distinct);
92
89
  }
93
90
  fullJoin(table, from, to) {
94
- const toTable = this.__table.db.create(table);
95
- const fromColumn = from(this.__table);
91
+ const toTable = this._table.db.create(table);
92
+ const fromColumn = from(this._table);
96
93
  const toColumn = to(toTable);
97
94
  const join = new __1.JoinWith(toTable.tableName(), toTable.mapServiceToDb())
98
95
  .columns(fromColumn, toColumn).joinStrategy(join_1.JoinStrategy.FULL_JOIN);
99
- return new selectWithJoin_1.default(this._tableName, this._session, this._filter, join, this._mappedServiceToDb, this.__table);
96
+ return new selectWithJoin_1.default(this._table, this._session, this._filter, join, this.props, this.__orderBy, this.__order, this.__distinct);
100
97
  }
101
98
  }
102
99
  exports.default = SelectTRB;
@@ -1,16 +1,17 @@
1
- import { Column } from '../../columns/column';
1
+ import { AbstractColumn } from '../../columns/column';
2
2
  import ColumnType from '../../columns/types/columnType';
3
3
  import Session from '../../db/session';
4
4
  import BaseLogger from '../../logger/abstractLogger';
5
+ import { AbstractTable } from '../../tables';
5
6
  import { ExtractModel } from '../../tables/inferTypes';
6
7
  import Expr from '../requestBuilders/where/where';
7
8
  import TableRequestBuilder from './abstractRequestBuilder';
8
- export default class UpdateTRB<TTable> extends TableRequestBuilder<TTable> {
9
+ export default class UpdateTRB<TTable extends AbstractTable<TTable>> extends TableRequestBuilder<TTable> {
9
10
  private _filter;
10
11
  private _update;
11
12
  private _objToUpdate;
12
- constructor(tableName: string, session: Session, mappedServiceToDb: {
13
- [name in keyof ExtractModel<TTable>]: Column<ColumnType>;
13
+ constructor(table: AbstractTable<TTable>, session: Session, mappedServiceToDb: {
14
+ [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
14
15
  }, logger?: BaseLogger);
15
16
  where: (expr: Expr) => UpdateTRB<TTable>;
16
17
  set: (expr: Partial<ExtractModel<TTable>>) => UpdateTRB<TTable>;
@@ -7,8 +7,8 @@ const update_1 = require("../lowLvlBuilders/updates/update");
7
7
  const static_1 = require("../requestBuilders/updates/static");
8
8
  const abstractRequestBuilder_1 = require("./abstractRequestBuilder");
9
9
  class UpdateTRB extends abstractRequestBuilder_1.default {
10
- constructor(tableName, session, mappedServiceToDb, logger) {
11
- super(tableName, session, mappedServiceToDb, logger);
10
+ constructor(table, session, mappedServiceToDb, logger) {
11
+ super(table, session, mappedServiceToDb, logger);
12
12
  this.where = (expr) => {
13
13
  this._filter = expr;
14
14
  return this;
@@ -17,9 +17,9 @@ class UpdateTRB extends abstractRequestBuilder_1.default {
17
17
  const updates = [];
18
18
  Object.entries(expr).forEach(([key, value]) => {
19
19
  const column = this._mappedServiceToDb[key];
20
- updates.push((0, static_1.set)(column, value));
20
+ updates.push(static_1.set(column, value));
21
21
  });
22
- this._update = (0, static_1.combine)(updates);
22
+ this._update = static_1.combine(updates);
23
23
  return this;
24
24
  };
25
25
  this.execute = async () => {
@@ -28,22 +28,22 @@ class UpdateTRB extends abstractRequestBuilder_1.default {
28
28
  this._execute = async () => {
29
29
  let query = '';
30
30
  try {
31
- query = update_1.default.in(this._tableName)
32
- .columns(this._columns)
31
+ query = update_1.default.in(this._table)
32
+ .columns()
33
33
  .set(this._update)
34
34
  .filteredBy(this._filter)
35
35
  .build();
36
36
  }
37
37
  catch (e) {
38
- throw new builderError_1.default(builderError_1.BuilderType.UPDATE, this._tableName, this._columns, e, this._filter);
38
+ throw new builderError_1.default(builderError_1.BuilderType.UPDATE, this._table.tableName(), this._columns, e, this._filter);
39
39
  }
40
40
  if (this._logger) {
41
- this._logger.info(`Updating ${this._tableName} using query:\n ${query}`);
41
+ this._logger.info(`Updating ${this._table.tableName()} using query:\n ${query}`);
42
42
  }
43
43
  const result = await this._session.execute(query);
44
44
  if (result.isLeft()) {
45
45
  const { reason } = result.value;
46
- throw new dbErrors_1.DatabaseUpdateError(this._tableName, reason, query);
46
+ throw new dbErrors_1.DatabaseUpdateError(this._table.tableName(), reason, query);
47
47
  }
48
48
  else {
49
49
  return responseMapper_1.default.map(this._mappedServiceToDb, result.value);
@@ -15,4 +15,4 @@ export { default as Insert } from './lowLvlBuilders/inserts/insert';
15
15
  export { default as Select } from './lowLvlBuilders/selects/select';
16
16
  export { default as Update } from './lowLvlBuilders/updates/update';
17
17
  export { set, combine } from './requestBuilders/updates/static';
18
- export { eq, inArray as in, and, or, like, greater, greaterEq, less, lessEq, } from './requestBuilders/where/static';
18
+ export { eq, inArray as in, and, or, like, greater, greaterEq, less, lessEq, raw, } from './requestBuilders/where/static';
package/builders/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.lessEq = exports.less = exports.greaterEq = exports.greater = exports.like = exports.or = exports.and = exports.in = exports.eq = exports.combine = exports.set = exports.Update = exports.Select = exports.Insert = exports.Delete = exports.Create = exports.SelectResponseJoin = exports.SelectResponseTwoJoins = exports.SelectTRBWithTwoJoins = exports.SelectTRBWithJoin = exports.Join = exports.JoinWith = exports.to = exports.UpdateTRB = exports.SelectTRB = exports.InsertTRB = exports.DeleteTRB = void 0;
3
+ exports.raw = exports.lessEq = exports.less = exports.greaterEq = exports.greater = exports.like = exports.or = exports.and = exports.in = exports.eq = exports.combine = exports.set = exports.Update = exports.Select = exports.Insert = exports.Delete = exports.Create = exports.SelectResponseJoin = exports.SelectResponseTwoJoins = exports.SelectTRBWithTwoJoins = exports.SelectTRBWithJoin = exports.Join = exports.JoinWith = exports.to = exports.UpdateTRB = exports.SelectTRB = exports.InsertTRB = exports.DeleteTRB = void 0;
4
4
  /* eslint-disable import/no-cycle */
5
5
  var deleteRequestBuilder_1 = require("./highLvlBuilders/deleteRequestBuilder");
6
6
  Object.defineProperty(exports, "DeleteTRB", { enumerable: true, get: function () { return deleteRequestBuilder_1.default; } });
@@ -47,3 +47,4 @@ Object.defineProperty(exports, "greater", { enumerable: true, get: function () {
47
47
  Object.defineProperty(exports, "greaterEq", { enumerable: true, get: function () { return static_3.greaterEq; } });
48
48
  Object.defineProperty(exports, "less", { enumerable: true, get: function () { return static_3.less; } });
49
49
  Object.defineProperty(exports, "lessEq", { enumerable: true, get: function () { return static_3.lessEq; } });
50
+ Object.defineProperty(exports, "raw", { enumerable: true, get: function () { return static_3.raw; } });
@@ -1,18 +1,27 @@
1
+ import { QueryResult } from 'pg';
1
2
  import { AbstractColumn } from '../../../columns/column';
2
3
  import ColumnType from '../../../columns/types/columnType';
3
4
  import Session from '../../../db/session';
4
5
  import { AbstractTable } from '../../../tables';
5
- import { ExtractModel } from '../../../tables/inferTypes';
6
+ import Order from '../../highLvlBuilders/order';
6
7
  import Expr from '../../requestBuilders/where/where';
7
- export default abstract class AbstractJoined<TTable extends AbstractTable<TTable>> {
8
- protected _tableName: string;
8
+ import Join from '../join';
9
+ export default abstract class AbstractJoined<TTable extends AbstractTable<TTable>, TRes> {
10
+ protected _table: TTable;
9
11
  protected _session: Session;
10
12
  protected _filter: Expr;
11
- protected _table: TTable;
12
- protected _columns: {
13
- [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
13
+ protected _distinct?: AbstractColumn<ColumnType, boolean, boolean>;
14
+ protected _props: {
15
+ limit?: number;
16
+ offset?: number;
14
17
  };
15
- constructor(filter: Expr, tableName: string, session: Session, columns: {
16
- [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
17
- }, table: TTable);
18
+ protected _orderBy?: AbstractColumn<ColumnType, boolean, boolean>;
19
+ protected _order?: Order;
20
+ constructor(table: TTable, filter: Expr, session: Session, props: {
21
+ limit?: number;
22
+ offset?: number;
23
+ }, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
24
+ execute: () => Promise<TRes>;
25
+ protected abstract mapResponse(result: QueryResult<any>): TRes;
26
+ protected abstract joins(): Array<Join<any>>;
18
27
  }
@@ -1,12 +1,42 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const builderError_1 = require("../../../errors/builderError");
4
+ const dbErrors_1 = require("../../../errors/dbErrors");
5
+ const select_1 = require("../../lowLvlBuilders/selects/select");
3
6
  class AbstractJoined {
4
- constructor(filter, tableName, session, columns, table) {
5
- this._tableName = tableName;
7
+ constructor(table, filter, session, props, orderBy, order, distinct) {
8
+ this.execute = async () => {
9
+ const queryBuilder = select_1.default
10
+ .from(this._table)
11
+ .distinct(this._distinct)
12
+ .joined(this.joins())
13
+ .limit(this._props.limit)
14
+ .offset(this._props.offset)
15
+ .filteredBy(this._filter)
16
+ .orderBy(this._orderBy, this._order);
17
+ let query = '';
18
+ try {
19
+ query = queryBuilder.build();
20
+ }
21
+ catch (e) {
22
+ throw new builderError_1.default(builderError_1.BuilderType.JOINED_SELECT, this._table.tableName(), Object.values(this._table.mapServiceToDb()), e, this._filter);
23
+ }
24
+ const result = await this._session.execute(query);
25
+ if (result.isLeft()) {
26
+ const { reason } = result.value;
27
+ throw new dbErrors_1.DatabaseSelectError(this._table.tableName(), reason, query);
28
+ }
29
+ else {
30
+ return this.mapResponse(result.value);
31
+ }
32
+ };
33
+ this._table = table;
6
34
  this._session = session;
7
35
  this._filter = filter;
8
- this._columns = columns;
9
- this._table = table;
36
+ this._props = props;
37
+ this._order = order;
38
+ this._orderBy = orderBy;
39
+ this._distinct = distinct;
10
40
  }
11
41
  }
12
42
  exports.default = AbstractJoined;
@@ -0,0 +1,23 @@
1
+ import { QueryResult } from 'pg';
2
+ import { AbstractColumn } from '../../../columns/column';
3
+ import ColumnType from '../../../columns/types/columnType';
4
+ import Session from '../../../db/session';
5
+ import { AbstractTable } from '../../../tables';
6
+ import Order from '../../highLvlBuilders/order';
7
+ import Expr from '../../requestBuilders/where/where';
8
+ import Join from '../join';
9
+ import SelectResponseFiveJoins from '../responses/selectResponseFiveJoins';
10
+ import AbstractJoined from './abstractJoinBuilder';
11
+ export default class SelectTRBWithFiveJoins<TTable extends AbstractTable<TTable>, TTable1, TTable2, TTable3, TTable4, TTable5> extends AbstractJoined<TTable, SelectResponseFiveJoins<TTable, TTable1, TTable2, TTable3, TTable4, TTable5>> {
12
+ private _join1;
13
+ private _join2;
14
+ private _join3;
15
+ private _join4;
16
+ private _join5;
17
+ constructor(table: TTable, session: Session, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, join3: Join<TTable3>, join4: Join<TTable4>, join5: Join<TTable5>, props: {
18
+ limit?: number;
19
+ offset?: number;
20
+ }, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
21
+ protected joins(): Join<any>[];
22
+ protected mapResponse(result: QueryResult<any>): SelectResponseFiveJoins<TTable, TTable1, TTable2, TTable3, TTable4, TTable5>;
23
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const responseMapper_1 = require("../../../mappers/responseMapper");
4
+ const selectResponseFiveJoins_1 = require("../responses/selectResponseFiveJoins");
5
+ const abstractJoinBuilder_1 = require("./abstractJoinBuilder");
6
+ class SelectTRBWithFiveJoins extends abstractJoinBuilder_1.default {
7
+ constructor(table, session, filter, join1, join2, join3, join4, join5, props, orderBy, order, distinct) {
8
+ super(table, filter, session, props, orderBy, order, distinct);
9
+ this._join1 = join1;
10
+ this._join2 = join2;
11
+ this._join3 = join3;
12
+ this._join4 = join4;
13
+ this._join5 = join5;
14
+ }
15
+ joins() {
16
+ return [this._join1, this._join2, this._join3, this._join4, this._join5];
17
+ }
18
+ mapResponse(result) {
19
+ const parent = this._join1.mappedServiceToDb;
20
+ const parentTwo = this._join2.mappedServiceToDb;
21
+ const parentThree = this._join3.mappedServiceToDb;
22
+ const parentFour = this._join4.mappedServiceToDb;
23
+ const parentFive = this._join5.mappedServiceToDb;
24
+ const response = responseMapper_1.default.map(this._table.mapServiceToDb(), result);
25
+ const objects = responseMapper_1.default.map(parent, result);
26
+ const objectsTwo = responseMapper_1.default.map(parentTwo, result);
27
+ const objectsThree = responseMapper_1.default.map(parentThree, result);
28
+ const objectsFour = responseMapper_1.default.map(parentFour, result);
29
+ const objectsFive = responseMapper_1.default.map(parentFive, result);
30
+ return new selectResponseFiveJoins_1.default(response, objects, objectsTwo, objectsThree, objectsFour, objectsFive);
31
+ }
32
+ }
33
+ exports.default = SelectTRBWithFiveJoins;
@@ -1,19 +1,36 @@
1
+ import { QueryResult } from 'pg';
1
2
  import { AbstractColumn } from '../../../columns/column';
2
3
  import ColumnType from '../../../columns/types/columnType';
4
+ import DB from '../../../db/db';
3
5
  import Session from '../../../db/session';
4
6
  import { AbstractTable } from '../../../tables';
5
- import { ExtractModel } from '../../../tables/inferTypes';
7
+ import Order from '../../highLvlBuilders/order';
6
8
  import Expr from '../../requestBuilders/where/where';
7
9
  import Join from '../join';
8
10
  import SelectResponseFourJoins from '../responses/selectResponseFourJoins';
9
11
  import AbstractJoined from './abstractJoinBuilder';
10
- export default class SelectTRBWithFourJoins<TTable extends AbstractTable<TTable>, TTable1, TTable2, TTable3, TTable4> extends AbstractJoined<TTable> {
12
+ import SelectTRBWithFiveJoins from './selectWithFiveJoins';
13
+ export default class SelectTRBWithFourJoins<TTable extends AbstractTable<TTable>, TTable1, TTable2, TTable3, TTable4> extends AbstractJoined<TTable, SelectResponseFourJoins<TTable, TTable1, TTable2, TTable3, TTable4>> {
11
14
  private _join1;
12
15
  private _join2;
13
16
  private _join3;
14
17
  private _join4;
15
- constructor(tableName: string, session: Session, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, join3: Join<TTable3>, join4: Join<TTable4>, columns: {
16
- [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
17
- }, table: TTable);
18
- execute: () => Promise<SelectResponseFourJoins<TTable, TTable1, TTable2, TTable3, TTable4>>;
18
+ constructor(table: TTable, session: Session, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, join3: Join<TTable3>, join4: Join<TTable4>, props: {
19
+ limit?: number;
20
+ offset?: number;
21
+ }, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
22
+ innerJoin<TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>>(table: {
23
+ new (db: DB): IToTable;
24
+ }, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean>, to: (table: IToTable) => AbstractColumn<TColumn, boolean, boolean>): SelectTRBWithFiveJoins<TTable, TTable1, TTable2, TTable3, TTable4, IToTable>;
25
+ leftJoin<TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>>(table: {
26
+ new (db: DB): IToTable;
27
+ }, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean>, to: (table: IToTable) => AbstractColumn<TColumn, boolean, boolean>): SelectTRBWithFiveJoins<TTable, TTable1, TTable2, TTable3, TTable4, IToTable>;
28
+ rightJoin<TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>>(table: {
29
+ new (db: DB): IToTable;
30
+ }, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean>, to: (table: IToTable) => AbstractColumn<TColumn, boolean, boolean>): SelectTRBWithFiveJoins<TTable, TTable1, TTable2, TTable3, TTable4, IToTable>;
31
+ fullJoin<TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>>(table: {
32
+ new (db: DB): IToTable;
33
+ }, from: (table: TTable) => AbstractColumn<TColumn>, to: (table: IToTable) => AbstractColumn<TColumn>): SelectTRBWithFiveJoins<TTable, TTable1, TTable2, TTable3, TTable4, IToTable>;
34
+ protected joins(): Join<any>[];
35
+ protected mapResponse(result: QueryResult<any>): SelectResponseFourJoins<TTable, TTable1, TTable2, TTable3, TTable4>;
19
36
  }
@@ -1,49 +1,65 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const builderError_1 = require("../../../errors/builderError");
4
- const dbErrors_1 = require("../../../errors/dbErrors");
5
3
  const responseMapper_1 = require("../../../mappers/responseMapper");
6
- const select_1 = require("../../lowLvlBuilders/selects/select");
4
+ const join_1 = require("../join");
5
+ const joinWith_1 = require("../joinWith");
7
6
  const selectResponseFourJoins_1 = require("../responses/selectResponseFourJoins");
8
7
  const abstractJoinBuilder_1 = require("./abstractJoinBuilder");
8
+ const selectWithFiveJoins_1 = require("./selectWithFiveJoins");
9
9
  class SelectTRBWithFourJoins extends abstractJoinBuilder_1.default {
10
- constructor(tableName, session, filter, join1, join2, join3, join4, columns, table) {
11
- super(filter, tableName, session, columns, table);
12
- this.execute = async () => {
13
- const queryBuilder = select_1.default.from(this._tableName, Object.values(this._columns));
14
- if (this._filter) {
15
- queryBuilder.filteredBy(this._filter);
16
- }
17
- queryBuilder.joined([this._join1, this._join2, this._join3, this._join4]);
18
- let query = '';
19
- try {
20
- query = queryBuilder.build();
21
- }
22
- catch (e) {
23
- throw new builderError_1.default(builderError_1.BuilderType.TWO_JOINED_SELECT, this._tableName, Object.values(this._columns), e, this._filter);
24
- }
25
- const parent = this._join1.mappedServiceToDb;
26
- const parentTwo = this._join2.mappedServiceToDb;
27
- const parentThree = this._join3.mappedServiceToDb;
28
- const parentFour = this._join4.mappedServiceToDb;
29
- const result = await this._session.execute(query);
30
- if (result.isLeft()) {
31
- const { reason } = result.value;
32
- throw new dbErrors_1.DatabaseSelectError(this._tableName, reason, query);
33
- }
34
- else {
35
- const response = responseMapper_1.default.map(this._columns, result.value);
36
- const objects = responseMapper_1.default.map(parent, result.value);
37
- const objectsTwo = responseMapper_1.default.map(parentTwo, result.value);
38
- const objectsThree = responseMapper_1.default.map(parentThree, result.value);
39
- const objectsFour = responseMapper_1.default.map(parentFour, result.value);
40
- return new selectResponseFourJoins_1.default(response, objects, objectsTwo, objectsThree, objectsFour);
41
- }
42
- };
10
+ constructor(table, session, filter, join1, join2, join3, join4, props, orderBy, order, distinct) {
11
+ super(table, filter, session, props, orderBy, order, distinct);
43
12
  this._join1 = join1;
44
13
  this._join2 = join2;
45
14
  this._join3 = join3;
46
15
  this._join4 = join4;
47
16
  }
17
+ innerJoin(table, from, to) {
18
+ const toTable = this._table.db.create(table);
19
+ const fromColumn = from(this._table);
20
+ const toColumn = to(toTable);
21
+ const join = new joinWith_1.default(toTable.tableName(), toTable.mapServiceToDb())
22
+ .columns(fromColumn, toColumn).joinStrategy(join_1.JoinStrategy.INNER_JOIN);
23
+ return new selectWithFiveJoins_1.default(this._table, this._session, this._filter, this._join1, this._join2, this._join3, this._join4, join, this._props, this._orderBy, this._order, this._distinct);
24
+ }
25
+ leftJoin(table, from, to) {
26
+ const toTable = this._table.db.create(table);
27
+ const fromColumn = from(this._table);
28
+ const toColumn = to(toTable);
29
+ const join = new joinWith_1.default(toTable.tableName(), toTable.mapServiceToDb())
30
+ .columns(fromColumn, toColumn).joinStrategy(join_1.JoinStrategy.LEFT_JOIN);
31
+ return new selectWithFiveJoins_1.default(this._table, this._session, this._filter, this._join1, this._join2, this._join3, this._join4, join, this._props, this._orderBy, this._order, this._distinct);
32
+ }
33
+ rightJoin(table, from, to) {
34
+ const toTable = this._table.db.create(table);
35
+ const fromColumn = from(this._table);
36
+ const toColumn = to(toTable);
37
+ const join = new joinWith_1.default(toTable.tableName(), toTable.mapServiceToDb())
38
+ .columns(fromColumn, toColumn).joinStrategy(join_1.JoinStrategy.RIGHT_JOIN);
39
+ return new selectWithFiveJoins_1.default(this._table, this._session, this._filter, this._join1, this._join2, this._join3, this._join4, join, this._props, this._orderBy, this._order, this._distinct);
40
+ }
41
+ fullJoin(table, from, to) {
42
+ const toTable = this._table.db.create(table);
43
+ const fromColumn = from(this._table);
44
+ const toColumn = to(toTable);
45
+ const join = new joinWith_1.default(toTable.tableName(), toTable.mapServiceToDb())
46
+ .columns(fromColumn, toColumn).joinStrategy(join_1.JoinStrategy.FULL_JOIN);
47
+ return new selectWithFiveJoins_1.default(this._table, this._session, this._filter, this._join1, this._join2, this._join3, this._join4, join, this._props, this._orderBy, this._order, this._distinct);
48
+ }
49
+ joins() {
50
+ return [this._join1, this._join2, this._join3, this._join4];
51
+ }
52
+ mapResponse(result) {
53
+ const parent = this._join1.mappedServiceToDb;
54
+ const parentTwo = this._join2.mappedServiceToDb;
55
+ const parentThree = this._join3.mappedServiceToDb;
56
+ const parentFour = this._join4.mappedServiceToDb;
57
+ const response = responseMapper_1.default.map(this._table.mapServiceToDb(), result);
58
+ const objects = responseMapper_1.default.map(parent, result);
59
+ const objectsTwo = responseMapper_1.default.map(parentTwo, result);
60
+ const objectsThree = responseMapper_1.default.map(parentThree, result);
61
+ const objectsFour = responseMapper_1.default.map(parentFour, result);
62
+ return new selectResponseFourJoins_1.default(response, objects, objectsTwo, objectsThree, objectsFour);
63
+ }
48
64
  }
49
65
  exports.default = SelectTRBWithFourJoins;
@@ -1,19 +1,21 @@
1
+ import { QueryResult } from 'pg';
1
2
  import { AbstractColumn } from '../../../columns/column';
2
3
  import ColumnType from '../../../columns/types/columnType';
3
4
  import DB from '../../../db/db';
4
5
  import Session from '../../../db/session';
5
6
  import AbstractTable from '../../../tables/abstractTable';
6
- import { ExtractModel } from '../../../tables/inferTypes';
7
+ import Order from '../../highLvlBuilders/order';
7
8
  import Expr from '../../requestBuilders/where/where';
8
9
  import Join from '../join';
9
10
  import SelectResponseJoin from '../responses/selectResponseWithJoin';
10
11
  import AbstractJoined from './abstractJoinBuilder';
11
12
  import SelectTRBWithTwoJoins from './selectWithTwoJoins';
12
- export default class SelectTRBWithJoin<TTable extends AbstractTable<TTable>, TTable1> extends AbstractJoined<TTable> {
13
+ export default class SelectTRBWithJoin<TTable extends AbstractTable<TTable>, TTable1> extends AbstractJoined<TTable, SelectResponseJoin<TTable, TTable1>> {
13
14
  private _join;
14
- constructor(tableName: string, session: Session, filter: Expr, join: Join<TTable1>, columns: {
15
- [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
16
- }, table: TTable);
15
+ constructor(table: TTable, session: Session, filter: Expr, join: Join<TTable1>, props: {
16
+ limit?: number;
17
+ offset?: number;
18
+ }, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
17
19
  innerJoin<TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>>(table: {
18
20
  new (db: DB): IToTable;
19
21
  }, from: (table: TTable) => AbstractColumn<TColumn, boolean, boolean>, to: (table: IToTable) => AbstractColumn<TColumn, boolean, boolean>): SelectTRBWithTwoJoins<TTable, TTable1, IToTable>;
@@ -26,5 +28,6 @@ export default class SelectTRBWithJoin<TTable extends AbstractTable<TTable>, TTa
26
28
  fullJoin<TColumn extends ColumnType, IToTable extends AbstractTable<IToTable>>(table: {
27
29
  new (db: DB): IToTable;
28
30
  }, from: (table: TTable) => AbstractColumn<TColumn>, to: (table: IToTable) => AbstractColumn<TColumn>): SelectTRBWithTwoJoins<TTable, TTable1, IToTable>;
29
- execute: () => Promise<SelectResponseJoin<TTable, TTable1>>;
31
+ protected joins(): Join<any>[];
32
+ protected mapResponse(result: QueryResult<any>): SelectResponseJoin<TTable, TTable1>;
30
33
  }