kysely 0.27.2 → 0.27.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +1 -1
- package/README.md +7 -7
- package/dist/cjs/dialect/database-introspector.d.ts +1 -0
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +2 -1
- package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
- package/dist/cjs/dialect/dialect-adapter.d.ts +5 -0
- package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +1 -5
- package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +46 -26
- package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
- package/dist/cjs/dialect/mssql/mssql-driver.js +95 -36
- package/dist/cjs/dialect/mssql/mssql-introspector.js +13 -2
- package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +4 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.js +8 -0
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
- package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -1
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/cjs/driver/database-connection.d.ts +4 -2
- package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
- package/dist/cjs/dynamic/dynamic.d.ts +1 -1
- package/dist/cjs/dynamic/dynamic.js +1 -1
- package/dist/cjs/expression/expression-builder.d.ts +31 -5
- package/dist/cjs/expression/expression-builder.js +7 -3
- package/dist/cjs/expression/expression.js +2 -3
- package/dist/cjs/helpers/mssql.js +3 -4
- package/dist/cjs/helpers/mysql.d.ts +3 -3
- package/dist/cjs/helpers/mysql.js +6 -7
- package/dist/cjs/helpers/postgres.d.ts +4 -4
- package/dist/cjs/helpers/postgres.js +7 -8
- package/dist/cjs/helpers/sqlite.js +3 -4
- package/dist/cjs/index.d.ts +31 -18
- package/dist/cjs/index.js +30 -17
- package/dist/cjs/kysely.d.ts +1 -1
- package/dist/cjs/kysely.js +3 -3
- package/dist/cjs/operation-node/add-index-node.js +1 -1
- 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/cast-node.d.ts +13 -0
- package/dist/cjs/operation-node/cast-node.js +19 -0
- package/dist/cjs/operation-node/column-definition-node.d.ts +2 -0
- package/dist/cjs/operation-node/data-type-node.d.ts +5 -1
- package/dist/cjs/operation-node/data-type-node.js +56 -0
- package/dist/cjs/operation-node/delete-query-node.d.ts +6 -0
- package/dist/cjs/operation-node/delete-query-node.js +12 -0
- package/dist/cjs/operation-node/fetch-node.d.ts +15 -0
- package/dist/cjs/operation-node/fetch-node.js +19 -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 +6 -1
- package/dist/cjs/operation-node/insert-query-node.js +5 -0
- package/dist/cjs/operation-node/join-node.d.ts +1 -1
- package/dist/cjs/operation-node/matched-node.d.ts +13 -0
- package/dist/cjs/operation-node/matched-node.js +19 -0
- package/dist/cjs/operation-node/merge-query-node.d.ts +27 -0
- package/dist/cjs/operation-node/merge-query-node.js +45 -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 +12 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +62 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +12 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +6 -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 +17 -5
- package/dist/cjs/operation-node/query-node.js +24 -1
- package/dist/cjs/operation-node/select-query-node.d.ts +6 -0
- package/dist/cjs/operation-node/select-query-node.js +12 -0
- package/dist/cjs/operation-node/top-node.d.ts +14 -0
- package/dist/cjs/operation-node/top-node.js +19 -0
- package/dist/cjs/operation-node/update-query-node.d.ts +9 -1
- package/dist/cjs/operation-node/update-query-node.js +11 -0
- package/dist/cjs/operation-node/where-node.d.ts +1 -1
- package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
- package/dist/cjs/parser/binary-operation-parser.js +7 -8
- package/dist/cjs/parser/data-type-parser.js +8 -5
- 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.d.ts +2 -0
- package/dist/cjs/parser/fetch-parser.js +17 -0
- 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.d.ts +3 -3
- 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.d.ts +9 -0
- package/dist/cjs/parser/merge-parser.js +31 -0
- 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.d.ts +4 -3
- package/dist/cjs/parser/table-parser.js +4 -5
- package/dist/cjs/parser/top-parser.d.ts +2 -0
- package/dist/cjs/parser/top-parser.js +19 -0
- 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 +2 -2
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +2 -2
- package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +4 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +188 -5
- package/dist/cjs/query-builder/delete-query-builder.js +139 -5
- package/dist/cjs/query-builder/function-module.d.ts +5 -5
- package/dist/cjs/query-builder/function-module.js +1 -2
- package/dist/cjs/query-builder/insert-query-builder.d.ts +166 -10
- package/dist/cjs/query-builder/insert-query-builder.js +107 -10
- package/dist/cjs/query-builder/merge-query-builder.d.ts +721 -0
- package/dist/cjs/query-builder/merge-query-builder.js +547 -0
- package/dist/cjs/query-builder/merge-result.d.ts +4 -0
- package/dist/cjs/query-builder/merge-result.js +10 -0
- package/dist/cjs/query-builder/no-result-error.js +2 -2
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +2 -2
- package/dist/cjs/query-builder/output-interface.d.ts +95 -0
- package/dist/cjs/query-builder/output-interface.js +2 -0
- package/dist/cjs/query-builder/returning-interface.d.ts +2 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +177 -17
- package/dist/cjs/query-builder/select-query-builder.js +21 -2
- package/dist/cjs/query-builder/update-query-builder.d.ts +175 -10
- package/dist/cjs/query-builder/update-query-builder.js +119 -7
- 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 +1 -1
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +12 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +118 -10
- package/dist/cjs/query-compiler/query-compiler.d.ts +2 -1
- package/dist/cjs/query-creator.d.ts +96 -5
- package/dist/cjs/query-creator.js +63 -1
- package/dist/cjs/raw-builder/raw-builder.js +1 -2
- package/dist/cjs/raw-builder/sql.d.ts +5 -5
- package/dist/cjs/schema/alter-column-builder.js +3 -0
- package/dist/cjs/schema/alter-table-add-index-builder.d.ts +1 -1
- package/dist/cjs/schema/alter-table-add-index-builder.js +7 -3
- package/dist/cjs/schema/alter-table-builder.js +1 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +18 -1
- package/dist/cjs/schema/column-definition-builder.js +22 -1
- package/dist/cjs/util/assert.js +2 -3
- package/dist/cjs/util/compilable.js +1 -2
- package/dist/cjs/util/infer-result.d.ts +2 -1
- 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.js +1 -2
- package/dist/cjs/util/stack-trace-utils.js +1 -2
- package/dist/cjs/util/type-utils.d.ts +3 -2
- package/dist/esm/dialect/database-introspector.d.ts +1 -0
- package/dist/esm/dialect/dialect-adapter-base.d.ts +2 -1
- package/dist/esm/dialect/dialect-adapter-base.js +4 -1
- package/dist/esm/dialect/dialect-adapter.d.ts +5 -0
- package/dist/esm/dialect/mssql/mssql-adapter.d.ts +1 -5
- package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +46 -26
- package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
- package/dist/esm/dialect/mssql/mssql-driver.js +95 -36
- package/dist/esm/dialect/mssql/mssql-introspector.js +13 -2
- package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +4 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.js +8 -0
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
- package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
- package/dist/esm/dialect/postgres/postgres-introspector.js +3 -1
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/esm/driver/database-connection.d.ts +4 -2
- package/dist/esm/dynamic/dynamic.d.ts +1 -1
- package/dist/esm/dynamic/dynamic.js +1 -1
- package/dist/esm/expression/expression-builder.d.ts +31 -5
- package/dist/esm/expression/expression-builder.js +5 -0
- package/dist/esm/helpers/mysql.d.ts +3 -3
- package/dist/esm/helpers/mysql.js +3 -3
- package/dist/esm/helpers/postgres.d.ts +4 -4
- package/dist/esm/helpers/postgres.js +4 -4
- package/dist/esm/index.d.ts +31 -18
- package/dist/esm/index.js +30 -17
- package/dist/esm/kysely.d.ts +1 -1
- package/dist/esm/kysely.js +1 -1
- package/dist/esm/operation-node/add-index-node.js +1 -1
- 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/cast-node.d.ts +13 -0
- package/dist/esm/operation-node/cast-node.js +17 -0
- package/dist/esm/operation-node/column-definition-node.d.ts +2 -0
- package/dist/esm/operation-node/data-type-node.d.ts +5 -1
- package/dist/esm/operation-node/data-type-node.js +55 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +6 -0
- package/dist/esm/operation-node/delete-query-node.js +12 -0
- package/dist/esm/operation-node/fetch-node.d.ts +15 -0
- package/dist/esm/operation-node/fetch-node.js +17 -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 +6 -1
- package/dist/esm/operation-node/insert-query-node.js +5 -0
- package/dist/esm/operation-node/join-node.d.ts +1 -1
- package/dist/esm/operation-node/matched-node.d.ts +13 -0
- package/dist/esm/operation-node/matched-node.js +17 -0
- package/dist/esm/operation-node/merge-query-node.d.ts +27 -0
- package/dist/esm/operation-node/merge-query-node.js +43 -0
- package/dist/esm/operation-node/on-node.d.ts +1 -1
- package/dist/esm/operation-node/operation-node-transformer.d.ts +12 -0
- package/dist/esm/operation-node/operation-node-transformer.js +62 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +12 -0
- package/dist/esm/operation-node/operation-node-visitor.js +6 -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 +17 -5
- package/dist/esm/operation-node/query-node.js +24 -1
- package/dist/esm/operation-node/select-query-node.d.ts +6 -0
- package/dist/esm/operation-node/select-query-node.js +12 -0
- package/dist/esm/operation-node/top-node.d.ts +14 -0
- package/dist/esm/operation-node/top-node.js +17 -0
- package/dist/esm/operation-node/update-query-node.d.ts +9 -1
- package/dist/esm/operation-node/update-query-node.js +11 -0
- package/dist/esm/operation-node/where-node.d.ts +1 -1
- package/dist/esm/parser/binary-operation-parser.d.ts +1 -1
- package/dist/esm/parser/binary-operation-parser.js +2 -2
- package/dist/esm/parser/data-type-parser.js +8 -4
- package/dist/esm/parser/fetch-parser.d.ts +2 -0
- package/dist/esm/parser/fetch-parser.js +15 -0
- package/dist/esm/parser/insert-values-parser.d.ts +3 -3
- package/dist/esm/parser/merge-parser.d.ts +9 -0
- package/dist/esm/parser/merge-parser.js +28 -0
- package/dist/esm/parser/returning-parser.d.ts +4 -3
- package/dist/esm/parser/table-parser.d.ts +4 -3
- package/dist/esm/parser/top-parser.d.ts +2 -0
- package/dist/esm/parser/top-parser.js +17 -0
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +2 -2
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +2 -2
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +4 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +188 -5
- package/dist/esm/query-builder/delete-query-builder.js +139 -5
- package/dist/esm/query-builder/function-module.d.ts +5 -5
- package/dist/esm/query-builder/insert-query-builder.d.ts +166 -10
- package/dist/esm/query-builder/insert-query-builder.js +107 -10
- package/dist/esm/query-builder/merge-query-builder.d.ts +721 -0
- package/dist/esm/query-builder/merge-query-builder.js +541 -0
- package/dist/esm/query-builder/merge-result.d.ts +4 -0
- package/dist/esm/query-builder/merge-result.js +7 -0
- package/dist/esm/query-builder/on-conflict-builder.d.ts +2 -2
- package/dist/esm/query-builder/output-interface.d.ts +95 -0
- package/dist/esm/query-builder/output-interface.js +2 -0
- package/dist/esm/query-builder/returning-interface.d.ts +2 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +177 -17
- package/dist/esm/query-builder/select-query-builder.js +20 -0
- package/dist/esm/query-builder/update-query-builder.d.ts +175 -10
- package/dist/esm/query-builder/update-query-builder.js +119 -7
- 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 +1 -1
- package/dist/esm/query-compiler/default-query-compiler.d.ts +12 -0
- package/dist/esm/query-compiler/default-query-compiler.js +118 -10
- package/dist/esm/query-compiler/query-compiler.d.ts +2 -1
- package/dist/esm/query-creator.d.ts +96 -5
- package/dist/esm/query-creator.js +64 -2
- package/dist/esm/raw-builder/sql.d.ts +5 -5
- package/dist/esm/schema/alter-column-builder.js +3 -0
- package/dist/esm/schema/alter-table-add-index-builder.d.ts +1 -1
- package/dist/esm/schema/alter-table-add-index-builder.js +8 -4
- package/dist/esm/schema/alter-table-builder.js +1 -2
- package/dist/esm/schema/column-definition-builder.d.ts +18 -1
- package/dist/esm/schema/column-definition-builder.js +22 -1
- package/dist/esm/util/infer-result.d.ts +2 -1
- package/dist/esm/util/object-utils.js +18 -5
- package/dist/esm/util/type-utils.d.ts +3 -2
- package/package.json +26 -24
|
@@ -2,7 +2,7 @@ import { Kysely } from '../kysely.js';
|
|
|
2
2
|
import { DialectAdapter, MigrationLockOptions } from './dialect-adapter.js';
|
|
3
3
|
/**
|
|
4
4
|
* A basic implementation of `DialectAdapter` with sensible default values.
|
|
5
|
-
*
|
|
5
|
+
* Third-party dialects can extend this instead of implementing the `DialectAdapter`
|
|
6
6
|
* interface from scratch. That way all new settings will get default values when
|
|
7
7
|
* they are added and there will be less breaking changes.
|
|
8
8
|
*/
|
|
@@ -26,6 +26,7 @@ export declare abstract class DialectAdapterBase implements DialectAdapter {
|
|
|
26
26
|
* updates and deletes.
|
|
27
27
|
*/
|
|
28
28
|
get supportsReturning(): boolean;
|
|
29
|
+
get supportsOutput(): boolean;
|
|
29
30
|
/**
|
|
30
31
|
* This method is used to acquire a lock for the migrations so that
|
|
31
32
|
* it's not possible for two migration operations to run in parallel.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="./dialect-adapter-base.d.ts" />
|
|
2
2
|
/**
|
|
3
3
|
* A basic implementation of `DialectAdapter` with sensible default values.
|
|
4
|
-
*
|
|
4
|
+
* Third-party dialects can extend this instead of implementing the `DialectAdapter`
|
|
5
5
|
* interface from scratch. That way all new settings will get default values when
|
|
6
6
|
* they are added and there will be less breaking changes.
|
|
7
7
|
*/
|
|
@@ -15,4 +15,7 @@ export class DialectAdapterBase {
|
|
|
15
15
|
get supportsReturning() {
|
|
16
16
|
return false;
|
|
17
17
|
}
|
|
18
|
+
get supportsOutput() {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
18
21
|
}
|
|
@@ -27,6 +27,11 @@ export interface DialectAdapter {
|
|
|
27
27
|
* updates and deletes.
|
|
28
28
|
*/
|
|
29
29
|
readonly supportsReturning: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Whether or not this dialect supports the `output` clause in inserts
|
|
32
|
+
* updates and deletes.
|
|
33
|
+
*/
|
|
34
|
+
readonly supportsOutput?: boolean;
|
|
30
35
|
/**
|
|
31
36
|
* This method is used to acquire a lock for the migrations so that
|
|
32
37
|
* it's not possible for two migration operations to run in parallel.
|
|
@@ -15,11 +15,7 @@ export declare class MssqlAdapter extends DialectAdapterBase {
|
|
|
15
15
|
* If this is true, migrations are executed inside a transaction.
|
|
16
16
|
*/
|
|
17
17
|
get supportsTransactionalDdl(): boolean;
|
|
18
|
-
|
|
19
|
-
* Whether or not this dialect supports the `returning` in inserts
|
|
20
|
-
* updates and deletes.
|
|
21
|
-
*/
|
|
22
|
-
get supportsReturning(): boolean;
|
|
18
|
+
get supportsOutput(): boolean;
|
|
23
19
|
/**
|
|
24
20
|
* This method is used to acquire a lock for the migrations so that
|
|
25
21
|
* it's not possible for two migration operations to run in parallel.
|
|
@@ -9,10 +9,8 @@ export class MssqlAdapter extends DialectAdapterBase {
|
|
|
9
9
|
get supportsTransactionalDdl() {
|
|
10
10
|
return true;
|
|
11
11
|
}
|
|
12
|
-
get
|
|
13
|
-
|
|
14
|
-
// we need to figure this out when we'll introduce support for it.
|
|
15
|
-
return false;
|
|
12
|
+
get supportsOutput() {
|
|
13
|
+
return true;
|
|
16
14
|
}
|
|
17
15
|
async acquireMigrationLock(db) {
|
|
18
16
|
// Acquire a transaction-level exclusive lock on the migrations table.
|
|
@@ -50,39 +50,59 @@ export interface MssqlDialectConfig {
|
|
|
50
50
|
export interface Tedious {
|
|
51
51
|
connectionFactory: () => TediousConnection | Promise<TediousConnection>;
|
|
52
52
|
ISOLATION_LEVEL: TediousIsolationLevel;
|
|
53
|
-
Request:
|
|
53
|
+
Request: TediousRequestClass;
|
|
54
54
|
TYPES: TediousTypes;
|
|
55
55
|
}
|
|
56
|
-
export type TediousIsolationLevel = Record<'NO_CHANGE' | 'READ_UNCOMMITTED' | 'READ_COMMITTED' | 'REPEATABLE_READ' | 'SERIALIZABLE' | 'SNAPSHOT', number>;
|
|
57
|
-
export type TediousTypes = Record<'BigInt' | 'Binary' | 'Bit' | 'Char' | 'Date' | 'DateTime' | 'DateTime2' | 'DateTimeOffset' | 'Decimal' | 'Float' | 'Image' | 'Int' | 'Money' | 'NChar' | 'NText' | 'Null' | 'Numeric' | 'NVarChar' | 'Real' | 'SmallDateTime' | 'SmallInt' | 'SmallMoney' | 'Text' | 'Time' | 'TinyInt' | 'TVP' | 'UDT' | 'UniqueIdentifier' | 'VarBinary' | 'VarChar' | 'Xml', {
|
|
58
|
-
name: string;
|
|
59
|
-
type: string;
|
|
60
|
-
}>;
|
|
61
|
-
export interface TediousType {
|
|
62
|
-
name: string;
|
|
63
|
-
type: string;
|
|
64
|
-
}
|
|
65
56
|
export interface TediousConnection {
|
|
66
|
-
beginTransaction(callback: (error?: Error) => void,
|
|
67
|
-
cancel():
|
|
57
|
+
beginTransaction(callback: (error?: Error | null, transactionDescriptor?: any) => void, name?: string, isolationLevel?: number): void;
|
|
58
|
+
cancel(): boolean;
|
|
68
59
|
close(): void;
|
|
69
|
-
commitTransaction(callback: (error?: Error) => void): void;
|
|
70
|
-
connect(callback
|
|
60
|
+
commitTransaction(callback: (error?: Error | null) => void, name?: string): void;
|
|
61
|
+
connect(callback?: (error?: Error) => void): void;
|
|
71
62
|
execSql(request: TediousRequest): void;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
63
|
+
off(event: 'error', listener: (error: unknown) => void): this;
|
|
64
|
+
off(event: string, listener: (...args: any[]) => void): this;
|
|
65
|
+
on(event: 'error', listener: (error: unknown) => void): this;
|
|
66
|
+
on(event: string, listener: (...args: any[]) => void): this;
|
|
67
|
+
once(event: 'end', listener: () => void): this;
|
|
68
|
+
once(event: string, listener: (...args: any[]) => void): this;
|
|
69
|
+
reset(callback: (error?: Error | null) => void): void;
|
|
70
|
+
rollbackTransaction(callback: (error?: Error | null) => void, name?: string): void;
|
|
71
|
+
saveTransaction(callback: (error?: Error | null) => void, name: string): void;
|
|
72
|
+
}
|
|
73
|
+
export type TediousIsolationLevel = Record<string, number>;
|
|
74
|
+
export interface TediousRequestClass {
|
|
75
|
+
new (sqlTextOrProcedure: string | undefined, callback: (error?: Error | null, rowCount?: number, rows?: any) => void, options?: {
|
|
76
|
+
statementColumnEncryptionSetting?: any;
|
|
77
|
+
}): TediousRequest;
|
|
75
78
|
}
|
|
76
79
|
export declare class TediousRequest {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
length?: number
|
|
80
|
-
precision?: number
|
|
81
|
-
scale?: number
|
|
82
|
-
}): void;
|
|
83
|
-
off(event: 'row', listener: (
|
|
84
|
-
|
|
85
|
-
|
|
80
|
+
addParameter(name: string, dataType: TediousDataType, value?: unknown, options?: Readonly<{
|
|
81
|
+
output?: boolean;
|
|
82
|
+
length?: number;
|
|
83
|
+
precision?: number;
|
|
84
|
+
scale?: number;
|
|
85
|
+
}> | null): void;
|
|
86
|
+
off(event: 'row', listener: (columns: any) => void): this;
|
|
87
|
+
off(event: string, listener: (...args: any[]) => void): this;
|
|
88
|
+
on(event: 'row', listener: (columns: any) => void): this;
|
|
89
|
+
on(event: string, listener: (...args: any[]) => void): this;
|
|
90
|
+
once(event: 'requestCompleted', listener: () => void): this;
|
|
91
|
+
once(event: string, listener: (...args: any[]) => void): this;
|
|
92
|
+
pause(): void;
|
|
93
|
+
resume(): void;
|
|
94
|
+
}
|
|
95
|
+
export interface TediousTypes {
|
|
96
|
+
NVarChar: TediousDataType;
|
|
97
|
+
BigInt: TediousDataType;
|
|
98
|
+
Int: TediousDataType;
|
|
99
|
+
Float: TediousDataType;
|
|
100
|
+
Bit: TediousDataType;
|
|
101
|
+
DateTime: TediousDataType;
|
|
102
|
+
VarBinary: TediousDataType;
|
|
103
|
+
[x: string]: TediousDataType;
|
|
104
|
+
}
|
|
105
|
+
export interface TediousDataType {
|
|
86
106
|
}
|
|
87
107
|
export interface TediousColumnValue {
|
|
88
108
|
metadata: {
|
|
@@ -44,6 +44,7 @@ declare class MssqlConnection implements DatabaseConnection {
|
|
|
44
44
|
constructor(connection: TediousConnection, tedious: Tedious);
|
|
45
45
|
beginTransaction(settings: TransactionSettings): Promise<void>;
|
|
46
46
|
commitTransaction(): Promise<void>;
|
|
47
|
+
connect(): Promise<this>;
|
|
47
48
|
executeQuery<O>(compiledQuery: CompiledQuery): Promise<QueryResult<O>>;
|
|
48
49
|
rollbackTransaction(): Promise<void>;
|
|
49
50
|
streamQuery<O>(compiledQuery: CompiledQuery, chunkSize: number): AsyncIterableIterator<QueryResult<O>>;
|
|
@@ -15,13 +15,7 @@ export class MssqlDriver {
|
|
|
15
15
|
...this.#config.tarn.options,
|
|
16
16
|
create: async () => {
|
|
17
17
|
const connection = await this.#config.tedious.connectionFactory();
|
|
18
|
-
await new
|
|
19
|
-
if (error)
|
|
20
|
-
reject(error);
|
|
21
|
-
else
|
|
22
|
-
resolve(undefined);
|
|
23
|
-
}));
|
|
24
|
-
return new MssqlConnection(connection, this.#config.tedious);
|
|
18
|
+
return await new MssqlConnection(connection, this.#config.tedious).connect();
|
|
25
19
|
},
|
|
26
20
|
destroy: async (connection) => {
|
|
27
21
|
await connection[PRIVATE_DESTROY_METHOD]();
|
|
@@ -60,6 +54,10 @@ class MssqlConnection {
|
|
|
60
54
|
constructor(connection, tedious) {
|
|
61
55
|
this.#connection = connection;
|
|
62
56
|
this.#tedious = tedious;
|
|
57
|
+
this.#connection.on('error', console.error);
|
|
58
|
+
this.#connection.once('end', () => {
|
|
59
|
+
this.#connection.off('error', console.error);
|
|
60
|
+
});
|
|
63
61
|
}
|
|
64
62
|
async beginTransaction(settings) {
|
|
65
63
|
const { isolationLevel } = settings;
|
|
@@ -80,10 +78,28 @@ class MssqlConnection {
|
|
|
80
78
|
resolve(undefined);
|
|
81
79
|
}));
|
|
82
80
|
}
|
|
81
|
+
async connect() {
|
|
82
|
+
await new Promise((resolve, reject) => {
|
|
83
|
+
this.#connection.connect((error) => {
|
|
84
|
+
if (error) {
|
|
85
|
+
console.error(error);
|
|
86
|
+
reject(error);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
resolve(undefined);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
83
95
|
async executeQuery(compiledQuery) {
|
|
84
96
|
try {
|
|
85
97
|
const deferred = new Deferred();
|
|
86
|
-
const request = new MssqlRequest(
|
|
98
|
+
const request = new MssqlRequest({
|
|
99
|
+
compiledQuery,
|
|
100
|
+
tedious: this.#tedious,
|
|
101
|
+
onDone: deferred,
|
|
102
|
+
});
|
|
87
103
|
this.#connection.execSql(request.request);
|
|
88
104
|
const { rowCount, rows } = await deferred.promise;
|
|
89
105
|
return {
|
|
@@ -107,11 +123,15 @@ class MssqlConnection {
|
|
|
107
123
|
if (!Number.isInteger(chunkSize) || chunkSize <= 0) {
|
|
108
124
|
throw new Error('chunkSize must be a positive integer');
|
|
109
125
|
}
|
|
110
|
-
const request = new MssqlRequest(
|
|
126
|
+
const request = new MssqlRequest({
|
|
127
|
+
compiledQuery,
|
|
128
|
+
streamChunkSize: chunkSize,
|
|
129
|
+
tedious: this.#tedious,
|
|
130
|
+
});
|
|
111
131
|
this.#connection.execSql(request.request);
|
|
112
132
|
try {
|
|
113
133
|
while (true) {
|
|
114
|
-
const rows = await request.readChunk(
|
|
134
|
+
const rows = await request.readChunk();
|
|
115
135
|
if (rows.length === 0) {
|
|
116
136
|
break;
|
|
117
137
|
}
|
|
@@ -122,13 +142,17 @@ class MssqlConnection {
|
|
|
122
142
|
}
|
|
123
143
|
}
|
|
124
144
|
finally {
|
|
125
|
-
this.#
|
|
145
|
+
await this.#cancelRequest(request);
|
|
126
146
|
}
|
|
127
147
|
}
|
|
128
148
|
async validate() {
|
|
129
149
|
try {
|
|
130
150
|
const deferred = new Deferred();
|
|
131
|
-
const request = new MssqlRequest(
|
|
151
|
+
const request = new MssqlRequest({
|
|
152
|
+
compiledQuery: CompiledQuery.raw('select 1'),
|
|
153
|
+
onDone: deferred,
|
|
154
|
+
tedious: this.#tedious,
|
|
155
|
+
});
|
|
132
156
|
this.#connection.execSql(request.request);
|
|
133
157
|
await deferred.promise;
|
|
134
158
|
return true;
|
|
@@ -152,6 +176,16 @@ class MssqlConnection {
|
|
|
152
176
|
}
|
|
153
177
|
return tediousIsolationLevel;
|
|
154
178
|
}
|
|
179
|
+
#cancelRequest(request) {
|
|
180
|
+
return new Promise((resolve) => {
|
|
181
|
+
request.request.once('requestCompleted', resolve);
|
|
182
|
+
const wasCanceled = this.#connection.cancel();
|
|
183
|
+
if (!wasCanceled) {
|
|
184
|
+
request.request.off('requestCompleted', resolve);
|
|
185
|
+
resolve(undefined);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
}
|
|
155
189
|
[PRIVATE_RELEASE_METHOD]() {
|
|
156
190
|
return new Promise((resolve, reject) => {
|
|
157
191
|
this.#connection.reset((error) => {
|
|
@@ -174,42 +208,62 @@ class MssqlConnection {
|
|
|
174
208
|
class MssqlRequest {
|
|
175
209
|
#request;
|
|
176
210
|
#rows;
|
|
211
|
+
#streamChunkSize;
|
|
212
|
+
#subscribers;
|
|
177
213
|
#tedious;
|
|
178
|
-
#completed;
|
|
179
214
|
#error;
|
|
180
215
|
#rowCount;
|
|
181
|
-
constructor(
|
|
182
|
-
|
|
216
|
+
constructor(props) {
|
|
217
|
+
const { compiledQuery, onDone, streamChunkSize, tedious } = props;
|
|
183
218
|
this.#rows = [];
|
|
219
|
+
this.#streamChunkSize = streamChunkSize;
|
|
220
|
+
this.#subscribers = {};
|
|
184
221
|
this.#tedious = tedious;
|
|
185
|
-
|
|
186
|
-
|
|
222
|
+
if (onDone) {
|
|
223
|
+
const subscriptionKey = 'onDone';
|
|
224
|
+
this.#subscribers[subscriptionKey] = (event, error) => {
|
|
225
|
+
if (event === 'chunkReady') {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
delete this.#subscribers[subscriptionKey];
|
|
229
|
+
if (event === 'error') {
|
|
230
|
+
onDone.reject(error);
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
onDone.resolve({
|
|
234
|
+
rowCount: this.#rowCount,
|
|
235
|
+
rows: this.#rows,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
this.#request = new this.#tedious.Request(compiledQuery.sql, (err, rowCount) => {
|
|
187
241
|
if (err) {
|
|
188
|
-
this.#error
|
|
189
|
-
onDone?.reject(this.#error);
|
|
242
|
+
Object.values(this.#subscribers).forEach((subscriber) => subscriber('error', err instanceof AggregateError ? err.errors : err));
|
|
190
243
|
}
|
|
191
244
|
else {
|
|
192
245
|
this.#rowCount = rowCount;
|
|
193
246
|
}
|
|
194
247
|
});
|
|
195
|
-
this.#addParametersToRequest(parameters);
|
|
196
|
-
this.#attachListeners(
|
|
248
|
+
this.#addParametersToRequest(compiledQuery.parameters);
|
|
249
|
+
this.#attachListeners();
|
|
197
250
|
}
|
|
198
251
|
get request() {
|
|
199
252
|
return this.#request;
|
|
200
253
|
}
|
|
201
|
-
readChunk(
|
|
254
|
+
readChunk() {
|
|
255
|
+
const subscriptionKey = this.readChunk.name;
|
|
202
256
|
return new Promise((resolve, reject) => {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
reject(
|
|
257
|
+
this.#subscribers[subscriptionKey] = (event, error) => {
|
|
258
|
+
delete this.#subscribers[subscriptionKey];
|
|
259
|
+
if (event === 'error') {
|
|
260
|
+
reject(error);
|
|
207
261
|
}
|
|
208
|
-
else
|
|
209
|
-
|
|
210
|
-
resolve(this.#rows.splice(0, chunkSize));
|
|
262
|
+
else {
|
|
263
|
+
resolve(this.#rows.splice(0, this.#streamChunkSize));
|
|
211
264
|
}
|
|
212
|
-
}
|
|
265
|
+
};
|
|
266
|
+
this.#request.resume();
|
|
213
267
|
});
|
|
214
268
|
}
|
|
215
269
|
#addParametersToRequest(parameters) {
|
|
@@ -218,22 +272,27 @@ class MssqlRequest {
|
|
|
218
272
|
this.#request.addParameter(String(i + 1), this.#getTediousDataType(parameter), parameter);
|
|
219
273
|
}
|
|
220
274
|
}
|
|
221
|
-
#attachListeners(
|
|
275
|
+
#attachListeners() {
|
|
276
|
+
const pauseAndEmitChunkReady = this.#streamChunkSize
|
|
277
|
+
? () => {
|
|
278
|
+
if (this.#streamChunkSize <= this.#rows.length) {
|
|
279
|
+
this.#request.pause();
|
|
280
|
+
Object.values(this.#subscribers).forEach((subscriber) => subscriber('chunkReady'));
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
: () => { };
|
|
222
284
|
const rowListener = (columns) => {
|
|
223
285
|
const row = {};
|
|
224
286
|
for (const column of columns) {
|
|
225
287
|
row[column.metadata.colName] = column.value;
|
|
226
288
|
}
|
|
227
289
|
this.#rows.push(row);
|
|
290
|
+
pauseAndEmitChunkReady();
|
|
228
291
|
};
|
|
229
292
|
this.#request.on('row', rowListener);
|
|
230
293
|
this.#request.once('requestCompleted', () => {
|
|
231
|
-
this.#
|
|
294
|
+
Object.values(this.#subscribers).forEach((subscriber) => subscriber('completed'));
|
|
232
295
|
this.#request.off('row', rowListener);
|
|
233
|
-
onDone?.resolve({
|
|
234
|
-
rowCount: this.#rowCount,
|
|
235
|
-
rows: this.#rows,
|
|
236
|
-
});
|
|
237
296
|
});
|
|
238
297
|
}
|
|
239
298
|
#getTediousDataType(value) {
|
|
@@ -14,8 +14,12 @@ export class MssqlIntrospector {
|
|
|
14
14
|
.selectFrom('sys.tables as tables')
|
|
15
15
|
.leftJoin('sys.schemas as table_schemas', 'table_schemas.schema_id', 'tables.schema_id')
|
|
16
16
|
.innerJoin('sys.columns as columns', 'columns.object_id', 'tables.object_id')
|
|
17
|
-
.innerJoin('sys.types as types', 'types.
|
|
17
|
+
.innerJoin('sys.types as types', 'types.user_type_id', 'columns.user_type_id')
|
|
18
18
|
.leftJoin('sys.schemas as type_schemas', 'type_schemas.schema_id', 'types.schema_id')
|
|
19
|
+
.leftJoin('sys.extended_properties as comments', (join) => join
|
|
20
|
+
.onRef('comments.major_id', '=', 'tables.object_id')
|
|
21
|
+
.onRef('comments.minor_id', '=', 'columns.column_id')
|
|
22
|
+
.on('comments.name', '=', 'MS_Description'))
|
|
19
23
|
.$if(!options.withInternalKyselyTables, (qb) => qb
|
|
20
24
|
.where('tables.name', '!=', DEFAULT_MIGRATION_TABLE)
|
|
21
25
|
.where('tables.name', '!=', DEFAULT_MIGRATION_LOCK_TABLE))
|
|
@@ -36,13 +40,18 @@ export class MssqlIntrospector {
|
|
|
36
40
|
'types.is_nullable as type_is_nullable',
|
|
37
41
|
'types.name as type_name',
|
|
38
42
|
'type_schemas.name as type_schema_name',
|
|
43
|
+
'comments.value as column_comment',
|
|
39
44
|
])
|
|
40
45
|
.unionAll(this.#db
|
|
41
46
|
.selectFrom('sys.views as views')
|
|
42
47
|
.leftJoin('sys.schemas as view_schemas', 'view_schemas.schema_id', 'views.schema_id')
|
|
43
48
|
.innerJoin('sys.columns as columns', 'columns.object_id', 'views.object_id')
|
|
44
|
-
.innerJoin('sys.types as types', 'types.
|
|
49
|
+
.innerJoin('sys.types as types', 'types.user_type_id', 'columns.user_type_id')
|
|
45
50
|
.leftJoin('sys.schemas as type_schemas', 'type_schemas.schema_id', 'types.schema_id')
|
|
51
|
+
.leftJoin('sys.extended_properties as comments', (join) => join
|
|
52
|
+
.onRef('comments.major_id', '=', 'views.object_id')
|
|
53
|
+
.onRef('comments.minor_id', '=', 'columns.column_id')
|
|
54
|
+
.on('comments.name', '=', 'MS_Description'))
|
|
46
55
|
.select([
|
|
47
56
|
'views.name as table_name',
|
|
48
57
|
'views.type as table_type',
|
|
@@ -57,6 +66,7 @@ export class MssqlIntrospector {
|
|
|
57
66
|
'types.is_nullable as type_is_nullable',
|
|
58
67
|
'types.name as type_name',
|
|
59
68
|
'type_schemas.name as type_schema_name',
|
|
69
|
+
'comments.value as column_comment',
|
|
60
70
|
]))
|
|
61
71
|
.orderBy('table_schema_name')
|
|
62
72
|
.orderBy('table_name')
|
|
@@ -84,6 +94,7 @@ export class MssqlIntrospector {
|
|
|
84
94
|
isAutoIncrementing: rawColumn.column_is_identity,
|
|
85
95
|
isNullable: rawColumn.column_is_nullable && rawColumn.type_is_nullable,
|
|
86
96
|
name: rawColumn.column_name,
|
|
97
|
+
comment: rawColumn.column_comment ?? undefined,
|
|
87
98
|
}));
|
|
88
99
|
}
|
|
89
100
|
return Object.values(tableDictionary);
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { AddColumnNode } from '../../operation-node/add-column-node.js';
|
|
2
2
|
import { AlterTableColumnAlterationNode } from '../../operation-node/alter-table-node.js';
|
|
3
3
|
import { DropColumnNode } from '../../operation-node/drop-column-node.js';
|
|
4
|
+
import { OffsetNode } from '../../operation-node/offset-node.js';
|
|
5
|
+
import { MergeQueryNode } from '../../operation-node/merge-query-node.js';
|
|
4
6
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
5
7
|
export declare class MssqlQueryCompiler extends DefaultQueryCompiler {
|
|
6
8
|
protected getCurrentParameterPlaceholder(): string;
|
|
9
|
+
protected visitOffset(node: OffsetNode): void;
|
|
7
10
|
protected compileColumnAlterations(columnAlterations: readonly AlterTableColumnAlterationNode[]): void;
|
|
8
11
|
protected visitAddColumn(node: AddColumnNode): void;
|
|
9
12
|
protected visitDropColumn(node: DropColumnNode): void;
|
|
13
|
+
protected visitMergeQuery(node: MergeQueryNode): void;
|
|
10
14
|
protected announcesNewColumnDataType(): boolean;
|
|
11
15
|
}
|
|
@@ -4,6 +4,10 @@ export class MssqlQueryCompiler extends DefaultQueryCompiler {
|
|
|
4
4
|
getCurrentParameterPlaceholder() {
|
|
5
5
|
return `@${this.numParameters}`;
|
|
6
6
|
}
|
|
7
|
+
visitOffset(node) {
|
|
8
|
+
super.visitOffset(node);
|
|
9
|
+
this.append(' rows');
|
|
10
|
+
}
|
|
7
11
|
// mssql allows multi-column alterations in a single statement,
|
|
8
12
|
// but you can only use the command keyword/s once.
|
|
9
13
|
// it also doesn't support multiple kinds of commands in the same
|
|
@@ -55,6 +59,10 @@ export class MssqlQueryCompiler extends DefaultQueryCompiler {
|
|
|
55
59
|
visitDropColumn(node) {
|
|
56
60
|
this.visitNode(node.column);
|
|
57
61
|
}
|
|
62
|
+
visitMergeQuery(node) {
|
|
63
|
+
super.visitMergeQuery(node);
|
|
64
|
+
this.append(';');
|
|
65
|
+
}
|
|
58
66
|
announcesNewColumnDataType() {
|
|
59
67
|
return false;
|
|
60
68
|
}
|
|
@@ -31,6 +31,7 @@ export class MysqlIntrospector {
|
|
|
31
31
|
'columns.IS_NULLABLE',
|
|
32
32
|
'columns.DATA_TYPE',
|
|
33
33
|
'columns.EXTRA',
|
|
34
|
+
'columns.COLUMN_COMMENT',
|
|
34
35
|
])
|
|
35
36
|
.where('columns.TABLE_SCHEMA', '=', sql `database()`)
|
|
36
37
|
.orderBy('columns.TABLE_NAME')
|
|
@@ -67,6 +68,7 @@ export class MysqlIntrospector {
|
|
|
67
68
|
isNullable: it.IS_NULLABLE === 'YES',
|
|
68
69
|
isAutoIncrementing: it.EXTRA.toLowerCase().includes('auto_increment'),
|
|
69
70
|
hasDefaultValue: it.COLUMN_DEFAULT !== null,
|
|
71
|
+
comment: it.COLUMN_COMMENT === '' ? undefined : it.COLUMN_COMMENT,
|
|
70
72
|
}));
|
|
71
73
|
return tables;
|
|
72
74
|
}, []);
|
|
@@ -52,7 +52,7 @@ export interface PostgresCursor<T> {
|
|
|
52
52
|
}
|
|
53
53
|
export type PostgresCursorConstructor = new <T>(sql: string, parameters: unknown[]) => PostgresCursor<T>;
|
|
54
54
|
export interface PostgresQueryResult<R> {
|
|
55
|
-
command: 'UPDATE' | 'DELETE' | 'INSERT' | 'SELECT';
|
|
55
|
+
command: 'UPDATE' | 'DELETE' | 'INSERT' | 'SELECT' | 'MERGE';
|
|
56
56
|
rowCount: number;
|
|
57
57
|
rows: R[];
|
|
58
58
|
}
|
|
@@ -71,7 +71,8 @@ class PostgresConnection {
|
|
|
71
71
|
]);
|
|
72
72
|
if (result.command === 'INSERT' ||
|
|
73
73
|
result.command === 'UPDATE' ||
|
|
74
|
-
result.command === 'DELETE'
|
|
74
|
+
result.command === 'DELETE' ||
|
|
75
|
+
result.command === 'MERGE') {
|
|
75
76
|
const numAffectedRows = BigInt(result.rowCount);
|
|
76
77
|
return {
|
|
77
78
|
// TODO: remove.
|
|
@@ -36,6 +36,7 @@ export class PostgresIntrospector {
|
|
|
36
36
|
'ns.nspname as schema',
|
|
37
37
|
'typ.typname as type',
|
|
38
38
|
'dtns.nspname as type_schema',
|
|
39
|
+
sql `col_description(a.attrelid, a.attnum)`.as('column_description'),
|
|
39
40
|
// Detect if the column is auto incrementing by finding the sequence
|
|
40
41
|
// that is created for `serial` and `bigserial` columns.
|
|
41
42
|
this.#db
|
|
@@ -48,7 +49,7 @@ export class PostgresIntrospector {
|
|
|
48
49
|
.as('auto_incrementing'),
|
|
49
50
|
])
|
|
50
51
|
// r == normal table
|
|
51
|
-
.where((eb) => eb.or([eb('c.relkind', '=', 'r'), eb('c.relkind', '=', 'v')]))
|
|
52
|
+
.where((eb) => eb.or([eb('c.relkind', '=', 'r'), eb('c.relkind', '=', 'v'), eb('c.relkind', '=', 'p')]))
|
|
52
53
|
.where('ns.nspname', '!~', '^pg_')
|
|
53
54
|
.where('ns.nspname', '!=', 'information_schema')
|
|
54
55
|
// No system columns
|
|
@@ -90,6 +91,7 @@ export class PostgresIntrospector {
|
|
|
90
91
|
isNullable: !it.not_null,
|
|
91
92
|
isAutoIncrementing: !!it.auto_incrementing,
|
|
92
93
|
hasDefaultValue: it.has_default,
|
|
94
|
+
comment: it.column_description ?? undefined,
|
|
93
95
|
}));
|
|
94
96
|
return tables;
|
|
95
97
|
}, []);
|
|
@@ -14,14 +14,16 @@ export interface QueryResult<O> {
|
|
|
14
14
|
*/
|
|
15
15
|
readonly numUpdatedOrDeletedRows?: bigint;
|
|
16
16
|
/**
|
|
17
|
-
* This is defined for insert, update and
|
|
17
|
+
* This is defined for insert, update, delete and merge queries and contains
|
|
18
18
|
* the number of rows the query inserted/updated/deleted.
|
|
19
19
|
*/
|
|
20
20
|
readonly numAffectedRows?: bigint;
|
|
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
|
/**
|
|
@@ -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
|
|
@@ -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
|