kysely 0.27.4 → 0.27.6
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/.renovaterc.json +3 -0
- package/CODE_OF_CONDUCT.md +183 -0
- package/CONTRIBUTING.md +121 -23
- package/FUNDING.md +25 -0
- package/README.md +13 -2
- package/deno.check.d.ts +86 -0
- package/deno.check.json +21 -0
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +11 -2
- package/dist/cjs/dialect/dialect-adapter.d.ts +11 -2
- package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +11 -2
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +37 -29
- package/dist/cjs/dialect/mssql/mssql-driver.js +20 -13
- package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +11 -2
- package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +4 -0
- package/dist/cjs/dialect/mysql/mysql-driver.js +3 -0
- package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +11 -2
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +10 -3
- package/dist/cjs/dialect/postgres/postgres-driver.js +3 -0
- package/dist/cjs/dialect/postgres/postgres-introspector.js +5 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +11 -2
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +66 -44
- package/dist/cjs/driver/dummy-driver.d.ts +13 -12
- package/dist/cjs/driver/dummy-driver.js +13 -12
- package/dist/cjs/dynamic/dynamic.d.ts +6 -6
- package/dist/cjs/dynamic/dynamic.js +6 -6
- package/dist/cjs/expression/expression-builder.d.ts +154 -61
- package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
- package/dist/cjs/expression/expression.d.ts +40 -5
- package/dist/cjs/helpers/mssql.d.ts +74 -14
- package/dist/cjs/helpers/mssql.js +74 -14
- package/dist/cjs/helpers/mysql.d.ts +14 -10
- package/dist/cjs/helpers/mysql.js +14 -10
- package/dist/cjs/helpers/postgres.d.ts +7 -4
- package/dist/cjs/helpers/postgres.js +7 -4
- package/dist/cjs/helpers/sqlite.d.ts +41 -16
- package/dist/cjs/helpers/sqlite.js +41 -16
- package/dist/cjs/kysely.d.ts +99 -41
- package/dist/cjs/kysely.js +60 -36
- package/dist/cjs/migration/file-migration-provider.d.ts +2 -2
- package/dist/cjs/migration/file-migration-provider.js +2 -2
- package/dist/cjs/migration/migrator.d.ts +90 -15
- package/dist/cjs/migration/migrator.js +95 -17
- package/dist/cjs/operation-node/aggregate-function-node.d.ts +4 -0
- package/dist/cjs/operation-node/aggregate-function-node.js +9 -0
- package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/data-type-node.js +12 -0
- package/dist/cjs/operation-node/delete-query-node.d.ts +1 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +1 -0
- package/dist/cjs/operation-node/merge-query-node.d.ts +1 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +9 -3
- package/dist/cjs/operation-node/operation-node-transformer.js +14 -3
- package/dist/cjs/operation-node/query-node.d.ts +4 -0
- package/dist/cjs/operation-node/query-node.js +8 -0
- package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
- package/dist/cjs/operation-node/select-query-node.js +0 -8
- package/dist/cjs/operation-node/update-query-node.d.ts +1 -0
- package/dist/cjs/parser/insert-values-parser.js +3 -1
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +52 -25
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +24 -19
- package/dist/cjs/plugin/camel-case/camel-case.js +4 -1
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
- package/dist/cjs/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
- package/dist/cjs/plugin/kysely-plugin.d.ts +28 -6
- package/dist/cjs/plugin/noop-plugin.d.ts +28 -6
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
- package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
- package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +4 -0
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +26 -0
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +43 -1
- package/dist/cjs/query-builder/aggregate-function-builder.js +30 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +137 -45
- package/dist/cjs/query-builder/delete-query-builder.js +76 -26
- package/dist/cjs/query-builder/function-module.d.ts +35 -88
- package/dist/cjs/query-builder/insert-query-builder.d.ts +239 -65
- package/dist/cjs/query-builder/insert-query-builder.js +188 -52
- package/dist/cjs/query-builder/insert-result.d.ts +10 -5
- package/dist/cjs/query-builder/insert-result.js +10 -5
- package/dist/cjs/query-builder/json-path-builder.d.ts +33 -9
- package/dist/cjs/query-builder/json-path-builder.js +8 -5
- package/dist/cjs/query-builder/merge-query-builder.d.ts +159 -21
- package/dist/cjs/query-builder/merge-query-builder.js +68 -6
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +51 -18
- package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
- package/dist/cjs/query-builder/output-interface.d.ts +50 -7
- package/dist/cjs/query-builder/returning-interface.d.ts +5 -5
- package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +295 -63
- package/dist/cjs/query-builder/select-query-builder.js +7 -7
- package/dist/cjs/query-builder/update-query-builder.d.ts +138 -29
- package/dist/cjs/query-builder/update-query-builder.js +75 -10
- package/dist/cjs/query-builder/update-result.d.ts +2 -2
- package/dist/cjs/query-builder/update-result.js +2 -2
- package/dist/cjs/query-builder/where-interface.d.ts +5 -1
- package/dist/cjs/query-compiler/default-query-compiler.js +20 -0
- package/dist/cjs/query-creator.d.ts +66 -18
- package/dist/cjs/query-creator.js +2 -2
- package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
- package/dist/cjs/raw-builder/sql.d.ts +27 -8
- package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
- package/dist/cjs/schema/alter-column-builder.js +17 -3
- package/dist/cjs/schema/alter-table-add-index-builder.d.ts +43 -9
- package/dist/cjs/schema/alter-table-add-index-builder.js +26 -9
- package/dist/cjs/schema/column-definition-builder.d.ts +283 -26
- package/dist/cjs/schema/column-definition-builder.js +283 -26
- package/dist/cjs/schema/create-table-builder.d.ts +86 -33
- package/dist/cjs/schema/create-table-builder.js +86 -33
- package/dist/cjs/util/column-type.d.ts +5 -9
- package/dist/cjs/util/require-all-props.d.ts +4 -2
- package/dist/cjs/util/require-all-props.js +4 -2
- package/dist/cjs/util/streamable.d.ts +1 -1
- package/dist/cjs/util/type-utils.d.ts +4 -2
- package/dist/esm/dialect/dialect-adapter-base.d.ts +11 -2
- package/dist/esm/dialect/dialect-adapter.d.ts +11 -2
- package/dist/esm/dialect/mssql/mssql-adapter.d.ts +11 -2
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +37 -29
- package/dist/esm/dialect/mssql/mssql-driver.js +20 -13
- package/dist/esm/dialect/mysql/mysql-adapter.d.ts +11 -2
- package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +4 -0
- package/dist/esm/dialect/mysql/mysql-driver.js +3 -0
- package/dist/esm/dialect/postgres/postgres-adapter.d.ts +11 -2
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +10 -3
- package/dist/esm/dialect/postgres/postgres-driver.js +3 -0
- package/dist/esm/dialect/postgres/postgres-introspector.js +5 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +11 -2
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +66 -44
- package/dist/esm/driver/dummy-driver.d.ts +13 -12
- package/dist/esm/driver/dummy-driver.js +13 -12
- package/dist/esm/dynamic/dynamic.d.ts +6 -6
- package/dist/esm/dynamic/dynamic.js +6 -6
- package/dist/esm/expression/expression-builder.d.ts +154 -61
- package/dist/esm/expression/expression-wrapper.d.ts +92 -23
- package/dist/esm/expression/expression.d.ts +40 -5
- package/dist/esm/helpers/mssql.d.ts +74 -14
- package/dist/esm/helpers/mssql.js +74 -14
- package/dist/esm/helpers/mysql.d.ts +14 -10
- package/dist/esm/helpers/mysql.js +14 -10
- package/dist/esm/helpers/postgres.d.ts +7 -4
- package/dist/esm/helpers/postgres.js +7 -4
- package/dist/esm/helpers/sqlite.d.ts +41 -16
- package/dist/esm/helpers/sqlite.js +41 -16
- package/dist/esm/kysely.d.ts +99 -41
- package/dist/esm/kysely.js +60 -36
- package/dist/esm/migration/file-migration-provider.d.ts +2 -2
- package/dist/esm/migration/file-migration-provider.js +2 -2
- package/dist/esm/migration/migrator.d.ts +90 -15
- package/dist/esm/migration/migrator.js +95 -17
- package/dist/esm/operation-node/aggregate-function-node.d.ts +4 -0
- package/dist/esm/operation-node/aggregate-function-node.js +9 -0
- package/dist/esm/operation-node/data-type-node.d.ts +1 -1
- package/dist/esm/operation-node/data-type-node.js +12 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +1 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +1 -0
- package/dist/esm/operation-node/merge-query-node.d.ts +1 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +9 -3
- package/dist/esm/operation-node/operation-node-transformer.js +14 -3
- package/dist/esm/operation-node/query-node.d.ts +4 -0
- package/dist/esm/operation-node/query-node.js +8 -0
- package/dist/esm/operation-node/select-query-node.d.ts +0 -1
- package/dist/esm/operation-node/select-query-node.js +0 -8
- package/dist/esm/operation-node/update-query-node.d.ts +1 -0
- package/dist/esm/parser/insert-values-parser.js +3 -1
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +52 -25
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +24 -19
- package/dist/esm/plugin/camel-case/camel-case.js +4 -1
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
- package/dist/esm/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
- package/dist/esm/plugin/kysely-plugin.d.ts +28 -6
- package/dist/esm/plugin/noop-plugin.d.ts +28 -6
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
- package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
- package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +4 -0
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +26 -0
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +43 -1
- package/dist/esm/query-builder/aggregate-function-builder.js +30 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +137 -45
- package/dist/esm/query-builder/delete-query-builder.js +76 -26
- package/dist/esm/query-builder/function-module.d.ts +35 -88
- package/dist/esm/query-builder/insert-query-builder.d.ts +239 -65
- package/dist/esm/query-builder/insert-query-builder.js +188 -52
- package/dist/esm/query-builder/insert-result.d.ts +10 -5
- package/dist/esm/query-builder/insert-result.js +10 -5
- package/dist/esm/query-builder/json-path-builder.d.ts +33 -9
- package/dist/esm/query-builder/json-path-builder.js +8 -5
- package/dist/esm/query-builder/merge-query-builder.d.ts +159 -21
- package/dist/esm/query-builder/merge-query-builder.js +68 -6
- package/dist/esm/query-builder/on-conflict-builder.d.ts +51 -18
- package/dist/esm/query-builder/on-conflict-builder.js +41 -16
- package/dist/esm/query-builder/output-interface.d.ts +50 -7
- package/dist/esm/query-builder/returning-interface.d.ts +5 -5
- package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +295 -63
- package/dist/esm/query-builder/select-query-builder.js +7 -7
- package/dist/esm/query-builder/update-query-builder.d.ts +138 -29
- package/dist/esm/query-builder/update-query-builder.js +75 -10
- package/dist/esm/query-builder/update-result.d.ts +2 -2
- package/dist/esm/query-builder/update-result.js +2 -2
- package/dist/esm/query-builder/where-interface.d.ts +5 -1
- package/dist/esm/query-compiler/default-query-compiler.js +20 -0
- package/dist/esm/query-creator.d.ts +66 -18
- package/dist/esm/query-creator.js +2 -2
- package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
- package/dist/esm/raw-builder/sql.d.ts +27 -8
- package/dist/esm/schema/alter-column-builder.d.ts +17 -3
- package/dist/esm/schema/alter-column-builder.js +17 -3
- package/dist/esm/schema/alter-table-add-index-builder.d.ts +43 -9
- package/dist/esm/schema/alter-table-add-index-builder.js +26 -9
- package/dist/esm/schema/column-definition-builder.d.ts +283 -26
- package/dist/esm/schema/column-definition-builder.js +283 -26
- package/dist/esm/schema/create-table-builder.d.ts +86 -33
- package/dist/esm/schema/create-table-builder.js +86 -33
- package/dist/esm/util/column-type.d.ts +5 -9
- package/dist/esm/util/require-all-props.d.ts +4 -2
- package/dist/esm/util/require-all-props.js +4 -2
- package/dist/esm/util/streamable.d.ts +1 -1
- package/dist/esm/util/type-utils.d.ts +4 -2
- package/package.json +28 -23
|
@@ -75,7 +75,7 @@ class CreateTableBuilder {
|
|
|
75
75
|
*
|
|
76
76
|
* await db.schema
|
|
77
77
|
* .createTable('person')
|
|
78
|
-
* .addColumn('id', 'integer', (col) => col.autoIncrement().primaryKey())
|
|
78
|
+
* .addColumn('id', 'integer', (col) => col.autoIncrement().primaryKey())
|
|
79
79
|
* .addColumn('first_name', 'varchar(50)', (col) => col.notNull())
|
|
80
80
|
* .addColumn('last_name', 'varchar(255)')
|
|
81
81
|
* .addColumn('bank_balance', 'numeric(8, 2)')
|
|
@@ -83,7 +83,7 @@ class CreateTableBuilder {
|
|
|
83
83
|
* // don't include it.
|
|
84
84
|
* .addColumn('data', sql`any_type_here`)
|
|
85
85
|
* .addColumn('parent_id', 'integer', (col) =>
|
|
86
|
-
* col.references('person.id').onDelete('cascade')
|
|
86
|
+
* col.references('person.id').onDelete('cascade')
|
|
87
87
|
* )
|
|
88
88
|
* ```
|
|
89
89
|
*
|
|
@@ -94,11 +94,18 @@ class CreateTableBuilder {
|
|
|
94
94
|
* `create table` query. See the next example:
|
|
95
95
|
*
|
|
96
96
|
* ```ts
|
|
97
|
+
* await db.schema
|
|
98
|
+
* .createTable('person')
|
|
99
|
+
* .addColumn('id', 'integer', (col) => col.primaryKey())
|
|
97
100
|
* .addColumn('parent_id', 'integer')
|
|
98
101
|
* .addForeignKeyConstraint(
|
|
99
|
-
* 'person_parent_id_fk',
|
|
102
|
+
* 'person_parent_id_fk',
|
|
103
|
+
* ['parent_id'],
|
|
104
|
+
* 'person',
|
|
105
|
+
* ['id'],
|
|
100
106
|
* (cb) => cb.onDelete('cascade')
|
|
101
107
|
* )
|
|
108
|
+
* .execute()
|
|
102
109
|
* ```
|
|
103
110
|
*
|
|
104
111
|
* Another good example is that PostgreSQL doesn't support the `auto_increment`
|
|
@@ -108,7 +115,8 @@ class CreateTableBuilder {
|
|
|
108
115
|
* ```ts
|
|
109
116
|
* await db.schema
|
|
110
117
|
* .createTable('person')
|
|
111
|
-
* .addColumn('id', 'serial', (col) => col.primaryKey())
|
|
118
|
+
* .addColumn('id', 'serial', (col) => col.primaryKey())
|
|
119
|
+
* .execute()
|
|
112
120
|
* ```
|
|
113
121
|
*/
|
|
114
122
|
addColumn(columnName, dataType, build = object_utils_js_1.noop) {
|
|
@@ -127,7 +135,12 @@ class CreateTableBuilder {
|
|
|
127
135
|
* ### Examples
|
|
128
136
|
*
|
|
129
137
|
* ```ts
|
|
130
|
-
*
|
|
138
|
+
* await db.schema
|
|
139
|
+
* .createTable('person')
|
|
140
|
+
* .addColumn('first_name', 'varchar(64)')
|
|
141
|
+
* .addColumn('last_name', 'varchar(64)')
|
|
142
|
+
* .addPrimaryKeyConstraint('primary_key', ['first_name', 'last_name'])
|
|
143
|
+
* .execute()
|
|
131
144
|
* ```
|
|
132
145
|
*/
|
|
133
146
|
addPrimaryKeyConstraint(constraintName, columns) {
|
|
@@ -145,12 +158,30 @@ class CreateTableBuilder {
|
|
|
145
158
|
* ### Examples
|
|
146
159
|
*
|
|
147
160
|
* ```ts
|
|
148
|
-
*
|
|
161
|
+
* await db.schema
|
|
162
|
+
* .createTable('person')
|
|
163
|
+
* .addColumn('first_name', 'varchar(64)')
|
|
164
|
+
* .addColumn('last_name', 'varchar(64)')
|
|
165
|
+
* .addUniqueConstraint(
|
|
166
|
+
* 'first_name_last_name_unique',
|
|
167
|
+
* ['first_name', 'last_name']
|
|
168
|
+
* )
|
|
169
|
+
* .execute()
|
|
149
170
|
* ```
|
|
150
171
|
*
|
|
151
172
|
* In dialects such as PostgreSQL you can specify `nulls not distinct` as follows:
|
|
173
|
+
*
|
|
152
174
|
* ```ts
|
|
153
|
-
*
|
|
175
|
+
* await db.schema
|
|
176
|
+
* .createTable('person')
|
|
177
|
+
* .addColumn('first_name', 'varchar(64)')
|
|
178
|
+
* .addColumn('last_name', 'varchar(64)')
|
|
179
|
+
* .addUniqueConstraint(
|
|
180
|
+
* 'first_name_last_name_unique',
|
|
181
|
+
* ['first_name', 'last_name'],
|
|
182
|
+
* (cb) => cb.nullsNotDistinct()
|
|
183
|
+
* )
|
|
184
|
+
* .execute()
|
|
154
185
|
* ```
|
|
155
186
|
*/
|
|
156
187
|
addUniqueConstraint(constraintName, columns, build = object_utils_js_1.noop) {
|
|
@@ -171,7 +202,11 @@ class CreateTableBuilder {
|
|
|
171
202
|
* ```ts
|
|
172
203
|
* import { sql } from 'kysely'
|
|
173
204
|
*
|
|
174
|
-
*
|
|
205
|
+
* await db.schema
|
|
206
|
+
* .createTable('animal')
|
|
207
|
+
* .addColumn('number_of_legs', 'integer')
|
|
208
|
+
* .addCheckConstraint('check_legs', sql`number_of_legs < 5`)
|
|
209
|
+
* .execute()
|
|
175
210
|
* ```
|
|
176
211
|
*/
|
|
177
212
|
addCheckConstraint(constraintName, checkExpression) {
|
|
@@ -189,24 +224,33 @@ class CreateTableBuilder {
|
|
|
189
224
|
* ### Examples
|
|
190
225
|
*
|
|
191
226
|
* ```ts
|
|
192
|
-
*
|
|
193
|
-
* '
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
227
|
+
* await db.schema
|
|
228
|
+
* .createTable('pet')
|
|
229
|
+
* .addColumn('owner_id', 'integer')
|
|
230
|
+
* .addForeignKeyConstraint(
|
|
231
|
+
* 'owner_id_foreign',
|
|
232
|
+
* ['owner_id'],
|
|
233
|
+
* 'person',
|
|
234
|
+
* ['id'],
|
|
235
|
+
* )
|
|
236
|
+
* .execute()
|
|
198
237
|
* ```
|
|
199
238
|
*
|
|
200
239
|
* Add constraint for multiple columns:
|
|
201
240
|
*
|
|
202
241
|
* ```ts
|
|
203
|
-
*
|
|
204
|
-
* '
|
|
205
|
-
*
|
|
206
|
-
* '
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
242
|
+
* await db.schema
|
|
243
|
+
* .createTable('pet')
|
|
244
|
+
* .addColumn('owner_id1', 'integer')
|
|
245
|
+
* .addColumn('owner_id2', 'integer')
|
|
246
|
+
* .addForeignKeyConstraint(
|
|
247
|
+
* 'owner_id_foreign',
|
|
248
|
+
* ['owner_id1', 'owner_id2'],
|
|
249
|
+
* 'person',
|
|
250
|
+
* ['id1', 'id2'],
|
|
251
|
+
* (cb) => cb.onDelete('cascade')
|
|
252
|
+
* )
|
|
253
|
+
* .execute()
|
|
210
254
|
* ```
|
|
211
255
|
*/
|
|
212
256
|
addForeignKeyConstraint(constraintName, columns, targetTable, targetColumns, build = object_utils_js_1.noop) {
|
|
@@ -224,11 +268,14 @@ class CreateTableBuilder {
|
|
|
224
268
|
* ### Examples
|
|
225
269
|
*
|
|
226
270
|
* ```ts
|
|
227
|
-
*
|
|
271
|
+
* import { sql } from 'kysely'
|
|
272
|
+
*
|
|
273
|
+
* await db.schema
|
|
274
|
+
* .createTable('person')
|
|
228
275
|
* .modifyFront(sql`global temporary`)
|
|
229
276
|
* .addColumn('id', 'integer', col => col.primaryKey())
|
|
230
277
|
* .addColumn('first_name', 'varchar(64)', col => col.notNull())
|
|
231
|
-
* .addColumn('last_name', 'varchar(64), col => col.notNull())
|
|
278
|
+
* .addColumn('last_name', 'varchar(64)', col => col.notNull())
|
|
232
279
|
* .execute()
|
|
233
280
|
* ```
|
|
234
281
|
*
|
|
@@ -256,10 +303,13 @@ class CreateTableBuilder {
|
|
|
256
303
|
* ### Examples
|
|
257
304
|
*
|
|
258
305
|
* ```ts
|
|
259
|
-
*
|
|
260
|
-
*
|
|
306
|
+
* import { sql } from 'kysely'
|
|
307
|
+
*
|
|
308
|
+
* await db.schema
|
|
309
|
+
* .createTable('person')
|
|
310
|
+
* .addColumn('id', 'integer', col => col.primaryKey())
|
|
261
311
|
* .addColumn('first_name', 'varchar(64)', col => col.notNull())
|
|
262
|
-
* .addColumn('last_name', 'varchar(64), col => col.notNull())
|
|
312
|
+
* .addColumn('last_name', 'varchar(64)', col => col.notNull())
|
|
263
313
|
* .modifyEnd(sql`collate utf8_unicode_ci`)
|
|
264
314
|
* .execute()
|
|
265
315
|
* ```
|
|
@@ -286,7 +336,8 @@ class CreateTableBuilder {
|
|
|
286
336
|
* ### Examples
|
|
287
337
|
*
|
|
288
338
|
* ```ts
|
|
289
|
-
* db.schema
|
|
339
|
+
* await db.schema
|
|
340
|
+
* .createTable('copy')
|
|
290
341
|
* .temporary()
|
|
291
342
|
* .as(db.selectFrom('person').select(['first_name', 'last_name']))
|
|
292
343
|
* .execute()
|
|
@@ -313,17 +364,19 @@ class CreateTableBuilder {
|
|
|
313
364
|
* ### Examples
|
|
314
365
|
*
|
|
315
366
|
* ```ts
|
|
316
|
-
* db.schema
|
|
367
|
+
* await db.schema
|
|
317
368
|
* .createTable('test')
|
|
318
369
|
* .$call((builder) => builder.addColumn('id', 'integer'))
|
|
319
370
|
* .execute()
|
|
320
371
|
* ```
|
|
321
372
|
*
|
|
373
|
+
* This is useful for creating reusable functions that can be called with a builder.
|
|
374
|
+
*
|
|
322
375
|
* ```ts
|
|
323
|
-
*
|
|
324
|
-
*
|
|
325
|
-
* ) => {
|
|
326
|
-
* return
|
|
376
|
+
* import { type CreateTableBuilder, sql } from 'kysely'
|
|
377
|
+
*
|
|
378
|
+
* const addDefaultColumns = (ctb: CreateTableBuilder<any, any>) => {
|
|
379
|
+
* return ctb
|
|
327
380
|
* .addColumn('id', 'integer', (col) => col.notNull())
|
|
328
381
|
* .addColumn('created_at', 'date', (col) =>
|
|
329
382
|
* col.notNull().defaultTo(sql`now()`)
|
|
@@ -333,7 +386,7 @@ class CreateTableBuilder {
|
|
|
333
386
|
* )
|
|
334
387
|
* }
|
|
335
388
|
*
|
|
336
|
-
* db.schema
|
|
389
|
+
* await db.schema
|
|
337
390
|
* .createTable('test')
|
|
338
391
|
* .$call(addDefaultColumns)
|
|
339
392
|
* .execute()
|
|
@@ -15,7 +15,7 @@ import { DrainOuterGeneric } from './type-utils.js';
|
|
|
15
15
|
* type is actually just a shortcut for the type in this example:
|
|
16
16
|
*
|
|
17
17
|
* ```ts
|
|
18
|
-
* ColumnType<number, number | undefined, number>
|
|
18
|
+
* type GeneratedNumber = ColumnType<number, number | undefined, number>
|
|
19
19
|
* ```
|
|
20
20
|
*
|
|
21
21
|
* The above example makes the column optional in inserts
|
|
@@ -24,14 +24,14 @@ import { DrainOuterGeneric } from './type-utils.js';
|
|
|
24
24
|
* can se the type as `never`:
|
|
25
25
|
*
|
|
26
26
|
* ```ts
|
|
27
|
-
* ColumnType<number, never, never>
|
|
27
|
+
* type ReadonlyNumber = ColumnType<number, never, never>
|
|
28
28
|
* ```
|
|
29
29
|
*
|
|
30
30
|
* Here's one more example where the type is different
|
|
31
31
|
* for each different operation:
|
|
32
32
|
*
|
|
33
33
|
* ```ts
|
|
34
|
-
* ColumnType<Date, string, never>
|
|
34
|
+
* type UnupdateableDate = ColumnType<Date, string, never>
|
|
35
35
|
* ```
|
|
36
36
|
*/
|
|
37
37
|
export type ColumnType<SelectType, InsertType = SelectType, UpdateType = SelectType> = {
|
|
@@ -44,12 +44,8 @@ export type ColumnType<SelectType, InsertType = SelectType, UpdateType = SelectT
|
|
|
44
44
|
* is the same for all selects, inserts and updates but the
|
|
45
45
|
* column is optional for inserts and updates.
|
|
46
46
|
*
|
|
47
|
-
* The
|
|
48
|
-
*
|
|
49
|
-
* ```ts
|
|
50
|
-
* // The update type is `S` instead of `S | undefined` because
|
|
51
|
-
* // updates are always optional --> no need to specify optionality.
|
|
52
|
-
* type Generated<S> = ColumnType<S, S | undefined, S>
|
|
47
|
+
* The update type is `S` instead of `S | undefined` because updates are always
|
|
48
|
+
* optional --> no need to specify optionality.
|
|
53
49
|
* ```
|
|
54
50
|
*/
|
|
55
51
|
export type Generated<S> = ColumnType<S, S | undefined, S>;
|
|
@@ -26,14 +26,16 @@ type AllProps<T> = T & {
|
|
|
26
26
|
* 1. Omit checked type - all checked properties will be expect as of type never
|
|
27
27
|
*
|
|
28
28
|
* ```ts
|
|
29
|
-
*
|
|
29
|
+
* type SomeType = { propA: string; propB?: number; }
|
|
30
|
+
* // const z: SomeType = requireAllProps({ propC: "no type will work" }); // Property 'propA' is missing in type '{ propC: string; }' but required in type 'SomeType'.
|
|
30
31
|
* ```
|
|
31
32
|
*
|
|
32
33
|
* 2. Apply to spreaded object - there is no way how to check in compile time if spreaded object contains all properties
|
|
33
34
|
*
|
|
34
35
|
* ```ts
|
|
36
|
+
* type SomeType = { propA: string; propB?: number; }
|
|
35
37
|
* const y: SomeType = { propA: "" }; // valid object according to SomeType declaration
|
|
36
|
-
* const x = requireAllProps<SomeType>(
|
|
38
|
+
* // const x = requireAllProps<SomeType>({ ...y }); // Argument of type '{ propA: string; propB?: number; }' is not assignable to parameter of type 'AllProps<SomeType>'.
|
|
37
39
|
* ```
|
|
38
40
|
*
|
|
39
41
|
* @param obj object to check if all properties has been used
|
|
@@ -21,14 +21,16 @@ exports.requireAllProps = requireAllProps;
|
|
|
21
21
|
* 1. Omit checked type - all checked properties will be expect as of type never
|
|
22
22
|
*
|
|
23
23
|
* ```ts
|
|
24
|
-
*
|
|
24
|
+
* type SomeType = { propA: string; propB?: number; }
|
|
25
|
+
* // const z: SomeType = requireAllProps({ propC: "no type will work" }); // Property 'propA' is missing in type '{ propC: string; }' but required in type 'SomeType'.
|
|
25
26
|
* ```
|
|
26
27
|
*
|
|
27
28
|
* 2. Apply to spreaded object - there is no way how to check in compile time if spreaded object contains all properties
|
|
28
29
|
*
|
|
29
30
|
* ```ts
|
|
31
|
+
* type SomeType = { propA: string; propB?: number; }
|
|
30
32
|
* const y: SomeType = { propA: "" }; // valid object according to SomeType declaration
|
|
31
|
-
* const x = requireAllProps<SomeType>(
|
|
33
|
+
* // const x = requireAllProps<SomeType>({ ...y }); // Argument of type '{ propA: string; propB?: number; }' is not assignable to parameter of type 'AllProps<SomeType>'.
|
|
32
34
|
* ```
|
|
33
35
|
*
|
|
34
36
|
* @param obj object to check if all properties has been used
|
|
@@ -125,7 +125,9 @@ export type NarrowPartial<O, T> = DrainOuterGeneric<T extends object ? {
|
|
|
125
125
|
* Example:
|
|
126
126
|
*
|
|
127
127
|
* ```ts
|
|
128
|
-
*
|
|
128
|
+
* import type { NotNull } from 'kysely'
|
|
129
|
+
*
|
|
130
|
+
* await db.selectFrom('person')
|
|
129
131
|
* .where('nullable_column', 'is not', null)
|
|
130
132
|
* .selectAll()
|
|
131
133
|
* .$narrowType<{ nullable_column: NotNull }>()
|
|
@@ -148,7 +150,7 @@ export type SqlBool = boolean | 0 | 1;
|
|
|
148
150
|
* A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<T>>>>>>>>>>>>>>>>>>>>>>>>
|
|
149
151
|
* >
|
|
150
152
|
*
|
|
151
|
-
* type Error = Test<number> // Type instantiation is excessively deep and possibly infinite.ts (2589)
|
|
153
|
+
* // type Error = Test<number> // Type instantiation is excessively deep and possibly infinite.ts (2589)
|
|
152
154
|
* ```
|
|
153
155
|
*
|
|
154
156
|
* To fix this, we can use `DrainOuterGeneric`:
|
|
@@ -47,8 +47,13 @@ export declare abstract class DialectAdapterBase implements DialectAdapter {
|
|
|
47
47
|
* have explicit locks but supports `FOR UPDATE` row locks and transactional DDL:
|
|
48
48
|
*
|
|
49
49
|
* ```ts
|
|
50
|
-
* {
|
|
51
|
-
*
|
|
50
|
+
* import { DialectAdapterBase, type MigrationLockOptions, Kysely } from 'kysely'
|
|
51
|
+
*
|
|
52
|
+
* export class MyAdapter extends DialectAdapterBase {
|
|
53
|
+
* override async acquireMigrationLock(
|
|
54
|
+
* db: Kysely<any>,
|
|
55
|
+
* options: MigrationLockOptions
|
|
56
|
+
* ): Promise<void> {
|
|
52
57
|
* const queryDb = options.lockTableSchema
|
|
53
58
|
* ? db.withSchema(options.lockTableSchema)
|
|
54
59
|
* : db
|
|
@@ -64,6 +69,10 @@ export declare abstract class DialectAdapterBase implements DialectAdapter {
|
|
|
64
69
|
* .forUpdate()
|
|
65
70
|
* .execute()
|
|
66
71
|
* }
|
|
72
|
+
*
|
|
73
|
+
* override async releaseMigrationLock() {
|
|
74
|
+
* // noop
|
|
75
|
+
* }
|
|
67
76
|
* }
|
|
68
77
|
* ```
|
|
69
78
|
*
|
|
@@ -52,8 +52,13 @@ export interface DialectAdapter {
|
|
|
52
52
|
* have explicit locks but supports `FOR UPDATE` row locks and transactional DDL:
|
|
53
53
|
*
|
|
54
54
|
* ```ts
|
|
55
|
-
* {
|
|
56
|
-
*
|
|
55
|
+
* import { DialectAdapterBase, type MigrationLockOptions, Kysely } from 'kysely'
|
|
56
|
+
*
|
|
57
|
+
* export class MyAdapter extends DialectAdapterBase {
|
|
58
|
+
* override async acquireMigrationLock(
|
|
59
|
+
* db: Kysely<any>,
|
|
60
|
+
* options: MigrationLockOptions
|
|
61
|
+
* ): Promise<void> {
|
|
57
62
|
* const queryDb = options.lockTableSchema
|
|
58
63
|
* ? db.withSchema(options.lockTableSchema)
|
|
59
64
|
* : db
|
|
@@ -69,6 +74,10 @@ export interface DialectAdapter {
|
|
|
69
74
|
* .forUpdate()
|
|
70
75
|
* .execute()
|
|
71
76
|
* }
|
|
77
|
+
*
|
|
78
|
+
* override async releaseMigrationLock() {
|
|
79
|
+
* // noop
|
|
80
|
+
* }
|
|
72
81
|
* }
|
|
73
82
|
* ```
|
|
74
83
|
*
|
|
@@ -36,8 +36,13 @@ export declare class MssqlAdapter extends DialectAdapterBase {
|
|
|
36
36
|
* have explicit locks but supports `FOR UPDATE` row locks and transactional DDL:
|
|
37
37
|
*
|
|
38
38
|
* ```ts
|
|
39
|
-
* {
|
|
40
|
-
*
|
|
39
|
+
* import { DialectAdapterBase, type MigrationLockOptions, Kysely } from 'kysely'
|
|
40
|
+
*
|
|
41
|
+
* export class MyAdapter extends DialectAdapterBase {
|
|
42
|
+
* override async acquireMigrationLock(
|
|
43
|
+
* db: Kysely<any>,
|
|
44
|
+
* options: MigrationLockOptions
|
|
45
|
+
* ): Promise<void> {
|
|
41
46
|
* const queryDb = options.lockTableSchema
|
|
42
47
|
* ? db.withSchema(options.lockTableSchema)
|
|
43
48
|
* : db
|
|
@@ -53,6 +58,10 @@ export declare class MssqlAdapter extends DialectAdapterBase {
|
|
|
53
58
|
* .forUpdate()
|
|
54
59
|
* .execute()
|
|
55
60
|
* }
|
|
61
|
+
*
|
|
62
|
+
* override async releaseMigrationLock() {
|
|
63
|
+
* // noop
|
|
64
|
+
* }
|
|
56
65
|
* }
|
|
57
66
|
* ```
|
|
58
67
|
*
|
|
@@ -6,21 +6,23 @@ export interface MssqlDialectConfig {
|
|
|
6
6
|
* (excluding `create`, `destroy` and `validate` functions which are controlled by this dialect),
|
|
7
7
|
* `min` & `max` connections at the very least.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* ### Examples
|
|
10
10
|
*
|
|
11
11
|
* ```ts
|
|
12
|
+
* import { MssqlDialect } from 'kysely'
|
|
12
13
|
* import * as Tarn from 'tarn'
|
|
14
|
+
* import * as Tedious from 'tedious'
|
|
13
15
|
*
|
|
14
16
|
* const dialect = new MssqlDialect({
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* ...
|
|
18
|
-
*
|
|
17
|
+
* tarn: { ...Tarn, options: { max: 10, min: 0 } },
|
|
18
|
+
* tedious: {
|
|
19
|
+
* ...Tedious,
|
|
20
|
+
* connectionFactory: () => new Tedious.Connection({
|
|
19
21
|
* // ...
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* },
|
|
23
|
-
* }
|
|
22
|
+
* server: 'localhost',
|
|
23
|
+
* // ...
|
|
24
|
+
* }),
|
|
25
|
+
* }
|
|
24
26
|
* })
|
|
25
27
|
* ```
|
|
26
28
|
*/
|
|
@@ -31,17 +33,23 @@ export interface MssqlDialectConfig {
|
|
|
31
33
|
* you need to pass the `tedious` package itself. You also need to pass a factory
|
|
32
34
|
* function that creates new `tedious` `Connection` instances on demand.
|
|
33
35
|
*
|
|
34
|
-
*
|
|
36
|
+
* ### Examples
|
|
35
37
|
*
|
|
36
38
|
* ```ts
|
|
39
|
+
* import { MssqlDialect } from 'kysely'
|
|
40
|
+
* import * as Tarn from 'tarn'
|
|
37
41
|
* import * as Tedious from 'tedious'
|
|
38
42
|
*
|
|
39
43
|
* const dialect = new MssqlDialect({
|
|
40
|
-
*
|
|
44
|
+
* tarn: { ...Tarn, options: { max: 10, min: 0 } },
|
|
41
45
|
* tedious: {
|
|
42
46
|
* ...Tedious,
|
|
43
|
-
* connectionFactory: () => new Tedious.Connection({
|
|
44
|
-
*
|
|
47
|
+
* connectionFactory: () => new Tedious.Connection({
|
|
48
|
+
* // ...
|
|
49
|
+
* server: 'localhost',
|
|
50
|
+
* // ...
|
|
51
|
+
* }),
|
|
52
|
+
* }
|
|
45
53
|
* })
|
|
46
54
|
* ```
|
|
47
55
|
*/
|
|
@@ -52,6 +60,13 @@ export interface Tedious {
|
|
|
52
60
|
ISOLATION_LEVEL: TediousIsolationLevel;
|
|
53
61
|
Request: TediousRequestClass;
|
|
54
62
|
TYPES: TediousTypes;
|
|
63
|
+
/**
|
|
64
|
+
* Controls whether connections are reset to their initial states when released back to the pool. Resetting a connection performs additional requests to the database.
|
|
65
|
+
* See {@link https://tediousjs.github.io/tedious/api-connection.html#function_reset | connection.reset}.
|
|
66
|
+
*
|
|
67
|
+
* Defaults to `true`.
|
|
68
|
+
*/
|
|
69
|
+
resetConnectionOnRelease?: boolean;
|
|
55
70
|
}
|
|
56
71
|
export interface TediousConnection {
|
|
57
72
|
beginTransaction(callback: (error?: Error | null, transactionDescriptor?: any) => void, name?: string, isolationLevel?: number): void;
|
|
@@ -115,23 +130,16 @@ export interface Tarn {
|
|
|
115
130
|
* Tarn.js' pool options, excluding `create`, `destroy` and `validate` functions,
|
|
116
131
|
* which must be implemented by this dialect.
|
|
117
132
|
*/
|
|
118
|
-
options: Omit<TarnPoolOptions<any>, 'create' | 'destroy' | 'validate'
|
|
133
|
+
options: Omit<TarnPoolOptions<any>, 'create' | 'destroy' | 'validate'> & {
|
|
134
|
+
/**
|
|
135
|
+
* Controls whether connections are validated before being acquired from the pool. Connection validation performs additional requests to the database.
|
|
136
|
+
*
|
|
137
|
+
* Defaults to `true`.
|
|
138
|
+
*/
|
|
139
|
+
validateConnections?: boolean;
|
|
140
|
+
};
|
|
119
141
|
/**
|
|
120
142
|
* Tarn.js' Pool class.
|
|
121
|
-
*
|
|
122
|
-
* Example:
|
|
123
|
-
*
|
|
124
|
-
* ```ts
|
|
125
|
-
* import { Pool } from 'tarn'
|
|
126
|
-
*
|
|
127
|
-
* const dialect = new MssqlDialect({
|
|
128
|
-
* // ...
|
|
129
|
-
* tarn: {
|
|
130
|
-
* // ...
|
|
131
|
-
* Pool,
|
|
132
|
-
* },
|
|
133
|
-
* })
|
|
134
|
-
* ```
|
|
135
143
|
*/
|
|
136
144
|
Pool: typeof TarnPool;
|
|
137
145
|
}
|
|
@@ -154,7 +162,7 @@ export interface TarnPoolOptions<R> {
|
|
|
154
162
|
min: number;
|
|
155
163
|
propagateCreateError?: boolean;
|
|
156
164
|
reapIntervalMillis?: number;
|
|
157
|
-
validate(resource: R): boolean;
|
|
165
|
+
validate?(resource: R): boolean;
|
|
158
166
|
}
|
|
159
167
|
export interface TarnPendingRequest<R> {
|
|
160
168
|
promise: Promise<R>;
|
|
@@ -11,18 +11,22 @@ export class MssqlDriver {
|
|
|
11
11
|
#pool;
|
|
12
12
|
constructor(config) {
|
|
13
13
|
this.#config = freeze({ ...config });
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
const { tarn, tedious } = this.#config;
|
|
15
|
+
const { validateConnections, ...poolOptions } = tarn.options;
|
|
16
|
+
this.#pool = new tarn.Pool({
|
|
17
|
+
...poolOptions,
|
|
16
18
|
create: async () => {
|
|
17
|
-
const connection = await
|
|
18
|
-
return await new MssqlConnection(connection,
|
|
19
|
+
const connection = await tedious.connectionFactory();
|
|
20
|
+
return await new MssqlConnection(connection, tedious).connect();
|
|
19
21
|
},
|
|
20
22
|
destroy: async (connection) => {
|
|
21
23
|
await connection[PRIVATE_DESTROY_METHOD]();
|
|
22
24
|
},
|
|
23
25
|
// @ts-ignore `tarn` accepts a function that returns a promise here, but
|
|
24
26
|
// the types are not aligned and it type errors.
|
|
25
|
-
validate:
|
|
27
|
+
validate: validateConnections === false
|
|
28
|
+
? undefined
|
|
29
|
+
: (connection) => connection.validate(),
|
|
26
30
|
});
|
|
27
31
|
}
|
|
28
32
|
async init() {
|
|
@@ -186,15 +190,18 @@ class MssqlConnection {
|
|
|
186
190
|
}
|
|
187
191
|
});
|
|
188
192
|
}
|
|
189
|
-
[PRIVATE_RELEASE_METHOD]() {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
193
|
+
async [PRIVATE_RELEASE_METHOD]() {
|
|
194
|
+
// TODO: flip this to `if (!this.#tedious.resetConnectionOnRelease) {}` in a future PR.
|
|
195
|
+
if (this.#tedious.resetConnectionOnRelease !== false) {
|
|
196
|
+
await new Promise((resolve, reject) => {
|
|
197
|
+
this.#connection.reset((error) => {
|
|
198
|
+
if (error)
|
|
199
|
+
reject(error);
|
|
200
|
+
else
|
|
201
|
+
resolve(undefined);
|
|
202
|
+
});
|
|
196
203
|
});
|
|
197
|
-
}
|
|
204
|
+
}
|
|
198
205
|
}
|
|
199
206
|
[PRIVATE_DESTROY_METHOD]() {
|
|
200
207
|
return new Promise((resolve) => {
|
|
@@ -33,8 +33,13 @@ export declare class MysqlAdapter extends DialectAdapterBase {
|
|
|
33
33
|
* have explicit locks but supports `FOR UPDATE` row locks and transactional DDL:
|
|
34
34
|
*
|
|
35
35
|
* ```ts
|
|
36
|
-
* {
|
|
37
|
-
*
|
|
36
|
+
* import { DialectAdapterBase, type MigrationLockOptions, Kysely } from 'kysely'
|
|
37
|
+
*
|
|
38
|
+
* export class MyAdapter extends DialectAdapterBase {
|
|
39
|
+
* override async acquireMigrationLock(
|
|
40
|
+
* db: Kysely<any>,
|
|
41
|
+
* options: MigrationLockOptions
|
|
42
|
+
* ): Promise<void> {
|
|
38
43
|
* const queryDb = options.lockTableSchema
|
|
39
44
|
* ? db.withSchema(options.lockTableSchema)
|
|
40
45
|
* : db
|
|
@@ -50,6 +55,10 @@ export declare class MysqlAdapter extends DialectAdapterBase {
|
|
|
50
55
|
* .forUpdate()
|
|
51
56
|
* .execute()
|
|
52
57
|
* }
|
|
58
|
+
*
|
|
59
|
+
* override async releaseMigrationLock() {
|
|
60
|
+
* // noop
|
|
61
|
+
* }
|
|
53
62
|
* }
|
|
54
63
|
* ```
|
|
55
64
|
*
|
|
@@ -17,6 +17,10 @@ export interface MysqlDialectConfig {
|
|
|
17
17
|
* Called once for each created connection.
|
|
18
18
|
*/
|
|
19
19
|
onCreateConnection?: (connection: DatabaseConnection) => Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Called every time a connection is acquired from the connection pool.
|
|
22
|
+
*/
|
|
23
|
+
onReserveConnection?: (connection: DatabaseConnection) => Promise<void>;
|
|
20
24
|
}
|
|
21
25
|
/**
|
|
22
26
|
* This interface is the subset of mysql2 driver's `Pool` class that
|
|
@@ -33,8 +33,13 @@ export declare class PostgresAdapter extends DialectAdapterBase {
|
|
|
33
33
|
* have explicit locks but supports `FOR UPDATE` row locks and transactional DDL:
|
|
34
34
|
*
|
|
35
35
|
* ```ts
|
|
36
|
-
* {
|
|
37
|
-
*
|
|
36
|
+
* import { DialectAdapterBase, type MigrationLockOptions, Kysely } from 'kysely'
|
|
37
|
+
*
|
|
38
|
+
* export class MyAdapter extends DialectAdapterBase {
|
|
39
|
+
* override async acquireMigrationLock(
|
|
40
|
+
* db: Kysely<any>,
|
|
41
|
+
* options: MigrationLockOptions
|
|
42
|
+
* ): Promise<void> {
|
|
38
43
|
* const queryDb = options.lockTableSchema
|
|
39
44
|
* ? db.withSchema(options.lockTableSchema)
|
|
40
45
|
* : db
|
|
@@ -50,6 +55,10 @@ export declare class PostgresAdapter extends DialectAdapterBase {
|
|
|
50
55
|
* .forUpdate()
|
|
51
56
|
* .execute()
|
|
52
57
|
* }
|
|
58
|
+
*
|
|
59
|
+
* override async releaseMigrationLock() {
|
|
60
|
+
* // noop
|
|
61
|
+
* }
|
|
53
62
|
* }
|
|
54
63
|
* ```
|
|
55
64
|
*
|