kysely 0.27.6 → 0.28.0
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/README.md +169 -1
- package/deno.check.d.ts +7 -0
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +26 -16
- package/dist/cjs/dialect/mssql/mssql-driver.d.ts +6 -3
- package/dist/cjs/dialect/mssql/mssql-driver.js +33 -19
- package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +2 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.js +11 -0
- package/dist/cjs/dialect/mysql/mysql-driver.d.ts +4 -0
- package/dist/cjs/dialect/mysql/mysql-driver.js +27 -12
- package/dist/cjs/dialect/postgres/postgres-driver.d.ts +4 -0
- package/dist/cjs/dialect/postgres/postgres-driver.js +28 -18
- package/dist/cjs/dialect/postgres/postgres-introspector.js +7 -17
- package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +4 -0
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +19 -13
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +4 -0
- package/dist/cjs/driver/database-connection.d.ts +0 -4
- package/dist/cjs/driver/driver.d.ts +17 -0
- package/dist/cjs/driver/driver.js +13 -1
- package/dist/cjs/driver/dummy-driver.d.ts +3 -0
- package/dist/cjs/driver/dummy-driver.js +9 -0
- package/dist/cjs/driver/runtime-driver.d.ts +4 -0
- package/dist/cjs/driver/runtime-driver.js +43 -3
- package/dist/cjs/expression/expression-builder.d.ts +7 -10
- package/dist/cjs/helpers/postgres.d.ts +48 -0
- package/dist/cjs/helpers/postgres.js +50 -0
- package/dist/cjs/index.d.ts +13 -2
- package/dist/cjs/index.js +13 -2
- package/dist/cjs/kysely.d.ts +339 -2
- package/dist/cjs/kysely.js +465 -11
- package/dist/cjs/migration/migrator.d.ts +8 -0
- package/dist/cjs/migration/migrator.js +1 -1
- package/dist/cjs/operation-node/aggregate-function-node.d.ts +2 -1
- package/dist/cjs/operation-node/aggregate-function-node.js +4 -3
- package/dist/cjs/operation-node/alter-table-node.d.ts +3 -1
- package/dist/cjs/operation-node/collate-node.d.ts +13 -0
- package/dist/cjs/operation-node/collate-node.js +19 -0
- package/dist/cjs/operation-node/constraint-node.d.ts +1 -1
- package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/create-type-node.js +1 -1
- package/dist/cjs/operation-node/delete-query-node.d.ts +8 -2
- package/dist/cjs/operation-node/delete-query-node.js +11 -15
- package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/join-node.d.ts +1 -1
- package/dist/cjs/operation-node/merge-query-node.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +106 -97
- package/dist/cjs/operation-node/operation-node-transformer.js +352 -312
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +9 -1
- package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/or-action-node.d.ts +12 -0
- package/dist/cjs/operation-node/or-action-node.js +18 -0
- package/dist/cjs/operation-node/order-by-item-node.d.ts +5 -0
- package/dist/cjs/operation-node/order-by-item-node.js +6 -0
- package/dist/cjs/operation-node/primary-key-constraint-node.d.ts +29 -0
- package/dist/cjs/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
- package/dist/cjs/operation-node/query-node.d.ts +7 -0
- package/dist/cjs/operation-node/query-node.js +15 -0
- package/dist/cjs/operation-node/refresh-materialized-view-node.d.ts +17 -0
- package/dist/cjs/operation-node/refresh-materialized-view-node.js +25 -0
- package/dist/cjs/operation-node/rename-constraint-node.d.ts +14 -0
- package/dist/cjs/operation-node/rename-constraint-node.js +20 -0
- package/dist/cjs/operation-node/select-query-node.d.ts +8 -2
- package/dist/cjs/operation-node/select-query-node.js +11 -15
- package/dist/cjs/operation-node/unique-constraint-node.d.ts +2 -0
- package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
- package/dist/cjs/operation-node/update-query-node.js +5 -2
- package/dist/cjs/parser/collate-parser.d.ts +1 -0
- package/dist/cjs/parser/collate-parser.js +2 -0
- package/dist/cjs/parser/delete-from-parser.d.ts +5 -0
- package/dist/cjs/parser/delete-from-parser.js +2 -0
- package/dist/cjs/parser/join-parser.d.ts +1 -1
- package/dist/cjs/parser/join-parser.js +7 -1
- package/dist/cjs/parser/merge-into-parser.d.ts +5 -0
- package/dist/cjs/parser/merge-into-parser.js +2 -0
- package/dist/cjs/parser/order-by-parser.d.ts +18 -5
- package/dist/cjs/parser/order-by-parser.js +24 -14
- package/dist/cjs/parser/savepoint-parser.d.ts +4 -0
- package/dist/cjs/parser/savepoint-parser.js +11 -0
- package/dist/cjs/parser/select-from-parser.d.ts +4 -0
- package/dist/cjs/parser/select-from-parser.js +2 -0
- package/dist/cjs/parser/table-parser.d.ts +2 -5
- package/dist/cjs/parser/update-parser.d.ts +5 -0
- package/dist/cjs/parser/update-parser.js +2 -0
- package/dist/cjs/parser/update-set-parser.d.ts +7 -4
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
- package/dist/cjs/plugin/camel-case/camel-case-transformer.d.ts +2 -1
- package/dist/cjs/plugin/camel-case/camel-case-transformer.js +2 -2
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
- package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
- package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +162 -0
- package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
- package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +29 -0
- package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
- package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.js +66 -0
- package/dist/cjs/plugin/immediate-value/immediate-value-plugin.js +1 -1
- package/dist/cjs/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
- package/dist/cjs/plugin/immediate-value/immediate-value-transformer.js +6 -4
- package/dist/cjs/plugin/with-schema/with-schema-plugin.js +1 -1
- package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +6 -5
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +29 -24
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +83 -5
- package/dist/cjs/query-builder/aggregate-function-builder.js +15 -27
- package/dist/cjs/query-builder/cte-builder.js +0 -2
- package/dist/cjs/query-builder/delete-query-builder.d.ts +36 -47
- package/dist/cjs/query-builder/delete-query-builder.js +12 -78
- package/dist/cjs/query-builder/function-module.d.ts +31 -4
- package/dist/cjs/query-builder/insert-query-builder.d.ts +161 -6
- package/dist/cjs/query-builder/insert-query-builder.js +197 -10
- package/dist/cjs/query-builder/join-builder.js +0 -2
- package/dist/cjs/query-builder/merge-query-builder.d.ts +145 -3
- package/dist/cjs/query-builder/merge-query-builder.js +28 -7
- package/dist/cjs/query-builder/on-conflict-builder.js +0 -4
- package/dist/cjs/query-builder/order-by-interface.d.ts +176 -0
- package/dist/cjs/query-builder/order-by-interface.js +2 -0
- package/dist/cjs/query-builder/order-by-item-builder.d.ts +43 -0
- package/dist/cjs/query-builder/order-by-item-builder.js +75 -0
- package/dist/cjs/query-builder/over-builder.d.ts +43 -6
- package/dist/cjs/query-builder/over-builder.js +8 -25
- package/dist/cjs/query-builder/returning-interface.d.ts +20 -3
- package/dist/cjs/query-builder/select-query-builder.d.ts +279 -98
- package/dist/cjs/query-builder/select-query-builder.js +26 -26
- package/dist/cjs/query-builder/update-query-builder.d.ts +88 -9
- package/dist/cjs/query-builder/update-query-builder.js +17 -15
- package/dist/cjs/query-compiler/compiled-query.d.ts +2 -0
- package/dist/cjs/query-compiler/compiled-query.js +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +17 -2
- package/dist/cjs/query-compiler/default-query-compiler.js +97 -2
- package/dist/cjs/query-compiler/query-compiler.d.ts +4 -2
- package/dist/cjs/query-creator.d.ts +23 -25
- package/dist/cjs/query-creator.js +280 -8
- package/dist/cjs/query-executor/default-query-executor.d.ts +2 -1
- package/dist/cjs/query-executor/default-query-executor.js +2 -2
- package/dist/cjs/query-executor/query-executor-base.js +7 -25
- package/dist/cjs/raw-builder/raw-builder.js +0 -3
- package/dist/cjs/raw-builder/sql.d.ts +3 -3
- package/dist/cjs/raw-builder/sql.js +1 -1
- package/dist/cjs/schema/alter-column-builder.js +0 -3
- package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
- package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
- package/dist/cjs/schema/alter-table-add-index-builder.js +0 -2
- package/dist/cjs/schema/alter-table-builder.d.ts +7 -3
- package/dist/cjs/schema/alter-table-builder.js +21 -10
- package/dist/cjs/schema/alter-table-drop-constraint-builder.js +0 -2
- package/dist/cjs/schema/alter-table-executor.js +0 -2
- package/dist/cjs/schema/check-constraint-builder.d.ts +13 -0
- package/dist/cjs/schema/check-constraint-builder.js +20 -0
- package/dist/cjs/schema/column-definition-builder.js +0 -2
- package/dist/cjs/schema/create-index-builder.js +1 -3
- package/dist/cjs/schema/create-schema-builder.js +0 -2
- package/dist/cjs/schema/create-table-builder.d.ts +5 -4
- package/dist/cjs/schema/create-table-builder.js +9 -7
- package/dist/cjs/schema/create-type-builder.d.ts +1 -1
- package/dist/cjs/schema/create-type-builder.js +0 -2
- package/dist/cjs/schema/create-view-builder.js +0 -2
- package/dist/cjs/schema/drop-index-builder.js +0 -2
- package/dist/cjs/schema/drop-schema-builder.js +0 -2
- package/dist/cjs/schema/drop-table-builder.js +0 -2
- package/dist/cjs/schema/drop-type-builder.js +0 -2
- package/dist/cjs/schema/drop-view-builder.js +0 -2
- package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +9 -0
- package/dist/cjs/schema/foreign-key-constraint-builder.js +16 -2
- package/dist/cjs/schema/primary-key-constraint-builder.d.ts +17 -0
- package/dist/cjs/schema/primary-key-constraint-builder.js +37 -0
- package/dist/cjs/schema/refresh-materialized-view-builder.d.ts +47 -0
- package/dist/cjs/schema/refresh-materialized-view-builder.js +75 -0
- package/dist/cjs/schema/schema.d.ts +14 -0
- package/dist/cjs/schema/schema.js +21 -0
- package/dist/cjs/schema/unique-constraint-builder.d.ts +10 -1
- package/dist/cjs/schema/unique-constraint-builder.js +26 -5
- package/dist/cjs/util/infer-result.d.ts +1 -1
- package/dist/cjs/util/log.d.ts +1 -0
- package/dist/cjs/util/log.js +3 -2
- package/dist/cjs/util/provide-controlled-connection.d.ts +7 -0
- package/dist/cjs/util/provide-controlled-connection.js +24 -0
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +26 -16
- package/dist/esm/dialect/mssql/mssql-driver.d.ts +6 -3
- package/dist/esm/dialect/mssql/mssql-driver.js +33 -19
- package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +2 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.js +11 -0
- package/dist/esm/dialect/mysql/mysql-driver.d.ts +4 -0
- package/dist/esm/dialect/mysql/mysql-driver.js +27 -12
- package/dist/esm/dialect/postgres/postgres-driver.d.ts +4 -0
- package/dist/esm/dialect/postgres/postgres-driver.js +28 -18
- package/dist/esm/dialect/postgres/postgres-introspector.js +7 -17
- package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +4 -0
- package/dist/esm/dialect/sqlite/sqlite-driver.js +19 -13
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +4 -0
- package/dist/esm/driver/database-connection.d.ts +0 -4
- package/dist/esm/driver/driver.d.ts +17 -0
- package/dist/esm/driver/driver.js +11 -0
- package/dist/esm/driver/dummy-driver.d.ts +3 -0
- package/dist/esm/driver/dummy-driver.js +9 -0
- package/dist/esm/driver/runtime-driver.d.ts +4 -0
- package/dist/esm/driver/runtime-driver.js +43 -3
- package/dist/esm/expression/expression-builder.d.ts +7 -10
- package/dist/esm/helpers/postgres.d.ts +48 -0
- package/dist/esm/helpers/postgres.js +49 -0
- package/dist/esm/index.d.ts +13 -2
- package/dist/esm/index.js +11 -1
- package/dist/esm/kysely.d.ts +339 -2
- package/dist/esm/kysely.js +461 -10
- package/dist/esm/migration/migrator.d.ts +8 -0
- package/dist/esm/migration/migrator.js +1 -1
- package/dist/esm/operation-node/aggregate-function-node.d.ts +2 -1
- package/dist/esm/operation-node/aggregate-function-node.js +4 -3
- package/dist/esm/operation-node/alter-table-node.d.ts +3 -1
- package/dist/esm/operation-node/collate-node.d.ts +13 -0
- package/dist/esm/operation-node/collate-node.js +17 -0
- package/dist/esm/operation-node/constraint-node.d.ts +1 -1
- package/dist/esm/operation-node/create-type-node.d.ts +1 -1
- package/dist/esm/operation-node/create-type-node.js +1 -1
- package/dist/esm/operation-node/delete-query-node.d.ts +8 -2
- package/dist/esm/operation-node/delete-query-node.js +11 -15
- package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
- package/dist/esm/operation-node/join-node.d.ts +1 -1
- package/dist/esm/operation-node/merge-query-node.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +106 -97
- package/dist/esm/operation-node/operation-node-transformer.js +352 -312
- package/dist/esm/operation-node/operation-node-visitor.d.ts +9 -1
- package/dist/esm/operation-node/operation-node-visitor.js +4 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/or-action-node.d.ts +12 -0
- package/dist/esm/operation-node/or-action-node.js +16 -0
- package/dist/esm/operation-node/order-by-item-node.d.ts +5 -0
- package/dist/esm/operation-node/order-by-item-node.js +6 -0
- package/dist/esm/operation-node/primary-key-constraint-node.d.ts +29 -0
- package/dist/esm/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
- package/dist/esm/operation-node/query-node.d.ts +7 -0
- package/dist/esm/operation-node/query-node.js +15 -0
- package/dist/esm/operation-node/refresh-materialized-view-node.d.ts +17 -0
- package/dist/esm/operation-node/refresh-materialized-view-node.js +23 -0
- package/dist/esm/operation-node/rename-constraint-node.d.ts +14 -0
- package/dist/esm/operation-node/rename-constraint-node.js +18 -0
- package/dist/esm/operation-node/select-query-node.d.ts +8 -2
- package/dist/esm/operation-node/select-query-node.js +11 -15
- package/dist/esm/operation-node/unique-constraint-node.d.ts +2 -0
- package/dist/esm/operation-node/update-query-node.d.ts +3 -4
- package/dist/esm/operation-node/update-query-node.js +5 -2
- package/dist/esm/parser/collate-parser.d.ts +1 -0
- package/dist/esm/parser/collate-parser.js +2 -0
- package/dist/esm/parser/delete-from-parser.d.ts +5 -0
- package/dist/esm/parser/delete-from-parser.js +2 -0
- package/dist/esm/parser/join-parser.d.ts +1 -1
- package/dist/esm/parser/join-parser.js +7 -1
- package/dist/esm/parser/merge-into-parser.d.ts +5 -0
- package/dist/esm/parser/merge-into-parser.js +2 -0
- package/dist/esm/parser/order-by-parser.d.ts +18 -5
- package/dist/esm/parser/order-by-parser.js +27 -17
- package/dist/esm/parser/savepoint-parser.d.ts +4 -0
- package/dist/esm/parser/savepoint-parser.js +9 -0
- package/dist/esm/parser/select-from-parser.d.ts +4 -0
- package/dist/esm/parser/select-from-parser.js +2 -0
- package/dist/esm/parser/table-parser.d.ts +2 -5
- package/dist/esm/parser/update-parser.d.ts +5 -0
- package/dist/esm/parser/update-parser.js +2 -0
- package/dist/esm/parser/update-set-parser.d.ts +7 -4
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +1 -1
- package/dist/esm/plugin/camel-case/camel-case-transformer.d.ts +2 -1
- package/dist/esm/plugin/camel-case/camel-case-transformer.js +2 -2
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
- package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
- package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +159 -0
- package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
- package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +26 -0
- package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
- package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.js +63 -0
- package/dist/esm/plugin/immediate-value/immediate-value-plugin.js +1 -1
- package/dist/esm/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
- package/dist/esm/plugin/immediate-value/immediate-value-transformer.js +6 -4
- package/dist/esm/plugin/with-schema/with-schema-plugin.js +1 -1
- package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +6 -5
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +29 -24
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +83 -5
- package/dist/esm/query-builder/aggregate-function-builder.js +15 -27
- package/dist/esm/query-builder/cte-builder.js +0 -2
- package/dist/esm/query-builder/delete-query-builder.d.ts +36 -47
- package/dist/esm/query-builder/delete-query-builder.js +12 -78
- package/dist/esm/query-builder/function-module.d.ts +31 -4
- package/dist/esm/query-builder/insert-query-builder.d.ts +161 -6
- package/dist/esm/query-builder/insert-query-builder.js +197 -10
- package/dist/esm/query-builder/join-builder.js +0 -2
- package/dist/esm/query-builder/merge-query-builder.d.ts +145 -3
- package/dist/esm/query-builder/merge-query-builder.js +29 -8
- package/dist/esm/query-builder/on-conflict-builder.js +0 -4
- package/dist/esm/query-builder/order-by-interface.d.ts +176 -0
- package/dist/esm/query-builder/order-by-interface.js +2 -0
- package/dist/esm/query-builder/order-by-item-builder.d.ts +43 -0
- package/dist/esm/query-builder/order-by-item-builder.js +72 -0
- package/dist/esm/query-builder/over-builder.d.ts +43 -6
- package/dist/esm/query-builder/over-builder.js +8 -25
- package/dist/esm/query-builder/returning-interface.d.ts +20 -3
- package/dist/esm/query-builder/select-query-builder.d.ts +279 -98
- package/dist/esm/query-builder/select-query-builder.js +26 -26
- package/dist/esm/query-builder/update-query-builder.d.ts +88 -9
- package/dist/esm/query-builder/update-query-builder.js +17 -15
- package/dist/esm/query-compiler/compiled-query.d.ts +2 -0
- package/dist/esm/query-compiler/compiled-query.js +2 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +17 -2
- package/dist/esm/query-compiler/default-query-compiler.js +97 -2
- package/dist/esm/query-compiler/query-compiler.d.ts +4 -2
- package/dist/esm/query-creator.d.ts +23 -25
- package/dist/esm/query-creator.js +281 -9
- package/dist/esm/query-executor/default-query-executor.d.ts +2 -1
- package/dist/esm/query-executor/default-query-executor.js +2 -2
- package/dist/esm/query-executor/query-executor-base.js +7 -25
- package/dist/esm/raw-builder/raw-builder.js +0 -3
- package/dist/esm/raw-builder/sql.d.ts +3 -3
- package/dist/esm/raw-builder/sql.js +1 -1
- package/dist/esm/schema/alter-column-builder.js +0 -3
- package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
- package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
- package/dist/esm/schema/alter-table-add-index-builder.js +0 -2
- package/dist/esm/schema/alter-table-builder.d.ts +7 -3
- package/dist/esm/schema/alter-table-builder.js +22 -11
- package/dist/esm/schema/alter-table-drop-constraint-builder.js +0 -2
- package/dist/esm/schema/alter-table-executor.js +0 -2
- package/dist/esm/schema/check-constraint-builder.d.ts +13 -0
- package/dist/esm/schema/check-constraint-builder.js +17 -0
- package/dist/esm/schema/column-definition-builder.js +0 -2
- package/dist/esm/schema/create-index-builder.js +1 -3
- package/dist/esm/schema/create-schema-builder.js +0 -2
- package/dist/esm/schema/create-table-builder.d.ts +5 -4
- package/dist/esm/schema/create-table-builder.js +10 -8
- package/dist/esm/schema/create-type-builder.d.ts +1 -1
- package/dist/esm/schema/create-type-builder.js +0 -2
- package/dist/esm/schema/create-view-builder.js +0 -2
- package/dist/esm/schema/drop-index-builder.js +0 -2
- package/dist/esm/schema/drop-schema-builder.js +0 -2
- package/dist/esm/schema/drop-table-builder.js +0 -2
- package/dist/esm/schema/drop-type-builder.js +0 -2
- package/dist/esm/schema/drop-view-builder.js +0 -2
- package/dist/esm/schema/foreign-key-constraint-builder.d.ts +9 -0
- package/dist/esm/schema/foreign-key-constraint-builder.js +16 -2
- package/dist/esm/schema/primary-key-constraint-builder.d.ts +17 -0
- package/dist/esm/schema/primary-key-constraint-builder.js +34 -0
- package/dist/esm/schema/refresh-materialized-view-builder.d.ts +47 -0
- package/dist/esm/schema/refresh-materialized-view-builder.js +72 -0
- package/dist/esm/schema/schema.d.ts +14 -0
- package/dist/esm/schema/schema.js +21 -0
- package/dist/esm/schema/unique-constraint-builder.d.ts +10 -1
- package/dist/esm/schema/unique-constraint-builder.js +26 -5
- package/dist/esm/util/infer-result.d.ts +1 -1
- package/dist/esm/util/log.d.ts +1 -0
- package/dist/esm/util/log.js +3 -2
- package/dist/esm/util/provide-controlled-connection.d.ts +7 -0
- package/dist/esm/util/provide-controlled-connection.js +22 -0
- package/outdated-typescript.d.ts +5 -0
- package/package.json +16 -2
- package/CONTRIBUTING.md +0 -168
- package/dist/cjs/operation-node/primary-constraint-node.d.ts +0 -15
- package/dist/cjs/util/prevent-await.d.ts +0 -1
- package/dist/cjs/util/prevent-await.js +0 -13
- package/dist/esm/operation-node/primary-constraint-node.d.ts +0 -15
- package/dist/esm/util/prevent-await.d.ts +0 -1
- package/dist/esm/util/prevent-await.js +0 -11
|
@@ -12,11 +12,13 @@ import { DropViewNode } from '../operation-node/drop-view-node.js';
|
|
|
12
12
|
import { MergeQueryNode } from '../operation-node/merge-query-node.js';
|
|
13
13
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
14
14
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
15
|
+
import { RefreshMaterializedViewNode } from '../operation-node/refresh-materialized-view-node.js';
|
|
16
|
+
import { QueryId } from '../util/query-id.js';
|
|
15
17
|
import { CompiledQuery } from './compiled-query.js';
|
|
16
|
-
export type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode | MergeQueryNode;
|
|
18
|
+
export type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | RefreshMaterializedViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode | MergeQueryNode;
|
|
17
19
|
/**
|
|
18
20
|
* a `QueryCompiler` compiles a query expressed as a tree of `OperationNodes` into SQL.
|
|
19
21
|
*/
|
|
20
22
|
export interface QueryCompiler {
|
|
21
|
-
compileQuery(node: RootOperationNode): CompiledQuery;
|
|
23
|
+
compileQuery(node: RootOperationNode, queryId: QueryId): CompiledQuery;
|
|
22
24
|
}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import { SelectQueryBuilder } from './query-builder/select-query-builder.js';
|
|
2
2
|
import { InsertQueryBuilder } from './query-builder/insert-query-builder.js';
|
|
3
|
-
import {
|
|
4
|
-
import { UpdateQueryBuilder } from './query-builder/update-query-builder.js';
|
|
5
|
-
import { TableExpression, From, FromTables, TableReference, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from './parser/table-parser.js';
|
|
3
|
+
import { TableExpressionOrList, SimpleTableReference } from './parser/table-parser.js';
|
|
6
4
|
import { QueryExecutor } from './query-executor/query-executor.js';
|
|
7
5
|
import { CommonTableExpression, QueryCreatorWithCommonTableExpression, RecursiveCommonTableExpression } from './parser/with-parser.js';
|
|
8
6
|
import { WithNode } from './operation-node/with-node.js';
|
|
9
7
|
import { InsertResult } from './query-builder/insert-result.js';
|
|
10
|
-
import { DeleteResult } from './query-builder/delete-result.js';
|
|
11
|
-
import { UpdateResult } from './query-builder/update-result.js';
|
|
12
8
|
import { KyselyPlugin } from './plugin/kysely-plugin.js';
|
|
13
9
|
import { CTEBuilderCallback } from './query-builder/cte-builder.js';
|
|
14
10
|
import { CallbackSelection, SelectCallback, SelectExpression, Selection } from './parser/select-parser.js';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
11
|
+
import { SelectFrom } from './parser/select-from-parser.js';
|
|
12
|
+
import { DeleteFrom } from './parser/delete-from-parser.js';
|
|
13
|
+
import { UpdateTable } from './parser/update-parser.js';
|
|
14
|
+
import { MergeInto } from './parser/merge-into-parser.js';
|
|
17
15
|
export declare class QueryCreator<DB> {
|
|
18
16
|
#private;
|
|
19
17
|
constructor(props: QueryCreatorProps);
|
|
@@ -124,11 +122,7 @@ export declare class QueryCreator<DB> {
|
|
|
124
122
|
* (select 1 as one) as "q"
|
|
125
123
|
* ```
|
|
126
124
|
*/
|
|
127
|
-
selectFrom<TE extends
|
|
128
|
-
selectFrom<TE extends TableExpression<DB, never>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
|
|
129
|
-
selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>;
|
|
130
|
-
selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, ExtractTableAlias<DB & PickTableWithAlias<DB, TE>, TE>, {}>;
|
|
131
|
-
selectFrom<TE extends TableExpression<DB, never>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
|
|
125
|
+
selectFrom<TE extends TableExpressionOrList<DB, never>>(from: TE): SelectFrom<DB, never, TE>;
|
|
132
126
|
/**
|
|
133
127
|
* Creates a `select` query builder without a `from` clause.
|
|
134
128
|
*
|
|
@@ -218,10 +212,14 @@ export declare class QueryCreator<DB> {
|
|
|
218
212
|
*/
|
|
219
213
|
insertInto<T extends keyof DB & string>(table: T): InsertQueryBuilder<DB, T, InsertResult>;
|
|
220
214
|
/**
|
|
221
|
-
* Creates a replace query.
|
|
215
|
+
* Creates a "replace into" query.
|
|
222
216
|
*
|
|
223
|
-
*
|
|
224
|
-
*
|
|
217
|
+
* This is only supported by some dialects like MySQL or SQLite.
|
|
218
|
+
*
|
|
219
|
+
* Similar to MySQL's {@link InsertQueryBuilder.onDuplicateKeyUpdate} that deletes
|
|
220
|
+
* and inserts values on collision instead of updating existing rows.
|
|
221
|
+
*
|
|
222
|
+
* An alias of SQLite's {@link InsertQueryBuilder.orReplace}.
|
|
225
223
|
*
|
|
226
224
|
* The return value of this query is an instance of {@link InsertResult}. {@link InsertResult}
|
|
227
225
|
* has the {@link InsertResult.insertId | insertId} field that holds the auto incremented id of
|
|
@@ -238,10 +236,16 @@ export declare class QueryCreator<DB> {
|
|
|
238
236
|
* first_name: 'Jennifer',
|
|
239
237
|
* last_name: 'Aniston'
|
|
240
238
|
* })
|
|
241
|
-
* .
|
|
239
|
+
* .executeTakeFirstOrThrow()
|
|
242
240
|
*
|
|
243
241
|
* console.log(result.insertId)
|
|
244
242
|
* ```
|
|
243
|
+
*
|
|
244
|
+
* The generated SQL (MySQL):
|
|
245
|
+
*
|
|
246
|
+
* ```sql
|
|
247
|
+
* replace into `person` (`first_name`, `last_name`) values (?, ?)
|
|
248
|
+
* ```
|
|
245
249
|
*/
|
|
246
250
|
replaceInto<T extends keyof DB & string>(table: T): InsertQueryBuilder<DB, T, InsertResult>;
|
|
247
251
|
/**
|
|
@@ -293,10 +297,7 @@ export declare class QueryCreator<DB> {
|
|
|
293
297
|
* where `person`.`id` = ?
|
|
294
298
|
* ```
|
|
295
299
|
*/
|
|
296
|
-
deleteFrom<
|
|
297
|
-
deleteFrom<TR extends TableReference<DB>>(tables: TR[]): DeleteQueryBuilder<From<DB, TR>, FromTables<DB, never, TR>, DeleteResult>;
|
|
298
|
-
deleteFrom<TR extends keyof DB & string>(from: TR): DeleteQueryBuilder<DB, ExtractTableAlias<DB, TR>, DeleteResult>;
|
|
299
|
-
deleteFrom<TR extends TableReference<DB>>(table: TR): DeleteQueryBuilder<From<DB, TR>, FromTables<DB, never, TR>, DeleteResult>;
|
|
300
|
+
deleteFrom<TE extends TableExpressionOrList<DB, never>>(from: TE): DeleteFrom<DB, TE>;
|
|
300
301
|
/**
|
|
301
302
|
* Creates an update query.
|
|
302
303
|
*
|
|
@@ -320,9 +321,7 @@ export declare class QueryCreator<DB> {
|
|
|
320
321
|
* console.log(result.numUpdatedRows)
|
|
321
322
|
* ```
|
|
322
323
|
*/
|
|
323
|
-
updateTable<
|
|
324
|
-
updateTable<TR extends AnyAliasedTable<DB>>(table: TR): UpdateQueryBuilder<DB & PickTableWithAlias<DB, TR>, ExtractTableAlias<DB & PickTableWithAlias<DB, TR>, TR>, ExtractTableAlias<DB & PickTableWithAlias<DB, TR>, TR>, UpdateResult>;
|
|
325
|
-
updateTable<TR extends TableReference<DB>>(table: TR): UpdateQueryBuilder<From<DB, TR>, FromTables<DB, never, TR>, FromTables<DB, never, TR>, UpdateResult>;
|
|
324
|
+
updateTable<TE extends TableExpressionOrList<DB, never>>(tables: TE): UpdateTable<DB, TE>;
|
|
326
325
|
/**
|
|
327
326
|
* Creates a merge query.
|
|
328
327
|
*
|
|
@@ -406,8 +405,7 @@ export declare class QueryCreator<DB> {
|
|
|
406
405
|
* then delete
|
|
407
406
|
* ```
|
|
408
407
|
*/
|
|
409
|
-
mergeInto<TR extends
|
|
410
|
-
mergeInto<TR extends AnyAliasedTable<DB>>(targetTable: TR): MergeQueryBuilder<DB & PickTableWithAlias<DB, TR>, ExtractTableAlias<DB & PickTableWithAlias<DB, TR>, TR>, MergeResult>;
|
|
408
|
+
mergeInto<TR extends SimpleTableReference<DB>>(targetTable: TR): MergeInto<DB, TR>;
|
|
411
409
|
/**
|
|
412
410
|
* Creates a `with` query (Common Table Expression).
|
|
413
411
|
*
|
|
@@ -7,7 +7,7 @@ import { DeleteQueryNode } from './operation-node/delete-query-node.js';
|
|
|
7
7
|
import { InsertQueryNode } from './operation-node/insert-query-node.js';
|
|
8
8
|
import { SelectQueryNode } from './operation-node/select-query-node.js';
|
|
9
9
|
import { UpdateQueryNode } from './operation-node/update-query-node.js';
|
|
10
|
-
import { parseTable,
|
|
10
|
+
import { parseTable, parseTableExpressionOrList, parseAliasedTable, } from './parser/table-parser.js';
|
|
11
11
|
import { parseCommonTableExpression, } from './parser/with-parser.js';
|
|
12
12
|
import { WithNode } from './operation-node/with-node.js';
|
|
13
13
|
import { createQueryId } from './util/query-id.js';
|
|
@@ -21,6 +21,113 @@ export class QueryCreator {
|
|
|
21
21
|
constructor(props) {
|
|
22
22
|
this.#props = freeze(props);
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Creates a `select` query builder for the given table or tables.
|
|
26
|
+
*
|
|
27
|
+
* The tables passed to this method are built as the query's `from` clause.
|
|
28
|
+
*
|
|
29
|
+
* ### Examples
|
|
30
|
+
*
|
|
31
|
+
* Create a select query for one table:
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* db.selectFrom('person').selectAll()
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* The generated SQL (PostgreSQL):
|
|
38
|
+
*
|
|
39
|
+
* ```sql
|
|
40
|
+
* select * from "person"
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* Create a select query for one table with an alias:
|
|
44
|
+
*
|
|
45
|
+
* ```ts
|
|
46
|
+
* const persons = await db.selectFrom('person as p')
|
|
47
|
+
* .select(['p.id', 'first_name'])
|
|
48
|
+
* .execute()
|
|
49
|
+
*
|
|
50
|
+
* console.log(persons[0].id)
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* The generated SQL (PostgreSQL):
|
|
54
|
+
*
|
|
55
|
+
* ```sql
|
|
56
|
+
* select "p"."id", "first_name" from "person" as "p"
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* Create a select query from a subquery:
|
|
60
|
+
*
|
|
61
|
+
* ```ts
|
|
62
|
+
* const persons = await db.selectFrom(
|
|
63
|
+
* (eb) => eb.selectFrom('person').select('person.id as identifier').as('p')
|
|
64
|
+
* )
|
|
65
|
+
* .select('p.identifier')
|
|
66
|
+
* .execute()
|
|
67
|
+
*
|
|
68
|
+
* console.log(persons[0].identifier)
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* The generated SQL (PostgreSQL):
|
|
72
|
+
*
|
|
73
|
+
* ```sql
|
|
74
|
+
* select "p"."identifier",
|
|
75
|
+
* from (
|
|
76
|
+
* select "person"."id" as "identifier" from "person"
|
|
77
|
+
* ) as p
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* Create a select query from raw sql:
|
|
81
|
+
*
|
|
82
|
+
* ```ts
|
|
83
|
+
* import { sql } from 'kysely'
|
|
84
|
+
*
|
|
85
|
+
* const items = await db
|
|
86
|
+
* .selectFrom(sql<{ one: number }>`(select 1 as one)`.as('q'))
|
|
87
|
+
* .select('q.one')
|
|
88
|
+
* .execute()
|
|
89
|
+
*
|
|
90
|
+
* console.log(items[0].one)
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* The generated SQL (PostgreSQL):
|
|
94
|
+
*
|
|
95
|
+
* ```sql
|
|
96
|
+
* select "q"."one",
|
|
97
|
+
* from (
|
|
98
|
+
* select 1 as one
|
|
99
|
+
* ) as q
|
|
100
|
+
* ```
|
|
101
|
+
*
|
|
102
|
+
* When you use the `sql` tag you need to also provide the result type of the
|
|
103
|
+
* raw snippet / query so that Kysely can figure out what columns are
|
|
104
|
+
* available for the rest of the query.
|
|
105
|
+
*
|
|
106
|
+
* The `selectFrom` method also accepts an array for multiple tables. All
|
|
107
|
+
* the above examples can also be used in an array.
|
|
108
|
+
*
|
|
109
|
+
* ```ts
|
|
110
|
+
* import { sql } from 'kysely'
|
|
111
|
+
*
|
|
112
|
+
* const items = await db.selectFrom([
|
|
113
|
+
* 'person as p',
|
|
114
|
+
* db.selectFrom('pet').select('pet.species').as('a'),
|
|
115
|
+
* sql<{ one: number }>`(select 1 as one)`.as('q')
|
|
116
|
+
* ])
|
|
117
|
+
* .select(['p.id', 'a.species', 'q.one'])
|
|
118
|
+
* .execute()
|
|
119
|
+
* ```
|
|
120
|
+
*
|
|
121
|
+
* The generated SQL (PostgreSQL):
|
|
122
|
+
*
|
|
123
|
+
* ```sql
|
|
124
|
+
* select "p".id, "a"."species", "q"."one"
|
|
125
|
+
* from
|
|
126
|
+
* "person" as "p",
|
|
127
|
+
* (select "pet"."species" from "pet") as a,
|
|
128
|
+
* (select 1 as one) as "q"
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
24
131
|
selectFrom(from) {
|
|
25
132
|
return createSelectQueryBuilder({
|
|
26
133
|
queryId: createQueryId(),
|
|
@@ -81,10 +188,14 @@ export class QueryCreator {
|
|
|
81
188
|
});
|
|
82
189
|
}
|
|
83
190
|
/**
|
|
84
|
-
* Creates a replace query.
|
|
191
|
+
* Creates a "replace into" query.
|
|
192
|
+
*
|
|
193
|
+
* This is only supported by some dialects like MySQL or SQLite.
|
|
194
|
+
*
|
|
195
|
+
* Similar to MySQL's {@link InsertQueryBuilder.onDuplicateKeyUpdate} that deletes
|
|
196
|
+
* and inserts values on collision instead of updating existing rows.
|
|
85
197
|
*
|
|
86
|
-
*
|
|
87
|
-
* that deletes and inserts values on collision instead of updating existing rows.
|
|
198
|
+
* An alias of SQLite's {@link InsertQueryBuilder.orReplace}.
|
|
88
199
|
*
|
|
89
200
|
* The return value of this query is an instance of {@link InsertResult}. {@link InsertResult}
|
|
90
201
|
* has the {@link InsertResult.insertId | insertId} field that holds the auto incremented id of
|
|
@@ -101,10 +212,16 @@ export class QueryCreator {
|
|
|
101
212
|
* first_name: 'Jennifer',
|
|
102
213
|
* last_name: 'Aniston'
|
|
103
214
|
* })
|
|
104
|
-
* .
|
|
215
|
+
* .executeTakeFirstOrThrow()
|
|
105
216
|
*
|
|
106
217
|
* console.log(result.insertId)
|
|
107
218
|
* ```
|
|
219
|
+
*
|
|
220
|
+
* The generated SQL (MySQL):
|
|
221
|
+
*
|
|
222
|
+
* ```sql
|
|
223
|
+
* replace into `person` (`first_name`, `last_name`) values (?, ?)
|
|
224
|
+
* ```
|
|
108
225
|
*/
|
|
109
226
|
replaceInto(table) {
|
|
110
227
|
return new InsertQueryBuilder({
|
|
@@ -113,20 +230,175 @@ export class QueryCreator {
|
|
|
113
230
|
queryNode: InsertQueryNode.create(parseTable(table), this.#props.withNode, true),
|
|
114
231
|
});
|
|
115
232
|
}
|
|
116
|
-
|
|
233
|
+
/**
|
|
234
|
+
* Creates a delete query.
|
|
235
|
+
*
|
|
236
|
+
* See the {@link DeleteQueryBuilder.where} method for examples on how to specify
|
|
237
|
+
* a where clause for the delete operation.
|
|
238
|
+
*
|
|
239
|
+
* The return value of the query is an instance of {@link DeleteResult}.
|
|
240
|
+
*
|
|
241
|
+
* ### Examples
|
|
242
|
+
*
|
|
243
|
+
* <!-- siteExample("delete", "Single row", 10) -->
|
|
244
|
+
*
|
|
245
|
+
* Delete a single row:
|
|
246
|
+
*
|
|
247
|
+
* ```ts
|
|
248
|
+
* const result = await db
|
|
249
|
+
* .deleteFrom('person')
|
|
250
|
+
* .where('person.id', '=', 1)
|
|
251
|
+
* .executeTakeFirst()
|
|
252
|
+
*
|
|
253
|
+
* console.log(result.numDeletedRows)
|
|
254
|
+
* ```
|
|
255
|
+
*
|
|
256
|
+
* The generated SQL (PostgreSQL):
|
|
257
|
+
*
|
|
258
|
+
* ```sql
|
|
259
|
+
* delete from "person" where "person"."id" = $1
|
|
260
|
+
* ```
|
|
261
|
+
*
|
|
262
|
+
* Some databases such as MySQL support deleting from multiple tables:
|
|
263
|
+
*
|
|
264
|
+
* ```ts
|
|
265
|
+
* const result = await db
|
|
266
|
+
* .deleteFrom(['person', 'pet'])
|
|
267
|
+
* .using('person')
|
|
268
|
+
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
269
|
+
* .where('person.id', '=', 1)
|
|
270
|
+
* .executeTakeFirst()
|
|
271
|
+
* ```
|
|
272
|
+
*
|
|
273
|
+
* The generated SQL (MySQL):
|
|
274
|
+
*
|
|
275
|
+
* ```sql
|
|
276
|
+
* delete from `person`, `pet`
|
|
277
|
+
* using `person`
|
|
278
|
+
* inner join `pet` on `pet`.`owner_id` = `person`.`id`
|
|
279
|
+
* where `person`.`id` = ?
|
|
280
|
+
* ```
|
|
281
|
+
*/
|
|
282
|
+
deleteFrom(from) {
|
|
117
283
|
return new DeleteQueryBuilder({
|
|
118
284
|
queryId: createQueryId(),
|
|
119
285
|
executor: this.#props.executor,
|
|
120
|
-
queryNode: DeleteQueryNode.create(parseTableExpressionOrList(
|
|
286
|
+
queryNode: DeleteQueryNode.create(parseTableExpressionOrList(from), this.#props.withNode),
|
|
121
287
|
});
|
|
122
288
|
}
|
|
123
|
-
|
|
289
|
+
/**
|
|
290
|
+
* Creates an update query.
|
|
291
|
+
*
|
|
292
|
+
* See the {@link UpdateQueryBuilder.where} method for examples on how to specify
|
|
293
|
+
* a where clause for the update operation.
|
|
294
|
+
*
|
|
295
|
+
* See the {@link UpdateQueryBuilder.set} method for examples on how to
|
|
296
|
+
* specify the updates.
|
|
297
|
+
*
|
|
298
|
+
* The return value of the query is an {@link UpdateResult}.
|
|
299
|
+
*
|
|
300
|
+
* ### Examples
|
|
301
|
+
*
|
|
302
|
+
* ```ts
|
|
303
|
+
* const result = await db
|
|
304
|
+
* .updateTable('person')
|
|
305
|
+
* .set({ first_name: 'Jennifer' })
|
|
306
|
+
* .where('person.id', '=', 1)
|
|
307
|
+
* .executeTakeFirst()
|
|
308
|
+
*
|
|
309
|
+
* console.log(result.numUpdatedRows)
|
|
310
|
+
* ```
|
|
311
|
+
*/
|
|
312
|
+
updateTable(tables) {
|
|
124
313
|
return new UpdateQueryBuilder({
|
|
125
314
|
queryId: createQueryId(),
|
|
126
315
|
executor: this.#props.executor,
|
|
127
|
-
queryNode: UpdateQueryNode.create(
|
|
316
|
+
queryNode: UpdateQueryNode.create(parseTableExpressionOrList(tables), this.#props.withNode),
|
|
128
317
|
});
|
|
129
318
|
}
|
|
319
|
+
/**
|
|
320
|
+
* Creates a merge query.
|
|
321
|
+
*
|
|
322
|
+
* The return value of the query is a {@link MergeResult}.
|
|
323
|
+
*
|
|
324
|
+
* See the {@link MergeQueryBuilder.using} method for examples on how to specify
|
|
325
|
+
* the other table.
|
|
326
|
+
*
|
|
327
|
+
* ### Examples
|
|
328
|
+
*
|
|
329
|
+
* <!-- siteExample("merge", "Source row existence", 10) -->
|
|
330
|
+
*
|
|
331
|
+
* Update a target column based on the existence of a source row:
|
|
332
|
+
*
|
|
333
|
+
* ```ts
|
|
334
|
+
* const result = await db
|
|
335
|
+
* .mergeInto('person as target')
|
|
336
|
+
* .using('pet as source', 'source.owner_id', 'target.id')
|
|
337
|
+
* .whenMatchedAnd('target.has_pets', '!=', 'Y')
|
|
338
|
+
* .thenUpdateSet({ has_pets: 'Y' })
|
|
339
|
+
* .whenNotMatchedBySourceAnd('target.has_pets', '=', 'Y')
|
|
340
|
+
* .thenUpdateSet({ has_pets: 'N' })
|
|
341
|
+
* .executeTakeFirstOrThrow()
|
|
342
|
+
*
|
|
343
|
+
* console.log(result.numChangedRows)
|
|
344
|
+
* ```
|
|
345
|
+
*
|
|
346
|
+
* The generated SQL (PostgreSQL):
|
|
347
|
+
*
|
|
348
|
+
* ```sql
|
|
349
|
+
* merge into "person"
|
|
350
|
+
* using "pet"
|
|
351
|
+
* on "pet"."owner_id" = "person"."id"
|
|
352
|
+
* when matched and "has_pets" != $1
|
|
353
|
+
* then update set "has_pets" = $2
|
|
354
|
+
* when not matched by source and "has_pets" = $3
|
|
355
|
+
* then update set "has_pets" = $4
|
|
356
|
+
* ```
|
|
357
|
+
*
|
|
358
|
+
* <!-- siteExample("merge", "Temporary changes table", 20) -->
|
|
359
|
+
*
|
|
360
|
+
* Merge new entries from a temporary changes table:
|
|
361
|
+
*
|
|
362
|
+
* ```ts
|
|
363
|
+
* const result = await db
|
|
364
|
+
* .mergeInto('wine as target')
|
|
365
|
+
* .using(
|
|
366
|
+
* 'wine_stock_change as source',
|
|
367
|
+
* 'source.wine_name',
|
|
368
|
+
* 'target.name',
|
|
369
|
+
* )
|
|
370
|
+
* .whenNotMatchedAnd('source.stock_delta', '>', 0)
|
|
371
|
+
* .thenInsertValues(({ ref }) => ({
|
|
372
|
+
* name: ref('source.wine_name'),
|
|
373
|
+
* stock: ref('source.stock_delta'),
|
|
374
|
+
* }))
|
|
375
|
+
* .whenMatchedAnd(
|
|
376
|
+
* (eb) => eb('target.stock', '+', eb.ref('source.stock_delta')),
|
|
377
|
+
* '>',
|
|
378
|
+
* 0,
|
|
379
|
+
* )
|
|
380
|
+
* .thenUpdateSet('stock', (eb) =>
|
|
381
|
+
* eb('target.stock', '+', eb.ref('source.stock_delta')),
|
|
382
|
+
* )
|
|
383
|
+
* .whenMatched()
|
|
384
|
+
* .thenDelete()
|
|
385
|
+
* .executeTakeFirstOrThrow()
|
|
386
|
+
* ```
|
|
387
|
+
*
|
|
388
|
+
* The generated SQL (PostgreSQL):
|
|
389
|
+
*
|
|
390
|
+
* ```sql
|
|
391
|
+
* merge into "wine" as "target"
|
|
392
|
+
* using "wine_stock_change" as "source"
|
|
393
|
+
* on "source"."wine_name" = "target"."name"
|
|
394
|
+
* when not matched and "source"."stock_delta" > $1
|
|
395
|
+
* then insert ("name", "stock") values ("source"."wine_name", "source"."stock_delta")
|
|
396
|
+
* when matched and "target"."stock" + "source"."stock_delta" > $2
|
|
397
|
+
* then update set "stock" = "target"."stock" + "source"."stock_delta"
|
|
398
|
+
* when matched
|
|
399
|
+
* then delete
|
|
400
|
+
* ```
|
|
401
|
+
*/
|
|
130
402
|
mergeInto(targetTable) {
|
|
131
403
|
return new MergeQueryBuilder({
|
|
132
404
|
queryId: createQueryId(),
|
|
@@ -5,6 +5,7 @@ import { RootOperationNode, QueryCompiler } from '../query-compiler/query-compil
|
|
|
5
5
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
6
6
|
import { QueryExecutorBase } from './query-executor-base.js';
|
|
7
7
|
import { DialectAdapter } from '../dialect/dialect-adapter.js';
|
|
8
|
+
import { QueryId } from '../util/query-id.js';
|
|
8
9
|
export declare class DefaultQueryExecutor extends QueryExecutorBase {
|
|
9
10
|
#private;
|
|
10
11
|
constructor(compiler: QueryCompiler, adapter: DialectAdapter, connectionProvider: ConnectionProvider, plugins?: KyselyPlugin[]);
|
|
@@ -17,7 +18,7 @@ export declare class DefaultQueryExecutor extends QueryExecutorBase {
|
|
|
17
18
|
* the output of {@link transformQuery} into this method but you can
|
|
18
19
|
* compile any query using this method.
|
|
19
20
|
*/
|
|
20
|
-
compileQuery(node: RootOperationNode): CompiledQuery;
|
|
21
|
+
compileQuery(node: RootOperationNode, queryId: QueryId): CompiledQuery;
|
|
21
22
|
/**
|
|
22
23
|
* Provides a connection for the callback and takes care of disposing
|
|
23
24
|
* the connection after the callback has been run.
|
|
@@ -13,8 +13,8 @@ export class DefaultQueryExecutor extends QueryExecutorBase {
|
|
|
13
13
|
get adapter() {
|
|
14
14
|
return this.#adapter;
|
|
15
15
|
}
|
|
16
|
-
compileQuery(node) {
|
|
17
|
-
return this.#compiler.compileQuery(node);
|
|
16
|
+
compileQuery(node, queryId) {
|
|
17
|
+
return this.#compiler.compileQuery(node, queryId);
|
|
18
18
|
}
|
|
19
19
|
provideConnection(consumer) {
|
|
20
20
|
return this.#connectionProvider.provideConnection(consumer);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="./query-executor-base.d.ts" />
|
|
2
2
|
import { freeze } from '../util/object-utils.js';
|
|
3
|
-
import {
|
|
3
|
+
import { provideControlledConnection } from '../util/provide-controlled-connection.js';
|
|
4
4
|
import { logOnce } from '../util/log-once.js';
|
|
5
5
|
const NO_PLUGINS = freeze([]);
|
|
6
6
|
export class QueryExecutorBase {
|
|
@@ -33,28 +33,21 @@ export class QueryExecutorBase {
|
|
|
33
33
|
async executeQuery(compiledQuery, queryId) {
|
|
34
34
|
return await this.provideConnection(async (connection) => {
|
|
35
35
|
const result = await connection.executeQuery(compiledQuery);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return
|
|
36
|
+
if ('numUpdatedOrDeletedRows' in result) {
|
|
37
|
+
logOnce('kysely:warning: outdated driver/plugin detected! `QueryResult.numUpdatedOrDeletedRows` has been replaced with `QueryResult.numAffectedRows`.');
|
|
38
|
+
}
|
|
39
|
+
return await this.#transformResult(result, queryId);
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
async *stream(compiledQuery, chunkSize, queryId) {
|
|
43
|
-
const
|
|
44
|
-
const connectionReleaseDefer = new Deferred();
|
|
45
|
-
this.provideConnection(async (connection) => {
|
|
46
|
-
connectionDefer.resolve(connection);
|
|
47
|
-
// Lets wait until we don't need connection before returning here (returning releases connection)
|
|
48
|
-
return await connectionReleaseDefer.promise;
|
|
49
|
-
}).catch((ex) => connectionDefer.reject(ex));
|
|
50
|
-
const connection = await connectionDefer.promise;
|
|
43
|
+
const { connection, release } = await provideControlledConnection(this);
|
|
51
44
|
try {
|
|
52
45
|
for await (const result of connection.streamQuery(compiledQuery, chunkSize)) {
|
|
53
46
|
yield await this.#transformResult(result, queryId);
|
|
54
47
|
}
|
|
55
48
|
}
|
|
56
49
|
finally {
|
|
57
|
-
|
|
50
|
+
release();
|
|
58
51
|
}
|
|
59
52
|
}
|
|
60
53
|
async #transformResult(result, queryId) {
|
|
@@ -64,14 +57,3 @@ export class QueryExecutorBase {
|
|
|
64
57
|
return result;
|
|
65
58
|
}
|
|
66
59
|
}
|
|
67
|
-
// TODO: remove.
|
|
68
|
-
function warnOfOutdatedDriverOrPlugins(result, transformedResult) {
|
|
69
|
-
const { numAffectedRows } = result;
|
|
70
|
-
if ((numAffectedRows === undefined &&
|
|
71
|
-
result.numUpdatedOrDeletedRows === undefined) ||
|
|
72
|
-
(numAffectedRows !== undefined &&
|
|
73
|
-
transformedResult.numAffectedRows !== undefined)) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
logOnce('kysely:warning: outdated driver/plugin detected! QueryResult.numUpdatedOrDeletedRows is deprecated and will be removed in a future release.');
|
|
77
|
-
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/// <reference types="./raw-builder.d.ts" />
|
|
2
2
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
3
|
-
import { preventAwait } from '../util/prevent-await.js';
|
|
4
3
|
import { freeze } from '../util/object-utils.js';
|
|
5
4
|
import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';
|
|
6
5
|
import { IdentifierNode } from '../operation-node/identifier-node.js';
|
|
@@ -61,7 +60,6 @@ class RawBuilderImpl {
|
|
|
61
60
|
export function createRawBuilder(props) {
|
|
62
61
|
return new RawBuilderImpl(props);
|
|
63
62
|
}
|
|
64
|
-
preventAwait(RawBuilderImpl, "don't await RawBuilder instances directly. To execute the query you need to call `execute`");
|
|
65
63
|
class AliasedRawBuilderImpl {
|
|
66
64
|
#rawBuilder;
|
|
67
65
|
#alias;
|
|
@@ -84,4 +82,3 @@ class AliasedRawBuilderImpl {
|
|
|
84
82
|
: IdentifierNode.create(this.#alias));
|
|
85
83
|
}
|
|
86
84
|
}
|
|
87
|
-
preventAwait(AliasedRawBuilderImpl, "don't await AliasedRawBuilder instances directly. AliasedRawBuilder should never be executed directly since it's always a part of another query.");
|
|
@@ -213,7 +213,7 @@ export interface Sql {
|
|
|
213
213
|
* select first_name from "public"."person"
|
|
214
214
|
* ```
|
|
215
215
|
*/
|
|
216
|
-
table(tableReference: string): RawBuilder<
|
|
216
|
+
table<T = unknown>(tableReference: string): RawBuilder<T>;
|
|
217
217
|
/**
|
|
218
218
|
* This can be used to add arbitrary identifiers to SQL snippets.
|
|
219
219
|
*
|
|
@@ -255,7 +255,7 @@ export interface Sql {
|
|
|
255
255
|
* select "public"."person"."first_name" from "public"."person"
|
|
256
256
|
* ```
|
|
257
257
|
*/
|
|
258
|
-
id(...ids: readonly string[]): RawBuilder<
|
|
258
|
+
id<T = unknown>(...ids: readonly string[]): RawBuilder<T>;
|
|
259
259
|
/**
|
|
260
260
|
* This can be used to add literal values to SQL snippets.
|
|
261
261
|
*
|
|
@@ -361,6 +361,6 @@ export interface Sql {
|
|
|
361
361
|
* BEFORE $1::varchar, (1 == 1)::varchar, (select * from "person")::varchar, false::varchar, "first_name" AFTER
|
|
362
362
|
* ```
|
|
363
363
|
*/
|
|
364
|
-
join(array: readonly unknown[], separator?: RawBuilder<any>): RawBuilder<
|
|
364
|
+
join<T = unknown>(array: readonly unknown[], separator?: RawBuilder<any>): RawBuilder<T>;
|
|
365
365
|
}
|
|
366
366
|
export declare const sql: Sql;
|
|
@@ -60,7 +60,7 @@ export const sql = Object.assign((sqlFragments, ...parameters) => {
|
|
|
60
60
|
});
|
|
61
61
|
},
|
|
62
62
|
join(array, separator = sql `, `) {
|
|
63
|
-
const nodes = new Array(2 * array.length - 1);
|
|
63
|
+
const nodes = new Array(Math.max(2 * array.length - 1, 0));
|
|
64
64
|
const sep = separator.toOperationNode();
|
|
65
65
|
for (let i = 0; i < array.length; ++i) {
|
|
66
66
|
nodes[2 * i] = parseParameter(array[i]);
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
import { AlterColumnNode } from '../operation-node/alter-column-node.js';
|
|
3
3
|
import { parseDataTypeExpression, } from '../parser/data-type-parser.js';
|
|
4
4
|
import { parseDefaultValueExpression, } from '../parser/default-value-parser.js';
|
|
5
|
-
import { preventAwait } from '../util/prevent-await.js';
|
|
6
5
|
export class AlterColumnBuilder {
|
|
7
6
|
#column;
|
|
8
7
|
constructor(column) {
|
|
@@ -31,7 +30,6 @@ export class AlterColumnBuilder {
|
|
|
31
30
|
return func(this);
|
|
32
31
|
}
|
|
33
32
|
}
|
|
34
|
-
preventAwait(AlterColumnBuilder, "don't await AlterColumnBuilder instances");
|
|
35
33
|
/**
|
|
36
34
|
* Allows us to force consumers to do exactly one alteration to a column.
|
|
37
35
|
*
|
|
@@ -70,4 +68,3 @@ export class AlteredColumnBuilder {
|
|
|
70
68
|
return this.#alterColumnNode;
|
|
71
69
|
}
|
|
72
70
|
}
|
|
73
|
-
preventAwait(AlteredColumnBuilder, "don't await AlteredColumnBuilder instances");
|
|
@@ -11,6 +11,10 @@ export declare class AlterTableAddForeignKeyConstraintBuilder implements Foreign
|
|
|
11
11
|
constructor(props: AlterTableAddForeignKeyConstraintBuilderProps);
|
|
12
12
|
onDelete(onDelete: OnModifyForeignAction): AlterTableAddForeignKeyConstraintBuilder;
|
|
13
13
|
onUpdate(onUpdate: OnModifyForeignAction): AlterTableAddForeignKeyConstraintBuilder;
|
|
14
|
+
deferrable(): AlterTableAddForeignKeyConstraintBuilder;
|
|
15
|
+
notDeferrable(): AlterTableAddForeignKeyConstraintBuilder;
|
|
16
|
+
initiallyDeferred(): AlterTableAddForeignKeyConstraintBuilder;
|
|
17
|
+
initiallyImmediate(): AlterTableAddForeignKeyConstraintBuilder;
|
|
14
18
|
/**
|
|
15
19
|
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
16
20
|
* what the provided function returns.
|