drizzle-orm 0.9.11 → 0.9.15

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 (36) hide show
  1. package/README.md +385 -0
  2. package/builders/highLvlBuilders/abstractRequestBuilder.d.ts +3 -3
  3. package/builders/highLvlBuilders/deleteRequestBuilder.d.ts +2 -2
  4. package/builders/highLvlBuilders/deleteRequestBuilder.js +1 -8
  5. package/builders/highLvlBuilders/insertRequestBuilder.d.ts +2 -2
  6. package/builders/highLvlBuilders/insertRequestBuilder.js +1 -8
  7. package/builders/highLvlBuilders/selectRequestBuilder.d.ts +2 -2
  8. package/builders/highLvlBuilders/selectRequestBuilder.js +1 -8
  9. package/builders/highLvlBuilders/updateRequestBuilder.d.ts +2 -2
  10. package/builders/highLvlBuilders/updateRequestBuilder.js +1 -8
  11. package/builders/joinBuilders/builders/abstractJoinBuilder.d.ts +3 -3
  12. package/builders/joinBuilders/builders/abstractJoinBuilder.js +1 -8
  13. package/builders/joinBuilders/builders/selectWithFiveJoins.d.ts +2 -2
  14. package/builders/joinBuilders/builders/selectWithFourJoins.d.ts +2 -2
  15. package/builders/joinBuilders/builders/selectWithJoin.d.ts +2 -2
  16. package/builders/joinBuilders/builders/selectWithThreeJoins.d.ts +2 -2
  17. package/builders/joinBuilders/builders/selectWithTwoJoins.d.ts +2 -2
  18. package/builders/transaction/transaction.d.ts +2 -2
  19. package/db/db.d.ts +6 -7
  20. package/db/db.js +2 -3
  21. package/db/dbConnector.js +2 -1
  22. package/db/dbStringConnector.js +2 -1
  23. package/db/index.d.ts +1 -0
  24. package/db/index.js +3 -1
  25. package/db/session.d.ts +5 -3
  26. package/db/session.js +9 -13
  27. package/docs/cases/simple_insert.js +3 -3
  28. package/docs/cases/simple_join.js +2 -2
  29. package/docs/tables/usersTable.d.ts +0 -1
  30. package/docs/tables/usersTable.js +1 -1
  31. package/index.d.ts +0 -4
  32. package/index.js +0 -8
  33. package/migrator/migrator.js +7 -13
  34. package/package.json +1 -1
  35. package/tables/index.d.ts +1 -0
  36. package/test.js +30 -9
