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
|
@@ -13,24 +13,22 @@ class MssqlDriver {
|
|
|
13
13
|
#pool;
|
|
14
14
|
constructor(config) {
|
|
15
15
|
this.#config = (0, object_utils_js_1.freeze)({ ...config });
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
const { tarn, tedious } = this.#config;
|
|
17
|
+
const { validateConnections, ...poolOptions } = tarn.options;
|
|
18
|
+
this.#pool = new tarn.Pool({
|
|
19
|
+
...poolOptions,
|
|
18
20
|
create: async () => {
|
|
19
|
-
const connection = await
|
|
20
|
-
await new
|
|
21
|
-
if (error)
|
|
22
|
-
reject(error);
|
|
23
|
-
else
|
|
24
|
-
resolve(undefined);
|
|
25
|
-
}));
|
|
26
|
-
return new MssqlConnection(connection, this.#config.tedious);
|
|
21
|
+
const connection = await tedious.connectionFactory();
|
|
22
|
+
return await new MssqlConnection(connection, tedious).connect();
|
|
27
23
|
},
|
|
28
24
|
destroy: async (connection) => {
|
|
29
25
|
await connection[PRIVATE_DESTROY_METHOD]();
|
|
30
26
|
},
|
|
31
27
|
// @ts-ignore `tarn` accepts a function that returns a promise here, but
|
|
32
28
|
// the types are not aligned and it type errors.
|
|
33
|
-
validate:
|
|
29
|
+
validate: validateConnections === false
|
|
30
|
+
? undefined
|
|
31
|
+
: (connection) => connection.validate(),
|
|
34
32
|
});
|
|
35
33
|
}
|
|
36
34
|
async init() {
|
|
@@ -63,6 +61,10 @@ class MssqlConnection {
|
|
|
63
61
|
constructor(connection, tedious) {
|
|
64
62
|
this.#connection = connection;
|
|
65
63
|
this.#tedious = tedious;
|
|
64
|
+
this.#connection.on('error', console.error);
|
|
65
|
+
this.#connection.once('end', () => {
|
|
66
|
+
this.#connection.off('error', console.error);
|
|
67
|
+
});
|
|
66
68
|
}
|
|
67
69
|
async beginTransaction(settings) {
|
|
68
70
|
const { isolationLevel } = settings;
|
|
@@ -83,10 +85,28 @@ class MssqlConnection {
|
|
|
83
85
|
resolve(undefined);
|
|
84
86
|
}));
|
|
85
87
|
}
|
|
88
|
+
async connect() {
|
|
89
|
+
await new Promise((resolve, reject) => {
|
|
90
|
+
this.#connection.connect((error) => {
|
|
91
|
+
if (error) {
|
|
92
|
+
console.error(error);
|
|
93
|
+
reject(error);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
resolve(undefined);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
return this;
|
|
101
|
+
}
|
|
86
102
|
async executeQuery(compiledQuery) {
|
|
87
103
|
try {
|
|
88
104
|
const deferred = new deferred_js_1.Deferred();
|
|
89
|
-
const request = new MssqlRequest(
|
|
105
|
+
const request = new MssqlRequest({
|
|
106
|
+
compiledQuery,
|
|
107
|
+
tedious: this.#tedious,
|
|
108
|
+
onDone: deferred,
|
|
109
|
+
});
|
|
90
110
|
this.#connection.execSql(request.request);
|
|
91
111
|
const { rowCount, rows } = await deferred.promise;
|
|
92
112
|
return {
|
|
@@ -110,11 +130,15 @@ class MssqlConnection {
|
|
|
110
130
|
if (!Number.isInteger(chunkSize) || chunkSize <= 0) {
|
|
111
131
|
throw new Error('chunkSize must be a positive integer');
|
|
112
132
|
}
|
|
113
|
-
const request = new MssqlRequest(
|
|
133
|
+
const request = new MssqlRequest({
|
|
134
|
+
compiledQuery,
|
|
135
|
+
streamChunkSize: chunkSize,
|
|
136
|
+
tedious: this.#tedious,
|
|
137
|
+
});
|
|
114
138
|
this.#connection.execSql(request.request);
|
|
115
139
|
try {
|
|
116
140
|
while (true) {
|
|
117
|
-
const rows = await request.readChunk(
|
|
141
|
+
const rows = await request.readChunk();
|
|
118
142
|
if (rows.length === 0) {
|
|
119
143
|
break;
|
|
120
144
|
}
|
|
@@ -125,13 +149,17 @@ class MssqlConnection {
|
|
|
125
149
|
}
|
|
126
150
|
}
|
|
127
151
|
finally {
|
|
128
|
-
this.#
|
|
152
|
+
await this.#cancelRequest(request);
|
|
129
153
|
}
|
|
130
154
|
}
|
|
131
155
|
async validate() {
|
|
132
156
|
try {
|
|
133
157
|
const deferred = new deferred_js_1.Deferred();
|
|
134
|
-
const request = new MssqlRequest(
|
|
158
|
+
const request = new MssqlRequest({
|
|
159
|
+
compiledQuery: compiled_query_js_1.CompiledQuery.raw('select 1'),
|
|
160
|
+
onDone: deferred,
|
|
161
|
+
tedious: this.#tedious,
|
|
162
|
+
});
|
|
135
163
|
this.#connection.execSql(request.request);
|
|
136
164
|
await deferred.promise;
|
|
137
165
|
return true;
|
|
@@ -155,16 +183,29 @@ class MssqlConnection {
|
|
|
155
183
|
}
|
|
156
184
|
return tediousIsolationLevel;
|
|
157
185
|
}
|
|
158
|
-
|
|
159
|
-
return new Promise((resolve
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
}
|
|
186
|
+
#cancelRequest(request) {
|
|
187
|
+
return new Promise((resolve) => {
|
|
188
|
+
request.request.once('requestCompleted', resolve);
|
|
189
|
+
const wasCanceled = this.#connection.cancel();
|
|
190
|
+
if (!wasCanceled) {
|
|
191
|
+
request.request.off('requestCompleted', resolve);
|
|
192
|
+
resolve(undefined);
|
|
193
|
+
}
|
|
166
194
|
});
|
|
167
195
|
}
|
|
196
|
+
async [PRIVATE_RELEASE_METHOD]() {
|
|
197
|
+
// TODO: flip this to `if (!this.#tedious.resetConnectionOnRelease) {}` in a future PR.
|
|
198
|
+
if (this.#tedious.resetConnectionOnRelease !== false) {
|
|
199
|
+
await new Promise((resolve, reject) => {
|
|
200
|
+
this.#connection.reset((error) => {
|
|
201
|
+
if (error)
|
|
202
|
+
reject(error);
|
|
203
|
+
else
|
|
204
|
+
resolve(undefined);
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
168
209
|
[PRIVATE_DESTROY_METHOD]() {
|
|
169
210
|
return new Promise((resolve) => {
|
|
170
211
|
this.#connection.once('end', () => {
|
|
@@ -177,42 +218,62 @@ class MssqlConnection {
|
|
|
177
218
|
class MssqlRequest {
|
|
178
219
|
#request;
|
|
179
220
|
#rows;
|
|
221
|
+
#streamChunkSize;
|
|
222
|
+
#subscribers;
|
|
180
223
|
#tedious;
|
|
181
|
-
#completed;
|
|
182
224
|
#error;
|
|
183
225
|
#rowCount;
|
|
184
|
-
constructor(
|
|
185
|
-
|
|
226
|
+
constructor(props) {
|
|
227
|
+
const { compiledQuery, onDone, streamChunkSize, tedious } = props;
|
|
186
228
|
this.#rows = [];
|
|
229
|
+
this.#streamChunkSize = streamChunkSize;
|
|
230
|
+
this.#subscribers = {};
|
|
187
231
|
this.#tedious = tedious;
|
|
188
|
-
|
|
189
|
-
|
|
232
|
+
if (onDone) {
|
|
233
|
+
const subscriptionKey = 'onDone';
|
|
234
|
+
this.#subscribers[subscriptionKey] = (event, error) => {
|
|
235
|
+
if (event === 'chunkReady') {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
delete this.#subscribers[subscriptionKey];
|
|
239
|
+
if (event === 'error') {
|
|
240
|
+
onDone.reject(error);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
onDone.resolve({
|
|
244
|
+
rowCount: this.#rowCount,
|
|
245
|
+
rows: this.#rows,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
this.#request = new this.#tedious.Request(compiledQuery.sql, (err, rowCount) => {
|
|
190
251
|
if (err) {
|
|
191
|
-
this.#error
|
|
192
|
-
onDone?.reject(this.#error);
|
|
252
|
+
Object.values(this.#subscribers).forEach((subscriber) => subscriber('error', err instanceof AggregateError ? err.errors : err));
|
|
193
253
|
}
|
|
194
254
|
else {
|
|
195
255
|
this.#rowCount = rowCount;
|
|
196
256
|
}
|
|
197
257
|
});
|
|
198
|
-
this.#addParametersToRequest(parameters);
|
|
199
|
-
this.#attachListeners(
|
|
258
|
+
this.#addParametersToRequest(compiledQuery.parameters);
|
|
259
|
+
this.#attachListeners();
|
|
200
260
|
}
|
|
201
261
|
get request() {
|
|
202
262
|
return this.#request;
|
|
203
263
|
}
|
|
204
|
-
readChunk(
|
|
264
|
+
readChunk() {
|
|
265
|
+
const subscriptionKey = this.readChunk.name;
|
|
205
266
|
return new Promise((resolve, reject) => {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
reject(
|
|
267
|
+
this.#subscribers[subscriptionKey] = (event, error) => {
|
|
268
|
+
delete this.#subscribers[subscriptionKey];
|
|
269
|
+
if (event === 'error') {
|
|
270
|
+
reject(error);
|
|
210
271
|
}
|
|
211
|
-
else
|
|
212
|
-
|
|
213
|
-
resolve(this.#rows.splice(0, chunkSize));
|
|
272
|
+
else {
|
|
273
|
+
resolve(this.#rows.splice(0, this.#streamChunkSize));
|
|
214
274
|
}
|
|
215
|
-
}
|
|
275
|
+
};
|
|
276
|
+
this.#request.resume();
|
|
216
277
|
});
|
|
217
278
|
}
|
|
218
279
|
#addParametersToRequest(parameters) {
|
|
@@ -221,22 +282,27 @@ class MssqlRequest {
|
|
|
221
282
|
this.#request.addParameter(String(i + 1), this.#getTediousDataType(parameter), parameter);
|
|
222
283
|
}
|
|
223
284
|
}
|
|
224
|
-
#attachListeners(
|
|
285
|
+
#attachListeners() {
|
|
286
|
+
const pauseAndEmitChunkReady = this.#streamChunkSize
|
|
287
|
+
? () => {
|
|
288
|
+
if (this.#streamChunkSize <= this.#rows.length) {
|
|
289
|
+
this.#request.pause();
|
|
290
|
+
Object.values(this.#subscribers).forEach((subscriber) => subscriber('chunkReady'));
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
: () => { };
|
|
225
294
|
const rowListener = (columns) => {
|
|
226
295
|
const row = {};
|
|
227
296
|
for (const column of columns) {
|
|
228
297
|
row[column.metadata.colName] = column.value;
|
|
229
298
|
}
|
|
230
299
|
this.#rows.push(row);
|
|
300
|
+
pauseAndEmitChunkReady();
|
|
231
301
|
};
|
|
232
302
|
this.#request.on('row', rowListener);
|
|
233
303
|
this.#request.once('requestCompleted', () => {
|
|
234
|
-
this.#
|
|
304
|
+
Object.values(this.#subscribers).forEach((subscriber) => subscriber('completed'));
|
|
235
305
|
this.#request.off('row', rowListener);
|
|
236
|
-
onDone?.resolve({
|
|
237
|
-
rowCount: this.#rowCount,
|
|
238
|
-
rows: this.#rows,
|
|
239
|
-
});
|
|
240
306
|
});
|
|
241
307
|
}
|
|
242
308
|
#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
|
|
@@ -32,6 +32,9 @@ class PostgresDriver {
|
|
|
32
32
|
await this.#config.onCreateConnection(connection);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
+
if (this.#config.onReserveConnection) {
|
|
36
|
+
await this.#config.onReserveConnection(connection);
|
|
37
|
+
}
|
|
35
38
|
return connection;
|
|
36
39
|
}
|
|
37
40
|
async beginTransaction(connection, settings) {
|
|
@@ -51,7 +51,11 @@ class PostgresIntrospector {
|
|
|
51
51
|
.as('auto_incrementing'),
|
|
52
52
|
])
|
|
53
53
|
// r == normal table
|
|
54
|
-
.where((eb) => eb.or([
|
|
54
|
+
.where((eb) => eb.or([
|
|
55
|
+
eb('c.relkind', '=', 'r'),
|
|
56
|
+
eb('c.relkind', '=', 'v'),
|
|
57
|
+
eb('c.relkind', '=', 'p'),
|
|
58
|
+
]))
|
|
55
59
|
.where('ns.nspname', '!~', '^pg_')
|
|
56
60
|
.where('ns.nspname', '!=', 'information_schema')
|
|
57
61
|
// 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
|
* ```
|
|
@@ -11,20 +11,21 @@ exports.DummyDriver = void 0;
|
|
|
11
11
|
* This example creates a Kysely instance for building postgres queries:
|
|
12
12
|
*
|
|
13
13
|
* ```ts
|
|
14
|
+
* import {
|
|
15
|
+
* DummyDriver,
|
|
16
|
+
* Kysely,
|
|
17
|
+
* PostgresAdapter,
|
|
18
|
+
* PostgresIntrospector,
|
|
19
|
+
* PostgresQueryCompiler
|
|
20
|
+
* } from 'kysely'
|
|
21
|
+
* import type { Database } from 'type-editor' // imaginary module
|
|
22
|
+
*
|
|
14
23
|
* const db = new Kysely<Database>({
|
|
15
24
|
* dialect: {
|
|
16
|
-
* createAdapter()
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* return new DummyDriver()
|
|
21
|
-
* },
|
|
22
|
-
* createIntrospector(db: Kysely<any>) {
|
|
23
|
-
* return new PostgresIntrospector(db)
|
|
24
|
-
* },
|
|
25
|
-
* createQueryCompiler() {
|
|
26
|
-
* return new PostgresQueryCompiler()
|
|
27
|
-
* },
|
|
25
|
+
* createAdapter: () => new PostgresAdapter(),
|
|
26
|
+
* createDriver: () => new DummyDriver(),
|
|
27
|
+
* createIntrospector: (db: Kysely<any>) => new PostgresIntrospector(db),
|
|
28
|
+
* createQueryCompiler: () => new PostgresQueryCompiler(),
|
|
28
29
|
* },
|
|
29
30
|
* })
|
|
30
31
|
* ```
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.DynamicReferenceBuilder = void 0;
|
|
4
|
+
exports.isDynamicReferenceBuilder = isDynamicReferenceBuilder;
|
|
4
5
|
const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
|
|
5
6
|
const reference_parser_js_1 = require("../parser/reference-parser.js");
|
|
6
7
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
@@ -33,4 +34,3 @@ function isDynamicReferenceBuilder(obj) {
|
|
|
33
34
|
(0, operation_node_source_js_1.isOperationNodeSource)(obj) &&
|
|
34
35
|
(0, object_utils_js_1.isString)(obj.dynamicReference));
|
|
35
36
|
}
|
|
36
|
-
exports.isDynamicReferenceBuilder = isDynamicReferenceBuilder;
|
|
@@ -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>;
|
|
@@ -8,7 +8,7 @@ class DynamicModule {
|
|
|
8
8
|
*
|
|
9
9
|
* Kysely is built in a way that by default you can't refer to tables or columns
|
|
10
10
|
* that are not actually visible in the current query and context. This is all
|
|
11
|
-
* done by
|
|
11
|
+
* done by TypeScript at compile time, which means that you need to know the
|
|
12
12
|
* columns and tables at compile time. This is not always the case of course.
|
|
13
13
|
*
|
|
14
14
|
* This method is meant to be used in those cases where the column names
|
|
@@ -64,11 +64,11 @@ class DynamicModule {
|
|
|
64
64
|
* const { ref } = db.dynamic
|
|
65
65
|
*
|
|
66
66
|
* // Some column name provided by the user. Value not known at compile time.
|
|
67
|
-
* const columnFromUserInput =
|
|
67
|
+
* const columnFromUserInput: PossibleColumns = 'birthdate';
|
|
68
68
|
*
|
|
69
69
|
* // A type that lists all possible values `columnFromUserInput` can have.
|
|
70
70
|
* // You can use `keyof Person` if any column of an interface is allowed.
|
|
71
|
-
* type PossibleColumns = 'last_name' | 'first_name' | '
|
|
71
|
+
* type PossibleColumns = 'last_name' | 'first_name' | 'birthdate'
|
|
72
72
|
*
|
|
73
73
|
* const [person] = await db.selectFrom('person')
|
|
74
74
|
* .select([
|
|
@@ -80,12 +80,12 @@ class DynamicModule {
|
|
|
80
80
|
* // The resulting type contains all `PossibleColumns` as optional fields
|
|
81
81
|
* // because we cannot know which field was actually selected before
|
|
82
82
|
* // running the code.
|
|
83
|
-
* const lastName: string | undefined = person
|
|
84
|
-
* const firstName: string | undefined = person
|
|
85
|
-
* const birthDate:
|
|
83
|
+
* const lastName: string | null | undefined = person?.last_name
|
|
84
|
+
* const firstName: string | undefined = person?.first_name
|
|
85
|
+
* const birthDate: Date | null | undefined = person?.birthdate
|
|
86
86
|
*
|
|
87
87
|
* // The result type also contains the compile time selection `id`.
|
|
88
|
-
* person
|
|
88
|
+
* person?.id
|
|
89
89
|
* ```
|
|
90
90
|
*/
|
|
91
91
|
ref(reference) {
|