drizzle-orm 0.9.0 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/builders/aggregators/abstractAggregator.d.ts +9 -0
- package/builders/aggregators/abstractAggregator.js +28 -0
- package/builders/aggregators/deleteAggregator.d.ts +12 -0
- package/builders/aggregators/deleteAggregator.js +36 -0
- package/builders/aggregators/insertAggregator.d.ts +18 -0
- package/builders/aggregators/insertAggregator.js +94 -0
- package/builders/aggregators/selectAggregator.d.ts +26 -0
- package/builders/aggregators/selectAggregator.js +106 -0
- package/builders/aggregators/updateAggregator.d.ts +15 -0
- package/builders/aggregators/updateAggregator.js +41 -0
- package/builders/highLvlBuilders/abstractRequestBuilder.d.ts +21 -0
- package/builders/highLvlBuilders/abstractRequestBuilder.js +21 -0
- package/builders/highLvlBuilders/deleteRequestBuilder.d.ts +17 -0
- package/builders/highLvlBuilders/deleteRequestBuilder.js +43 -0
- package/builders/highLvlBuilders/insertRequestBuilder.d.ts +18 -0
- package/builders/highLvlBuilders/insertRequestBuilder.js +54 -0
- package/builders/highLvlBuilders/order.d.ts +5 -0
- package/builders/highLvlBuilders/order.js +8 -0
- package/builders/highLvlBuilders/selectRequestBuilder.d.ts +42 -0
- package/builders/highLvlBuilders/selectRequestBuilder.js +99 -0
- package/builders/highLvlBuilders/updateRequestBuilder.d.ts +20 -0
- package/builders/highLvlBuilders/updateRequestBuilder.js +54 -0
- package/{src/builders/index.ts → builders/index.d.ts} +2 -4
- package/builders/index.js +50 -0
- package/builders/joinBuilders/builders/abstractJoinBuilder.d.ts +27 -0
- package/builders/joinBuilders/builders/abstractJoinBuilder.js +42 -0
- package/builders/joinBuilders/builders/selectWithFiveJoins.d.ts +23 -0
- package/builders/joinBuilders/builders/selectWithFiveJoins.js +33 -0
- package/builders/joinBuilders/builders/selectWithFourJoins.d.ts +36 -0
- package/builders/joinBuilders/builders/selectWithFourJoins.js +65 -0
- package/builders/joinBuilders/builders/selectWithJoin.d.ts +33 -0
- package/builders/joinBuilders/builders/selectWithJoin.js +56 -0
- package/builders/joinBuilders/builders/selectWithThreeJoins.d.ts +35 -0
- package/builders/joinBuilders/builders/selectWithThreeJoins.js +62 -0
- package/builders/joinBuilders/builders/selectWithTwoJoins.d.ts +34 -0
- package/builders/joinBuilders/builders/selectWithTwoJoins.js +59 -0
- package/builders/joinBuilders/join.d.ts +23 -0
- package/builders/joinBuilders/join.js +28 -0
- package/builders/joinBuilders/joinWith.d.ts +14 -0
- package/builders/joinBuilders/joinWith.js +11 -0
- package/builders/joinBuilders/responses/selectResponseFiveJoins.d.ts +19 -0
- package/builders/joinBuilders/responses/selectResponseFiveJoins.js +35 -0
- package/builders/joinBuilders/responses/selectResponseFourJoins.d.ts +18 -0
- package/builders/joinBuilders/responses/selectResponseFourJoins.js +34 -0
- package/builders/joinBuilders/responses/selectResponseThreeJoins.d.ts +17 -0
- package/builders/joinBuilders/responses/selectResponseThreeJoins.js +33 -0
- package/builders/joinBuilders/responses/selectResponseTwoJoins.d.ts +16 -0
- package/builders/joinBuilders/responses/selectResponseTwoJoins.js +32 -0
- package/builders/joinBuilders/responses/selectResponseWithJoin.d.ts +15 -0
- package/builders/joinBuilders/responses/selectResponseWithJoin.js +31 -0
- package/builders/joinBuilders/static.d.ts +5 -0
- package/builders/joinBuilders/static.js +6 -0
- package/{src/builders/lowLvlBuilders/alter.ts → builders/lowLvlBuilders/alter.d.ts} +0 -0
- package/builders/lowLvlBuilders/alter.js +1 -0
- package/builders/lowLvlBuilders/create.d.ts +12 -0
- package/builders/lowLvlBuilders/create.js +97 -0
- package/builders/lowLvlBuilders/delets/delete.d.ts +5 -0
- package/builders/lowLvlBuilders/delets/delete.js +12 -0
- package/builders/lowLvlBuilders/delets/deleteFilter.d.ts +8 -0
- package/builders/lowLvlBuilders/delets/deleteFilter.js +13 -0
- package/builders/lowLvlBuilders/delets/deleteFrom.d.ts +9 -0
- package/builders/lowLvlBuilders/delets/deleteFrom.js +11 -0
- package/builders/lowLvlBuilders/inserts/insert.d.ts +5 -0
- package/builders/lowLvlBuilders/inserts/insert.js +12 -0
- package/builders/lowLvlBuilders/inserts/insertInto.d.ts +10 -0
- package/builders/lowLvlBuilders/inserts/insertInto.js +13 -0
- package/builders/lowLvlBuilders/inserts/onConflictInsert.d.ts +9 -0
- package/builders/lowLvlBuilders/inserts/onConflictInsert.js +13 -0
- package/builders/lowLvlBuilders/inserts/valuesInsert.d.ts +13 -0
- package/builders/lowLvlBuilders/inserts/valuesInsert.js +16 -0
- package/builders/lowLvlBuilders/selects/select.d.ts +5 -0
- package/builders/lowLvlBuilders/selects/select.js +12 -0
- package/builders/lowLvlBuilders/selects/selectFrom.d.ts +19 -0
- package/builders/lowLvlBuilders/selects/selectFrom.js +31 -0
- package/builders/lowLvlBuilders/selects/selectJoined.d.ts +17 -0
- package/builders/lowLvlBuilders/selects/selectJoined.js +27 -0
- package/builders/lowLvlBuilders/selects/whereSelect.d.ts +14 -0
- package/builders/lowLvlBuilders/selects/whereSelect.js +25 -0
- package/builders/lowLvlBuilders/updates/update.d.ts +5 -0
- package/builders/lowLvlBuilders/updates/update.js +12 -0
- package/builders/lowLvlBuilders/updates/updateIn.d.ts +10 -0
- package/builders/lowLvlBuilders/updates/updateIn.js +12 -0
- package/builders/lowLvlBuilders/updates/whereSelect.d.ts +8 -0
- package/builders/lowLvlBuilders/updates/whereSelect.js +13 -0
- package/builders/lowLvlBuilders/updates/whereSet.d.ts +11 -0
- package/builders/lowLvlBuilders/updates/whereSet.js +15 -0
- package/builders/requestBuilders/updates/combine.d.ts +6 -0
- package/builders/requestBuilders/updates/combine.js +21 -0
- package/builders/requestBuilders/updates/setObjects.d.ts +9 -0
- package/builders/requestBuilders/updates/setObjects.js +12 -0
- package/builders/requestBuilders/updates/static.d.ts +6 -0
- package/builders/requestBuilders/updates/static.js +9 -0
- package/{src/builders/requestBuilders/updates/updates.ts → builders/requestBuilders/updates/updates.d.ts} +1 -1
- package/builders/requestBuilders/updates/updates.js +5 -0
- package/builders/requestBuilders/where/and.d.ts +6 -0
- package/builders/requestBuilders/where/and.js +22 -0
- package/builders/requestBuilders/where/const.d.ts +6 -0
- package/builders/requestBuilders/where/const.js +17 -0
- package/builders/requestBuilders/where/constArray.d.ts +6 -0
- package/builders/requestBuilders/where/constArray.js +27 -0
- package/builders/requestBuilders/where/eqWhere.d.ts +7 -0
- package/builders/requestBuilders/where/eqWhere.js +12 -0
- package/builders/requestBuilders/where/greater.d.ts +10 -0
- package/builders/requestBuilders/where/greater.js +12 -0
- package/builders/requestBuilders/where/greaterEq.d.ts +10 -0
- package/builders/requestBuilders/where/greaterEq.js +12 -0
- package/builders/requestBuilders/where/in.d.ts +7 -0
- package/builders/requestBuilders/where/in.js +12 -0
- package/builders/requestBuilders/where/isNull.d.ts +6 -0
- package/builders/requestBuilders/where/isNull.js +11 -0
- package/builders/requestBuilders/where/less.d.ts +10 -0
- package/builders/requestBuilders/where/less.js +12 -0
- package/builders/requestBuilders/where/lessEq.d.ts +10 -0
- package/builders/requestBuilders/where/lessEq.js +12 -0
- package/builders/requestBuilders/where/like.d.ts +7 -0
- package/builders/requestBuilders/where/like.js +12 -0
- package/builders/requestBuilders/where/notEqWhere.d.ts +7 -0
- package/builders/requestBuilders/where/notEqWhere.js +12 -0
- package/builders/requestBuilders/where/or.d.ts +6 -0
- package/builders/requestBuilders/where/or.js +22 -0
- package/builders/requestBuilders/where/rawWhere.d.ts +6 -0
- package/builders/requestBuilders/where/rawWhere.js +11 -0
- package/builders/requestBuilders/where/static.d.ts +16 -0
- package/builders/requestBuilders/where/static.js +43 -0
- package/builders/requestBuilders/where/var.d.ts +8 -0
- package/builders/requestBuilders/where/var.js +12 -0
- package/{src/builders/requestBuilders/where/where.ts → builders/requestBuilders/where/where.d.ts} +1 -1
- package/builders/requestBuilders/where/where.js +5 -0
- package/builders/transaction/transaction.d.ts +8 -0
- package/builders/transaction/transaction.js +20 -0
- package/columns/column.d.ts +61 -0
- package/columns/column.js +98 -0
- package/{src/columns/index.ts → columns/index.d.ts} +0 -0
- package/columns/index.js +23 -0
- package/columns/types/columnType.d.ts +7 -0
- package/columns/types/columnType.js +6 -0
- package/columns/types/pgBigDecimal.d.ts +10 -0
- package/columns/types/pgBigDecimal.js +28 -0
- package/columns/types/pgBigInt.d.ts +8 -0
- package/columns/types/pgBigInt.js +17 -0
- package/columns/types/pgBoolean.d.ts +8 -0
- package/columns/types/pgBoolean.js +15 -0
- package/columns/types/pgEnum.d.ts +9 -0
- package/columns/types/pgEnum.js +15 -0
- package/columns/types/pgInteger.d.ts +8 -0
- package/columns/types/pgInteger.js +15 -0
- package/columns/types/pgJsonb.d.ts +9 -0
- package/columns/types/pgJsonb.js +15 -0
- package/columns/types/pgText.d.ts +8 -0
- package/columns/types/pgText.js +15 -0
- package/columns/types/pgTime.d.ts +8 -0
- package/columns/types/pgTime.js +15 -0
- package/columns/types/pgTimestamp.d.ts +8 -0
- package/columns/types/pgTimestamp.js +15 -0
- package/columns/types/pgVarChar.d.ts +9 -0
- package/columns/types/pgVarChar.js +21 -0
- package/db/db.d.ts +19 -0
- package/db/db.js +26 -0
- package/db/dbConnector.d.ts +9 -0
- package/db/dbConnector.js +28 -0
- package/db/dbStringConnector.d.ts +6 -0
- package/db/dbStringConnector.js +25 -0
- package/{src/mappers/index.ts → db/group_by.d.ts} +0 -0
- package/db/group_by.js +68 -0
- package/{src/db/index.ts → db/index.d.ts} +0 -0
- package/db/index.js +9 -0
- package/db/session.d.ts +7 -0
- package/db/session.js +20 -0
- package/docs/cases/simple_delete.d.ts +1 -0
- package/docs/cases/simple_delete.js +30 -0
- package/docs/cases/simple_insert.d.ts +1 -0
- package/docs/cases/simple_insert.js +51 -0
- package/docs/cases/simple_join.d.ts +1 -0
- package/docs/cases/simple_join.js +95 -0
- package/docs/cases/simple_select.d.ts +1 -0
- package/docs/cases/simple_select.js +39 -0
- package/docs/cases/simple_update.d.ts +1 -0
- package/docs/cases/simple_update.js +33 -0
- package/docs/tables/citiesTable.d.ts +14 -0
- package/docs/tables/citiesTable.js +19 -0
- package/docs/tables/citiesToUsers.d.ts +7 -0
- package/docs/tables/citiesToUsers.js +18 -0
- package/docs/tables/userGroupsTable.d.ts +7 -0
- package/docs/tables/userGroupsTable.js +15 -0
- package/docs/tables/usersTable.d.ts +17 -0
- package/docs/tables/usersTable.js +29 -0
- package/docs/tables/usersToUserGroups.d.ts +7 -0
- package/docs/tables/usersToUserGroups.js +18 -0
- package/docs/types/rolesType.d.ts +1 -0
- package/docs/types/rolesType.js +6 -0
- package/errors/baseError.d.ts +22 -0
- package/errors/baseError.js +35 -0
- package/errors/builderError.d.ts +14 -0
- package/errors/builderError.js +24 -0
- package/errors/dbErrors.d.ts +12 -0
- package/errors/dbErrors.js +28 -0
- package/index.d.ts +13 -0
- package/index.js +32 -0
- package/indexes/tableIndex.d.ts +11 -0
- package/indexes/tableIndex.js +17 -0
- package/logger/abstractLogger.d.ts +4 -0
- package/logger/abstractLogger.js +5 -0
- package/logger/consoleLogger.d.ts +5 -0
- package/logger/consoleLogger.js +12 -0
- package/{src/migrator/index.ts → mappers/index.d.ts} +0 -0
- package/mappers/index.js +1 -0
- package/mappers/responseMapper.d.ts +7 -0
- package/mappers/responseMapper.js +23 -0
- package/migrator/index.d.ts +0 -0
- package/migrator/index.js +1 -0
- package/migrator/migrator.d.ts +16 -0
- package/migrator/migrator.js +101 -0
- package/package.json +2 -2
- package/serializer/serializer.d.ts +40 -0
- package/serializer/serializer.js +74 -0
- package/tables/abstractTable.d.ts +118 -0
- package/tables/abstractTable.js +116 -0
- package/{src/tables/index.ts → tables/index.d.ts} +0 -0
- package/tables/index.js +8 -0
- package/tables/inferTypes.d.ts +19 -0
- package/tables/inferTypes.js +2 -0
- package/tables/migrationsTable.d.ts +8 -0
- package/tables/migrationsTable.js +16 -0
- package/test.d.ts +1 -0
- package/test.js +81 -0
- package/types/type.d.ts +10 -0
- package/types/type.js +14 -0
- package/utils/ecranate.d.ts +2 -0
- package/utils/ecranate.js +8 -0
- package/.eslintrc +0 -26
- package/.tslintignore +0 -1
- package/LICENSE +0 -674
- package/README.md +0 -147
- package/src/builders/aggregators/abstractAggregator.ts +0 -37
- package/src/builders/aggregators/deleteAggregator.ts +0 -34
- package/src/builders/aggregators/insertAggregator.ts +0 -116
- package/src/builders/aggregators/selectAggregator.ts +0 -102
- package/src/builders/aggregators/updateAggregator.ts +0 -45
- package/src/builders/highLvlBuilders/abstractRequestBuilder.ts +0 -37
- package/src/builders/highLvlBuilders/deleteRequestBuilder.ts +0 -59
- package/src/builders/highLvlBuilders/insertRequestBuilder.ts +0 -87
- package/src/builders/highLvlBuilders/order.ts +0 -4
- package/src/builders/highLvlBuilders/selectRequestBuilder.ts +0 -102
- package/src/builders/highLvlBuilders/updateRequestBuilder.ts +0 -63
- package/src/builders/joinBuilders/builders/abstractJoinBuilder.ts +0 -22
- package/src/builders/joinBuilders/builders/selectWithFourJoins.ts +0 -71
- package/src/builders/joinBuilders/builders/selectWithJoin.ts +0 -67
- package/src/builders/joinBuilders/builders/selectWithThreeJoins.ts +0 -78
- package/src/builders/joinBuilders/builders/selectWithTwoJoins.ts +0 -72
- package/src/builders/joinBuilders/join.ts +0 -37
- package/src/builders/joinBuilders/joinWith.ts +0 -19
- package/src/builders/joinBuilders/responses/selectResponseFourJoins.ts +0 -33
- package/src/builders/joinBuilders/responses/selectResponseThreeJoins.ts +0 -29
- package/src/builders/joinBuilders/responses/selectResponseTwoJoins.ts +0 -22
- package/src/builders/joinBuilders/responses/selectResponseWithJoin.ts +0 -28
- package/src/builders/joinBuilders/static.ts +0 -9
- package/src/builders/lowLvlBuilders/create.ts +0 -114
- package/src/builders/lowLvlBuilders/delets/delete.ts +0 -10
- package/src/builders/lowLvlBuilders/delets/deleteFilter.ts +0 -17
- package/src/builders/lowLvlBuilders/delets/deleteFrom.ts +0 -15
- package/src/builders/lowLvlBuilders/inserts/insert.ts +0 -12
- package/src/builders/lowLvlBuilders/inserts/insertInto.ts +0 -18
- package/src/builders/lowLvlBuilders/inserts/onConflictInsert.ts +0 -19
- package/src/builders/lowLvlBuilders/inserts/valuesInsert.ts +0 -30
- package/src/builders/lowLvlBuilders/selects/select.ts +0 -12
- package/src/builders/lowLvlBuilders/selects/selectFrom.ts +0 -38
- package/src/builders/lowLvlBuilders/selects/selectJoined.ts +0 -40
- package/src/builders/lowLvlBuilders/selects/whereSelect.ts +0 -35
- package/src/builders/lowLvlBuilders/updates/update.ts +0 -10
- package/src/builders/lowLvlBuilders/updates/updateIn.ts +0 -22
- package/src/builders/lowLvlBuilders/updates/whereSelect.ts +0 -17
- package/src/builders/lowLvlBuilders/updates/whereSet.ts +0 -21
- package/src/builders/requestBuilders/updates/combine.ts +0 -25
- package/src/builders/requestBuilders/updates/setObjects.ts +0 -18
- package/src/builders/requestBuilders/updates/static.ts +0 -11
- package/src/builders/requestBuilders/where/and.ts +0 -26
- package/src/builders/requestBuilders/where/const.ts +0 -18
- package/src/builders/requestBuilders/where/constArray.ts +0 -27
- package/src/builders/requestBuilders/where/eqWhere.ts +0 -14
- package/src/builders/requestBuilders/where/greater.ts +0 -14
- package/src/builders/requestBuilders/where/greaterEq.ts +0 -14
- package/src/builders/requestBuilders/where/in.ts +0 -14
- package/src/builders/requestBuilders/where/less.ts +0 -14
- package/src/builders/requestBuilders/where/lessEq.ts +0 -14
- package/src/builders/requestBuilders/where/like.ts +0 -14
- package/src/builders/requestBuilders/where/or.ts +0 -26
- package/src/builders/requestBuilders/where/static.ts +0 -42
- package/src/builders/requestBuilders/where/var.ts +0 -15
- package/src/builders/transaction/transaction.ts +0 -21
- package/src/columns/column.ts +0 -86
- package/src/columns/types/columnType.ts +0 -7
- package/src/columns/types/pgBigDecimal.ts +0 -29
- package/src/columns/types/pgBigInt.ts +0 -20
- package/src/columns/types/pgBoolean.ts +0 -18
- package/src/columns/types/pgEnum.ts +0 -22
- package/src/columns/types/pgInteger.ts +0 -18
- package/src/columns/types/pgJsonb.ts +0 -19
- package/src/columns/types/pgText.ts +0 -18
- package/src/columns/types/pgTime.ts +0 -18
- package/src/columns/types/pgTimestamp.ts +0 -18
- package/src/columns/types/pgVarChar.ts +0 -24
- package/src/db/db.ts +0 -29
- package/src/db/dbConnector.ts +0 -30
- package/src/db/dbStringConnector.ts +0 -28
- package/src/db/session.ts +0 -21
- package/src/errors/baseError.ts +0 -47
- package/src/errors/builderError.ts +0 -30
- package/src/errors/dbErrors.ts +0 -24
- package/src/examples/tables/authOtpTable.ts +0 -17
- package/src/examples/tables/cityTable.ts +0 -15
- package/src/examples/tables/usersTable.ts +0 -18
- package/src/examples/testEnum.ts +0 -6
- package/src/index.ts +0 -40
- package/src/indexes/tableIndex.ts +0 -19
- package/src/logger/abstractLogger.ts +0 -4
- package/src/logger/consoleLogger.ts +0 -11
- package/src/mappers/responseMapper.ts +0 -24
- package/src/migrator/migrator.ts +0 -110
- package/src/serializer/Untitled.js +0 -72
- package/src/serializer/out.json +0 -140
- package/src/tables/abstractTable.ts +0 -183
- package/src/tables/inferTypes.ts +0 -34
- package/src/tables/migrationsTable.ts +0 -12
- package/src/utils/ecranate.ts +0 -4
- package/tsconfig.json +0 -29
package/README.md
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
# DrizzleORM
|
|
2
|
-
|
|
3
|
-
**Drizzle ORM** 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-cli
|
|
24
|
-
yarn add drizzle-orm drizzle-cli
|
|
25
|
-
bower install drizzle-orm drizzle-cli
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Connecting to database
|
|
29
|
-
|
|
30
|
-
```tsx
|
|
31
|
-
import { DbConnector } from "drizzle-orm";
|
|
32
|
-
|
|
33
|
-
// connect via postgresql connection url
|
|
34
|
-
|
|
35
|
-
// I would do import drizzle from 'drizzle-orm'
|
|
36
|
-
// const db = await drizzle.connect(string|configobj);
|
|
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
|
-
|
|
52
|
-
## Creating your first table and first migration
|
|
53
|
-
|
|
54
|
-
```tsx
|
|
55
|
-
class UsersTable extends AbstractTable<UsersTable> {
|
|
56
|
-
public id = this.int("id").primaryKey().autoIncrement();
|
|
57
|
-
public name = this.varchar("name", { size: 512 });
|
|
58
|
-
public email = this.varchar("email", { size: 512 }).unique();
|
|
59
|
-
|
|
60
|
-
public tableName(): string {
|
|
61
|
-
return "users";
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// lets create your first SQL migration to create initial schema
|
|
66
|
-
// > npx drizzle migrate
|
|
67
|
-
|
|
68
|
-
const migrator = new Migrator(db);
|
|
69
|
-
await migrator.runMigrations('./drizzle_orm/migrations')
|
|
70
|
-
// That's it!! No metaprogramming, no black magic, everything's imperative
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Inserting into tables
|
|
74
|
-
Returned entity is of type ExtractModel<UsersTable> which does have a set of typed fields
|
|
75
|
-
|
|
76
|
-
```tsx
|
|
77
|
-
const email = 'email@example.com'
|
|
78
|
-
const name = 'Full Name'
|
|
79
|
-
|
|
80
|
-
// returns inserted user
|
|
81
|
-
const user = await table.insert({ email, name }).first()
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
## Simple querying with/without filters
|
|
85
|
-
__For more complex filtering - see `advanced querying`__
|
|
86
|
-
|
|
87
|
-
```tsx
|
|
88
|
-
const email = 'email@example.com'
|
|
89
|
-
|
|
90
|
-
const allUsers = await table.select().all()
|
|
91
|
-
const firstUser = await table.select().first()
|
|
92
|
-
|
|
93
|
-
const userWithEmail = await table.select(eq(table.email, email)).first()
|
|
94
|
-
|
|
95
|
-
// If you need to declare type explicitely
|
|
96
|
-
type User = ExtractModel<UsersTable>
|
|
97
|
-
|
|
98
|
-
const user: User = await table.select().first()
|
|
99
|
-
user.email
|
|
100
|
-
user.id
|
|
101
|
-
|
|
102
|
-
// Works perfectly!
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
## Joins
|
|
106
|
-
|
|
107
|
-
```tsx
|
|
108
|
-
class ItemsTable extends AbstractTable<ItemsTable>{
|
|
109
|
-
id = this.int("id").primaryKey().autoIncrement();
|
|
110
|
-
name = this.varchar("name");
|
|
111
|
-
|
|
112
|
-
// many to one relation
|
|
113
|
-
ownerId = this.int("owner_id").foreignKey(UsersTable, (t) => t.id);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
const query = usersTable.select().leftJoin(
|
|
117
|
-
ItemsTable,
|
|
118
|
-
(ut) => ut.id, // user id
|
|
119
|
-
(it) => it.ownerId // item owner id
|
|
120
|
-
);
|
|
121
|
-
|
|
122
|
-
const result = (await query.execute()).map((user, item) => {
|
|
123
|
-
return { user, item };
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
// result would be
|
|
127
|
-
[{
|
|
128
|
-
user: { id: 10, ... },
|
|
129
|
-
item: { id: 1, ... }
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
user: { id: 10, ... },
|
|
133
|
-
item: { id: 2, ... }
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
user: { id: 10, ... },
|
|
137
|
-
item: { id: 3, ... }
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
user: { id: 11, ... },
|
|
141
|
-
item: { id: 4, ... }
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
user: { id: 11, ... },
|
|
145
|
-
item: { id: 5, ... }
|
|
146
|
-
}]
|
|
147
|
-
```
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { Column } from '../../columns/column';
|
|
2
|
-
import ColumnType from '../../columns/types/columnType';
|
|
3
|
-
import { ecranate } from '../../utils/ecranate';
|
|
4
|
-
|
|
5
|
-
export default class Aggregator {
|
|
6
|
-
protected _fields: Array<string> = [];
|
|
7
|
-
protected _tableName: string;
|
|
8
|
-
protected _columnsTypes: Column<ColumnType>[];
|
|
9
|
-
|
|
10
|
-
public constructor(tableName: string) {
|
|
11
|
-
this._tableName = tableName;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
public appendFields = (columns: Column<ColumnType>[]) => {
|
|
15
|
-
this._fields = this.generateSelectArray(this._tableName, columns);
|
|
16
|
-
this._columnsTypes = columns;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
protected generateSelectArray = (table: string, columns: Column<ColumnType>[]) => {
|
|
20
|
-
const selectFields: string[] = [];
|
|
21
|
-
|
|
22
|
-
columns.forEach((field: any) => {
|
|
23
|
-
if (field instanceof Column) {
|
|
24
|
-
selectFields.push(' ');
|
|
25
|
-
selectFields.push(table);
|
|
26
|
-
selectFields.push('.');
|
|
27
|
-
selectFields.push(ecranate(field.columnName));
|
|
28
|
-
selectFields.push(' AS ');
|
|
29
|
-
selectFields.push(ecranate(`${table.replace('.', '_')}_${field.columnName}`));
|
|
30
|
-
selectFields.push(',');
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
selectFields.pop();
|
|
35
|
-
return selectFields;
|
|
36
|
-
};
|
|
37
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import Expr from '../requestBuilders/where/where';
|
|
2
|
-
import Aggregator from './abstractAggregator';
|
|
3
|
-
|
|
4
|
-
export default class DeleteAggregator extends Aggregator {
|
|
5
|
-
private _from: Array<string> = [];
|
|
6
|
-
private _filters: Array<string> = [];
|
|
7
|
-
private _delete: Array<string> = ['DELETE'];
|
|
8
|
-
|
|
9
|
-
public constructor(tableName: string) {
|
|
10
|
-
super(tableName);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
public filters = (filters: Expr): DeleteAggregator => {
|
|
14
|
-
this._filters.push('WHERE ');
|
|
15
|
-
this._filters.push(filters.toQuery());
|
|
16
|
-
return this;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
public appendFrom = (tableName: string): DeleteAggregator => {
|
|
20
|
-
this._from.push(' FROM ');
|
|
21
|
-
this._from.push(tableName);
|
|
22
|
-
return this;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
public buildQuery = () => {
|
|
26
|
-
// this._delete.push(this._fields.join(''));
|
|
27
|
-
this._delete.push('\n');
|
|
28
|
-
this._delete.push(this._from.join(''));
|
|
29
|
-
this._delete.push('\n');
|
|
30
|
-
this._delete.push(this._filters.join(''));
|
|
31
|
-
|
|
32
|
-
return this._delete.join('');
|
|
33
|
-
};
|
|
34
|
-
}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { Column } from '../../columns/column';
|
|
2
|
-
import ColumnType from '../../columns/types/columnType';
|
|
3
|
-
import { Indexing } from '../../tables/inferTypes';
|
|
4
|
-
import UpdateExpr from '../requestBuilders/updates/updates';
|
|
5
|
-
import Aggregator from './abstractAggregator';
|
|
6
|
-
|
|
7
|
-
export default class InsertAggregator extends Aggregator {
|
|
8
|
-
private _onConflict: Array<string> = [];
|
|
9
|
-
private _columns: Array<string> = [];
|
|
10
|
-
private _values: Array<string> = [];
|
|
11
|
-
private _from: Array<string> = [];
|
|
12
|
-
private _insert: Array<string> = ['INSERT INTO'];
|
|
13
|
-
|
|
14
|
-
public constructor(tableName: string) {
|
|
15
|
-
super(tableName);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
public appendFrom = (tableName: string): InsertAggregator => {
|
|
19
|
-
this._from.push(' ');
|
|
20
|
-
this._from.push(tableName);
|
|
21
|
-
this._tableName = tableName;
|
|
22
|
-
return this;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
// @TODO refactor!!
|
|
26
|
-
public appendColumns = <T>(values: Array<T>) => {
|
|
27
|
-
// @TODO Check if values not empty
|
|
28
|
-
const columns = Object.keys(values[0]);
|
|
29
|
-
|
|
30
|
-
for (let i = 0; i < columns.length; i += 1) {
|
|
31
|
-
const column = columns[i];
|
|
32
|
-
|
|
33
|
-
this._columns.push('"');
|
|
34
|
-
this._columns.push(column);
|
|
35
|
-
this._columns.push('"');
|
|
36
|
-
|
|
37
|
-
if (i < columns.length - 1) {
|
|
38
|
-
this._columns.push(', ');
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
// @TODO refactor!!
|
|
44
|
-
public appendValues = <T>(mapper: {[name in keyof T]: Column<ColumnType>},
|
|
45
|
-
values: {[name: string]: any}[]) => {
|
|
46
|
-
// @TODO Check if values not empty
|
|
47
|
-
for (let i = 0; i < values.length; i += 1) {
|
|
48
|
-
const value = values[i];
|
|
49
|
-
const insertValues = Object.values(value);
|
|
50
|
-
const insertKeys = Object.keys(value);
|
|
51
|
-
|
|
52
|
-
this._values.push('(');
|
|
53
|
-
for (let j = 0; j < insertValues.length; j += 1) {
|
|
54
|
-
const insertValue = insertValues[j];
|
|
55
|
-
const insertKey = insertKeys[j];
|
|
56
|
-
|
|
57
|
-
const columnKey = Object.keys(mapper)
|
|
58
|
-
.find((it) => mapper[it as keyof T].columnName === insertKey)!;
|
|
59
|
-
const column = mapper[columnKey as keyof T];
|
|
60
|
-
if (insertValue !== undefined && insertValue !== null) {
|
|
61
|
-
this._values.push(column.columnType.insertStrategy(insertValue));
|
|
62
|
-
} else {
|
|
63
|
-
this._values.push('null');
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (j < insertValues.length - 1) {
|
|
67
|
-
this._values.push(', ');
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
if (i < values.length - 1) {
|
|
71
|
-
this._values.push('),\n');
|
|
72
|
-
} else {
|
|
73
|
-
this._values.push(')\n');
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
public appendOnConflict = (column: Indexing,
|
|
79
|
-
updates?: UpdateExpr) => {
|
|
80
|
-
const indexName = column instanceof Column ? column.columnName : column.indexName();
|
|
81
|
-
|
|
82
|
-
this._onConflict.push(`ON CONFLICT ON CONSTRAINT ${indexName}\n`);
|
|
83
|
-
if (updates) {
|
|
84
|
-
this._onConflict.push('DO UPDATE\n');
|
|
85
|
-
this._onConflict.push(`SET ${updates.toQuery()}`);
|
|
86
|
-
} else {
|
|
87
|
-
this._onConflict.push('DO NOTHING\n');
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return this;
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
public buildQuery = () => {
|
|
94
|
-
this._insert.push(this._from.join(''));
|
|
95
|
-
this._insert.push(' (');
|
|
96
|
-
this._insert.push(this._columns.join(''));
|
|
97
|
-
this._insert.push(') ');
|
|
98
|
-
this._insert.push('VALUES\n');
|
|
99
|
-
this._insert.push(this._values.join(''));
|
|
100
|
-
this._insert.push('\n');
|
|
101
|
-
this._insert.push('\n');
|
|
102
|
-
this._insert.push('RETURNING');
|
|
103
|
-
this._insert.push('\n');
|
|
104
|
-
this._insert.push(this._fields.join(''));
|
|
105
|
-
this._insert.push('\n');
|
|
106
|
-
this._insert.push(this._onConflict.join(''));
|
|
107
|
-
// this._insert.push("ON CONFLICT ON CONSTRAINT \"");
|
|
108
|
-
// this._insert.push(this._table.tableName());
|
|
109
|
-
// this._insert.push("_");
|
|
110
|
-
// this._insert.push(this._table);
|
|
111
|
-
// this._insert.push("\n");
|
|
112
|
-
// this._insert.push(this._fields.join(''));
|
|
113
|
-
|
|
114
|
-
return this._insert.join('');
|
|
115
|
-
};
|
|
116
|
-
}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { Column } from '../../columns';
|
|
2
|
-
import ColumnType from '../../columns/types/columnType';
|
|
3
|
-
import Order from '../highLvlBuilders/order';
|
|
4
|
-
import Join from '../joinBuilders/join';
|
|
5
|
-
import Expr from '../requestBuilders/where/where';
|
|
6
|
-
import Aggregator from './abstractAggregator';
|
|
7
|
-
|
|
8
|
-
export default class SelectAggregator extends Aggregator {
|
|
9
|
-
private _from: Array<string> = [];
|
|
10
|
-
private _filters: Array<string> = [];
|
|
11
|
-
private _select: Array<string> = ['SELECT'];
|
|
12
|
-
private _join: Array<string> = [];
|
|
13
|
-
private _limit: Array<string> = [];
|
|
14
|
-
private _offset: Array<string> = [];
|
|
15
|
-
// private _groupBy: Array<string> = [];
|
|
16
|
-
private _orderBy: Array<string> = [];
|
|
17
|
-
|
|
18
|
-
public constructor(tableName: string) {
|
|
19
|
-
super(tableName);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
public filters = (filters: Expr): SelectAggregator => {
|
|
23
|
-
this._filters.push('WHERE ');
|
|
24
|
-
this._filters.push(filters.toQuery());
|
|
25
|
-
return this;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
public limit = (limit: number): SelectAggregator => {
|
|
29
|
-
this._limit.push('LIMIT ');
|
|
30
|
-
this._limit.push(limit.toString());
|
|
31
|
-
return this;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
public offset = (limit: number): SelectAggregator => {
|
|
35
|
-
this._offset.push('OFFSET ');
|
|
36
|
-
this._offset.push(limit.toString());
|
|
37
|
-
return this;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
public orderBy = (column: Column<ColumnType, boolean, boolean>, order: Order)
|
|
41
|
-
: SelectAggregator => {
|
|
42
|
-
this._orderBy.push('ORDER BY ');
|
|
43
|
-
this._orderBy.push(`${column.columnName} `);
|
|
44
|
-
this._orderBy.push(Order[order]);
|
|
45
|
-
return this;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
public appendFrom = (tableName: string): SelectAggregator => {
|
|
49
|
-
this._from.push('FROM ');
|
|
50
|
-
this._from.push(tableName);
|
|
51
|
-
return this;
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
// Add select generator for second table also
|
|
55
|
-
public join = <COLUMN extends ColumnType>(joins: Array<Join<COLUMN,
|
|
56
|
-
{}>>): SelectAggregator => {
|
|
57
|
-
joins.forEach((join: Join<COLUMN, {}>) => {
|
|
58
|
-
const tableFrom = join.fromColumn.getParent();
|
|
59
|
-
const tableTo = join.toColumn.getParent();
|
|
60
|
-
const { type } = join;
|
|
61
|
-
|
|
62
|
-
const selectString = this.generateSelectArray(tableTo, Object.values(join.mappedServiceToDb)).join('');
|
|
63
|
-
this._fields.push(', ');
|
|
64
|
-
this._fields.push(selectString);
|
|
65
|
-
this._join.push('\n');
|
|
66
|
-
this._join.push(type);
|
|
67
|
-
this._join.push(' ');
|
|
68
|
-
this._join.push(tableTo);
|
|
69
|
-
this._join.push('\n');
|
|
70
|
-
this._join.push('ON ');
|
|
71
|
-
this._join.push(tableFrom);
|
|
72
|
-
this._join.push('.');
|
|
73
|
-
this._join.push(join.fromColumn.columnName);
|
|
74
|
-
this._join.push(' = ');
|
|
75
|
-
this._join.push(tableTo);
|
|
76
|
-
this._join.push('.');
|
|
77
|
-
this._join.push(join.toColumn.columnName);
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
return this;
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
public buildQuery = () => {
|
|
84
|
-
this._select.push(this._fields.join(''));
|
|
85
|
-
this._select.push('\n');
|
|
86
|
-
this._select.push(this._from.join(''));
|
|
87
|
-
this._select.push('\n');
|
|
88
|
-
this._select.push(this._join.join(''));
|
|
89
|
-
if (this._join.length > 0) {
|
|
90
|
-
this._select.push('\n');
|
|
91
|
-
}
|
|
92
|
-
this._select.push(this._filters.join(''));
|
|
93
|
-
this._select.push('\n');
|
|
94
|
-
this._select.push(this._orderBy.join(''));
|
|
95
|
-
this._select.push('\n');
|
|
96
|
-
this._select.push(this._limit.join(''));
|
|
97
|
-
this._select.push('\n');
|
|
98
|
-
this._select.push(this._offset.join(''));
|
|
99
|
-
|
|
100
|
-
return this._select.join('');
|
|
101
|
-
};
|
|
102
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import UpdateExpr from '../requestBuilders/updates/updates';
|
|
2
|
-
import Expr from '../requestBuilders/where/where';
|
|
3
|
-
import Aggregator from './abstractAggregator';
|
|
4
|
-
|
|
5
|
-
export default class UpdateAggregator extends Aggregator {
|
|
6
|
-
private _updates: Array<string> = [];
|
|
7
|
-
private _filters: Array<string> = [];
|
|
8
|
-
private _from: Array<string> = [];
|
|
9
|
-
private _update: Array<string> = ['UPDATE'];
|
|
10
|
-
|
|
11
|
-
public constructor(tableName: string) {
|
|
12
|
-
super(tableName);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
public where = (filters: Expr): UpdateAggregator => {
|
|
16
|
-
this._filters.push('WHERE ');
|
|
17
|
-
this._filters.push(filters.toQuery());
|
|
18
|
-
return this;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
public appendFrom = (tableName: string): UpdateAggregator => {
|
|
22
|
-
this._from.push(' ');
|
|
23
|
-
this._from.push(tableName);
|
|
24
|
-
return this;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
public set = (updates: UpdateExpr): UpdateAggregator => {
|
|
28
|
-
this._updates.push(`\nSET ${updates.toQuery()}`);
|
|
29
|
-
return this;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
public buildQuery = () => {
|
|
33
|
-
this._update.push(this._from.join(''));
|
|
34
|
-
this._update.push('\n');
|
|
35
|
-
this._update.push(this._updates.join(''));
|
|
36
|
-
this._update.push('\n');
|
|
37
|
-
this._update.push(this._filters.join(''));
|
|
38
|
-
this._update.push('\n');
|
|
39
|
-
this._update.push('RETURNING');
|
|
40
|
-
this._update.push('\n');
|
|
41
|
-
this._update.push(this._fields.join(''));
|
|
42
|
-
|
|
43
|
-
return this._update.join('');
|
|
44
|
-
};
|
|
45
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { Column } from '../../columns/column';
|
|
2
|
-
import ColumnType from '../../columns/types/columnType';
|
|
3
|
-
import Session from '../../db/session';
|
|
4
|
-
import BaseLogger from '../../logger/abstractLogger';
|
|
5
|
-
import { ExtractModel } from '../../tables/inferTypes';
|
|
6
|
-
|
|
7
|
-
export default abstract class TableRequestBuilder<TTable> {
|
|
8
|
-
protected _tableName: string;
|
|
9
|
-
protected _session: Session;
|
|
10
|
-
protected _mappedServiceToDb: { [name in keyof ExtractModel<TTable>]: Column<ColumnType>; };
|
|
11
|
-
protected _columns: Column<ColumnType>[];
|
|
12
|
-
protected _logger: BaseLogger;
|
|
13
|
-
|
|
14
|
-
public constructor(tableName: string,
|
|
15
|
-
session: Session,
|
|
16
|
-
mappedServiceToDb: { [name in keyof ExtractModel<TTable>]: Column<ColumnType>; },
|
|
17
|
-
logger: BaseLogger) {
|
|
18
|
-
this._mappedServiceToDb = mappedServiceToDb;
|
|
19
|
-
this._tableName = tableName;
|
|
20
|
-
this._session = session;
|
|
21
|
-
this._columns = Object.values(mappedServiceToDb);
|
|
22
|
-
this._logger = logger;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
public all = async (): Promise<ExtractModel<TTable>[]> => {
|
|
26
|
-
const res = await this._execute();
|
|
27
|
-
return res;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
public first = async (): Promise<ExtractModel<TTable>> => {
|
|
31
|
-
const executionRes = await this._execute();
|
|
32
|
-
// TODO add checks for undefined or null
|
|
33
|
-
return executionRes[0];
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
protected abstract _execute(): Promise<Array<ExtractModel<TTable>>>;
|
|
37
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { Column } from '../../columns/column';
|
|
2
|
-
import ColumnType from '../../columns/types/columnType';
|
|
3
|
-
import Session from '../../db/session';
|
|
4
|
-
import BuilderError, { BuilderType } from '../../errors/builderError';
|
|
5
|
-
import { DatabaseDeleteError } from '../../errors/dbErrors';
|
|
6
|
-
import BaseLogger from '../../logger/abstractLogger';
|
|
7
|
-
import QueryResponseMapper from '../../mappers/responseMapper';
|
|
8
|
-
import { ExtractModel } from '../../tables/inferTypes';
|
|
9
|
-
import Delete from '../lowLvlBuilders/delets/delete';
|
|
10
|
-
import Expr from '../requestBuilders/where/where';
|
|
11
|
-
import TableRequestBuilder from './abstractRequestBuilder';
|
|
12
|
-
|
|
13
|
-
export default class DeleteTRB<TTable> extends TableRequestBuilder<TTable> {
|
|
14
|
-
private _filter: Expr;
|
|
15
|
-
|
|
16
|
-
public constructor(
|
|
17
|
-
tableName: string,
|
|
18
|
-
session: Session,
|
|
19
|
-
mappedServiceToDb: { [name in keyof ExtractModel<TTable>]: Column<ColumnType>; },
|
|
20
|
-
logger: BaseLogger,
|
|
21
|
-
) {
|
|
22
|
-
super(tableName, session, mappedServiceToDb, logger);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
public where = (expr: Expr): DeleteTRB<TTable> => {
|
|
26
|
-
this._filter = expr;
|
|
27
|
-
return this;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
public execute = async () => {
|
|
31
|
-
await this._execute();
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
protected _execute = async (): Promise<ExtractModel<TTable>[]> => {
|
|
35
|
-
const queryBuilder = Delete.from(this._tableName);
|
|
36
|
-
if (this._filter) {
|
|
37
|
-
queryBuilder.filteredBy(this._filter);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
let query = '';
|
|
41
|
-
try {
|
|
42
|
-
query = queryBuilder.build();
|
|
43
|
-
} catch (e) {
|
|
44
|
-
throw new BuilderError(BuilderType.DELETE, this._tableName, this._columns, e, this._filter);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (this._logger) {
|
|
48
|
-
this._logger.info(`Deleting from ${this._tableName} using query:\n ${query}`);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const result = await this._session.execute(query);
|
|
52
|
-
if (result.isLeft()) {
|
|
53
|
-
const { reason } = result.value;
|
|
54
|
-
throw new DatabaseDeleteError(this._tableName, reason, query);
|
|
55
|
-
} else {
|
|
56
|
-
return QueryResponseMapper.map(this._mappedServiceToDb, result.value);
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { Column } from '../../columns/column';
|
|
2
|
-
import ColumnType from '../../columns/types/columnType';
|
|
3
|
-
import Session from '../../db/session';
|
|
4
|
-
import BuilderError, { BuilderType } from '../../errors/builderError';
|
|
5
|
-
import { DatabaseInsertError } from '../../errors/dbErrors';
|
|
6
|
-
import BaseLogger from '../../logger/abstractLogger';
|
|
7
|
-
import QueryResponseMapper from '../../mappers/responseMapper';
|
|
8
|
-
import { AbstractTable } from '../../tables';
|
|
9
|
-
import { ExtractModel, Indexing } from '../../tables/inferTypes';
|
|
10
|
-
import Insert from '../lowLvlBuilders/inserts/insert';
|
|
11
|
-
import UpdateExpr from '../requestBuilders/updates/updates';
|
|
12
|
-
import TableRequestBuilder from './abstractRequestBuilder';
|
|
13
|
-
|
|
14
|
-
export default class InsertTRB<TTable> extends TableRequestBuilder<TTable> {
|
|
15
|
-
private _values: ExtractModel<TTable>[];
|
|
16
|
-
private _onConflict: UpdateExpr;
|
|
17
|
-
private _onConflictField: Indexing;
|
|
18
|
-
private _table: TTable;
|
|
19
|
-
|
|
20
|
-
public constructor(
|
|
21
|
-
values: ExtractModel<TTable>[],
|
|
22
|
-
tableName: string,
|
|
23
|
-
session: Session,
|
|
24
|
-
mappedServiceToDb: { [name in keyof ExtractModel<TTable>]: Column<ColumnType>; },
|
|
25
|
-
logger: BaseLogger,
|
|
26
|
-
table: AbstractTable<TTable>,
|
|
27
|
-
) {
|
|
28
|
-
super(tableName, session, mappedServiceToDb, logger);
|
|
29
|
-
this._values = values;
|
|
30
|
-
this._table = table as unknown as TTable;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
public execute = async () => {
|
|
34
|
-
await this._execute();
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
public onConflict = (
|
|
38
|
-
callback: (table: TTable) => Indexing,
|
|
39
|
-
expr: UpdateExpr,
|
|
40
|
-
): InsertTRB<TTable> => {
|
|
41
|
-
this._onConflictField = callback(this._table);
|
|
42
|
-
this._onConflict = expr;
|
|
43
|
-
return this;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
protected _execute = async (): Promise<ExtractModel<TTable>[]> => {
|
|
47
|
-
const queryBuilder = Insert.into(this._tableName, this._columns);
|
|
48
|
-
if (!this._values) throw Error('Values should be provided firestly\nExample: table.values().execute()');
|
|
49
|
-
|
|
50
|
-
const mappedRows: {[name: string]: any}[] = [];
|
|
51
|
-
const mapper = this._mappedServiceToDb;
|
|
52
|
-
|
|
53
|
-
this._values.forEach((valueToInsert) => {
|
|
54
|
-
const mappedValue: {[name: string]: any} = {};
|
|
55
|
-
Object.entries(valueToInsert).forEach(([key, value]) => {
|
|
56
|
-
const column = mapper[key as keyof ExtractModel<TTable>];
|
|
57
|
-
mappedValue[column.columnName] = value;
|
|
58
|
-
});
|
|
59
|
-
mappedRows.push(mappedValue);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
const valuesQueryBiulder = queryBuilder.values(mappedRows, mapper);
|
|
63
|
-
if (this._onConflict) {
|
|
64
|
-
valuesQueryBiulder.onConflict(this._onConflict, this._onConflictField);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// @TODO refactor values() part!!
|
|
68
|
-
let query = '';
|
|
69
|
-
try {
|
|
70
|
-
query = queryBuilder.build();
|
|
71
|
-
} catch (e) {
|
|
72
|
-
throw new BuilderError(BuilderType.INSERT, this._tableName, this._columns, e);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (this._logger) {
|
|
76
|
-
this._logger.info(`Inserting to ${this._tableName} using query:\n ${query}`);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const result = await this._session.execute(query);
|
|
80
|
-
if (result.isLeft()) {
|
|
81
|
-
const { reason } = result.value;
|
|
82
|
-
throw new DatabaseInsertError(this._tableName, reason, query);
|
|
83
|
-
} else {
|
|
84
|
-
return QueryResponseMapper.map(this._mappedServiceToDb, result.value);
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
}
|