package/README.md ADDED
@@ -0,0 +1,385 @@
1
+ # DrizzleORM
2
+
3
+ **DrizzleORM** is an ORM framework for
4
+ [TypeScript](https://www.typescriptlang.org/).
5
+ It offers you several levels of Database communication:
6
+ * Typesafe Table View approach
7
+ * Typesafe Query Builder
8
+ * Simple SQL query execution
9
+
10
+ Drizzle ORM is highly influenced by [Exposed](https://github.com/JetBrains/Exposed) and Jetbrains development methodology
11
+
12
+ ## Supported Databases
13
+
14
+ * PostgreSQL
15
+
16
+ ## Links
17
+
18
+ In Progress
19
+
20
+ ## Installing
21
+
22
+ ```bash
23
+ npm install drizzle-orm drizzle-kit
24
+ ```
25
+ #### **In Progress**
26
+ ```bash
27
+ yarn add drizzle-orm drizzle-kit
28
+ bower install drizzle-orm drizzle-kit
29
+ ```
30
+
31
+ ## Connecting to database
32
+
33
+ ```tsx
34
+ import { DbConnector } from "drizzle-orm";
35
+
36
+ // connect via postgresql connection url
37
+ const db = await new DbConnector()
38
+ .connectionString("postgres://user:password@host:port/db")
39
+ .connect();
40
+
41
+ // or by params
42
+ const db = await new DbConnector()
43
+ .params({
44
+ host: '0.0.0.0',
45
+ port: 5432,
46
+ user: 'user',
47
+ password: 'password',
48
+ db: 'optional_db_name'
49
+ }).connect();
50
+ ```
51
+ ## Project structure
52
+ - tables folder
53
+ - migrations folder
54
+
55
+ ## Create tables
56
+ ### Users Table
57
+ ---
58
+ ```typescript
59
+
60
+ export const rolesEnum = createEnum({ alias: 'test-enum', values: ['user', 'guest', 'admin'] });
61
+
62
+ export default class UsersTable extends AbstractTable<UsersTable> {
63
+ public id = this.int('id').autoIncrement().primaryKey();
64
+ public fullName = this.text('full_name');
65
+
66
+ public phone = this.varchar('phone', { size: 256 });
67
+ public media = this.jsonb<string[]>('media');
68
+ public decimalField = this.decimal('test', { notNull: true, precision: 100, scale: 2 });
69
+ public bigIntField = this.bigint('test1');
70
+ public role = this.type(rolesEnum, 'name_in_table', { notNull: true });
71
+
72
+ public createdAt = this.timestamp('created_at', { notNull: true });
73
+ public updatedAt = this.timestamp('updated_at');
74
+ public isArchived = this.bool('is_archived').defaultValue(false);
75
+
76
+ public phoneFullNameIndex = this.index([this.phone, this.fullName]);
77
+ public phoneIndex = this.uniqueIndex(this.phone);
78
+
79
+ public tableName(): string {
80
+ return 'users';
81
+ }
82
+ }
83
+ ```
84
+ ### Cities Table
85
+ ---
86
+ ```typescript
87
+ interface CityMeta {
88
+ population: number,
89
+ connection: string,
90
+ }
91
+
92
+ export default class CitiesTable extends AbstractTable<CitiesTable> {
93
+ public id = this.int('id').autoIncrement().primaryKey();
94
+
95
+ public foundationDate = this.timestamp('name', { notNull: true });
96
+ public location = this.varchar('page', { size: 256 });
97
+
98
+ public userId = this.int('user_id').foreignKey(UsersTable, (table) => table.id, OnDelete.CASCADE);
99
+
100
+ public metadata = this.jsonb<CityMeta>('metadata');
101
+
102
+ public tableName(): string {
103
+ return 'cities';
104
+ }
105
+ }
106
+ ```
107
+ ### User Groups Table
108
+ ---
109
+ ```typescript
110
+ export default class UserGroupsTable extends AbstractTable<UserGroupsTable> {
111
+ public id = this.int('id').autoIncrement().primaryKey();
112
+
113
+ public name = this.varchar('name');
114
+ public description = this.varchar('description');
115
+
116
+ public tableName(): string {
117
+ return 'user_groups';
118
+ }
119
+ }
120
+ ```
121
+ ### User to User Groups Table
122
+ ---
123
+ #### Many to many connection between Users and User Groups
124
+ ```typescript
125
+ export default class UsersToUserGroupsTable extends AbstractTable<UsersToUserGroupsTable> {
126
+ public groupId = this.int('city_id').foreignKey(UserGroupsTable, (table) => table.id, OnDelete.CASCADE);
127
+ public userId = this.int('user_id').foreignKey(UsersTable, (table) => table.id, OnDelete.CASCADE);
128
+
129
+ public manyToManyIndex = this.index([this.groupId, this.userId]);
130
+
131
+ public tableName(): string {
132
+ return 'users_to_user_groups';
133
+ }
134
+ }
135
+ ```
136
+
137
+ ## CRUD
138
+ ### **SELECT**
139
+ ---
140
+ ```typescript
141
+ const db = await new DbConnector()
142
+ .connectionString('postgresql://postgres@127.0.0.1/drizzle')
143
+ .connect();
144
+
145
+ const usersTable = new UsersTable(db);
146
+
147
+ // select all
148
+ const allSelect = await usersTable.select().all();
149
+
150
+ // select first
151
+ const firstSelect = await usersTable.select().first();
152
+ ```
153
+ #### **Sorting and Filtering**
154
+ ---
155
+ ##### Select all records from `Users` where phone is `"hello"`
156
+ ```typescript
157
+ const eqSelect = await usersTable.select().where(
158
+ eq(usersTable.phone, 'hello')
159
+ ).all();
160
+ ```
161
+ ##### Select all records from `Users` where **both** phone is `"hello"` **and** phone is `"hello"`
162
+ ```typescript
163
+ const andSelect = await usersTable.select().where(
164
+ and([
165
+ eq(usersTable.phone, 'hello'),
166
+ eq(usersTable.phone, 'hello')
167
+ ]),
168
+ ).all();
169
+ ```
170
+ ##### Select all records from `Users` where **either** phone is `"hello"` **or** phone is `"hello"`
171
+ ```typescript
172
+ const orSelect = await usersTable.select().where(
173
+ or([eq(usersTable.phone, 'hello')]),
174
+ ).all();
175
+ ```
176
+ ##### Select all records from `Users` using **LIMIT** and **OFFSET**
177
+ ```typescript
178
+ const limitOffsetSelect = await usersTable.select({ limit: 10, offset: 10 }).all();
179
+ ```
180
+ ##### Select all records from `Users` where `phone` contains `"hello"`
181
+ ```typescript
182
+ const likeSelect = await usersTable.select().where(
183
+ like(usersTable.phone, '%hello%')
184
+ ).all();
185
+ ```
186
+ ##### Select all records from `Users` where `phone` equals to some of values from array
187
+ ```typescript
188
+ const inArraySelect = usersTable.select().where(
189
+ inArray(usersTable.phone, ['hello'])
190
+ ).all();
191
+ ```
192
+ ##### Select all records from `Users` where `phone` greater(**>**) than `"hello"`
193
+ ```typescript
194
+ const greaterSelect = usersTable.select().where(
195
+ greater(usersTable.phone, 'hello')
196
+ ).all();
197
+ ```
198
+ ##### Select all records from `Users` where `phone` less(**<**) than `"hello"`
199
+ ```typescript
200
+ const lessSelect = usersTable.select().where(
201
+ less(usersTable.phone, 'hello')
202
+ ).all();
203
+ ```
204
+ ##### Select all records from `Users` where `phone` greater or equals(**>=**) than `"hello"`
205
+ ```typescript
206
+ const greaterEqSelect = usersTable.select().where(
207
+ greaterEq(usersTable.phone, 'hello')
208
+ ).all();
209
+ ```
210
+ ##### Select all records from `Users` where `phone` less or equals(**<=**)
211
+ ```typescript
212
+ const lessEqSelect = usersTable.select().where(
213
+ lessEq(usersTable.phone, 'hello')
214
+ ).all();
215
+ ```
216
+ ##### Select all records from `Users` where `phone` is **NULL**
217
+ ```typescript
218
+ const isNullSelect = usersTable.select().where(
219
+ isNull(usersTable.phone)
220
+ ).all();
221
+ ```
222
+ ##### Select all records from `Users` where `phone` not equals to `"hello"`
223
+ ```typescript
224
+ const notEqSelect = usersTable.select().where(
225
+ notEq(usersTable.phone, 'hello')
226
+ ).all();
227
+ ```
228
+ ##### Select all records from `Users` ordered by `phone` in ascending order
229
+ ```typescript
230
+ const ordered = await usersTable.select().orderBy((table) => table.phone, Order.ASC).all();
231
+ ```
232
+
233
+ ### **Update**
234
+ ---
235
+ ##### Update `fullName` to `newName` in `Users` where phone is `"hello"`
236
+ ```typescript
237
+ await usersTable.update()
238
+ .where(eq(usersTable.phone, 'hello'))
239
+ .set({ fullName: 'newName' })
240
+ .execute();
241
+ ```
242
+ ##### Update `fullName` to `newName` in `Users` where phone is `"hello"` returning updated `User` model
243
+ ```typescript
244
+ await usersTable.update()
245
+ .where(eq(usersTable.phone, 'hello'))
246
+ .set({ fullName: 'newName' })
247
+ .all();
248
+ ```
249
+ ##### Update `fullName` to `newName` in `Users` where phone is `"hello"` returning updated `User` model
250
+ ```typescript
251
+ await usersTable.update()
252
+ .where(eq(usersTable.phone, 'hello'))
253
+ .set({ fullName: 'newName' })
254
+ .first();
255
+ ```
256
+
257
+ ### **Delete**
258
+ ##### Delete `user` where phone is `"hello"`
259
+ ```typescript
260
+ await usersTable.delete()
261
+ .where(eq(usersTable.phone, 'hello'))
262
+ .execute();
263
+ ```
264
+ ##### Delete `user` where phone is `"hello"` returning updated `User` model
265
+ ```typescript
266
+ await usersTable.delete()
267
+ .where(eq(usersTable.phone, 'hello'))
268
+ .all();
269
+ ```
270
+ ##### Delete `user` where phone is `"hello"` returning updated `User` model
271
+ ```typescript
272
+ await usersTable.delete()
273
+ .where(eq(usersTable.phone, 'hello'))
274
+ .first();
275
+ ```
276
+
277
+ ### **Insert**
278
+ ##### Insert `user` with required fields
279
+ ```typescript
280
+ await usersTable.insert({
281
+ test: 1,
282
+ createdAt: new Date(),
283
+ }).execute();
284
+ ```
285
+ ##### Insert `user` with required fields and get all rows as array
286
+ ```typescript
287
+ const user = await usersTable.insert({
288
+ test: 1,
289
+ createdAt: new Date(),
290
+ }).all();
291
+ ```
292
+ ##### Insert `user` with required fields and get inserted entity
293
+ ```typescript
294
+ const user = await usersTable.insert({
295
+ test: 1,
296
+ createdAt: new Date(),
297
+ }).first();
298
+ ```
299
+ ##### Insert many `users` with required fields and get all inserted entities
300
+ ```typescript
301
+ const users = await usersTable.insertMany([{
302
+ test: 1,
303
+ createdAt: new Date(),
304
+ }, {
305
+ test: 2,
306
+ createdAt: new Date(),
307
+ }]).all();
308
+ ```
309
+ ##### Insert many `users` with required fields and get all inserted entities. If such user already exists - update `phone` field
310
+ ```typescript
311
+ await usersTable.insertMany([{
312
+ test: 1,
313
+ createdAt: new Date(),
314
+ }, {
315
+ test: 2,
316
+ createdAt: new Date(),
317
+ }])
318
+ .onConflict(
319
+ (table) => table.phoneIndex,
320
+ { phone: 'confilctUpdate' },
321
+ ).all();
322
+ ```
323
+
324
+ ## Joins
325
+ ### Join One-To-Many Tables
326
+ ##### Join Cities with Users and map to city object with full user
327
+ ```typescript
328
+ const usersTable = new UsersTable(db);
329
+ const citiesTable = new CitiesTable(db);
330
+
331
+ const userWithCities = await citiesTable.select()
332
+ .where(eq(citiesTable.id, 1))
333
+ .leftJoin(UsersTable,
334
+ (city) => city.userId,
335
+ (users) => users.id)
336
+ .execute();
337
+
338
+ const citiesWithUserObject = userWithCities.map((city, user) => ({ ...city, user }));
339
+ ```
340
+
341
+ ### Join Many-To-Many Tables
342
+ ##### Join User Groups with Users, using many-to-many table and map response to get user object with groups array
343
+ ```typescript
344
+ const usersWithUserGroups = await usersToUserGroupsTable.select()
345
+ .where(eq(userGroupsTable.id, 1))
346
+ .leftJoin(UsersTable,
347
+ (userToGroup) => userToGroup.userId,
348
+ (users) => users.id)
349
+ .leftJoin(UserGroupsTable,
350
+ (userToGroup) => userToGroup.groupId,
351
+ (users) => users.id)
352
+ .execute();
353
+
354
+ const userGroupWithUsers = usersWithUserGroups.group({
355
+ one: (_, dbUser, dbUserGroup) => dbUser!,
356
+ many: (_, dbUser, dbUserGroup) => dbUserGroup!,
357
+ });
358
+
359
+ const userWithGroups: ExtractModel<UsersTable> & { groups: ExtractModel<UserGroupsTable>[] } = {
360
+ ...userGroupWithUsers.one,
361
+ groups: userGroupWithUsers.many,
362
+ };
363
+ ```
364
+ ##### Join User Groups with Users, using many-to-many table and map response to get user group object with users array
365
+ ```typescript
366
+ const usersWithUserGroups = await usersToUserGroupsTable.select()
367
+ .where(eq(userGroupsTable.id, 1))
368
+ .leftJoin(UsersTable,
369
+ (userToGroup) => userToGroup.userId,
370
+ (users) => users.id)
371
+ .leftJoin(UserGroupsTable,
372
+ (userToGroup) => userToGroup.groupId,
373
+ (users) => users.id)
374
+ .execute();
375
+
376
+ const userGroupWithUsers = usersWithUserGroups.group({
377
+ one: (_, dbUser, dbUserGroup) => dbUserGroup!,
378
+ many: (_, dbUser, dbUserGroup) => dbUser!,
379
+ });
380
+
381
+ const userWithGroups: ExtractModel<UserGroupsTable> & { users: ExtractModel<UsersTable>[] } = {
382
+ ...userGroupWithUsers.one,
383
+ users: userGroupWithUsers.many,
384
+ };
385
+ ```
@@ -1,18 +1,18 @@
1
1
  import { AbstractColumn } from '../../columns/column';
2
2
  import ColumnType from '../../columns/types/columnType';
3
- import Session from '../../db/session';
3
+ import { ISession } from '../../db/session';
4
4
  import BaseLogger from '../../logger/abstractLogger';
5
5
  import { AbstractTable } from '../../tables';
6
6
  import { ExtractModel } from '../../tables/inferTypes';
7
7
  export default abstract class TableRequestBuilder<TTable extends AbstractTable<TTable>> {
8
8
  protected _table: TTable;
9
- protected _session: Session;
9
+ protected _session: ISession;
10
10
  protected _mappedServiceToDb: {
11
11
  [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
12
12
  };
13
13
  protected _columns: AbstractColumn<ColumnType>[];
14
14
  protected _logger?: BaseLogger;
15
- constructor(table: AbstractTable<TTable>, session: Session, mappedServiceToDb: {
15
+ constructor(table: AbstractTable<TTable>, session: ISession, mappedServiceToDb: {
16
16
  [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
17
17
  }, logger?: BaseLogger);
18
18
  all: () => Promise<Array<ExtractModel<TTable> | undefined>>;
@@ -1,6 +1,6 @@
1
1
  import { AbstractColumn } from '../../columns/column';
2
2
  import ColumnType from '../../columns/types/columnType';
3
- import Session from '../../db/session';
3
+ import { ISession } from '../../db/session';
4
4
  import BaseLogger from '../../logger/abstractLogger';
5
5
  import { AbstractTable } from '../../tables';
6
6
  import { ExtractModel } from '../../tables/inferTypes';
@@ -8,7 +8,7 @@ import Expr from '../requestBuilders/where/where';
8
8
  import TableRequestBuilder from './abstractRequestBuilder';
9
9
  export default class DeleteTRB<TTable extends AbstractTable<TTable>> extends TableRequestBuilder<TTable> {
10
10
  private _filter;
11
- constructor(table: AbstractTable<TTable>, session: Session, mappedServiceToDb: {
11
+ constructor(table: AbstractTable<TTable>, session: ISession, mappedServiceToDb: {
12
12
  [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
13
13
  }, logger?: BaseLogger);
14
14
  where: (expr: Expr) => DeleteTRB<TTable>;
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const builderError_1 = require("../../errors/builderError");
4
- const dbErrors_1 = require("../../errors/dbErrors");
5
4
  const responseMapper_1 = require("../../mappers/responseMapper");
6
5
  const delete_1 = require("../lowLvlBuilders/delets/delete");
7
6
  const abstractRequestBuilder_1 = require("./abstractRequestBuilder");
@@ -30,13 +29,7 @@ class DeleteTRB extends abstractRequestBuilder_1.default {
30
29
  this._logger.info(`Deleting from ${this._table.tableName()} using query:\n ${query}`);
31
30
  }
32
31
  const result = await this._session.execute(query);
33
- if (result.isLeft()) {
34
- const { reason } = result.value;
35
- throw new dbErrors_1.DatabaseDeleteError(this._table.tableName(), reason, query);
36
- }
37
- else {
38
- return responseMapper_1.default.map(this._mappedServiceToDb, result.value);
39
- }
32
+ return responseMapper_1.default.map(this._mappedServiceToDb, result);
40
33
  };
41
34
  }
42
35
  }
@@ -1,6 +1,6 @@
1
1
  import { AbstractColumn } from '../../columns/column';
2
2
  import ColumnType from '../../columns/types/columnType';
3
- import Session from '../../db/session';
3
+ import { ISession } from '../../db/session';
4
4
  import BaseLogger from '../../logger/abstractLogger';
5
5
  import { AbstractTable } from '../../tables';
6
6
  import { ExtractModel, Indexing } from '../../tables/inferTypes';
@@ -9,7 +9,7 @@ export default class InsertTRB<TTable extends AbstractTable<TTable>> extends Tab
9
9
  private _values;
10
10
  private _onConflict;
11
11
  private _onConflictField;
12
- constructor(values: ExtractModel<TTable>[], session: Session, mappedServiceToDb: {
12
+ constructor(values: ExtractModel<TTable>[], session: ISession, mappedServiceToDb: {
13
13
  [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
14
14
  }, table: AbstractTable<TTable>, logger?: BaseLogger);
15
15
  execute: () => Promise<void>;
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const __1 = require("..");
4
4
  const builderError_1 = require("../../errors/builderError");
5
- const dbErrors_1 = require("../../errors/dbErrors");
6
5
  const responseMapper_1 = require("../../mappers/responseMapper");
7
6
  const insert_1 = require("../lowLvlBuilders/inserts/insert");
8
7
  const abstractRequestBuilder_1 = require("./abstractRequestBuilder");
@@ -40,13 +39,7 @@ class InsertTRB extends abstractRequestBuilder_1.default {
40
39
  this._logger.info(`Inserting to ${this._table.tableName()} using query:\n ${query}`);
41
40
  }
42
41
  const result = await this._session.execute(query);
43
- if (result.isLeft()) {
44
- const { reason } = result.value;
45
- throw new dbErrors_1.DatabaseInsertError(this._table.tableName(), reason, query);
46
- }
47
- else {
48
- return responseMapper_1.default.map(this._mappedServiceToDb, result.value);
49
- }
42
+ return responseMapper_1.default.map(this._mappedServiceToDb, result);
50
43
  };
51
44
  this._values = values;
52
45
  }
@@ -1,7 +1,7 @@
1
1
  import { AbstractColumn } from '../../columns/column';
2
2
  import ColumnType from '../../columns/types/columnType';
3
3
  import DB from '../../db/db';
4
- import Session from '../../db/session';
4
+ import { ISession } from '../../db/session';
5
5
  import BaseLogger from '../../logger/abstractLogger';
6
6
  import { AbstractTable } from '../../tables';
7
7
  import { ExtractModel } from '../../tables/inferTypes';
@@ -16,7 +16,7 @@ export default class SelectTRB<TTable extends AbstractTable<TTable>> extends Tab
16
16
  private __groupBy?;
17
17
  private __order?;
18
18
  private __distinct;
19
- constructor(session: Session, mappedServiceToDb: {
19
+ constructor(session: ISession, mappedServiceToDb: {
20
20
  [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
21
21
  }, props: {
22
22
  limit?: number;
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  /* eslint-disable import/no-cycle */
4
4
  const __1 = require("..");
5
5
  const builderError_1 = require("../../errors/builderError");
6
- const dbErrors_1 = require("../../errors/dbErrors");
7
6
  const responseMapper_1 = require("../../mappers/responseMapper");
8
7
  const selectWithJoin_1 = require("../joinBuilders/builders/selectWithJoin");
9
8
  const join_1 = require("../joinBuilders/join");
@@ -43,13 +42,7 @@ class SelectTRB extends abstractRequestBuilder_1.default {
43
42
  this._logger.info(`Selecting from ${this._table.tableName()} using query:\n ${query}`);
44
43
  }
45
44
  const result = await this._session.execute(query);
46
- if (result.isLeft()) {
47
- const { reason } = result.value;
48
- throw new dbErrors_1.DatabaseSelectError(this._table.tableName(), reason, query);
49
- }
50
- else {
51
- return responseMapper_1.default.map(this._mappedServiceToDb, result.value);
52
- }
45
+ return responseMapper_1.default.map(this._mappedServiceToDb, result);
53
46
  };
54
47
  this.props = props;
55
48
  }
@@ -1,6 +1,6 @@
1
1
  import { AbstractColumn } from '../../columns/column';
2
2
  import ColumnType from '../../columns/types/columnType';
3
- import Session from '../../db/session';
3
+ import { ISession } from '../../db/session';
4
4
  import BaseLogger from '../../logger/abstractLogger';
5
5
  import { AbstractTable } from '../../tables';
6
6
  import { ExtractModel, ExtractUpdateModel } from '../../tables/inferTypes';
@@ -10,7 +10,7 @@ export default class UpdateTRB<TTable extends AbstractTable<TTable>> extends Tab
10
10
  private _filter;
11
11
  private _update;
12
12
  private _objToUpdate;
13
- constructor(table: AbstractTable<TTable>, session: Session, mappedServiceToDb: {
13
+ constructor(table: AbstractTable<TTable>, session: ISession, mappedServiceToDb: {
14
14
  [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
15
15
  }, logger?: BaseLogger);
16
16
  where: (expr: Expr) => UpdateTRB<TTable>;
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const builderError_1 = require("../../errors/builderError");
4
- const dbErrors_1 = require("../../errors/dbErrors");
5
4
  const responseMapper_1 = require("../../mappers/responseMapper");
6
5
  const update_1 = require("../lowLvlBuilders/updates/update");
7
6
  const static_1 = require("../requestBuilders/updates/static");
@@ -48,13 +47,7 @@ class UpdateTRB extends abstractRequestBuilder_1.default {
48
47
  this._logger.info(`Updating ${this._table.tableName()} using query:\n ${query}`);
49
48
  }
50
49
  const result = await this._session.execute(query);
51
- if (result.isLeft()) {
52
- const { reason } = result.value;
53
- throw new dbErrors_1.DatabaseUpdateError(this._table.tableName(), reason, query);
54
- }
55
- else {
56
- return responseMapper_1.default.map(this._mappedServiceToDb, result.value);
57
- }
50
+ return responseMapper_1.default.map(this._mappedServiceToDb, result);
58
51
  };
59
52
  }
60
53
  }
@@ -1,14 +1,14 @@
1
1
  import { QueryResult } from 'pg';
2
2
  import { AbstractColumn } from '../../../columns/column';
3
3
  import ColumnType from '../../../columns/types/columnType';
4
- import Session from '../../../db/session';
4
+ import { ISession } from '../../../db/session';
5
5
  import { AbstractTable } from '../../../tables';
6
6
  import Order from '../../highLvlBuilders/order';
7
7
  import Expr from '../../requestBuilders/where/where';
8
8
  import Join from '../join';
9
9
  export default abstract class AbstractJoined<TTable extends AbstractTable<TTable>, TRes> {
10
10
  protected _table: TTable;
11
- protected _session: Session;
11
+ protected _session: ISession;
12
12
  protected _filter: Expr;
13
13
  protected _distinct?: AbstractColumn<ColumnType, boolean, boolean>;
14
14
  protected _props: {
@@ -17,7 +17,7 @@ export default abstract class AbstractJoined<TTable extends AbstractTable<TTable
17
17
  };
18
18
  protected _orderBy?: AbstractColumn<ColumnType, boolean, boolean>;
19
19
  protected _order?: Order;
20
- constructor(table: TTable, filter: Expr, session: Session, props: {
20
+ constructor(table: TTable, filter: Expr, session: ISession, props: {
21
21
  limit?: number;
22
22
  offset?: number;
23
23
  }, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const builderError_1 = require("../../../errors/builderError");
4
- const dbErrors_1 = require("../../../errors/dbErrors");
5
4
  const select_1 = require("../../lowLvlBuilders/selects/select");
6
5
  class AbstractJoined {
7
6
  constructor(table, filter, session, props, orderBy, order, distinct) {
@@ -22,13 +21,7 @@ class AbstractJoined {
22
21
  throw new builderError_1.default(builderError_1.BuilderType.JOINED_SELECT, this._table.tableName(), Object.values(this._table.mapServiceToDb()), e, this._filter);
23
22
  }
24
23
  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
- }
24
+ return this.mapResponse(result);
32
25
  };
33
26
  this._table = table;
34
27
  this._session = session;
@@ -1,7 +1,7 @@
1
1
  import { QueryResult } from 'pg';
2
2
  import { AbstractColumn } from '../../../columns/column';
3
3
  import ColumnType from '../../../columns/types/columnType';
4
- import Session from '../../../db/session';
4
+ import { ISession } from '../../../db/session';
5
5
  import { AbstractTable } from '../../../tables';
6
6
  import Order from '../../highLvlBuilders/order';
7
7
  import Expr from '../../requestBuilders/where/where';
@@ -14,7 +14,7 @@ export default class SelectTRBWithFiveJoins<TTable extends AbstractTable<TTable>
14
14
  private _join3;
15
15
  private _join4;
16
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: {
17
+ constructor(table: TTable, session: ISession, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, join3: Join<TTable3>, join4: Join<TTable4>, join5: Join<TTable5>, props: {
18
18
  limit?: number;
19
19
  offset?: number;
20
20
  }, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
@@ -2,7 +2,7 @@ import { QueryResult } from 'pg';
2
2
  import { AbstractColumn } from '../../../columns/column';
3
3
  import ColumnType from '../../../columns/types/columnType';
4
4
  import DB from '../../../db/db';
5
- import Session from '../../../db/session';
5
+ import { ISession } from '../../../db/session';
6
6
  import { AbstractTable } from '../../../tables';
7
7
  import Order from '../../highLvlBuilders/order';
8
8
  import Expr from '../../requestBuilders/where/where';
@@ -15,7 +15,7 @@ export default class SelectTRBWithFourJoins<TTable extends AbstractTable<TTable>
15
15
  private _join2;
16
16
  private _join3;
17
17
  private _join4;
18
- constructor(table: TTable, session: Session, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, join3: Join<TTable3>, join4: Join<TTable4>, props: {
18
+ constructor(table: TTable, session: ISession, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, join3: Join<TTable3>, join4: Join<TTable4>, props: {
19
19
  limit?: number;
20
20
  offset?: number;
21
21
  }, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
@@ -2,7 +2,7 @@ import { QueryResult } from 'pg';
2
2
  import { AbstractColumn } from '../../../columns/column';
3
3
  import ColumnType from '../../../columns/types/columnType';
4
4
  import DB from '../../../db/db';
5
- import Session from '../../../db/session';
5
+ import { ISession } from '../../../db/session';
6
6
  import AbstractTable from '../../../tables/abstractTable';
7
7
  import Order from '../../highLvlBuilders/order';
8
8
  import Expr from '../../requestBuilders/where/where';
@@ -12,7 +12,7 @@ import AbstractJoined from './abstractJoinBuilder';
12
12
  import SelectTRBWithTwoJoins from './selectWithTwoJoins';
13
13
  export default class SelectTRBWithJoin<TTable extends AbstractTable<TTable>, TTable1> extends AbstractJoined<TTable, SelectResponseJoin<TTable, TTable1>> {
14
14
  private _join;
15
- constructor(table: TTable, session: Session, filter: Expr, join: Join<TTable1>, props: {
15
+ constructor(table: TTable, session: ISession, filter: Expr, join: Join<TTable1>, props: {
16
16
  limit?: number;
17
17
  offset?: number;
18
18
  }, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
@@ -2,7 +2,7 @@ import { QueryResult } from 'pg';
2
2
  import { AbstractColumn } from '../../../columns/column';
3
3
  import ColumnType from '../../../columns/types/columnType';
4
4
  import DB from '../../../db/db';
5
- import Session from '../../../db/session';
5
+ import { ISession } from '../../../db/session';
6
6
  import AbstractTable from '../../../tables/abstractTable';
7
7
  import Order from '../../highLvlBuilders/order';
8
8
  import Expr from '../../requestBuilders/where/where';
@@ -14,7 +14,7 @@ export default class SelectTRBWithThreeJoins<TTable extends AbstractTable<TTable
14
14
  private _join1;
15
15
  private _join2;
16
16
  private _join3;
17
- constructor(table: TTable, session: Session, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, join3: Join<TTable3>, props: {
17
+ constructor(table: TTable, session: ISession, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, join3: Join<TTable3>, props: {
18
18
  limit?: number;
19
19
  offset?: number;
20
20
  }, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
@@ -2,7 +2,7 @@ import { QueryResult } from 'pg';
2
2
  import { AbstractColumn } from '../../../columns/column';
3
3
  import ColumnType from '../../../columns/types/columnType';
4
4
  import DB from '../../../db/db';
5
- import Session from '../../../db/session';
5
+ import { ISession } from '../../../db/session';
6
6
  import AbstractTable from '../../../tables/abstractTable';
7
7
  import Order from '../../highLvlBuilders/order';
8
8
  import Expr from '../../requestBuilders/where/where';
@@ -13,7 +13,7 @@ import SelectTRBWithThreeJoins from './selectWithThreeJoins';
13
13
  export default class SelectTRBWithTwoJoins<TTable extends AbstractTable<TTable>, TTable1, TTable2> extends AbstractJoined<TTable, SelectResponseTwoJoins<TTable, TTable1, TTable2>> {
14
14
  private _join1;
15
15
  private _join2;
16
- constructor(table: TTable, session: Session, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, props: {
16
+ constructor(table: TTable, session: ISession, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, props: {
17
17
  limit?: number;
18
18
  offset?: number;
19
19
  }, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
@@ -1,7 +1,7 @@
1
- import Session from '../../db/session';
1
+ import { ISession } from '../../db/session';
2
2
  export default class Transaction {
3
3
  private session;
4
- constructor(session: Session);
4
+ constructor(session: ISession);
5
5
  begin: () => Promise<Transaction>;
6
6
  commit: () => Promise<Transaction>;
7
7
  rollback: () => Promise<Transaction>;
package/db/db.d.ts CHANGED
@@ -1,19 +1,18 @@
1
- import { Pool } from 'pg';
2
1
  import BaseLogger from '../logger/abstractLogger';
3
2
  import { AbstractTable } from '../tables';
4
- import Session from './session';
3
+ import { ISession } from './session';
5
4
  export declare type TableConstructor = {
6
5
  new (db: DB): AbstractTable<any>;
7
6
  };
8
7
  export default class DB {
9
- private _session;
10
- private _logger?;
11
- private _cache;
12
- constructor(pool: Pool);
8
+ protected _session: ISession;
9
+ protected _logger?: BaseLogger;
10
+ protected _cache: Map<TableConstructor, AbstractTable<any>>;
11
+ constructor(session: ISession);
13
12
  create<TTable extends AbstractTable<TTable>>(t: new (db: DB) => TTable): TTable;
14
13
  useLogger: (logger: BaseLogger) => void;
15
14
  cache: () => Map<TableConstructor, AbstractTable<any>>;
16
15
  logger: () => BaseLogger | undefined;
17
- session: () => Session;
16
+ session: () => ISession;
18
17
  protected instanceFor<TTable extends AbstractTable<TTable>>(t: new (db: DB) => TTable): AbstractTable<any> | undefined;
19
18
  }
package/db/db.js CHANGED
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const session_1 = require("./session");
4
3
  class DB {
5
- constructor(pool) {
4
+ constructor(session) {
6
5
  this._cache = new Map();
7
6
  this.useLogger = (logger) => {
8
7
  this._logger = logger;
@@ -10,7 +9,7 @@ class DB {
10
9
  this.cache = () => this._cache;
11
10
  this.logger = () => this._logger;
12
11
  this.session = () => this._session;
13
- this._session = new session_1.default(pool);
12
+ this._session = session;
14
13
  }
15
14
  create(t) {
16
15
  if (!this._cache.has(t)) {
package/db/dbConnector.js CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const pg_1 = require("pg");
4
4
  const db_1 = require("./db");
5
5
  const dbStringConnector_1 = require("./dbStringConnector");
6
+ const session_1 = require("./session");
6
7
  class DbConnector {
7
8
  constructor() {
8
9
  this.connectionString = (url) => new dbStringConnector_1.default(url);
@@ -16,7 +17,7 @@ class DbConnector {
16
17
  await pool.connect();
17
18
  // console.log('Db connected!');
18
19
  // check if table structure is the same as in code
19
- return new db_1.default(pool);
20
+ return new db_1.default(new session_1.default(pool));
20
21
  }
21
22
  catch (e) {
22
23
  // console.log(`Connection error: ${e.message}`);
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const pg_1 = require("pg");
4
4
  const db_1 = require("./db");
5
+ const session_1 = require("./session");
5
6
  class DBStringConnector {
6
7
  constructor(url) {
7
8
  this.connect = async () => {
@@ -12,7 +13,7 @@ class DBStringConnector {
12
13
  const pool = new pg_1.Pool(config);
13
14
  await pool.connect();
14
15
  // console.log('Db connected!');
15
- return new db_1.default(pool);
16
+ return new db_1.default(new session_1.default(pool));
16
17
  }
17
18
  catch (e) {
18
19
  // console.log(`Connection error: ${e.message}`);
package/db/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { default as DB } from './db';
2
2
  export { default as DbConnector } from './dbConnector';
3
3
  export { default as DBStringConnector } from './dbStringConnector';
4
+ export { ISession } from './session';
package/db/index.js CHANGED
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DBStringConnector = exports.DbConnector = exports.DB = void 0;
3
+ exports.ISession = exports.DBStringConnector = exports.DbConnector = exports.DB = void 0;
4
4
  var db_1 = require("./db");
5
5
  Object.defineProperty(exports, "DB", { enumerable: true, get: function () { return db_1.default; } });
6
6
  var dbConnector_1 = require("./dbConnector");
7
7
  Object.defineProperty(exports, "DbConnector", { enumerable: true, get: function () { return dbConnector_1.default; } });
8
8
  var dbStringConnector_1 = require("./dbStringConnector");
9
9
  Object.defineProperty(exports, "DBStringConnector", { enumerable: true, get: function () { return dbStringConnector_1.default; } });
10
+ var session_1 = require("./session");
11
+ Object.defineProperty(exports, "ISession", { enumerable: true, get: function () { return session_1.ISession; } });
package/db/session.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import { Pool, QueryResult } from 'pg';
2
- import { Either, Failure } from '../errors/baseError';
3
- export default class Session {
2
+ export declare abstract class ISession {
3
+ abstract execute(query: string): Promise<QueryResult<any>>;
4
+ }
5
+ export default class Session extends ISession {
4
6
  private pool;
5
7
  constructor(pool: Pool);
6
- execute: (query: string) => Promise<Either<Failure, QueryResult<any>>>;
8
+ execute(query: string): Promise<QueryResult<any>>;
7
9
  }
package/db/session.js CHANGED
@@ -1,20 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const baseError_1 = require("../errors/baseError");
4
- class Session {
3
+ exports.ISession = void 0;
4
+ class ISession {
5
+ }
6
+ exports.ISession = ISession;
7
+ class Session extends ISession {
5
8
  constructor(pool) {
9
+ super();
6
10
  this.pool = pool;
7
- this.execute = async (query) => {
8
- try {
9
- return baseError_1.right(await this.pool.query(query));
10
- }
11
- catch (e) {
12
- return baseError_1.left({
13
- type: baseError_1.PgSessionError.PgQueryExecutionError,
14
- reason: e,
15
- });
16
- }
17
- };
11
+ }
12
+ execute(query) {
13
+ return this.pool.query(query);
18
14
  }
19
15
  }
20
16
  exports.default = Session;
@@ -17,7 +17,7 @@ const usersTable_1 = require("../tables/usersTable");
17
17
  await usersTable.insert({
18
18
  decimalField: 12.4,
19
19
  createdAt: new Date(),
20
- role: 'guest',
20
+ // role: 'guest',
21
21
  }).execute();
22
22
  const insertedCities = await citiesTable.insert({
23
23
  foundationDate: new Date(),
@@ -36,11 +36,11 @@ const usersTable_1 = require("../tables/usersTable");
36
36
  const conflictInsertedUsers = await usersTable.insertMany([{
37
37
  decimalField: 12.4,
38
38
  createdAt: new Date(),
39
- role: 'guest',
39
+ // role: 'guest',
40
40
  }, {
41
41
  decimalField: 32.4,
42
42
  createdAt: new Date(),
43
- role: 'admin',
43
+ // role: 'admin',
44
44
  phone: '+1808',
45
45
  }])
46
46
  .onConflict((table) => table.phoneIndex, { isArchived: true }).all();
@@ -24,11 +24,11 @@ const usersToUserGroups_1 = require("../tables/usersToUserGroups");
24
24
  const userRes = await usersTable.insertMany([{
25
25
  decimalField: 4.2,
26
26
  createdAt: new Date(),
27
- role: 'guest',
27
+ // role: 'guest',
28
28
  }, {
29
29
  decimalField: 5.8,
30
30
  createdAt: new Date(),
31
- role: 'user',
31
+ // role: 'user',
32
32
  }]).all();
33
33
  const citiesRes = await citiesTable.insertMany([{
34
34
  foundationDate: new Date(),
@@ -7,7 +7,6 @@ export default class UsersTable extends AbstractTable<UsersTable> {
7
7
  media: import("../..").Column<import("../..").PgJsonb<string[]>, true, false>;
8
8
  decimalField: import("../..").Column<import("../..").PgBigDecimal, false, false>;
9
9
  bigIntField: import("../..").Column<import("../..").PgBigInt, true, false>;
10
- role: import("../..").Column<import("../../columns/types/pgEnum").default<"user" | "guest" | "admin">, false, false>;
11
10
  createdAt: import("../..").Column<import("../..").PgTimestamp, false, false>;
12
11
  updatedAt: import("../..").Column<import("../..").PgTimestamp, true, false>;
13
12
  isArchived: import("../..").Column<import("../..").PgBoolean, true, false>;
@@ -15,7 +15,7 @@ class UsersTable extends abstractTable_1.default {
15
15
  this.media = this.jsonb('media');
16
16
  this.decimalField = this.decimal('test', { notNull: true, precision: 100, scale: 2 });
17
17
  this.bigIntField = this.bigint('test1');
18
- this.role = this.type(exports.rolesEnum, 'name_in_table', { notNull: true });
18
+ // public role = this.type(rolesEnum, 'name_in_table', { notNull: true });
19
19
  this.createdAt = this.timestamp('created_at', { notNull: true });
20
20
  this.updatedAt = this.timestamp('updated_at');
21
21
  this.isArchived = this.bool('is_archived').defaultValue(false);
package/index.d.ts CHANGED
@@ -1,13 +1,9 @@
1
1
  import { ClientConfig } from 'pg';
2
2
  import { DB } from './db';
3
- import Migrator from './migrator/migrator';
4
- import AbstractTable from './tables/abstractTable';
5
3
  export * from './db';
6
4
  export * from './builders';
7
5
  export * from './columns';
8
6
  export * from './tables';
9
7
  export declare const drizzle: {
10
- prepareCreateTable<TTable extends AbstractTable<TTable>>(table: AbstractTable<TTable>): string;
11
- migrator(db: DB): Migrator;
12
8
  connect(config: ClientConfig): Promise<DB>;
13
9
  };
package/index.js CHANGED
@@ -11,20 +11,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.drizzle = void 0;
14
- const create_1 = require("./builders/lowLvlBuilders/create");
15
14
  const db_1 = require("./db");
16
- const migrator_1 = require("./migrator/migrator");
17
15
  __exportStar(require("./db"), exports);
18
16
  __exportStar(require("./builders"), exports);
19
17
  __exportStar(require("./columns"), exports);
20
18
  __exportStar(require("./tables"), exports);
21
19
  exports.drizzle = {
22
- prepareCreateTable(table) {
23
- return create_1.default.table(table).build();
24
- },
25
- migrator(db) {
26
- return new migrator_1.default(db);
27
- },
28
20
  async connect(config) {
29
21
  const dbConnector = new db_1.DbConnector().params(config);
30
22
  return dbConnector.connect();
@@ -56,19 +56,13 @@ class Migrator {
56
56
  if (logger) {
57
57
  logger.info(`Executing migration with tag ${key} with query:\n${value}`);
58
58
  }
59
- const result = await this._db.session().execute(value);
60
- if (result.isLeft()) {
61
- const { reason } = result.value;
62
- throw new Error(`Error while executing migration tag ${key}. Error: ${reason}`);
63
- }
64
- else {
65
- await migrationsTable
66
- .insert({
67
- version: key,
68
- createdAt: new Date(),
69
- hash: Buffer.from(value).toString('base64'),
70
- }).execute();
71
- }
59
+ await this._db.session().execute(value);
60
+ await migrationsTable
61
+ .insert({
62
+ version: key,
63
+ createdAt: new Date(),
64
+ hash: Buffer.from(value).toString('base64'),
65
+ }).execute();
72
66
  }
73
67
  catch (e) {
74
68
  await transaction.rollback();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drizzle-orm",
3
- "version": "0.9.11",
3
+ "version": "0.9.15",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/tables/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export { default as MigrationsTable } from './migrationsTable';
2
2
  export { default as AbstractTable } from './abstractTable';
3
+ export { ExtractModel } from './inferTypes';
package/test.js CHANGED
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const _1 = require(".");
4
- const usersTable_1 = require("./docs/tables/usersTable");
5
3
  // import { Pool } from 'pg';
6
4
  // import { DB } from '.';
7
5
  // import { DB, DbConnector } from '.';
@@ -18,9 +16,6 @@ const fromTypeFile = (filepath) => {
18
16
  };
19
17
  (async () => {
20
18
  try {
21
- const db = await new _1.DbConnector()
22
- .connectionString('postgresql://postgres@127.0.0.1/migrator')
23
- .connect();
24
19
  // const ser = new MigrationSerializer();
25
20
  // const d = db.create(UsersTable) as unknown as AbstractTable<any>;
26
21
  // const f = ser.generate([d], []);
@@ -39,10 +34,36 @@ const fromTypeFile = (filepath) => {
39
34
  // const db = await new DbConnector()
40
35
  // .connectionString('postgresql://postgres@127.0.0.1/drizzle')
41
36
  // .connect();
42
- const usersTable = new usersTable_1.default(db);
43
- const res = await db.session().execute(_1.Create.table(db.create(usersTable_1.default)).build());
44
- // await usersTable.insert({
45
- // }).execute();
37
+ // const db = await new DbConnector()
38
+ // .connectionString('postgresql://postgres@127.0.0.1/migrator')
39
+ // .connect();
40
+ // const usersTable: UsersTable = new UsersTable(db);
41
+ // const knexInstance = knex.knex({
42
+ // client: 'pg',
43
+ // connection: 'postgresql://postgres@127.0.0.1/migrator',
44
+ // });
45
+ // const userTableForKnex: UsersTable = new UsersTable(knexDb);
46
+ // const users = await userTableForKnex.select().all();
47
+ // console.log(users[0]);
48
+ // const arr: AbstractColumn<ColumnType<any>, boolean, boolean>[] = [usersTable.id, usersTable.phone];
49
+ // const objectRes: {[name: string]: AbstractColumn<ColumnType, boolean, boolean>} = arr.reduce(
50
+ // (obj, item, index) => Object.assign(obj, { [Object.getOwnPropertyNames(item)[index]]: item }), {},
51
+ // );
52
+ // type f = ExtractModel<typeof objectRes1>;
53
+ // type d1 = ExtractModel<UsersTable>;
54
+ // const f = await usersTable.select()
55
+ // .fieldsv2({
56
+ // usersCount: count(usersTable.id),
57
+ // sumNumber: sum(usersTable.phone),
58
+ // role: usersTable.role,
59
+ // });
60
+ // const objectRes1 = {
61
+ // idid: usersTable.id,
62
+ // pisun: usersTable.phone,
63
+ // vau: usersTable.role,
64
+ // };
65
+ // type fd = ExtractModel<typeof objectRes1>;
66
+ // const g = await usersTable.select().execute();
46
67
  // if (res.isLeft()) {
47
68
  // console.log(res.value.reason);
48
69
  // } else {