drizzle-orm 0.10.27 → 0.10.28
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/.eslintrc +28 -0
- package/.tslintignore +1 -0
- package/CHANGELOG.md +202 -0
- package/package.json +1 -6
- package/pnpm-lock.yaml +1842 -0
- package/src/builders/aggregators/abstractAggregator.ts +41 -0
- package/src/builders/aggregators/deleteAggregator.ts +44 -0
- package/src/builders/aggregators/insertAggregator.ts +120 -0
- package/src/builders/aggregators/selectAggregator.ts +163 -0
- package/src/builders/aggregators/updateAggregator.ts +56 -0
- package/src/builders/highLvlBuilders/abstractRequestBuilder.ts +51 -0
- package/src/builders/highLvlBuilders/deleteRequestBuilder.ts +59 -0
- package/src/builders/highLvlBuilders/insertRequestBuilder.ts +75 -0
- package/src/builders/highLvlBuilders/order.ts +4 -0
- package/src/builders/highLvlBuilders/selectRequestBuilder.ts +229 -0
- package/src/builders/highLvlBuilders/updateRequestBuilder.ts +80 -0
- package/src/builders/index.ts +21 -0
- package/src/builders/joinBuilders/builders/abstractJoinBuilder.ts +98 -0
- package/src/builders/joinBuilders/builders/selectWithFiveJoins.ts +110 -0
- package/src/builders/joinBuilders/builders/selectWithFourJoins.ts +254 -0
- package/src/builders/joinBuilders/builders/selectWithJoin.ts +189 -0
- package/src/builders/joinBuilders/builders/selectWithThreeJoins.ts +231 -0
- package/src/builders/joinBuilders/builders/selectWithTwoJoins.ts +210 -0
- package/src/builders/joinBuilders/join.ts +40 -0
- package/src/builders/joinBuilders/joinWith.ts +21 -0
- package/src/builders/joinBuilders/responses/selectResponseFiveJoins.ts +82 -0
- package/src/builders/joinBuilders/responses/selectResponseFourJoins.ts +73 -0
- package/src/builders/joinBuilders/responses/selectResponseThreeJoins.ts +64 -0
- package/src/builders/joinBuilders/responses/selectResponseTwoJoins.ts +57 -0
- package/src/builders/joinBuilders/responses/selectResponseWithJoin.ts +49 -0
- package/src/builders/joinBuilders/static.ts +9 -0
- package/src/builders/lowLvlBuilders/alter.ts +0 -0
- package/src/builders/lowLvlBuilders/create.ts +115 -0
- package/src/builders/lowLvlBuilders/delets/delete.ts +13 -0
- package/src/builders/lowLvlBuilders/delets/deleteFilter.ts +17 -0
- package/src/builders/lowLvlBuilders/delets/deleteFrom.ts +15 -0
- package/src/builders/lowLvlBuilders/inserts/insert.ts +11 -0
- package/src/builders/lowLvlBuilders/inserts/insertInto.ts +16 -0
- package/src/builders/lowLvlBuilders/inserts/onConflictInsert.ts +19 -0
- package/src/builders/lowLvlBuilders/inserts/valuesInsert.ts +27 -0
- package/src/builders/lowLvlBuilders/selects/select.ts +14 -0
- package/src/builders/lowLvlBuilders/selects/selectFrom.ts +50 -0
- package/src/builders/lowLvlBuilders/selects/selectJoined.ts +44 -0
- package/src/builders/lowLvlBuilders/selects/whereSelect.ts +36 -0
- package/src/builders/lowLvlBuilders/updates/update.ts +13 -0
- package/src/builders/lowLvlBuilders/updates/updateIn.ts +17 -0
- package/src/builders/lowLvlBuilders/updates/whereSelect.ts +17 -0
- package/src/builders/lowLvlBuilders/updates/whereSet.ts +21 -0
- package/src/builders/requestBuilders/updates/combine.ts +34 -0
- package/src/builders/requestBuilders/updates/increment.ts +24 -0
- package/src/builders/requestBuilders/updates/setObjects.ts +27 -0
- package/src/builders/requestBuilders/updates/static.ts +15 -0
- package/src/builders/requestBuilders/updates/updates.ts +8 -0
- package/src/builders/requestBuilders/where/and.ts +35 -0
- package/src/builders/requestBuilders/where/const.ts +23 -0
- package/src/builders/requestBuilders/where/constArray.ts +37 -0
- package/src/builders/requestBuilders/where/eqWhere.ts +20 -0
- package/src/builders/requestBuilders/where/greater.ts +20 -0
- package/src/builders/requestBuilders/where/greaterEq.ts +20 -0
- package/src/builders/requestBuilders/where/in.ts +20 -0
- package/src/builders/requestBuilders/where/isNotNull.ts +17 -0
- package/src/builders/requestBuilders/where/isNull.ts +17 -0
- package/src/builders/requestBuilders/where/less.ts +20 -0
- package/src/builders/requestBuilders/where/lessEq.ts +20 -0
- package/src/builders/requestBuilders/where/like.ts +20 -0
- package/src/builders/requestBuilders/where/notEqWhere.ts +20 -0
- package/src/builders/requestBuilders/where/or.ts +35 -0
- package/src/builders/requestBuilders/where/rawWhere.ts +10 -0
- package/src/builders/requestBuilders/where/static.ts +60 -0
- package/src/builders/requestBuilders/where/var.ts +19 -0
- package/src/builders/requestBuilders/where/where.ts +5 -0
- package/src/builders/transaction/transaction.ts +21 -0
- package/src/columns/column.ts +195 -0
- package/src/columns/index.ts +10 -0
- package/src/columns/types/columnType.ts +8 -0
- package/src/columns/types/pgBigDecimal.ts +29 -0
- package/src/columns/types/pgBigInt.ts +36 -0
- package/src/columns/types/pgBigSerial.ts +36 -0
- package/src/columns/types/pgBoolean.ts +18 -0
- package/src/columns/types/pgEnum.ts +17 -0
- package/src/columns/types/pgInteger.ts +21 -0
- package/src/columns/types/pgJsonb.ts +21 -0
- package/src/columns/types/pgSerial.ts +18 -0
- package/src/columns/types/pgSmallInt.ts +18 -0
- package/src/columns/types/pgText.ts +18 -0
- package/src/columns/types/pgTime.ts +18 -0
- package/src/columns/types/pgTimestamp.ts +18 -0
- package/src/columns/types/pgTimestamptz.ts +18 -0
- package/src/columns/types/pgVarChar.ts +24 -0
- package/src/db/db.ts +43 -0
- package/src/db/dbConnector.ts +30 -0
- package/src/db/dbStringConnector.ts +29 -0
- package/src/db/group_by.ts +75 -0
- package/src/db/index.ts +4 -0
- package/src/db/session.ts +16 -0
- package/src/docs/cases/simple_delete.ts +35 -0
- package/src/docs/cases/simple_insert.ts +65 -0
- package/src/docs/cases/simple_join.ts +140 -0
- package/src/docs/cases/simple_select.ts +72 -0
- package/src/docs/cases/simple_update.ts +40 -0
- package/src/docs/tables/citiesTable.ts +22 -0
- package/src/docs/tables/userGroupsTable.ts +12 -0
- package/src/docs/tables/usersTable.ts +33 -0
- package/src/docs/tables/usersToUserGroups.ts +14 -0
- package/src/docs/types/rolesType.ts +4 -0
- package/src/errors/baseError.ts +47 -0
- package/src/errors/builderError.ts +31 -0
- package/src/errors/dbErrors.ts +24 -0
- package/src/index.ts +20 -0
- package/src/indexes/tableIndex.ts +25 -0
- package/src/logger/abstractLogger.ts +4 -0
- package/src/logger/consoleLogger.ts +11 -0
- package/src/mappers/index.ts +0 -0
- package/src/mappers/responseMapper.ts +46 -0
- package/src/migrator/index.ts +0 -0
- package/src/migrator/migrator.ts +97 -0
- package/src/serializer/serializer.ts +336 -0
- package/src/tables/abstractTable.ts +188 -0
- package/src/tables/index.ts +4 -0
- package/src/tables/inferTypes.ts +67 -0
- package/src/tables/migrationsTable.ts +11 -0
- package/src/types/type.ts +15 -0
- package/src/utils/ecranate.ts +4 -0
- package/tsconfig.json +13 -0
package/.eslintrc
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": ["airbnb-typescript/base"],
|
|
3
|
+
"plugins": ["prefer-arrow"],
|
|
4
|
+
"parserOptions": {
|
|
5
|
+
"project": "./orm/tsconfig.json"
|
|
6
|
+
},
|
|
7
|
+
"rules": {
|
|
8
|
+
"@typescript-eslint/explicit-member-accessibility": "error",
|
|
9
|
+
"@typescript-eslint/lines-between-class-members": ["error", "always", { "exceptAfterSingleLine": true }],
|
|
10
|
+
"no-underscore-dangle": ["off"],
|
|
11
|
+
"@typescript-eslint/member-ordering": ["error", { "default": [
|
|
12
|
+
"public-field",
|
|
13
|
+
"protected-field",
|
|
14
|
+
"private-field",
|
|
15
|
+
"constructor",
|
|
16
|
+
"static-method",
|
|
17
|
+
"public-method",
|
|
18
|
+
"protected-method",
|
|
19
|
+
"private-method"
|
|
20
|
+
] }],
|
|
21
|
+
"class-methods-use-this": "off",
|
|
22
|
+
"import/no-named-as-default": 0,
|
|
23
|
+
"import/no-named-as-default-member": 0,
|
|
24
|
+
// "prefer-arrow/prefer-arrow-functions": ["error", { "classPropertiesAllowed": true }],
|
|
25
|
+
"import/no-extraneous-dependencies": ["error", { "devDependencies": ["webpack.config.ts"] }],
|
|
26
|
+
"linebreak-style": 0
|
|
27
|
+
}
|
|
28
|
+
}
|
package/.tslintignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*.test.ts
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
### 0.10.6 (Fabruary 06, 2022)
|
|
4
|
+
### Fixes and Functionality:
|
|
5
|
+
- Move from simple query execution to parameterized queries
|
|
6
|
+
### Breaking changes:
|
|
7
|
+
- For `raw` query execution you need to provide values together with query
|
|
8
|
+
#### Previous you could run simple query
|
|
9
|
+
```typescript
|
|
10
|
+
const res: QueryResult<any> = await db.session().execute('SELECT * FROM users WHERE user.id = 1');
|
|
11
|
+
```
|
|
12
|
+
#### Currently you need to provide prepared statement with values as array
|
|
13
|
+
```typescript
|
|
14
|
+
const res: QueryResult<any> = await db.session().execute('SELECT * FROM users WHERE user.id = $1', [1]);
|
|
15
|
+
```
|
|
16
|
+
It's still possible to execute query as before, without providing any values array. But we highly recommend to separate those
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
### 0.10.4 (Fabruary 02, 2022)
|
|
20
|
+
### Fixes and Functionality:
|
|
21
|
+
- Fix `int` and `smallint` mappings from pg driver
|
|
22
|
+
---
|
|
23
|
+
### 0.10.0 (January 27, 2022)
|
|
24
|
+
### Breaking changes:
|
|
25
|
+
- Move limit offset to function calls
|
|
26
|
+
#### Previous limit/offset usage:
|
|
27
|
+
```typescript
|
|
28
|
+
await usersTable.select({limit: 20, offset: 20}).all();
|
|
29
|
+
```
|
|
30
|
+
#### Current limit/offset usage:
|
|
31
|
+
```typescript
|
|
32
|
+
await usersTable.select().limit(20).offset(20).all();
|
|
33
|
+
```
|
|
34
|
+
- Change join calls starting from second one
|
|
35
|
+
|
|
36
|
+
Starting from second join you need to provide table to join from. As long as PostgreSQL has a possibility to join on tables, that already were in previous joins, we need to have a possibility to clarify from which exact table we need to join
|
|
37
|
+
#### Previous join funcition call with parameters:
|
|
38
|
+
```typescript
|
|
39
|
+
await usersToUserGroupsTable.select()
|
|
40
|
+
.where(eq(userGroupsTable.id, 1))
|
|
41
|
+
.leftJoin(UsersTable,
|
|
42
|
+
(userToGroup) => userToGroup.userId,
|
|
43
|
+
(users) => users.id)
|
|
44
|
+
.leftJoin(UserGroupsTable,
|
|
45
|
+
(userToGroup) => userToGroup.groupId,
|
|
46
|
+
(userGroup) => userGroup.id)
|
|
47
|
+
.execute()
|
|
48
|
+
```
|
|
49
|
+
#### Current join funcition call with parameters:
|
|
50
|
+
```typescript
|
|
51
|
+
await usersToUserGroupsTable.select()
|
|
52
|
+
.where(eq(userGroupsTable.id, 1))
|
|
53
|
+
.leftJoin(UsersTable,
|
|
54
|
+
(userToGroup) => userToGroup.userId,
|
|
55
|
+
(users) => users.id)
|
|
56
|
+
.leftJoin(UsersToUserGroupsTable, UserGroupsTable,
|
|
57
|
+
(userToGroup) => userToGroup.groupId,
|
|
58
|
+
(userGroup) => userGroup.id)
|
|
59
|
+
.execute()
|
|
60
|
+
```
|
|
61
|
+
- Create partial select on simple select + on each join
|
|
62
|
+
|
|
63
|
+
If you want to select only specific fields from select request you could provide your own interface with columns to map to:
|
|
64
|
+
#### Example
|
|
65
|
+
```typescript
|
|
66
|
+
const partialSelect = await usersTable.select({
|
|
67
|
+
id: usersTable.id,
|
|
68
|
+
phone: usersTable.phone,
|
|
69
|
+
}).all();
|
|
70
|
+
|
|
71
|
+
// Usage
|
|
72
|
+
const { mappedId, mappedPhone } = partialSelect;
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Same could be done with specific columns selecting on joined tables
|
|
76
|
+
#### Example
|
|
77
|
+
```typescript
|
|
78
|
+
const usersWithUserGroups = await usersToUserGroupsTable.select()
|
|
79
|
+
.where(eq(userGroupsTable.id, 1))
|
|
80
|
+
.leftJoin(UsersTable,
|
|
81
|
+
(userToGroup) => userToGroup.userId,
|
|
82
|
+
(users) => users.id,
|
|
83
|
+
// Partial fields to be selected from UsersTable
|
|
84
|
+
{
|
|
85
|
+
id: usersTable.id,
|
|
86
|
+
})
|
|
87
|
+
.leftJoin(UsersToUserGroupsTable, UserGroupsTable,
|
|
88
|
+
(userToGroup) => userToGroup.groupId,
|
|
89
|
+
(userGroup) => userGroup.id,
|
|
90
|
+
// Partial fields to be selected from UserGroupsTable
|
|
91
|
+
{
|
|
92
|
+
id: userGroupsTable.id,
|
|
93
|
+
})
|
|
94
|
+
.execute();
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
- Create possibility to have self FK and self joins
|
|
98
|
+
|
|
99
|
+
You could create FK on same table you are creating it from
|
|
100
|
+
#### Example
|
|
101
|
+
```typescript
|
|
102
|
+
public cityId = this.int('city_id').foreignKey(CitiesTable, (table) => table.id, { onUpdate: 'CASCADE' });
|
|
103
|
+
```
|
|
104
|
+
- Delete first() on execution and add findOne(), that will throw an error
|
|
105
|
+
|
|
106
|
+
Previously we had `.first()` function, that was just getting first element from rows returned from `pg` driver
|
|
107
|
+
Right now, invoking `.findOne()` function should check if response contains exactly 1 element in repsponse. If not, it will throw an error
|
|
108
|
+
### Example
|
|
109
|
+
```typescript
|
|
110
|
+
const firstSelect = await usersTable.select().findOne();
|
|
111
|
+
```
|
|
112
|
+
- Fix wrong types. Right now you won't get undefined from select query
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### 0.9.19 (January 24, 2022)
|
|
116
|
+
### Fixes and Functionality:
|
|
117
|
+
- Fix all queries by `Date`
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
### 0.9.18 (December 28, 2021)
|
|
122
|
+
### Fixes and Functionality:
|
|
123
|
+
- Fix `any` type returning from `.notNull()` and `.primaryKey()` functions
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
### 0.9.17 (December 27, 2021)
|
|
128
|
+
### Fixes and Functionality:
|
|
129
|
+
- Add serializer `fromDb()` method to introspect selected database to drizzle-kit json shanpsot format
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
### 0.9.16 (December 27, 2021)
|
|
133
|
+
### Breaking changes:
|
|
134
|
+
- Delete `autoincrement` type on columns. Right now you should use `serial` type
|
|
135
|
+
|
|
136
|
+
#### Previous serial column defining:
|
|
137
|
+
```typescript
|
|
138
|
+
public id = this.int('id').autoincrement();
|
|
139
|
+
```
|
|
140
|
+
#### Current serial column defining:
|
|
141
|
+
```typescript
|
|
142
|
+
public id = this.serial('id');
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
- Move `notNull` from column type metadata to builder chain
|
|
146
|
+
#### Previous notNull defining:
|
|
147
|
+
```typescript
|
|
148
|
+
public phone = this.varchar('phone', { notNull: true });
|
|
149
|
+
```
|
|
150
|
+
#### Current notNull defining:
|
|
151
|
+
```typescript
|
|
152
|
+
public phone = this.varchar('phone').notNull();
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
- Divide `BigInt` into 2 types -> `BigInt53` and `BigInt64`
|
|
156
|
+
- Divide `BigSerial` into 2 types -> `BigSerial53` and `BigSerial64`
|
|
157
|
+
|
|
158
|
+
Due to have max value for big integers in postgres as 2^64 and javascript max value for integers is 2^53
|
|
159
|
+
|
|
160
|
+
If you sure, that value in this column won't be more than 2^53 you could use:
|
|
161
|
+
```typescript
|
|
162
|
+
public bigIntField = this.bigint('test1', 'max_bytes_53');
|
|
163
|
+
```
|
|
164
|
+
that will be of type `number` in typescript
|
|
165
|
+
|
|
166
|
+
If value in this column could be more than 2^53 you could use:
|
|
167
|
+
```typescript
|
|
168
|
+
public bigIntField = this.bigint('test1', 'max_bytes_64');
|
|
169
|
+
```
|
|
170
|
+
that will be of type `bigint` in typescript
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
### Fixes and Functionality:
|
|
174
|
+
- Add `SET NULL` and `SET DEFAULT` for `ON DELETE` and `ON UPDATE` constraints
|
|
175
|
+
|
|
176
|
+
#### Example of usage
|
|
177
|
+
```typescript
|
|
178
|
+
public userId = this.int('user_id').foreignKey(UsersTable, (table) => table.id, { onUpdate: 'SET NULL' });
|
|
179
|
+
|
|
180
|
+
public userId = this.int('user_id').foreignKey(UsersTable, (table) => table.id, { onDelete: 'SET DEFAULT' });
|
|
181
|
+
```
|
|
182
|
+
- Add default value for timestamp
|
|
183
|
+
```typescript
|
|
184
|
+
public createdAt = this.timestamp('created_at').defaultValue(Defaults.CURRENT_TIMESTAMP);
|
|
185
|
+
```
|
|
186
|
+
- Add `timestamp with timezone` type
|
|
187
|
+
```typescript
|
|
188
|
+
public createdAt = this.timestamptz('created_at');
|
|
189
|
+
```
|
|
190
|
+
- Add migrator function to use `drizzle-kit` generated migrations
|
|
191
|
+
##### Provide drizzle-kit config path
|
|
192
|
+
```typescript
|
|
193
|
+
await drizzle.migrator(db).migrate('src/drizzle.config.yaml');
|
|
194
|
+
```
|
|
195
|
+
##### Provide object with path to folder with migrations
|
|
196
|
+
```typescript
|
|
197
|
+
await drizzle.migrator(db).migrate({ migrationFolder: 'drizzle' });
|
|
198
|
+
```
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
### Documentation:
|
|
202
|
+
- Change README documentation for all changes in current release
|
package/package.json
CHANGED
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "drizzle-orm",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.28",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
|
-
"module": "dist/index.js",
|
|
7
6
|
"types": "dist/index.d.ts",
|
|
8
|
-
"typings": "dist/index.d.ts",
|
|
9
|
-
"files": [
|
|
10
|
-
"dist"
|
|
11
|
-
],
|
|
12
7
|
"repository": {
|
|
13
8
|
"type": "git",
|
|
14
9
|
"url": "git+https://github.com/lambda-direct/drizzle-orm.git",
|