drizzle-orm 0.10.32 → 0.10.33

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 (238) hide show
  1. package/builders/aggregators/abstractAggregator.d.ts +11 -0
  2. package/builders/aggregators/abstractAggregator.js +35 -0
  3. package/builders/aggregators/deleteAggregator.d.ts +16 -0
  4. package/builders/aggregators/deleteAggregator.js +42 -0
  5. package/builders/aggregators/insertAggregator.d.ts +22 -0
  6. package/builders/aggregators/insertAggregator.js +106 -0
  7. package/builders/aggregators/selectAggregator.d.ts +39 -0
  8. package/builders/aggregators/selectAggregator.js +143 -0
  9. package/builders/aggregators/updateAggregator.d.ts +19 -0
  10. package/builders/aggregators/updateAggregator.js +50 -0
  11. package/builders/highLvlBuilders/abstractRequestBuilder.d.ts +27 -0
  12. package/builders/highLvlBuilders/abstractRequestBuilder.js +32 -0
  13. package/builders/highLvlBuilders/deleteRequestBuilder.d.ts +19 -0
  14. package/builders/highLvlBuilders/deleteRequestBuilder.js +61 -0
  15. package/builders/highLvlBuilders/insertRequestBuilder.d.ts +20 -0
  16. package/builders/highLvlBuilders/insertRequestBuilder.js +73 -0
  17. package/builders/highLvlBuilders/order.d.ts +5 -0
  18. package/builders/highLvlBuilders/order.js +8 -0
  19. package/builders/highLvlBuilders/selectRequestBuilder.d.ts +47 -0
  20. package/builders/highLvlBuilders/selectRequestBuilder.js +128 -0
  21. package/builders/highLvlBuilders/updateRequestBuilder.d.ts +22 -0
  22. package/builders/highLvlBuilders/updateRequestBuilder.js +80 -0
  23. package/builders/index.d.ts +18 -0
  24. package/builders/index.js +54 -0
  25. package/builders/joinBuilders/builders/abstractJoinBuilder.d.ts +40 -0
  26. package/builders/joinBuilders/builders/abstractJoinBuilder.js +78 -0
  27. package/builders/joinBuilders/builders/selectWithFiveJoins.d.ts +35 -0
  28. package/builders/joinBuilders/builders/selectWithFiveJoins.js +45 -0
  29. package/builders/joinBuilders/builders/selectWithFourJoins.d.ts +55 -0
  30. package/builders/joinBuilders/builders/selectWithFourJoins.js +78 -0
  31. package/builders/joinBuilders/builders/selectWithJoin.d.ts +49 -0
  32. package/builders/joinBuilders/builders/selectWithJoin.js +64 -0
  33. package/builders/joinBuilders/builders/selectWithThreeJoins.d.ts +53 -0
  34. package/builders/joinBuilders/builders/selectWithThreeJoins.js +73 -0
  35. package/builders/joinBuilders/builders/selectWithTwoJoins.d.ts +51 -0
  36. package/builders/joinBuilders/builders/selectWithTwoJoins.js +68 -0
  37. package/builders/joinBuilders/join.d.ts +23 -0
  38. package/builders/joinBuilders/join.js +28 -0
  39. package/builders/joinBuilders/joinWith.d.ts +14 -0
  40. package/builders/joinBuilders/joinWith.js +14 -0
  41. package/builders/joinBuilders/responses/selectResponseFiveJoins.d.ts +20 -0
  42. package/builders/joinBuilders/responses/selectResponseFiveJoins.js +35 -0
  43. package/builders/joinBuilders/responses/selectResponseFourJoins.d.ts +19 -0
  44. package/builders/joinBuilders/responses/selectResponseFourJoins.js +34 -0
  45. package/builders/joinBuilders/responses/selectResponseThreeJoins.d.ts +18 -0
  46. package/builders/joinBuilders/responses/selectResponseThreeJoins.js +33 -0
  47. package/builders/joinBuilders/responses/selectResponseTwoJoins.d.ts +17 -0
  48. package/builders/joinBuilders/responses/selectResponseTwoJoins.js +32 -0
  49. package/builders/joinBuilders/responses/selectResponseWithJoin.d.ts +16 -0
  50. package/builders/joinBuilders/responses/selectResponseWithJoin.js +31 -0
  51. package/builders/joinBuilders/static.d.ts +5 -0
  52. package/builders/joinBuilders/static.js +9 -0
  53. package/builders/lowLvlBuilders/alter.d.ts +0 -0
  54. package/builders/lowLvlBuilders/alter.js +1 -0
  55. package/builders/lowLvlBuilders/create.d.ts +12 -0
  56. package/builders/lowLvlBuilders/create.js +100 -0
  57. package/builders/lowLvlBuilders/delets/delete.d.ts +5 -0
  58. package/builders/lowLvlBuilders/delets/delete.js +15 -0
  59. package/builders/lowLvlBuilders/delets/deleteFilter.d.ts +11 -0
  60. package/builders/lowLvlBuilders/delets/deleteFilter.js +13 -0
  61. package/builders/lowLvlBuilders/delets/deleteFrom.d.ts +12 -0
  62. package/builders/lowLvlBuilders/delets/deleteFrom.js +14 -0
  63. package/builders/lowLvlBuilders/inserts/insert.d.ts +5 -0
  64. package/builders/lowLvlBuilders/inserts/insert.js +15 -0
  65. package/builders/lowLvlBuilders/inserts/insertInto.d.ts +13 -0
  66. package/builders/lowLvlBuilders/inserts/insertInto.js +16 -0
  67. package/builders/lowLvlBuilders/inserts/onConflictInsert.d.ts +12 -0
  68. package/builders/lowLvlBuilders/inserts/onConflictInsert.js +13 -0
  69. package/builders/lowLvlBuilders/inserts/valuesInsert.d.ts +16 -0
  70. package/builders/lowLvlBuilders/inserts/valuesInsert.js +19 -0
  71. package/builders/lowLvlBuilders/selects/select.d.ts +9 -0
  72. package/builders/lowLvlBuilders/selects/select.js +16 -0
  73. package/builders/lowLvlBuilders/selects/selectFrom.d.ts +28 -0
  74. package/builders/lowLvlBuilders/selects/selectFrom.js +34 -0
  75. package/builders/lowLvlBuilders/selects/selectJoined.d.ts +26 -0
  76. package/builders/lowLvlBuilders/selects/selectJoined.js +30 -0
  77. package/builders/lowLvlBuilders/selects/whereSelect.d.ts +17 -0
  78. package/builders/lowLvlBuilders/selects/whereSelect.js +25 -0
  79. package/builders/lowLvlBuilders/updates/update.d.ts +5 -0
  80. package/builders/lowLvlBuilders/updates/update.js +15 -0
  81. package/builders/lowLvlBuilders/updates/updateIn.d.ts +13 -0
  82. package/builders/lowLvlBuilders/updates/updateIn.js +15 -0
  83. package/builders/lowLvlBuilders/updates/whereSelect.d.ts +11 -0
  84. package/builders/lowLvlBuilders/updates/whereSelect.js +13 -0
  85. package/builders/lowLvlBuilders/updates/whereSet.d.ts +14 -0
  86. package/builders/lowLvlBuilders/updates/whereSet.js +18 -0
  87. package/builders/requestBuilders/updates/combine.d.ts +9 -0
  88. package/builders/requestBuilders/updates/combine.js +26 -0
  89. package/builders/requestBuilders/updates/increment.d.ts +13 -0
  90. package/builders/requestBuilders/updates/increment.js +18 -0
  91. package/builders/requestBuilders/updates/setObjects.d.ts +12 -0
  92. package/builders/requestBuilders/updates/setObjects.js +19 -0
  93. package/builders/requestBuilders/updates/static.d.ts +7 -0
  94. package/builders/requestBuilders/updates/static.js +15 -0
  95. package/builders/requestBuilders/updates/updates.d.ts +9 -0
  96. package/builders/requestBuilders/updates/updates.js +10 -0
  97. package/builders/requestBuilders/where/and.d.ts +11 -0
  98. package/builders/requestBuilders/where/and.js +31 -0
  99. package/builders/requestBuilders/where/const.d.ts +9 -0
  100. package/builders/requestBuilders/where/const.js +25 -0
  101. package/builders/requestBuilders/where/constArray.d.ts +9 -0
  102. package/builders/requestBuilders/where/constArray.js +39 -0
  103. package/builders/requestBuilders/where/eqWhere.d.ts +12 -0
  104. package/builders/requestBuilders/where/eqWhere.js +20 -0
  105. package/builders/requestBuilders/where/greater.d.ts +15 -0
  106. package/builders/requestBuilders/where/greater.js +20 -0
  107. package/builders/requestBuilders/where/greaterEq.d.ts +15 -0
  108. package/builders/requestBuilders/where/greaterEq.js +20 -0
  109. package/builders/requestBuilders/where/in.d.ts +12 -0
  110. package/builders/requestBuilders/where/in.js +20 -0
  111. package/builders/requestBuilders/where/isNotNull.d.ts +11 -0
  112. package/builders/requestBuilders/where/isNotNull.js +18 -0
  113. package/builders/requestBuilders/where/isNull.d.ts +11 -0
  114. package/builders/requestBuilders/where/isNull.js +18 -0
  115. package/builders/requestBuilders/where/less.d.ts +15 -0
  116. package/builders/requestBuilders/where/less.js +20 -0
  117. package/builders/requestBuilders/where/lessEq.d.ts +15 -0
  118. package/builders/requestBuilders/where/lessEq.js +20 -0
  119. package/builders/requestBuilders/where/like.d.ts +12 -0
  120. package/builders/requestBuilders/where/like.js +20 -0
  121. package/builders/requestBuilders/where/notEqWhere.d.ts +12 -0
  122. package/builders/requestBuilders/where/notEqWhere.js +20 -0
  123. package/builders/requestBuilders/where/or.d.ts +11 -0
  124. package/builders/requestBuilders/where/or.js +31 -0
  125. package/builders/requestBuilders/where/rawWhere.d.ts +9 -0
  126. package/builders/requestBuilders/where/rawWhere.js +15 -0
  127. package/builders/requestBuilders/where/static.d.ts +17 -0
  128. package/builders/requestBuilders/where/static.js +49 -0
  129. package/builders/requestBuilders/where/var.d.ts +13 -0
  130. package/builders/requestBuilders/where/var.js +18 -0
  131. package/builders/requestBuilders/where/where.d.ts +8 -0
  132. package/builders/requestBuilders/where/where.js +6 -0
  133. package/builders/transaction/transaction.d.ts +8 -0
  134. package/builders/transaction/transaction.js +20 -0
  135. package/columns/column.d.ts +72 -0
  136. package/columns/column.js +101 -0
  137. package/columns/index.d.ts +10 -0
  138. package/columns/index.js +27 -0
  139. package/columns/types/columnType.d.ts +7 -0
  140. package/columns/types/columnType.js +6 -0
  141. package/columns/types/pgBigDecimal.d.ts +10 -0
  142. package/columns/types/pgBigDecimal.js +31 -0
  143. package/columns/types/pgBigInt.d.ts +15 -0
  144. package/columns/types/pgBigInt.js +32 -0
  145. package/columns/types/pgBigSerial.d.ts +15 -0
  146. package/columns/types/pgBigSerial.js +32 -0
  147. package/columns/types/pgBoolean.d.ts +8 -0
  148. package/columns/types/pgBoolean.js +18 -0
  149. package/columns/types/pgEnum.d.ts +9 -0
  150. package/columns/types/pgEnum.js +18 -0
  151. package/columns/types/pgInteger.d.ts +8 -0
  152. package/columns/types/pgInteger.js +21 -0
  153. package/columns/types/pgJsonb.d.ts +9 -0
  154. package/columns/types/pgJsonb.js +20 -0
  155. package/columns/types/pgSerial.d.ts +8 -0
  156. package/columns/types/pgSerial.js +18 -0
  157. package/columns/types/pgSmallInt.d.ts +8 -0
  158. package/columns/types/pgSmallInt.js +18 -0
  159. package/columns/types/pgText.d.ts +8 -0
  160. package/columns/types/pgText.js +18 -0
  161. package/columns/types/pgTime.d.ts +8 -0
  162. package/columns/types/pgTime.js +18 -0
  163. package/columns/types/pgTimestamp.d.ts +8 -0
  164. package/columns/types/pgTimestamp.js +18 -0
  165. package/columns/types/pgTimestamptz.d.ts +8 -0
  166. package/columns/types/pgTimestamptz.js +18 -0
  167. package/columns/types/pgVarChar.d.ts +9 -0
  168. package/columns/types/pgVarChar.js +24 -0
  169. package/db/db.d.ts +18 -0
  170. package/db/db.js +25 -0
  171. package/db/dbConnector.d.ts +9 -0
  172. package/db/dbConnector.js +32 -0
  173. package/db/dbStringConnector.d.ts +6 -0
  174. package/db/dbStringConnector.js +29 -0
  175. package/db/group_by.d.ts +0 -0
  176. package/db/group_by.js +68 -0
  177. package/db/index.d.ts +4 -0
  178. package/db/index.js +14 -0
  179. package/db/session.d.ts +9 -0
  180. package/db/session.js +16 -0
  181. package/docs/cases/simple_delete.d.ts +1 -0
  182. package/docs/cases/simple_delete.js +35 -0
  183. package/docs/cases/simple_insert.d.ts +1 -0
  184. package/docs/cases/simple_insert.js +57 -0
  185. package/docs/cases/simple_join.d.ts +1 -0
  186. package/docs/cases/simple_join.js +115 -0
  187. package/docs/cases/simple_select.d.ts +1 -0
  188. package/docs/cases/simple_select.js +50 -0
  189. package/docs/cases/simple_update.d.ts +1 -0
  190. package/docs/cases/simple_update.js +39 -0
  191. package/docs/tables/citiesTable.d.ts +14 -0
  192. package/docs/tables/citiesTable.js +21 -0
  193. package/docs/tables/userGroupsTable.d.ts +7 -0
  194. package/docs/tables/userGroupsTable.js +18 -0
  195. package/docs/tables/usersTable.d.ts +17 -0
  196. package/docs/tables/usersTable.js +35 -0
  197. package/docs/tables/usersToUserGroups.d.ts +7 -0
  198. package/docs/tables/usersToUserGroups.js +20 -0
  199. package/docs/types/rolesType.d.ts +1 -0
  200. package/docs/types/rolesType.js +6 -0
  201. package/errors/baseError.d.ts +22 -0
  202. package/errors/baseError.js +35 -0
  203. package/errors/builderError.d.ts +14 -0
  204. package/errors/builderError.js +25 -0
  205. package/errors/dbErrors.d.ts +12 -0
  206. package/errors/dbErrors.js +28 -0
  207. package/index.d.ts +11 -0
  208. package/indexes/tableIndex.d.ts +11 -0
  209. package/indexes/tableIndex.js +17 -0
  210. package/logger/abstractLogger.d.ts +4 -0
  211. package/logger/abstractLogger.js +5 -0
  212. package/logger/consoleLogger.d.ts +5 -0
  213. package/logger/consoleLogger.js +15 -0
  214. package/mappers/index.d.ts +0 -0
  215. package/mappers/index.js +1 -0
  216. package/mappers/responseMapper.d.ts +10 -0
  217. package/mappers/responseMapper.js +35 -0
  218. package/migrator/index.d.ts +0 -0
  219. package/migrator/index.js +1 -0
  220. package/migrator/migrator.d.ts +11 -0
  221. package/migrator/migrator.js +105 -0
  222. package/package.json +1 -4
  223. package/serializer/serializer.d.ts +47 -0
  224. package/serializer/serializer.js +258 -0
  225. package/tables/abstractTable.d.ts +68 -0
  226. package/tables/abstractTable.js +151 -0
  227. package/tables/index.d.ts +3 -0
  228. package/tables/index.js +11 -0
  229. package/tables/inferTypes.d.ts +39 -0
  230. package/tables/inferTypes.js +2 -0
  231. package/tables/migrationsTable.d.ts +7 -0
  232. package/tables/migrationsTable.js +18 -0
  233. package/test.d.ts +1 -0
  234. package/test.js +65 -0
  235. package/types/type.d.ts +10 -0
  236. package/types/type.js +14 -0
  237. package/utils/ecranate.d.ts +2 -0
  238. package/utils/ecranate.js +8 -0
