kysely 0.27.3 → 0.27.5
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/CONTRIBUTING.md +2 -2
- package/README.md +7 -7
- package/deno.check.d.ts +86 -0
- package/deno.check.json +21 -0
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +13 -3
- package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
- package/dist/cjs/dialect/dialect-adapter.d.ts +16 -2
- package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +12 -7
- package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +83 -55
- package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
- package/dist/cjs/dialect/mssql/mssql-driver.js +114 -48
- 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/driver/database-connection.d.ts +3 -1
- package/dist/cjs/driver/dummy-driver.d.ts +13 -12
- package/dist/cjs/driver/dummy-driver.js +13 -12
- package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
- package/dist/cjs/dynamic/dynamic.d.ts +7 -7
- package/dist/cjs/dynamic/dynamic.js +7 -7
- package/dist/cjs/expression/expression-builder.d.ts +153 -62
- package/dist/cjs/expression/expression-builder.js +2 -3
- package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
- package/dist/cjs/expression/expression.d.ts +40 -5
- package/dist/cjs/expression/expression.js +2 -3
- package/dist/cjs/helpers/mssql.d.ts +74 -14
- package/dist/cjs/helpers/mssql.js +77 -18
- package/dist/cjs/helpers/mysql.d.ts +17 -13
- package/dist/cjs/helpers/mysql.js +20 -17
- package/dist/cjs/helpers/postgres.d.ts +11 -8
- package/dist/cjs/helpers/postgres.js +14 -12
- package/dist/cjs/helpers/sqlite.d.ts +41 -16
- package/dist/cjs/helpers/sqlite.js +44 -20
- package/dist/cjs/index.d.ts +28 -21
- package/dist/cjs/index.js +28 -21
- package/dist/cjs/kysely.d.ts +100 -42
- package/dist/cjs/kysely.js +63 -39
- 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 +82 -14
- package/dist/cjs/migration/migrator.js +82 -14
- 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/alter-column-node.d.ts +1 -1
- package/dist/cjs/operation-node/case-node.d.ts +1 -1
- package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
- package/dist/cjs/operation-node/data-type-node.d.ts +2 -2
- package/dist/cjs/operation-node/data-type-node.js +17 -3
- package/dist/cjs/operation-node/delete-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -4
- package/dist/cjs/operation-node/having-node.d.ts +1 -1
- package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/merge-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/on-node.d.ts +1 -1
- package/dist/cjs/operation-node/operation-node-source.js +1 -2
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +11 -3
- package/dist/cjs/operation-node/operation-node-transformer.js +26 -3
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.d.ts +3 -3
- package/dist/cjs/operation-node/operator-node.js +8 -6
- package/dist/cjs/operation-node/output-node.d.ts +13 -0
- package/dist/cjs/operation-node/output-node.js +26 -0
- package/dist/cjs/operation-node/query-node.d.ts +15 -6
- package/dist/cjs/operation-node/query-node.js +17 -0
- package/dist/cjs/operation-node/select-query-node.d.ts +1 -1
- package/dist/cjs/operation-node/select-query-node.js +6 -8
- package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/where-node.d.ts +1 -1
- package/dist/cjs/parser/binary-operation-parser.js +5 -6
- package/dist/cjs/parser/data-type-parser.js +1 -2
- package/dist/cjs/parser/default-value-parser.js +1 -2
- package/dist/cjs/parser/expression-parser.js +3 -4
- package/dist/cjs/parser/fetch-parser.js +1 -2
- package/dist/cjs/parser/group-by-parser.js +1 -2
- package/dist/cjs/parser/identifier-parser.js +1 -2
- package/dist/cjs/parser/insert-values-parser.js +1 -2
- package/dist/cjs/parser/join-parser.js +1 -2
- package/dist/cjs/parser/merge-parser.js +2 -3
- package/dist/cjs/parser/on-commit-action-parse.js +1 -2
- package/dist/cjs/parser/on-modify-action-parser.js +1 -2
- package/dist/cjs/parser/order-by-parser.js +3 -4
- package/dist/cjs/parser/parse-utils.js +4 -5
- package/dist/cjs/parser/partition-by-parser.js +1 -2
- package/dist/cjs/parser/reference-parser.js +8 -9
- package/dist/cjs/parser/returning-parser.d.ts +4 -3
- package/dist/cjs/parser/select-parser.js +2 -3
- package/dist/cjs/parser/set-operation-parser.js +1 -2
- package/dist/cjs/parser/table-parser.js +4 -5
- package/dist/cjs/parser/top-parser.js +1 -2
- package/dist/cjs/parser/unary-operation-parser.js +3 -4
- package/dist/cjs/parser/update-set-parser.js +2 -3
- package/dist/cjs/parser/value-parser.js +4 -5
- package/dist/cjs/parser/with-parser.js +1 -2
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +54 -27
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +26 -21
- package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
- 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 +80 -9
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +53 -14
- package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
- 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 +219 -43
- package/dist/cjs/query-builder/delete-query-builder.js +95 -31
- package/dist/cjs/query-builder/function-module.d.ts +40 -93
- package/dist/cjs/query-builder/function-module.js +1 -2
- package/dist/cjs/query-builder/insert-query-builder.d.ts +326 -67
- package/dist/cjs/query-builder/insert-query-builder.js +212 -61
- 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 +312 -10
- package/dist/cjs/query-builder/merge-query-builder.js +98 -7
- package/dist/cjs/query-builder/no-result-error.js +2 -2
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +53 -20
- package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
- package/dist/cjs/query-builder/output-interface.d.ts +138 -0
- package/dist/cjs/query-builder/output-interface.js +2 -0
- package/dist/cjs/query-builder/returning-interface.d.ts +7 -5
- package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +370 -73
- package/dist/cjs/query-builder/select-query-builder.js +14 -9
- package/dist/cjs/query-builder/update-query-builder.d.ts +225 -31
- package/dist/cjs/query-builder/update-query-builder.js +96 -17
- package/dist/cjs/query-builder/update-result.d.ts +9 -0
- package/dist/cjs/query-builder/update-result.js +9 -0
- package/dist/cjs/query-builder/where-interface.d.ts +6 -2
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +45 -1
- package/dist/cjs/query-creator.d.ts +122 -21
- package/dist/cjs/query-creator.js +56 -3
- package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
- package/dist/cjs/raw-builder/raw-builder.js +1 -2
- package/dist/cjs/raw-builder/sql.d.ts +31 -12
- package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
- package/dist/cjs/schema/alter-column-builder.js +20 -3
- package/dist/cjs/schema/alter-table-add-index-builder.d.ts +44 -10
- package/dist/cjs/schema/alter-table-add-index-builder.js +27 -10
- package/dist/cjs/schema/alter-table-builder.js +1 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +286 -24
- package/dist/cjs/schema/column-definition-builder.js +288 -24
- 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/assert.js +2 -3
- package/dist/cjs/util/column-type.d.ts +5 -9
- package/dist/cjs/util/compilable.js +1 -2
- package/dist/cjs/util/json-object-args.js +1 -2
- package/dist/cjs/util/log-once.js +1 -2
- package/dist/cjs/util/object-utils.js +38 -26
- package/dist/cjs/util/performance-now.js +1 -2
- package/dist/cjs/util/prevent-await.js +1 -2
- package/dist/cjs/util/query-id.js +1 -2
- package/dist/cjs/util/random-string.js +1 -2
- package/dist/cjs/util/require-all-props.d.ts +4 -2
- package/dist/cjs/util/require-all-props.js +5 -4
- package/dist/cjs/util/stack-trace-utils.js +1 -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 +13 -3
- package/dist/esm/dialect/dialect-adapter-base.js +4 -1
- package/dist/esm/dialect/dialect-adapter.d.ts +16 -2
- package/dist/esm/dialect/mssql/mssql-adapter.d.ts +12 -7
- package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +83 -55
- package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
- package/dist/esm/dialect/mssql/mssql-driver.js +114 -48
- 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/driver/database-connection.d.ts +3 -1
- 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 +7 -7
- package/dist/esm/dynamic/dynamic.js +7 -7
- package/dist/esm/expression/expression-builder.d.ts +153 -62
- 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 +17 -13
- package/dist/esm/helpers/mysql.js +17 -13
- package/dist/esm/helpers/postgres.d.ts +11 -8
- package/dist/esm/helpers/postgres.js +11 -8
- package/dist/esm/helpers/sqlite.d.ts +41 -16
- package/dist/esm/helpers/sqlite.js +41 -16
- package/dist/esm/index.d.ts +28 -21
- package/dist/esm/index.js +28 -21
- package/dist/esm/kysely.d.ts +100 -42
- package/dist/esm/kysely.js +61 -37
- 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 +82 -14
- package/dist/esm/migration/migrator.js +82 -14
- 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/alter-column-node.d.ts +1 -1
- package/dist/esm/operation-node/case-node.d.ts +1 -1
- package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
- package/dist/esm/operation-node/data-type-node.d.ts +2 -2
- package/dist/esm/operation-node/data-type-node.js +15 -1
- package/dist/esm/operation-node/delete-query-node.d.ts +3 -0
- package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -4
- package/dist/esm/operation-node/having-node.d.ts +1 -1
- package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
- package/dist/esm/operation-node/merge-query-node.d.ts +3 -0
- package/dist/esm/operation-node/on-node.d.ts +1 -1
- package/dist/esm/operation-node/operation-node-transformer.d.ts +11 -3
- package/dist/esm/operation-node/operation-node-transformer.js +26 -3
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +1 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.d.ts +3 -3
- package/dist/esm/operation-node/operator-node.js +2 -0
- package/dist/esm/operation-node/output-node.d.ts +13 -0
- package/dist/esm/operation-node/output-node.js +24 -0
- package/dist/esm/operation-node/query-node.d.ts +15 -6
- package/dist/esm/operation-node/query-node.js +17 -0
- package/dist/esm/operation-node/select-query-node.d.ts +1 -1
- package/dist/esm/operation-node/select-query-node.js +6 -8
- package/dist/esm/operation-node/update-query-node.d.ts +3 -0
- package/dist/esm/operation-node/where-node.d.ts +1 -1
- package/dist/esm/parser/returning-parser.d.ts +4 -3
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +54 -27
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +26 -21
- 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 +80 -9
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +53 -14
- package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
- 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 +219 -43
- package/dist/esm/query-builder/delete-query-builder.js +95 -31
- package/dist/esm/query-builder/function-module.d.ts +40 -93
- package/dist/esm/query-builder/insert-query-builder.d.ts +326 -67
- package/dist/esm/query-builder/insert-query-builder.js +212 -61
- 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 +312 -10
- package/dist/esm/query-builder/merge-query-builder.js +98 -7
- package/dist/esm/query-builder/on-conflict-builder.d.ts +53 -20
- package/dist/esm/query-builder/on-conflict-builder.js +41 -16
- package/dist/esm/query-builder/output-interface.d.ts +138 -0
- package/dist/esm/query-builder/output-interface.js +2 -0
- package/dist/esm/query-builder/returning-interface.d.ts +7 -5
- package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +370 -73
- package/dist/esm/query-builder/select-query-builder.js +13 -7
- package/dist/esm/query-builder/update-query-builder.d.ts +225 -31
- package/dist/esm/query-builder/update-query-builder.js +96 -17
- package/dist/esm/query-builder/update-result.d.ts +9 -0
- package/dist/esm/query-builder/update-result.js +9 -0
- package/dist/esm/query-builder/where-interface.d.ts +6 -2
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/esm/query-compiler/default-query-compiler.js +45 -1
- package/dist/esm/query-creator.d.ts +122 -21
- package/dist/esm/query-creator.js +56 -3
- package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
- package/dist/esm/raw-builder/sql.d.ts +31 -12
- package/dist/esm/schema/alter-column-builder.d.ts +17 -3
- package/dist/esm/schema/alter-column-builder.js +20 -3
- package/dist/esm/schema/alter-table-add-index-builder.d.ts +44 -10
- package/dist/esm/schema/alter-table-add-index-builder.js +27 -10
- package/dist/esm/schema/alter-table-builder.js +1 -2
- package/dist/esm/schema/column-definition-builder.d.ts +286 -24
- package/dist/esm/schema/column-definition-builder.js +288 -24
- 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/object-utils.js +18 -5
- 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 +30 -24
|
@@ -11,24 +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
|
-
await new
|
|
19
|
-
if (error)
|
|
20
|
-
reject(error);
|
|
21
|
-
else
|
|
22
|
-
resolve(undefined);
|
|
23
|
-
}));
|
|
24
|
-
return new MssqlConnection(connection, this.#config.tedious);
|
|
19
|
+
const connection = await tedious.connectionFactory();
|
|
20
|
+
return await new MssqlConnection(connection, tedious).connect();
|
|
25
21
|
},
|
|
26
22
|
destroy: async (connection) => {
|
|
27
23
|
await connection[PRIVATE_DESTROY_METHOD]();
|
|
28
24
|
},
|
|
29
25
|
// @ts-ignore `tarn` accepts a function that returns a promise here, but
|
|
30
26
|
// the types are not aligned and it type errors.
|
|
31
|
-
validate:
|
|
27
|
+
validate: validateConnections === false
|
|
28
|
+
? undefined
|
|
29
|
+
: (connection) => connection.validate(),
|
|
32
30
|
});
|
|
33
31
|
}
|
|
34
32
|
async init() {
|
|
@@ -60,6 +58,10 @@ class MssqlConnection {
|
|
|
60
58
|
constructor(connection, tedious) {
|
|
61
59
|
this.#connection = connection;
|
|
62
60
|
this.#tedious = tedious;
|
|
61
|
+
this.#connection.on('error', console.error);
|
|
62
|
+
this.#connection.once('end', () => {
|
|
63
|
+
this.#connection.off('error', console.error);
|
|
64
|
+
});
|
|
63
65
|
}
|
|
64
66
|
async beginTransaction(settings) {
|
|
65
67
|
const { isolationLevel } = settings;
|
|
@@ -80,10 +82,28 @@ class MssqlConnection {
|
|
|
80
82
|
resolve(undefined);
|
|
81
83
|
}));
|
|
82
84
|
}
|
|
85
|
+
async connect() {
|
|
86
|
+
await new Promise((resolve, reject) => {
|
|
87
|
+
this.#connection.connect((error) => {
|
|
88
|
+
if (error) {
|
|
89
|
+
console.error(error);
|
|
90
|
+
reject(error);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
resolve(undefined);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
return this;
|
|
98
|
+
}
|
|
83
99
|
async executeQuery(compiledQuery) {
|
|
84
100
|
try {
|
|
85
101
|
const deferred = new Deferred();
|
|
86
|
-
const request = new MssqlRequest(
|
|
102
|
+
const request = new MssqlRequest({
|
|
103
|
+
compiledQuery,
|
|
104
|
+
tedious: this.#tedious,
|
|
105
|
+
onDone: deferred,
|
|
106
|
+
});
|
|
87
107
|
this.#connection.execSql(request.request);
|
|
88
108
|
const { rowCount, rows } = await deferred.promise;
|
|
89
109
|
return {
|
|
@@ -107,11 +127,15 @@ class MssqlConnection {
|
|
|
107
127
|
if (!Number.isInteger(chunkSize) || chunkSize <= 0) {
|
|
108
128
|
throw new Error('chunkSize must be a positive integer');
|
|
109
129
|
}
|
|
110
|
-
const request = new MssqlRequest(
|
|
130
|
+
const request = new MssqlRequest({
|
|
131
|
+
compiledQuery,
|
|
132
|
+
streamChunkSize: chunkSize,
|
|
133
|
+
tedious: this.#tedious,
|
|
134
|
+
});
|
|
111
135
|
this.#connection.execSql(request.request);
|
|
112
136
|
try {
|
|
113
137
|
while (true) {
|
|
114
|
-
const rows = await request.readChunk(
|
|
138
|
+
const rows = await request.readChunk();
|
|
115
139
|
if (rows.length === 0) {
|
|
116
140
|
break;
|
|
117
141
|
}
|
|
@@ -122,13 +146,17 @@ class MssqlConnection {
|
|
|
122
146
|
}
|
|
123
147
|
}
|
|
124
148
|
finally {
|
|
125
|
-
this.#
|
|
149
|
+
await this.#cancelRequest(request);
|
|
126
150
|
}
|
|
127
151
|
}
|
|
128
152
|
async validate() {
|
|
129
153
|
try {
|
|
130
154
|
const deferred = new Deferred();
|
|
131
|
-
const request = new MssqlRequest(
|
|
155
|
+
const request = new MssqlRequest({
|
|
156
|
+
compiledQuery: CompiledQuery.raw('select 1'),
|
|
157
|
+
onDone: deferred,
|
|
158
|
+
tedious: this.#tedious,
|
|
159
|
+
});
|
|
132
160
|
this.#connection.execSql(request.request);
|
|
133
161
|
await deferred.promise;
|
|
134
162
|
return true;
|
|
@@ -152,16 +180,29 @@ class MssqlConnection {
|
|
|
152
180
|
}
|
|
153
181
|
return tediousIsolationLevel;
|
|
154
182
|
}
|
|
155
|
-
|
|
156
|
-
return new Promise((resolve
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
183
|
+
#cancelRequest(request) {
|
|
184
|
+
return new Promise((resolve) => {
|
|
185
|
+
request.request.once('requestCompleted', resolve);
|
|
186
|
+
const wasCanceled = this.#connection.cancel();
|
|
187
|
+
if (!wasCanceled) {
|
|
188
|
+
request.request.off('requestCompleted', resolve);
|
|
189
|
+
resolve(undefined);
|
|
190
|
+
}
|
|
163
191
|
});
|
|
164
192
|
}
|
|
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
|
+
});
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
165
206
|
[PRIVATE_DESTROY_METHOD]() {
|
|
166
207
|
return new Promise((resolve) => {
|
|
167
208
|
this.#connection.once('end', () => {
|
|
@@ -174,42 +215,62 @@ class MssqlConnection {
|
|
|
174
215
|
class MssqlRequest {
|
|
175
216
|
#request;
|
|
176
217
|
#rows;
|
|
218
|
+
#streamChunkSize;
|
|
219
|
+
#subscribers;
|
|
177
220
|
#tedious;
|
|
178
|
-
#completed;
|
|
179
221
|
#error;
|
|
180
222
|
#rowCount;
|
|
181
|
-
constructor(
|
|
182
|
-
|
|
223
|
+
constructor(props) {
|
|
224
|
+
const { compiledQuery, onDone, streamChunkSize, tedious } = props;
|
|
183
225
|
this.#rows = [];
|
|
226
|
+
this.#streamChunkSize = streamChunkSize;
|
|
227
|
+
this.#subscribers = {};
|
|
184
228
|
this.#tedious = tedious;
|
|
185
|
-
|
|
186
|
-
|
|
229
|
+
if (onDone) {
|
|
230
|
+
const subscriptionKey = 'onDone';
|
|
231
|
+
this.#subscribers[subscriptionKey] = (event, error) => {
|
|
232
|
+
if (event === 'chunkReady') {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
delete this.#subscribers[subscriptionKey];
|
|
236
|
+
if (event === 'error') {
|
|
237
|
+
onDone.reject(error);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
onDone.resolve({
|
|
241
|
+
rowCount: this.#rowCount,
|
|
242
|
+
rows: this.#rows,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
this.#request = new this.#tedious.Request(compiledQuery.sql, (err, rowCount) => {
|
|
187
248
|
if (err) {
|
|
188
|
-
this.#error
|
|
189
|
-
onDone?.reject(this.#error);
|
|
249
|
+
Object.values(this.#subscribers).forEach((subscriber) => subscriber('error', err instanceof AggregateError ? err.errors : err));
|
|
190
250
|
}
|
|
191
251
|
else {
|
|
192
252
|
this.#rowCount = rowCount;
|
|
193
253
|
}
|
|
194
254
|
});
|
|
195
|
-
this.#addParametersToRequest(parameters);
|
|
196
|
-
this.#attachListeners(
|
|
255
|
+
this.#addParametersToRequest(compiledQuery.parameters);
|
|
256
|
+
this.#attachListeners();
|
|
197
257
|
}
|
|
198
258
|
get request() {
|
|
199
259
|
return this.#request;
|
|
200
260
|
}
|
|
201
|
-
readChunk(
|
|
261
|
+
readChunk() {
|
|
262
|
+
const subscriptionKey = this.readChunk.name;
|
|
202
263
|
return new Promise((resolve, reject) => {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
reject(
|
|
264
|
+
this.#subscribers[subscriptionKey] = (event, error) => {
|
|
265
|
+
delete this.#subscribers[subscriptionKey];
|
|
266
|
+
if (event === 'error') {
|
|
267
|
+
reject(error);
|
|
207
268
|
}
|
|
208
|
-
else
|
|
209
|
-
|
|
210
|
-
resolve(this.#rows.splice(0, chunkSize));
|
|
269
|
+
else {
|
|
270
|
+
resolve(this.#rows.splice(0, this.#streamChunkSize));
|
|
211
271
|
}
|
|
212
|
-
}
|
|
272
|
+
};
|
|
273
|
+
this.#request.resume();
|
|
213
274
|
});
|
|
214
275
|
}
|
|
215
276
|
#addParametersToRequest(parameters) {
|
|
@@ -218,22 +279,27 @@ class MssqlRequest {
|
|
|
218
279
|
this.#request.addParameter(String(i + 1), this.#getTediousDataType(parameter), parameter);
|
|
219
280
|
}
|
|
220
281
|
}
|
|
221
|
-
#attachListeners(
|
|
282
|
+
#attachListeners() {
|
|
283
|
+
const pauseAndEmitChunkReady = this.#streamChunkSize
|
|
284
|
+
? () => {
|
|
285
|
+
if (this.#streamChunkSize <= this.#rows.length) {
|
|
286
|
+
this.#request.pause();
|
|
287
|
+
Object.values(this.#subscribers).forEach((subscriber) => subscriber('chunkReady'));
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
: () => { };
|
|
222
291
|
const rowListener = (columns) => {
|
|
223
292
|
const row = {};
|
|
224
293
|
for (const column of columns) {
|
|
225
294
|
row[column.metadata.colName] = column.value;
|
|
226
295
|
}
|
|
227
296
|
this.#rows.push(row);
|
|
297
|
+
pauseAndEmitChunkReady();
|
|
228
298
|
};
|
|
229
299
|
this.#request.on('row', rowListener);
|
|
230
300
|
this.#request.once('requestCompleted', () => {
|
|
231
|
-
this.#
|
|
301
|
+
Object.values(this.#subscribers).forEach((subscriber) => subscriber('completed'));
|
|
232
302
|
this.#request.off('row', rowListener);
|
|
233
|
-
onDone?.resolve({
|
|
234
|
-
rowCount: this.#rowCount,
|
|
235
|
-
rows: this.#rows,
|
|
236
|
-
});
|
|
237
303
|
});
|
|
238
304
|
}
|
|
239
305
|
#getTediousDataType(value) {
|
|
@@ -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
|
*
|
|
@@ -13,13 +13,16 @@ export interface PostgresDialectConfig {
|
|
|
13
13
|
pool: PostgresPool | (() => Promise<PostgresPool>);
|
|
14
14
|
/**
|
|
15
15
|
* https://github.com/brianc/node-postgres/tree/master/packages/pg-cursor
|
|
16
|
+
*
|
|
16
17
|
* ```ts
|
|
18
|
+
* import { PostgresDialect } from 'kysely'
|
|
19
|
+
* import { Pool } from 'pg'
|
|
17
20
|
* import Cursor from 'pg-cursor'
|
|
18
|
-
* // or
|
|
19
|
-
* import * as Cursor from 'pg-cursor'
|
|
21
|
+
* // or import * as Cursor from 'pg-cursor'
|
|
20
22
|
*
|
|
21
23
|
* new PostgresDialect({
|
|
22
|
-
* cursor: Cursor
|
|
24
|
+
* cursor: Cursor,
|
|
25
|
+
* pool: new Pool('postgres://localhost:5432/mydb')
|
|
23
26
|
* })
|
|
24
27
|
* ```
|
|
25
28
|
*/
|
|
@@ -28,6 +31,10 @@ export interface PostgresDialectConfig {
|
|
|
28
31
|
* Called once for each created connection.
|
|
29
32
|
*/
|
|
30
33
|
onCreateConnection?: (connection: DatabaseConnection) => Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Called every time a connection is acquired from the pool.
|
|
36
|
+
*/
|
|
37
|
+
onReserveConnection?: (connection: DatabaseConnection) => Promise<void>;
|
|
31
38
|
}
|
|
32
39
|
/**
|
|
33
40
|
* This interface is the subset of pg driver's `Pool` class that
|
|
@@ -30,6 +30,9 @@ export class PostgresDriver {
|
|
|
30
30
|
await this.#config.onCreateConnection(connection);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
+
if (this.#config.onReserveConnection) {
|
|
34
|
+
await this.#config.onReserveConnection(connection);
|
|
35
|
+
}
|
|
33
36
|
return connection;
|
|
34
37
|
}
|
|
35
38
|
async beginTransaction(connection, settings) {
|
|
@@ -49,7 +49,11 @@ export class PostgresIntrospector {
|
|
|
49
49
|
.as('auto_incrementing'),
|
|
50
50
|
])
|
|
51
51
|
// r == normal table
|
|
52
|
-
.where((eb) => eb.or([
|
|
52
|
+
.where((eb) => eb.or([
|
|
53
|
+
eb('c.relkind', '=', 'r'),
|
|
54
|
+
eb('c.relkind', '=', 'v'),
|
|
55
|
+
eb('c.relkind', '=', 'p'),
|
|
56
|
+
]))
|
|
53
57
|
.where('ns.nspname', '!~', '^pg_')
|
|
54
58
|
.where('ns.nspname', '!=', 'information_schema')
|
|
55
59
|
// No system columns
|
|
@@ -33,8 +33,13 @@ export declare class SqliteAdapter 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 SqliteAdapter extends DialectAdapterBase {
|
|
|
50
55
|
* .forUpdate()
|
|
51
56
|
* .execute()
|
|
52
57
|
* }
|
|
58
|
+
*
|
|
59
|
+
* override async releaseMigrationLock() {
|
|
60
|
+
* // noop
|
|
61
|
+
* }
|
|
53
62
|
* }
|
|
54
63
|
* ```
|
|
55
64
|
*
|
|
@@ -21,7 +21,9 @@ export interface QueryResult<O> {
|
|
|
21
21
|
/**
|
|
22
22
|
* This is defined for update queries and contains the number of rows
|
|
23
23
|
* the query changed.
|
|
24
|
-
*
|
|
24
|
+
*
|
|
25
|
+
* This is **optional** and only provided in dialects such as MySQL.
|
|
26
|
+
* You would probably use {@link numAffectedRows} in most cases.
|
|
25
27
|
*/
|
|
26
28
|
readonly numChangedRows?: bigint;
|
|
27
29
|
/**
|
|
@@ -10,20 +10,21 @@ import { Driver } from './driver.js';
|
|
|
10
10
|
* This example creates a Kysely instance for building postgres queries:
|
|
11
11
|
*
|
|
12
12
|
* ```ts
|
|
13
|
+
* import {
|
|
14
|
+
* DummyDriver,
|
|
15
|
+
* Kysely,
|
|
16
|
+
* PostgresAdapter,
|
|
17
|
+
* PostgresIntrospector,
|
|
18
|
+
* PostgresQueryCompiler
|
|
19
|
+
* } from 'kysely'
|
|
20
|
+
* import type { Database } from 'type-editor' // imaginary module
|
|
21
|
+
*
|
|
13
22
|
* const db = new Kysely<Database>({
|
|
14
23
|
* dialect: {
|
|
15
|
-
* createAdapter()
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* return new DummyDriver()
|
|
20
|
-
* },
|
|
21
|
-
* createIntrospector(db: Kysely<any>) {
|
|
22
|
-
* return new PostgresIntrospector(db)
|
|
23
|
-
* },
|
|
24
|
-
* createQueryCompiler() {
|
|
25
|
-
* return new PostgresQueryCompiler()
|
|
26
|
-
* },
|
|
24
|
+
* createAdapter: () => new PostgresAdapter(),
|
|
25
|
+
* createDriver: () => new DummyDriver(),
|
|
26
|
+
* createIntrospector: (db: Kysely<any>) => new PostgresIntrospector(db),
|
|
27
|
+
* createQueryCompiler: () => new PostgresQueryCompiler(),
|
|
27
28
|
* },
|
|
28
29
|
* })
|
|
29
30
|
* ```
|
|
@@ -9,20 +9,21 @@
|
|
|
9
9
|
* This example creates a Kysely instance for building postgres queries:
|
|
10
10
|
*
|
|
11
11
|
* ```ts
|
|
12
|
+
* import {
|
|
13
|
+
* DummyDriver,
|
|
14
|
+
* Kysely,
|
|
15
|
+
* PostgresAdapter,
|
|
16
|
+
* PostgresIntrospector,
|
|
17
|
+
* PostgresQueryCompiler
|
|
18
|
+
* } from 'kysely'
|
|
19
|
+
* import type { Database } from 'type-editor' // imaginary module
|
|
20
|
+
*
|
|
12
21
|
* const db = new Kysely<Database>({
|
|
13
22
|
* dialect: {
|
|
14
|
-
* createAdapter()
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* return new DummyDriver()
|
|
19
|
-
* },
|
|
20
|
-
* createIntrospector(db: Kysely<any>) {
|
|
21
|
-
* return new PostgresIntrospector(db)
|
|
22
|
-
* },
|
|
23
|
-
* createQueryCompiler() {
|
|
24
|
-
* return new PostgresQueryCompiler()
|
|
25
|
-
* },
|
|
23
|
+
* createAdapter: () => new PostgresAdapter(),
|
|
24
|
+
* createDriver: () => new DummyDriver(),
|
|
25
|
+
* createIntrospector: (db: Kysely<any>) => new PostgresIntrospector(db),
|
|
26
|
+
* createQueryCompiler: () => new PostgresQueryCompiler(),
|
|
26
27
|
* },
|
|
27
28
|
* })
|
|
28
29
|
* ```
|
|
@@ -5,7 +5,7 @@ export declare class DynamicModule {
|
|
|
5
5
|
*
|
|
6
6
|
* Kysely is built in a way that by default you can't refer to tables or columns
|
|
7
7
|
* that are not actually visible in the current query and context. This is all
|
|
8
|
-
* done by
|
|
8
|
+
* done by TypeScript at compile time, which means that you need to know the
|
|
9
9
|
* columns and tables at compile time. This is not always the case of course.
|
|
10
10
|
*
|
|
11
11
|
* This method is meant to be used in those cases where the column names
|
|
@@ -61,11 +61,11 @@ export declare class DynamicModule {
|
|
|
61
61
|
* const { ref } = db.dynamic
|
|
62
62
|
*
|
|
63
63
|
* // Some column name provided by the user. Value not known at compile time.
|
|
64
|
-
* const columnFromUserInput =
|
|
64
|
+
* const columnFromUserInput: PossibleColumns = 'birthdate';
|
|
65
65
|
*
|
|
66
66
|
* // A type that lists all possible values `columnFromUserInput` can have.
|
|
67
67
|
* // You can use `keyof Person` if any column of an interface is allowed.
|
|
68
|
-
* type PossibleColumns = 'last_name' | 'first_name' | '
|
|
68
|
+
* type PossibleColumns = 'last_name' | 'first_name' | 'birthdate'
|
|
69
69
|
*
|
|
70
70
|
* const [person] = await db.selectFrom('person')
|
|
71
71
|
* .select([
|
|
@@ -77,12 +77,12 @@ export declare class DynamicModule {
|
|
|
77
77
|
* // The resulting type contains all `PossibleColumns` as optional fields
|
|
78
78
|
* // because we cannot know which field was actually selected before
|
|
79
79
|
* // running the code.
|
|
80
|
-
* const lastName: string | undefined = person
|
|
81
|
-
* const firstName: string | undefined = person
|
|
82
|
-
* const birthDate:
|
|
80
|
+
* const lastName: string | null | undefined = person?.last_name
|
|
81
|
+
* const firstName: string | undefined = person?.first_name
|
|
82
|
+
* const birthDate: Date | null | undefined = person?.birthdate
|
|
83
83
|
*
|
|
84
84
|
* // The result type also contains the compile time selection `id`.
|
|
85
|
-
* person
|
|
85
|
+
* person?.id
|
|
86
86
|
* ```
|
|
87
87
|
*/
|
|
88
88
|
ref<R extends string = never>(reference: string): DynamicReferenceBuilder<R>;
|
|
@@ -6,7 +6,7 @@ export class DynamicModule {
|
|
|
6
6
|
*
|
|
7
7
|
* Kysely is built in a way that by default you can't refer to tables or columns
|
|
8
8
|
* that are not actually visible in the current query and context. This is all
|
|
9
|
-
* done by
|
|
9
|
+
* done by TypeScript at compile time, which means that you need to know the
|
|
10
10
|
* columns and tables at compile time. This is not always the case of course.
|
|
11
11
|
*
|
|
12
12
|
* This method is meant to be used in those cases where the column names
|
|
@@ -62,11 +62,11 @@ export class DynamicModule {
|
|
|
62
62
|
* const { ref } = db.dynamic
|
|
63
63
|
*
|
|
64
64
|
* // Some column name provided by the user. Value not known at compile time.
|
|
65
|
-
* const columnFromUserInput =
|
|
65
|
+
* const columnFromUserInput: PossibleColumns = 'birthdate';
|
|
66
66
|
*
|
|
67
67
|
* // A type that lists all possible values `columnFromUserInput` can have.
|
|
68
68
|
* // You can use `keyof Person` if any column of an interface is allowed.
|
|
69
|
-
* type PossibleColumns = 'last_name' | 'first_name' | '
|
|
69
|
+
* type PossibleColumns = 'last_name' | 'first_name' | 'birthdate'
|
|
70
70
|
*
|
|
71
71
|
* const [person] = await db.selectFrom('person')
|
|
72
72
|
* .select([
|
|
@@ -78,12 +78,12 @@ export class DynamicModule {
|
|
|
78
78
|
* // The resulting type contains all `PossibleColumns` as optional fields
|
|
79
79
|
* // because we cannot know which field was actually selected before
|
|
80
80
|
* // running the code.
|
|
81
|
-
* const lastName: string | undefined = person
|
|
82
|
-
* const firstName: string | undefined = person
|
|
83
|
-
* const birthDate:
|
|
81
|
+
* const lastName: string | null | undefined = person?.last_name
|
|
82
|
+
* const firstName: string | undefined = person?.first_name
|
|
83
|
+
* const birthDate: Date | null | undefined = person?.birthdate
|
|
84
84
|
*
|
|
85
85
|
* // The result type also contains the compile time selection `id`.
|
|
86
|
-
* person
|
|
86
|
+
* person?.id
|
|
87
87
|
* ```
|
|
88
88
|
*/
|
|
89
89
|
ref(reference) {
|