@@ -0,0 +1,11 @@
1
+ import { AbstractColumn } from '../../columns/column';
2
+ import ColumnType from '../../columns/types/columnType';
3
+ import { AbstractTable } from '../../tables';
4
+ export default class Aggregator {
5
+ protected _fields: Array<string>;
6
+ protected _table: AbstractTable<any>;
7
+ constructor(table: AbstractTable<any>, partial?: {
8
+ [name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, AbstractTable<any>>;
9
+ });
10
+ protected generateSelectArray: (table: string, columns: AbstractColumn<ColumnType>[], id?: number | undefined) => string[];
11
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable max-len */
4
+ const column_1 = require("../../columns/column");
5
+ const ecranate_1 = require("../../utils/ecranate");
6
+ // eslint-disable-next-line max-len
7
+ class Aggregator {
8
+ constructor(table, partial) {
9
+ this._fields = [];
10
+ this.generateSelectArray = (table, columns, id) => {
11
+ const selectFields = [];
12
+ columns.forEach((field) => {
13
+ if (field instanceof column_1.Column) {
14
+ selectFields.push(' ');
15
+ selectFields.push(table);
16
+ selectFields.push('.');
17
+ selectFields.push(ecranate_1.ecranate(field.getColumnName()));
18
+ selectFields.push(' AS ');
19
+ selectFields.push(ecranate_1.ecranate(`${field.getAlias()}${id ? `_${id}` : ''}`));
20
+ selectFields.push(',');
21
+ }
22
+ });
23
+ selectFields.pop();
24
+ return selectFields;
25
+ };
26
+ this._table = table;
27
+ if (!partial) {
28
+ this._fields = this.generateSelectArray(this._table.tableName(), Object.values(this._table.mapServiceToDb()));
29
+ }
30
+ else {
31
+ this._fields = this.generateSelectArray(this._table.tableName(), Object.values(partial));
32
+ }
33
+ }
34
+ }
35
+ exports.default = Aggregator;
@@ -0,0 +1,16 @@
1
+ import { AbstractTable } from '../../tables';
2
+ import Expr from '../requestBuilders/where/where';
3
+ import Aggregator from './abstractAggregator';
4
+ export default class DeleteAggregator extends Aggregator {
5
+ private _from;
6
+ private _filters;
7
+ private _values;
8
+ private _delete;
9
+ constructor(table: AbstractTable<any>);
10
+ filters: (filters: Expr) => DeleteAggregator;
11
+ appendFrom: (tableName: string) => DeleteAggregator;
12
+ buildQuery: () => {
13
+ query: string;
14
+ values: Array<any>;
15
+ };
16
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const abstractAggregator_1 = __importDefault(require("./abstractAggregator"));
7
+ class DeleteAggregator extends abstractAggregator_1.default {
8
+ constructor(table) {
9
+ super(table);
10
+ this._from = [];
11
+ this._filters = [];
12
+ this._values = [];
13
+ this._delete = ['DELETE'];
14
+ this.filters = (filters) => {
15
+ if (filters) {
16
+ const filterQuery = filters.toQuery();
17
+ this._filters.push('WHERE ');
18
+ this._filters.push(filterQuery.query);
19
+ this._values = filterQuery.values;
20
+ }
21
+ return this;
22
+ };
23
+ this.appendFrom = (tableName) => {
24
+ this._from.push(' FROM ');
25
+ this._from.push(tableName);
26
+ return this;
27
+ };
28
+ this.buildQuery = () => {
29
+ // this._delete.push(this._fields.join(''));
30
+ this._delete.push('\n');
31
+ this._delete.push(this._from.join(''));
32
+ this._delete.push('\n');
33
+ this._delete.push(this._filters.join(''));
34
+ this._delete.push('\n');
35
+ this._delete.push('RETURNING');
36
+ this._delete.push('\n');
37
+ this._delete.push(this._fields.join(''));
38
+ return { query: this._delete.join(''), values: this._values };
39
+ };
40
+ }
41
+ }
42
+ exports.default = DeleteAggregator;
@@ -0,0 +1,22 @@
1
+ import { AbstractTable } from '../../tables';
2
+ import { Indexing } from '../../tables/inferTypes';
3
+ import { UpdateExpr } from '../requestBuilders/updates/updates';
4
+ import Aggregator from './abstractAggregator';
5
+ export default class InsertAggregator extends Aggregator {
6
+ private _onConflict;
7
+ private _columns;
8
+ private _query;
9
+ private _values;
10
+ private _from;
11
+ private _insert;
12
+ constructor(table: AbstractTable<any>);
13
+ appendColumns: () => void;
14
+ appendValues: (values: {
15
+ [name: string]: any;
16
+ }[]) => void;
17
+ appendOnConflict: (column: Indexing, updates?: UpdateExpr | undefined) => this;
18
+ buildQuery: () => {
19
+ query: string;
20
+ values: Array<any>;
21
+ };
22
+ }
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /* eslint-disable @typescript-eslint/no-loop-func */
7
+ const column_1 = require("../../columns/column");
8
+ const abstractAggregator_1 = __importDefault(require("./abstractAggregator"));
9
+ class InsertAggregator extends abstractAggregator_1.default {
10
+ constructor(table) {
11
+ super(table);
12
+ this._onConflict = [];
13
+ this._columns = [];
14
+ this._query = [];
15
+ this._values = [];
16
+ this._from = [];
17
+ this._insert = ['INSERT INTO'];
18
+ this.appendColumns = () => {
19
+ const mapper = this._table.mapServiceToDb();
20
+ const columns = Object.values(mapper);
21
+ for (let i = 0; i < columns.length; i += 1) {
22
+ const column = columns[i];
23
+ this._columns.push('"');
24
+ this._columns.push(column.getColumnName());
25
+ this._columns.push('"');
26
+ if (i < columns.length - 1) {
27
+ this._columns.push(', ');
28
+ }
29
+ }
30
+ };
31
+ this.appendValues = (values) => {
32
+ // @TODO Check if values not empty
33
+ const mapper = this._table.mapServiceToDb();
34
+ let position = 0;
35
+ for (let i = 0; i < values.length; i += 1) {
36
+ const value = values[i];
37
+ this._query.push('(');
38
+ const entries = Object.entries(mapper);
39
+ entries.forEach(([key], index) => {
40
+ const valueToInsert = value[key];
41
+ const isKeyExistsInValue = key.toString() in value;
42
+ const column = mapper[key];
43
+ if (isKeyExistsInValue) {
44
+ if (valueToInsert !== undefined && valueToInsert !== null) {
45
+ position += 1;
46
+ this._query.push(`$${position}`);
47
+ this._values.push(column.getColumnType().insertStrategy(valueToInsert));
48
+ }
49
+ else {
50
+ this._query.push('null');
51
+ }
52
+ }
53
+ else {
54
+ this._query.push('DEFAULT');
55
+ }
56
+ if (index < entries.length - 1) {
57
+ this._query.push(', ');
58
+ }
59
+ });
60
+ if (i < values.length - 1) {
61
+ this._query.push('),\n');
62
+ }
63
+ else {
64
+ this._query.push(')\n');
65
+ }
66
+ }
67
+ };
68
+ this.appendOnConflict = (column, updates) => {
69
+ if (column) {
70
+ const indexName = column instanceof column_1.IndexedColumn
71
+ ? column.getColumnName() : column.getColumns().map((it) => it.getColumnName()).join(',');
72
+ this._onConflict.push(`ON CONFLICT (${indexName})\n`);
73
+ if (updates) {
74
+ const currentPointerPosition = this._values.length > 0
75
+ ? this._values.length + 1 : undefined;
76
+ const updatesQuery = updates.toQuery(currentPointerPosition);
77
+ this._onConflict.push('DO UPDATE\n');
78
+ this._onConflict.push(`SET ${updatesQuery.query}`);
79
+ this._values.push(...updatesQuery.values);
80
+ }
81
+ else {
82
+ this._onConflict.push('DO NOTHING\n');
83
+ }
84
+ }
85
+ return this;
86
+ };
87
+ this.buildQuery = () => {
88
+ this._insert.push(this._from.join(''));
89
+ this._insert.push(' (');
90
+ this._insert.push(this._columns.join(''));
91
+ this._insert.push(') ');
92
+ this._insert.push('VALUES\n');
93
+ this._insert.push(this._query.join(''));
94
+ this._insert.push('\n');
95
+ this._insert.push(this._onConflict.join(''));
96
+ this._insert.push('\n');
97
+ this._insert.push('RETURNING');
98
+ this._insert.push('\n');
99
+ this._insert.push(this._fields.join(''));
100
+ return { query: this._insert.join(''), values: this._values };
101
+ };
102
+ this._from.push(' ');
103
+ this._from.push(table.tableName());
104
+ }
105
+ }
106
+ exports.default = InsertAggregator;
@@ -0,0 +1,39 @@
1
+ import { AbstractColumn } from '../../columns/column';
2
+ import ColumnType from '../../columns/types/columnType';
3
+ import { AbstractTable } from '../../tables';
4
+ import Order from '../highLvlBuilders/order';
5
+ import Join from '../joinBuilders/join';
6
+ import Expr from '../requestBuilders/where/where';
7
+ import Aggregator from './abstractAggregator';
8
+ export default class SelectAggregator extends Aggregator {
9
+ private _from;
10
+ private _filters;
11
+ private _select;
12
+ private _join;
13
+ private _limit;
14
+ private _offset;
15
+ private _distinct;
16
+ private _orderBy;
17
+ private _values;
18
+ private _joinCache;
19
+ constructor(table: AbstractTable<any>, partial?: {
20
+ [name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, AbstractTable<any>>;
21
+ });
22
+ filters: (filters: Expr) => SelectAggregator;
23
+ limit: (limit?: number | undefined) => SelectAggregator;
24
+ offset: (offset?: number | undefined) => SelectAggregator;
25
+ orderBy: (column?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined, order?: Order | undefined) => SelectAggregator;
26
+ distinct: (column?: AbstractColumn<ColumnType<{}>, boolean, boolean, any> | undefined) => SelectAggregator;
27
+ appendFrom: (tableName: string) => SelectAggregator;
28
+ join: (joins: {
29
+ join: Join<any>;
30
+ partial?: {
31
+ [name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, any>;
32
+ } | undefined;
33
+ id?: number | undefined;
34
+ }[]) => SelectAggregator;
35
+ buildQuery: () => {
36
+ query: string;
37
+ values: Array<any>;
38
+ };
39
+ }
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const ecranate_1 = require("../../utils/ecranate");
7
+ const order_1 = __importDefault(require("../highLvlBuilders/order"));
8
+ const abstractAggregator_1 = __importDefault(require("./abstractAggregator"));
9
+ class SelectAggregator extends abstractAggregator_1.default {
10
+ // public constructor(table: AbstractTable<any>);
11
+ // public constructor(table: AbstractTable<any>, partial: {[name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, AbstractTable<any>>})
12
+ constructor(table, partial) {
13
+ super(table, partial);
14
+ this._from = [];
15
+ this._filters = [];
16
+ this._select = ['SELECT'];
17
+ this._join = [];
18
+ this._limit = [];
19
+ this._offset = [];
20
+ this._distinct = [];
21
+ // private _groupBy: Array<string> = [];
22
+ this._orderBy = [];
23
+ this._values = [];
24
+ this._joinCache = {};
25
+ this.filters = (filters) => {
26
+ if (filters) {
27
+ const queryBuilder = filters.toQuery(1, this._joinCache);
28
+ this._filters.push('WHERE ');
29
+ this._filters.push(queryBuilder.query);
30
+ this._values = queryBuilder.values;
31
+ }
32
+ return this;
33
+ };
34
+ this.limit = (limit) => {
35
+ if (limit) {
36
+ this._limit.push('LIMIT ');
37
+ this._limit.push(limit.toString());
38
+ }
39
+ return this;
40
+ };
41
+ this.offset = (offset) => {
42
+ if (offset) {
43
+ this._offset.push('OFFSET ');
44
+ this._offset.push(offset.toString());
45
+ }
46
+ return this;
47
+ };
48
+ this.orderBy = (column, order) => {
49
+ if (column !== null && column !== undefined) {
50
+ this._orderBy.push('ORDER BY ');
51
+ const columnParent = this._joinCache[column.getParent().tableName()] ? this._joinCache[column.getParent().tableName()] : column.getParent().tableName();
52
+ this._orderBy.push(`${columnParent}.${ecranate_1.ecranate(column.getColumnName())} `);
53
+ this._orderBy.push(order_1.default[order]);
54
+ }
55
+ return this;
56
+ };
57
+ this.distinct = (column) => {
58
+ if (column) {
59
+ this._distinct.push(` DISTINCT ON(${column.getParent().tableName()}.${ecranate_1.ecranate(column.getColumnName())}) `);
60
+ }
61
+ return this;
62
+ };
63
+ this.appendFrom = (tableName) => {
64
+ this._from.push('FROM ');
65
+ this._from.push(tableName);
66
+ // this._from.push(`${tableName} AS ${tableName}_0`);
67
+ this._joinCache[tableName] = tableName;
68
+ return this;
69
+ };
70
+ // Add select generator for second table also
71
+ this.join = (joins) => {
72
+ // const cache: {[tableName: string]: string} = {};
73
+ joins.forEach((joinObject) => {
74
+ if (joinObject) {
75
+ const tableFrom = joinObject.join.fromColumn.getParentName();
76
+ const tableTo = joinObject.join.toColumn.getParentName();
77
+ const { type } = joinObject.join;
78
+ let fromAlias = '';
79
+ if (this._joinCache[tableFrom]) {
80
+ fromAlias = this._joinCache[tableFrom];
81
+ }
82
+ else {
83
+ fromAlias = `${tableFrom}${joinObject.id ? `_${joinObject.id}` : ''}`;
84
+ this._joinCache[tableFrom] = fromAlias;
85
+ }
86
+ let selectString;
87
+ if (joinObject.partial) {
88
+ selectString = this.generateSelectArray(`${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`, Object.values(joinObject.partial), joinObject.id).join('');
89
+ }
90
+ else {
91
+ selectString = this.generateSelectArray(`${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`, Object.values(joinObject.join.mappedServiceToDb), joinObject.id).join('');
92
+ }
93
+ this._fields.push(', ');
94
+ this._fields.push(selectString);
95
+ this._join.push('\n');
96
+ this._join.push(type);
97
+ this._join.push(' ');
98
+ this._join.push(tableTo);
99
+ this._join.push(' ');
100
+ this._join.push(`AS ${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`);
101
+ this._joinCache[tableTo] = `${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`;
102
+ this._join.push('\n');
103
+ this._join.push('ON ');
104
+ this._join.push(fromAlias);
105
+ // if (this._joinCache[tableFrom]) {
106
+ // this._join.push(this._joinCache[tableFrom]);
107
+ // } else {
108
+ // this._join.push(tableFrom);
109
+ // this._joinCache[tableFrom] = `${tableFrom}${joinObject.id ? `_${joinObject.id}` : ''}`;
110
+ // }
111
+ this._join.push('.');
112
+ this._join.push(joinObject.join.fromColumn.getColumnName());
113
+ this._join.push(' = ');
114
+ this._join.push(`${tableTo}${joinObject.id ? `_${joinObject.id}` : ''}`);
115
+ // this._join.push(toAlias);
116
+ this._join.push('.');
117
+ this._join.push(joinObject.join.toColumn.getColumnName());
118
+ }
119
+ });
120
+ return this;
121
+ };
122
+ this.buildQuery = () => {
123
+ this._select.push(this._distinct.join(''));
124
+ this._select.push(this._fields.join(''));
125
+ this._select.push('\n');
126
+ this._select.push(this._from.join(''));
127
+ this._select.push('\n');
128
+ this._select.push(this._join.join(''));
129
+ if (this._join.length > 0) {
130
+ this._select.push('\n');
131
+ }
132
+ this._select.push(this._filters.join(''));
133
+ this._select.push('\n');
134
+ this._select.push(this._orderBy.join(''));
135
+ this._select.push('\n');
136
+ this._select.push(this._limit.join(''));
137
+ this._select.push('\n');
138
+ this._select.push(this._offset.join(''));
139
+ return { query: this._select.join(''), values: this._values };
140
+ };
141
+ }
142
+ }
143
+ exports.default = SelectAggregator;
@@ -0,0 +1,19 @@
1
+ import { AbstractTable } from '../../tables';
2
+ import { UpdateExpr } from '../requestBuilders/updates/updates';
3
+ import Expr from '../requestBuilders/where/where';
4
+ import Aggregator from './abstractAggregator';
5
+ export default class UpdateAggregator extends Aggregator {
6
+ private _updates;
7
+ private _filters;
8
+ private _from;
9
+ private _values;
10
+ private _update;
11
+ constructor(table: AbstractTable<any>);
12
+ where: (filters: Expr) => UpdateAggregator;
13
+ appendFrom: (tableName: string) => UpdateAggregator;
14
+ set: (updates: UpdateExpr) => UpdateAggregator;
15
+ buildQuery: () => {
16
+ query: string;
17
+ values: Array<any>;
18
+ };
19
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const abstractAggregator_1 = __importDefault(require("./abstractAggregator"));
7
+ class UpdateAggregator extends abstractAggregator_1.default {
8
+ constructor(table) {
9
+ super(table);
10
+ this._updates = [];
11
+ this._filters = [];
12
+ this._from = [];
13
+ this._values = [];
14
+ this._update = ['UPDATE'];
15
+ this.where = (filters) => {
16
+ if (filters) {
17
+ const currentPointerPosition = this._values.length > 0 ? this._values.length + 1 : undefined;
18
+ const filterQuery = filters.toQuery(currentPointerPosition);
19
+ this._filters.push('WHERE ');
20
+ this._filters.push(filterQuery.query);
21
+ this._values.push(...filterQuery.values);
22
+ }
23
+ return this;
24
+ };
25
+ this.appendFrom = (tableName) => {
26
+ this._from.push(' ');
27
+ this._from.push(tableName);
28
+ return this;
29
+ };
30
+ this.set = (updates) => {
31
+ const setQuery = updates.toQuery();
32
+ this._updates.push(`\nSET ${setQuery.query}`);
33
+ this._values.push(...setQuery.values);
34
+ return this;
35
+ };
36
+ this.buildQuery = () => {
37
+ this._update.push(this._from.join(''));
38
+ this._update.push('\n');
39
+ this._update.push(this._updates.join(''));
40
+ this._update.push('\n');
41
+ this._update.push(this._filters.join(''));
42
+ this._update.push('\n');
43
+ this._update.push('RETURNING');
44
+ this._update.push('\n');
45
+ this._update.push(this._fields.join(''));
46
+ return { query: this._update.join(''), values: this._values };
47
+ };
48
+ }
49
+ }
50
+ exports.default = UpdateAggregator;
@@ -0,0 +1,27 @@
1
+ import { AbstractColumn } from '../../columns/column';
2
+ import ColumnType from '../../columns/types/columnType';
3
+ import { ISession } from '../../db/session';
4
+ import BaseLogger from '../../logger/abstractLogger';
5
+ import { AbstractTable } from '../../tables';
6
+ import { ExtractModel } from '../../tables/inferTypes';
7
+ export default abstract class TableRequestBuilder<TTable extends AbstractTable<TTable>, TPartial extends {
8
+ [name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, TTable>;
9
+ } = {}> {
10
+ protected _table: TTable;
11
+ protected _session: ISession;
12
+ protected _mappedServiceToDb: {
13
+ [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
14
+ };
15
+ protected _columns: AbstractColumn<ColumnType>[];
16
+ protected _logger?: BaseLogger;
17
+ constructor(table: AbstractTable<TTable>, session: ISession, mappedServiceToDb: {
18
+ [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
19
+ }, logger?: BaseLogger);
20
+ all: () => Promise<([keyof TPartial] extends [never] ? ExtractModel<TTable> : ExtractModel<TPartial>)[]>;
21
+ /**
22
+ * Current function will return an element only if response is of length 1
23
+ * If there are more or less than 1 element, will throw an Error
24
+ */
25
+ findOne: () => Promise<[keyof TPartial] extends [never] ? ExtractModel<TTable> : ExtractModel<TPartial>>;
26
+ protected abstract _execute(): Promise<Array<[keyof TPartial] extends [never] ? ExtractModel<TTable> : ExtractModel<TPartial>>>;
27
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class TableRequestBuilder {
4
+ constructor(table, session, mappedServiceToDb, logger) {
5
+ this.all = async () => {
6
+ const res = await this._execute();
7
+ return res;
8
+ };
9
+ /**
10
+ * Current function will return an element only if response is of length 1
11
+ * If there are more or less than 1 element, will throw an Error
12
+ */
13
+ this.findOne = async () => {
14
+ const executionRes = await this._execute();
15
+ if (executionRes.length > 1) {
16
+ throw new Error('Request contains more than 1 element');
17
+ }
18
+ else if (executionRes.length < 1) {
19
+ throw new Error('Request contains less than 1 element ');
20
+ }
21
+ else {
22
+ return executionRes[0];
23
+ }
24
+ };
25
+ this._mappedServiceToDb = mappedServiceToDb;
26
+ this._table = table;
27
+ this._session = session;
28
+ this._columns = Object.values(mappedServiceToDb);
29
+ this._logger = logger;
30
+ }
31
+ }
32
+ exports.default = TableRequestBuilder;
@@ -0,0 +1,19 @@
1
+ import { AbstractColumn } from '../../columns/column';
2
+ import ColumnType from '../../columns/types/columnType';
3
+ import { ISession } from '../../db/session';
4
+ import BaseLogger from '../../logger/abstractLogger';
5
+ import { AbstractTable } from '../../tables';
6
+ import { ExtractModel } from '../../tables/inferTypes';
7
+ import Expr from '../requestBuilders/where/where';
8
+ import TableRequestBuilder from './abstractRequestBuilder';
9
+ export default class DeleteTRB<TTable extends AbstractTable<TTable>, TPartial extends {
10
+ [name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, TTable>;
11
+ } = {}> extends TableRequestBuilder<TTable, TPartial> {
12
+ private _filter;
13
+ constructor(table: AbstractTable<TTable>, session: ISession, mappedServiceToDb: {
14
+ [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
15
+ }, logger?: BaseLogger);
16
+ where: (expr: Expr) => DeleteTRB<TTable>;
17
+ execute: () => Promise<void>;
18
+ protected _execute: () => Promise<Array<[keyof TPartial] extends [never] ? ExtractModel<TTable> : ExtractModel<TPartial>>>;
19
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ const builderError_1 = __importStar(require("../../errors/builderError"));
26
+ const responseMapper_1 = __importDefault(require("../../mappers/responseMapper"));
27
+ const delete_1 = __importDefault(require("../lowLvlBuilders/delets/delete"));
28
+ const abstractRequestBuilder_1 = __importDefault(require("./abstractRequestBuilder"));
29
+ class DeleteTRB extends abstractRequestBuilder_1.default {
30
+ constructor(table, session, mappedServiceToDb, logger) {
31
+ super(table, session, mappedServiceToDb, logger);
32
+ this.where = (expr) => {
33
+ this._filter = expr;
34
+ return this;
35
+ };
36
+ this.execute = async () => {
37
+ await this._execute();
38
+ };
39
+ this._execute = async () => {
40
+ const queryBuilder = delete_1.default
41
+ .from(this._table)
42
+ .filteredBy(this._filter);
43
+ let query = '';
44
+ let values = [];
45
+ try {
46
+ const builderResult = queryBuilder.build();
47
+ query = builderResult.query;
48
+ values = builderResult.values;
49
+ }
50
+ catch (e) {
51
+ throw new builderError_1.default(builderError_1.BuilderType.DELETE, this._table.tableName(), this._columns, e, this._filter);
52
+ }
53
+ if (this._logger) {
54
+ this._logger.info(`Deleting from ${this._table.tableName()} using query:\n ${query}`);
55
+ }
56
+ const result = await this._session.execute(query, values);
57
+ return responseMapper_1.default.map(this._mappedServiceToDb, result);
58
+ };
59
+ }
60
+ }
61
+ exports.default = DeleteTRB;
@@ -0,0 +1,20 @@
1
+ import { AbstractColumn } from '../../columns/column';
2
+ import ColumnType from '../../columns/types/columnType';
3
+ import { ISession } from '../../db/session';
4
+ import BaseLogger from '../../logger/abstractLogger';
5
+ import { AbstractTable } from '../../tables';
6
+ import { ExtractModel, Indexing } from '../../tables/inferTypes';
7
+ import TableRequestBuilder from './abstractRequestBuilder';
8
+ export default class InsertTRB<TTable extends AbstractTable<TTable>, TPartial extends {
9
+ [name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, TTable>;
10
+ } = {}> extends TableRequestBuilder<TTable, TPartial> {
11
+ private _values;
12
+ private _onConflict;
13
+ private _onConflictField;
14
+ constructor(values: ExtractModel<TTable>[], session: ISession, mappedServiceToDb: {
15
+ [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
16
+ }, table: AbstractTable<TTable>, logger?: BaseLogger);
17
+ execute: () => Promise<void>;
18
+ onConflict: (callback: (table: TTable) => Indexing, update: Partial<ExtractModel<TTable>>) => InsertTRB<TTable>;
19
+ protected _execute: () => Promise<Array<[keyof TPartial] extends [never] ? ExtractModel<TTable> : ExtractModel<TPartial>>>;
20
+ }