kysely 0.27.5 → 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/CODE_OF_CONDUCT.md +183 -0
- package/FUNDING.md +25 -0
- package/README.md +182 -3
- 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-introspector.js +66 -44
- 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 +9 -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 +16 -1
- package/dist/cjs/migration/migrator.js +14 -4
- 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/insert-values-parser.js +3 -1
- 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/camel-case/camel-case.js +4 -1
- 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 +8 -3
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +45 -14
- 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 +4 -4
- 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-introspector.js +66 -44
- 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 +9 -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 +16 -1
- package/dist/esm/migration/migrator.js +14 -4
- 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/insert-values-parser.js +3 -1
- 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/camel-case/camel-case.js +4 -1
- 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 +8 -3
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +45 -14
- 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 +4 -4
- 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 -70
- 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
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HandleEmptyInListsTransformer = void 0;
|
|
4
|
+
const operation_node_transformer_js_1 = require("../../operation-node/operation-node-transformer.js");
|
|
5
|
+
const primitive_value_list_node_js_1 = require("../../operation-node/primitive-value-list-node.js");
|
|
6
|
+
const operator_node_js_1 = require("../../operation-node/operator-node.js");
|
|
7
|
+
const value_list_node_js_1 = require("../../operation-node/value-list-node.js");
|
|
8
|
+
class HandleEmptyInListsTransformer extends operation_node_transformer_js_1.OperationNodeTransformer {
|
|
9
|
+
#strategy;
|
|
10
|
+
constructor(strategy) {
|
|
11
|
+
super();
|
|
12
|
+
this.#strategy = strategy;
|
|
13
|
+
}
|
|
14
|
+
transformBinaryOperation(node) {
|
|
15
|
+
if (this.#isEmptyInListNode(node)) {
|
|
16
|
+
return this.#strategy(node);
|
|
17
|
+
}
|
|
18
|
+
return node;
|
|
19
|
+
}
|
|
20
|
+
#isEmptyInListNode(node) {
|
|
21
|
+
const { operator, rightOperand } = node;
|
|
22
|
+
return ((primitive_value_list_node_js_1.PrimitiveValueListNode.is(rightOperand) ||
|
|
23
|
+
value_list_node_js_1.ValueListNode.is(rightOperand)) &&
|
|
24
|
+
rightOperand.values.length === 0 &&
|
|
25
|
+
operator_node_js_1.OperatorNode.is(operator) &&
|
|
26
|
+
(operator.operator === 'in' || operator.operator === 'not in'));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.HandleEmptyInListsTransformer = HandleEmptyInListsTransformer;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { BinaryOperationNode } from '../../operation-node/binary-operation-node.js';
|
|
2
|
+
import { OperatorNode } from '../../operation-node/operator-node.js';
|
|
3
|
+
import { PrimitiveValueListNode } from '../../operation-node/primitive-value-list-node.js';
|
|
4
|
+
import { ValueListNode } from '../../operation-node/value-list-node.js';
|
|
5
|
+
export interface HandleEmptyInListsOptions {
|
|
6
|
+
/**
|
|
7
|
+
* The strategy to use when handling `in ()` and `not in ()`.
|
|
8
|
+
*
|
|
9
|
+
* See {@link HandleEmptyInListsPlugin} for examples.
|
|
10
|
+
*/
|
|
11
|
+
strategy: EmptyInListsStrategy;
|
|
12
|
+
}
|
|
13
|
+
export type EmptyInListNode = BinaryOperationNode & {
|
|
14
|
+
operator: OperatorNode & {
|
|
15
|
+
operator: 'in' | 'not in';
|
|
16
|
+
};
|
|
17
|
+
rightOperand: (ValueListNode | PrimitiveValueListNode) & {
|
|
18
|
+
values: Readonly<[]>;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export type EmptyInListsStrategy = (node: EmptyInListNode) => BinaryOperationNode;
|
|
22
|
+
/**
|
|
23
|
+
* Replaces the `in`/`not in` expression with a noncontingent expression (always true or always
|
|
24
|
+
* false) depending on the original operator.
|
|
25
|
+
*
|
|
26
|
+
* This is how Knex.js, PrismaORM, Laravel, and SQLAlchemy handle `in ()` and `not in ()`.
|
|
27
|
+
*
|
|
28
|
+
* See {@link pushValueIntoList} for an alternative strategy.
|
|
29
|
+
*/
|
|
30
|
+
export declare function replaceWithNoncontingentExpression(node: EmptyInListNode): BinaryOperationNode;
|
|
31
|
+
/**
|
|
32
|
+
* When `in`, pushes a `null` value into the list resulting in `in (null)`. This
|
|
33
|
+
* is how TypeORM and Sequelize handle `in ()`. `in (null)` is logically the equivalent
|
|
34
|
+
* of `= null`, which returns `null`, which is a falsy expression in most SQL databases.
|
|
35
|
+
* We recommend NOT using this strategy if you plan to use `in` in `select`, `returning`,
|
|
36
|
+
* or `output` clauses, as the return type differs from the `SqlBool` default type.
|
|
37
|
+
*
|
|
38
|
+
* When `not in`, casts the left operand as `char` and pushes a literal value into
|
|
39
|
+
* the list resulting in `cast({{lhs}} as char) not in ({{VALUE}})`. Casting
|
|
40
|
+
* is required to avoid database errors with non-string columns.
|
|
41
|
+
*
|
|
42
|
+
* See {@link replaceWithNoncontingentExpression} for an alternative strategy.
|
|
43
|
+
*/
|
|
44
|
+
export declare function pushValueIntoList(uniqueNotInLiteral: '__kysely_no_values_were_provided__' | (string & {})): EmptyInListsStrategy;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.replaceWithNoncontingentExpression = replaceWithNoncontingentExpression;
|
|
4
|
+
exports.pushValueIntoList = pushValueIntoList;
|
|
5
|
+
const binary_operation_node_js_1 = require("../../operation-node/binary-operation-node.js");
|
|
6
|
+
const cast_node_js_1 = require("../../operation-node/cast-node.js");
|
|
7
|
+
const data_type_node_js_1 = require("../../operation-node/data-type-node.js");
|
|
8
|
+
const operator_node_js_1 = require("../../operation-node/operator-node.js");
|
|
9
|
+
const value_list_node_js_1 = require("../../operation-node/value-list-node.js");
|
|
10
|
+
const value_node_js_1 = require("../../operation-node/value-node.js");
|
|
11
|
+
const object_utils_js_1 = require("../../util/object-utils.js");
|
|
12
|
+
let contradiction;
|
|
13
|
+
let eq;
|
|
14
|
+
let one;
|
|
15
|
+
let tautology;
|
|
16
|
+
/**
|
|
17
|
+
* Replaces the `in`/`not in` expression with a noncontingent expression (always true or always
|
|
18
|
+
* false) depending on the original operator.
|
|
19
|
+
*
|
|
20
|
+
* This is how Knex.js, PrismaORM, Laravel, and SQLAlchemy handle `in ()` and `not in ()`.
|
|
21
|
+
*
|
|
22
|
+
* See {@link pushValueIntoList} for an alternative strategy.
|
|
23
|
+
*/
|
|
24
|
+
function replaceWithNoncontingentExpression(node) {
|
|
25
|
+
const _one = (one ||= value_node_js_1.ValueNode.createImmediate(1));
|
|
26
|
+
const _eq = (eq ||= operator_node_js_1.OperatorNode.create('='));
|
|
27
|
+
if (node.operator.operator === 'in') {
|
|
28
|
+
return (contradiction ||= binary_operation_node_js_1.BinaryOperationNode.create(_one, _eq, value_node_js_1.ValueNode.createImmediate(0)));
|
|
29
|
+
}
|
|
30
|
+
return (tautology ||= binary_operation_node_js_1.BinaryOperationNode.create(_one, _eq, _one));
|
|
31
|
+
}
|
|
32
|
+
let char;
|
|
33
|
+
let listNull;
|
|
34
|
+
let listVal;
|
|
35
|
+
/**
|
|
36
|
+
* When `in`, pushes a `null` value into the list resulting in `in (null)`. This
|
|
37
|
+
* is how TypeORM and Sequelize handle `in ()`. `in (null)` is logically the equivalent
|
|
38
|
+
* of `= null`, which returns `null`, which is a falsy expression in most SQL databases.
|
|
39
|
+
* We recommend NOT using this strategy if you plan to use `in` in `select`, `returning`,
|
|
40
|
+
* or `output` clauses, as the return type differs from the `SqlBool` default type.
|
|
41
|
+
*
|
|
42
|
+
* When `not in`, casts the left operand as `char` and pushes a literal value into
|
|
43
|
+
* the list resulting in `cast({{lhs}} as char) not in ({{VALUE}})`. Casting
|
|
44
|
+
* is required to avoid database errors with non-string columns.
|
|
45
|
+
*
|
|
46
|
+
* See {@link replaceWithNoncontingentExpression} for an alternative strategy.
|
|
47
|
+
*/
|
|
48
|
+
function pushValueIntoList(uniqueNotInLiteral) {
|
|
49
|
+
return function pushValueIntoList(node) {
|
|
50
|
+
if (node.operator.operator === 'in') {
|
|
51
|
+
return (0, object_utils_js_1.freeze)({
|
|
52
|
+
...node,
|
|
53
|
+
rightOperand: (listNull ||= value_list_node_js_1.ValueListNode.create([
|
|
54
|
+
value_node_js_1.ValueNode.createImmediate(null),
|
|
55
|
+
])),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return (0, object_utils_js_1.freeze)({
|
|
59
|
+
...node,
|
|
60
|
+
leftOperand: cast_node_js_1.CastNode.create(node.leftOperand, (char ||= data_type_node_js_1.DataTypeNode.create('char'))),
|
|
61
|
+
rightOperand: (listVal ||= value_list_node_js_1.ValueListNode.create([
|
|
62
|
+
value_node_js_1.ValueNode.createImmediate(uniqueNotInLiteral),
|
|
63
|
+
])),
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
}
|
|
@@ -13,7 +13,7 @@ const immediate_value_transformer_js_1 = require("./immediate-value-transformer.
|
|
|
13
13
|
class ImmediateValuePlugin {
|
|
14
14
|
#transformer = new immediate_value_transformer_js_1.ImmediateValueTransformer();
|
|
15
15
|
transformQuery(args) {
|
|
16
|
-
return this.#transformer.transformNode(args.node);
|
|
16
|
+
return this.#transformer.transformNode(args.node, args.queryId);
|
|
17
17
|
}
|
|
18
18
|
transformResult(args) {
|
|
19
19
|
return Promise.resolve(args.result);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
2
|
+
import { PrimitiveValueListNode } from '../../operation-node/primitive-value-list-node.js';
|
|
2
3
|
import { ValueNode } from '../../operation-node/value-node.js';
|
|
3
4
|
/**
|
|
4
5
|
* Transforms all ValueNodes to immediate.
|
|
@@ -9,5 +10,6 @@ import { ValueNode } from '../../operation-node/value-node.js';
|
|
|
9
10
|
* @internal
|
|
10
11
|
*/
|
|
11
12
|
export declare class ImmediateValueTransformer extends OperationNodeTransformer {
|
|
13
|
+
transformPrimitiveValueList(node: PrimitiveValueListNode): PrimitiveValueListNode;
|
|
12
14
|
transformValue(node: ValueNode): ValueNode;
|
|
13
15
|
}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ImmediateValueTransformer = void 0;
|
|
4
4
|
const operation_node_transformer_js_1 = require("../../operation-node/operation-node-transformer.js");
|
|
5
|
+
const value_list_node_js_1 = require("../../operation-node/value-list-node.js");
|
|
6
|
+
const value_node_js_1 = require("../../operation-node/value-node.js");
|
|
5
7
|
/**
|
|
6
8
|
* Transforms all ValueNodes to immediate.
|
|
7
9
|
*
|
|
@@ -11,11 +13,11 @@ const operation_node_transformer_js_1 = require("../../operation-node/operation-
|
|
|
11
13
|
* @internal
|
|
12
14
|
*/
|
|
13
15
|
class ImmediateValueTransformer extends operation_node_transformer_js_1.OperationNodeTransformer {
|
|
16
|
+
transformPrimitiveValueList(node) {
|
|
17
|
+
return value_list_node_js_1.ValueListNode.create(node.values.map(value_node_js_1.ValueNode.createImmediate));
|
|
18
|
+
}
|
|
14
19
|
transformValue(node) {
|
|
15
|
-
return
|
|
16
|
-
...super.transformValue(node),
|
|
17
|
-
immediate: true,
|
|
18
|
-
};
|
|
20
|
+
return value_node_js_1.ValueNode.createImmediate(node.value);
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
23
|
exports.ImmediateValueTransformer = ImmediateValueTransformer;
|
|
@@ -8,7 +8,7 @@ class WithSchemaPlugin {
|
|
|
8
8
|
this.#transformer = new with_schema_transformer_js_1.WithSchemaTransformer(schema);
|
|
9
9
|
}
|
|
10
10
|
transformQuery(args) {
|
|
11
|
-
return this.#transformer.transformNode(args.node);
|
|
11
|
+
return this.#transformer.transformNode(args.node, args.queryId);
|
|
12
12
|
}
|
|
13
13
|
async transformResult(args) {
|
|
14
14
|
return args.result;
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
+
import { AggregateFunctionNode } from '../../operation-node/aggregate-function-node.js';
|
|
2
|
+
import { FunctionNode } from '../../operation-node/function-node.js';
|
|
1
3
|
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
2
4
|
import { OperationNode } from '../../operation-node/operation-node.js';
|
|
3
5
|
import { ReferencesNode } from '../../operation-node/references-node.js';
|
|
4
6
|
import { SchemableIdentifierNode } from '../../operation-node/schemable-identifier-node.js';
|
|
7
|
+
import { QueryId } from '../../util/query-id.js';
|
|
5
8
|
export declare class WithSchemaTransformer extends OperationNodeTransformer {
|
|
6
9
|
#private;
|
|
7
10
|
constructor(schema: string);
|
|
8
|
-
protected transformNodeImpl<T extends OperationNode>(node: T): T;
|
|
9
|
-
protected transformSchemableIdentifier(node: SchemableIdentifierNode): SchemableIdentifierNode;
|
|
10
|
-
protected transformReferences(node: ReferencesNode): ReferencesNode;
|
|
11
|
+
protected transformNodeImpl<T extends OperationNode>(node: T, queryId: QueryId): T;
|
|
12
|
+
protected transformSchemableIdentifier(node: SchemableIdentifierNode, queryId: QueryId): SchemableIdentifierNode;
|
|
13
|
+
protected transformReferences(node: ReferencesNode, queryId: QueryId): ReferencesNode;
|
|
14
|
+
protected transformAggregateFunction(node: AggregateFunctionNode, queryId: QueryId): AggregateFunctionNode;
|
|
15
|
+
protected transformFunction(node: FunctionNode, queryId: QueryId): FunctionNode;
|
|
11
16
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.WithSchemaTransformer = void 0;
|
|
4
4
|
const alias_node_js_1 = require("../../operation-node/alias-node.js");
|
|
5
5
|
const identifier_node_js_1 = require("../../operation-node/identifier-node.js");
|
|
6
|
+
const list_node_js_1 = require("../../operation-node/list-node.js");
|
|
6
7
|
const operation_node_transformer_js_1 = require("../../operation-node/operation-node-transformer.js");
|
|
7
8
|
const schemable_identifier_node_js_1 = require("../../operation-node/schemable-identifier-node.js");
|
|
8
9
|
const table_node_js_1 = require("../../operation-node/table-node.js");
|
|
@@ -19,6 +20,7 @@ const ROOT_OPERATION_NODES = (0, object_utils_js_1.freeze)({
|
|
|
19
20
|
CreateTableNode: true,
|
|
20
21
|
CreateTypeNode: true,
|
|
21
22
|
CreateViewNode: true,
|
|
23
|
+
RefreshMaterializedViewNode: true,
|
|
22
24
|
DeleteQueryNode: true,
|
|
23
25
|
DropIndexNode: true,
|
|
24
26
|
DropSchemaNode: true,
|
|
@@ -31,6 +33,10 @@ const ROOT_OPERATION_NODES = (0, object_utils_js_1.freeze)({
|
|
|
31
33
|
UpdateQueryNode: true,
|
|
32
34
|
MergeQueryNode: true,
|
|
33
35
|
});
|
|
36
|
+
const SCHEMALESS_FUNCTIONS = {
|
|
37
|
+
json_agg: true,
|
|
38
|
+
to_json: true,
|
|
39
|
+
};
|
|
34
40
|
class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNodeTransformer {
|
|
35
41
|
#schema;
|
|
36
42
|
#schemableIds = new Set();
|
|
@@ -39,9 +45,9 @@ class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNod
|
|
|
39
45
|
super();
|
|
40
46
|
this.#schema = schema;
|
|
41
47
|
}
|
|
42
|
-
transformNodeImpl(node) {
|
|
48
|
+
transformNodeImpl(node, queryId) {
|
|
43
49
|
if (!this.#isRootOperationNode(node)) {
|
|
44
|
-
return super.transformNodeImpl(node);
|
|
50
|
+
return super.transformNodeImpl(node, queryId);
|
|
45
51
|
}
|
|
46
52
|
const ctes = this.#collectCTEs(node);
|
|
47
53
|
for (const cte of ctes) {
|
|
@@ -51,7 +57,7 @@ class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNod
|
|
|
51
57
|
for (const table of tables) {
|
|
52
58
|
this.#schemableIds.add(table);
|
|
53
59
|
}
|
|
54
|
-
const transformed = super.transformNodeImpl(node);
|
|
60
|
+
const transformed = super.transformNodeImpl(node, queryId);
|
|
55
61
|
for (const table of tables) {
|
|
56
62
|
this.#schemableIds.delete(table);
|
|
57
63
|
}
|
|
@@ -60,8 +66,8 @@ class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNod
|
|
|
60
66
|
}
|
|
61
67
|
return transformed;
|
|
62
68
|
}
|
|
63
|
-
transformSchemableIdentifier(node) {
|
|
64
|
-
const transformed = super.transformSchemableIdentifier(node);
|
|
69
|
+
transformSchemableIdentifier(node, queryId) {
|
|
70
|
+
const transformed = super.transformSchemableIdentifier(node, queryId);
|
|
65
71
|
if (transformed.schema || !this.#schemableIds.has(node.identifier.name)) {
|
|
66
72
|
return transformed;
|
|
67
73
|
}
|
|
@@ -70,8 +76,8 @@ class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNod
|
|
|
70
76
|
schema: identifier_node_js_1.IdentifierNode.create(this.#schema),
|
|
71
77
|
};
|
|
72
78
|
}
|
|
73
|
-
transformReferences(node) {
|
|
74
|
-
const transformed = super.transformReferences(node);
|
|
79
|
+
transformReferences(node, queryId) {
|
|
80
|
+
const transformed = super.transformReferences(node, queryId);
|
|
75
81
|
if (transformed.table.table.schema) {
|
|
76
82
|
return transformed;
|
|
77
83
|
}
|
|
@@ -80,6 +86,28 @@ class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNod
|
|
|
80
86
|
table: table_node_js_1.TableNode.createWithSchema(this.#schema, transformed.table.table.identifier.name),
|
|
81
87
|
};
|
|
82
88
|
}
|
|
89
|
+
transformAggregateFunction(node, queryId) {
|
|
90
|
+
return {
|
|
91
|
+
...super.transformAggregateFunction({ ...node, aggregated: [] }, queryId),
|
|
92
|
+
aggregated: this.#transformTableArgsWithoutSchemas(node, queryId, 'aggregated'),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
transformFunction(node, queryId) {
|
|
96
|
+
return {
|
|
97
|
+
...super.transformFunction({ ...node, arguments: [] }, queryId),
|
|
98
|
+
arguments: this.#transformTableArgsWithoutSchemas(node, queryId, 'arguments'),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
#transformTableArgsWithoutSchemas(node, queryId, argsKey) {
|
|
102
|
+
return SCHEMALESS_FUNCTIONS[node.func]
|
|
103
|
+
? node[argsKey].map((arg) => !table_node_js_1.TableNode.is(arg) || arg.table.schema
|
|
104
|
+
? this.transformNode(arg, queryId)
|
|
105
|
+
: {
|
|
106
|
+
...arg,
|
|
107
|
+
table: this.transformIdentifier(arg.table.identifier, queryId),
|
|
108
|
+
})
|
|
109
|
+
: this.transformNodeList(node[argsKey], queryId);
|
|
110
|
+
}
|
|
83
111
|
#isRootOperationNode(node) {
|
|
84
112
|
return node.kind in ROOT_OPERATION_NODES;
|
|
85
113
|
}
|
|
@@ -117,13 +145,16 @@ class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNod
|
|
|
117
145
|
return ctes;
|
|
118
146
|
}
|
|
119
147
|
#collectSchemableIdsFromTableExpr(node, schemableIds) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
148
|
+
if (table_node_js_1.TableNode.is(node)) {
|
|
149
|
+
this.#collectSchemableId(node.table, schemableIds);
|
|
150
|
+
}
|
|
151
|
+
else if (alias_node_js_1.AliasNode.is(node) && table_node_js_1.TableNode.is(node.node)) {
|
|
152
|
+
this.#collectSchemableId(node.node.table, schemableIds);
|
|
153
|
+
}
|
|
154
|
+
else if (list_node_js_1.ListNode.is(node)) {
|
|
155
|
+
for (const table of node.items) {
|
|
156
|
+
this.#collectSchemableIdsFromTableExpr(table, schemableIds);
|
|
157
|
+
}
|
|
127
158
|
}
|
|
128
159
|
}
|
|
129
160
|
#collectSchemableId(node, schemableIds) {
|
|
@@ -2,13 +2,13 @@ import { AggregateFunctionNode } from '../operation-node/aggregate-function-node
|
|
|
2
2
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
3
3
|
import { OverBuilder } from './over-builder.js';
|
|
4
4
|
import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js';
|
|
5
|
-
import { ReferenceExpression
|
|
5
|
+
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
6
6
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
7
7
|
import { SqlBool } from '../util/type-utils.js';
|
|
8
8
|
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown> implements AliasableExpression<O> {
|
|
9
|
+
import { DirectedOrderByStringReference, OrderByExpression, OrderByModifiers } from '../parser/order-by-parser.js';
|
|
10
|
+
import { OrderByInterface } from './order-by-interface.js';
|
|
11
|
+
export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown> implements OrderByInterface<DB, TB, {}>, AliasableExpression<O> {
|
|
12
12
|
#private;
|
|
13
13
|
constructor(props: AggregateFunctionBuilderProps);
|
|
14
14
|
/** @private */
|
|
@@ -108,7 +108,85 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
|
|
|
108
108
|
* inner join "pet" ON "pet"."owner_id" = "person"."id"
|
|
109
109
|
* ```
|
|
110
110
|
*/
|
|
111
|
-
orderBy<OE extends
|
|
111
|
+
orderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers?: OrderByModifiers): AggregateFunctionBuilder<DB, TB, O>;
|
|
112
|
+
/**
|
|
113
|
+
* @deprecated It does ~2-2.6x more compile-time instantiations compared to multiple chained `orderBy(expr, modifiers?)` calls (in `order by` clauses with reasonable item counts), and has broken autocompletion.
|
|
114
|
+
*/
|
|
115
|
+
orderBy<OE extends OrderByExpression<DB, TB, {}> | DirectedOrderByStringReference<DB, TB, {}>>(exprs: ReadonlyArray<OE>): AggregateFunctionBuilder<DB, TB, O>;
|
|
116
|
+
/**
|
|
117
|
+
* @deprecated It does ~2.9x more compile-time instantiations compared to a `orderBy(expr, direction)` call.
|
|
118
|
+
*/
|
|
119
|
+
orderBy<OE extends DirectedOrderByStringReference<DB, TB, {}>>(expr: OE): AggregateFunctionBuilder<DB, TB, O>;
|
|
120
|
+
/**
|
|
121
|
+
* @deprecated Use `orderBy(expr, (ob) => ...)` instead.
|
|
122
|
+
*/
|
|
123
|
+
orderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers: Expression<any>): AggregateFunctionBuilder<DB, TB, O>;
|
|
124
|
+
/**
|
|
125
|
+
* Clears the `order by` clause from the query.
|
|
126
|
+
*
|
|
127
|
+
* See {@link orderBy} for adding an `order by` clause or item to a query.
|
|
128
|
+
*
|
|
129
|
+
* ### Examples
|
|
130
|
+
*
|
|
131
|
+
* ```ts
|
|
132
|
+
* const query = db
|
|
133
|
+
* .selectFrom('person')
|
|
134
|
+
* .selectAll()
|
|
135
|
+
* .orderBy('id', 'desc')
|
|
136
|
+
*
|
|
137
|
+
* const results = await query
|
|
138
|
+
* .clearOrderBy()
|
|
139
|
+
* .execute()
|
|
140
|
+
* ```
|
|
141
|
+
*
|
|
142
|
+
* The generated SQL (PostgreSQL):
|
|
143
|
+
*
|
|
144
|
+
* ```sql
|
|
145
|
+
* select * from "person"
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
clearOrderBy(): AggregateFunctionBuilder<DB, TB, O>;
|
|
149
|
+
/**
|
|
150
|
+
* Adds a `withing group` clause with a nested `order by` clause after the function.
|
|
151
|
+
*
|
|
152
|
+
* This is only supported by some dialects like PostgreSQL or MS SQL Server.
|
|
153
|
+
*
|
|
154
|
+
* ### Examples
|
|
155
|
+
*
|
|
156
|
+
* Most frequent person name:
|
|
157
|
+
*
|
|
158
|
+
* ```ts
|
|
159
|
+
* const result = await db
|
|
160
|
+
* .selectFrom('person')
|
|
161
|
+
* .select((eb) => [
|
|
162
|
+
* eb.fn
|
|
163
|
+
* .agg<string>('mode')
|
|
164
|
+
* .withinGroupOrderBy('person.first_name')
|
|
165
|
+
* .as('most_frequent_name')
|
|
166
|
+
* ])
|
|
167
|
+
* .executeTakeFirstOrThrow()
|
|
168
|
+
* ```
|
|
169
|
+
*
|
|
170
|
+
* The generated SQL (PostgreSQL):
|
|
171
|
+
*
|
|
172
|
+
* ```sql
|
|
173
|
+
* select mode() within group (order by "person"."first_name") as "most_frequent_name"
|
|
174
|
+
* from "person"
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
withinGroupOrderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers?: OrderByModifiers): AggregateFunctionBuilder<DB, TB, O>;
|
|
178
|
+
/**
|
|
179
|
+
* @deprecated It does ~2-2.6x more compile-time instantiations compared to multiple chained `withinGroupOrderBy(expr, modifiers?)` calls (in `order by` clauses with reasonable item counts), and has broken autocompletion.
|
|
180
|
+
*/
|
|
181
|
+
withinGroupOrderBy<OE extends OrderByExpression<DB, TB, {}> | DirectedOrderByStringReference<DB, TB, {}>>(exprs: ReadonlyArray<OE>): AggregateFunctionBuilder<DB, TB, O>;
|
|
182
|
+
/**
|
|
183
|
+
* @deprecated It does ~2.9x more compile-time instantiations compared to a `withinGroupOrderBy(expr, direction)` call.
|
|
184
|
+
*/
|
|
185
|
+
withinGroupOrderBy<OE extends DirectedOrderByStringReference<DB, TB, {}>>(expr: OE): AggregateFunctionBuilder<DB, TB, O>;
|
|
186
|
+
/**
|
|
187
|
+
* @deprecated Use `withinGroupOrderBy(expr, (ob) => ...)` instead.
|
|
188
|
+
*/
|
|
189
|
+
withinGroupOrderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers: Expression<any>): AggregateFunctionBuilder<DB, TB, O>;
|
|
112
190
|
/**
|
|
113
191
|
* Adds a `filter` clause with a nested `where` clause after the function.
|
|
114
192
|
*
|
|
@@ -5,10 +5,10 @@ const object_utils_js_1 = require("../util/object-utils.js");
|
|
|
5
5
|
const aggregate_function_node_js_1 = require("../operation-node/aggregate-function-node.js");
|
|
6
6
|
const alias_node_js_1 = require("../operation-node/alias-node.js");
|
|
7
7
|
const identifier_node_js_1 = require("../operation-node/identifier-node.js");
|
|
8
|
-
const prevent_await_js_1 = require("../util/prevent-await.js");
|
|
9
8
|
const parse_utils_js_1 = require("../parser/parse-utils.js");
|
|
10
9
|
const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
|
|
11
10
|
const order_by_parser_js_1 = require("../parser/order-by-parser.js");
|
|
11
|
+
const query_node_js_1 = require("../operation-node/query-node.js");
|
|
12
12
|
class AggregateFunctionBuilder {
|
|
13
13
|
#props;
|
|
14
14
|
constructor(props) {
|
|
@@ -73,33 +73,22 @@ class AggregateFunctionBuilder {
|
|
|
73
73
|
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithDistinct(this.#props.aggregateFunctionNode),
|
|
74
74
|
});
|
|
75
75
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
* ```
|
|
90
|
-
*
|
|
91
|
-
* The generated SQL (PostgreSQL):
|
|
92
|
-
*
|
|
93
|
-
* ```sql
|
|
94
|
-
* select json_agg("pet" order by "pet"."name") as "person_pets"
|
|
95
|
-
* from "person"
|
|
96
|
-
* inner join "pet" ON "pet"."owner_id" = "person"."id"
|
|
97
|
-
* ```
|
|
98
|
-
*/
|
|
99
|
-
orderBy(orderBy, direction) {
|
|
76
|
+
orderBy(...args) {
|
|
77
|
+
return new AggregateFunctionBuilder({
|
|
78
|
+
...this.#props,
|
|
79
|
+
aggregateFunctionNode: query_node_js_1.QueryNode.cloneWithOrderByItems(this.#props.aggregateFunctionNode, (0, order_by_parser_js_1.parseOrderBy)(args)),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
clearOrderBy() {
|
|
83
|
+
return new AggregateFunctionBuilder({
|
|
84
|
+
...this.#props,
|
|
85
|
+
aggregateFunctionNode: query_node_js_1.QueryNode.cloneWithoutOrderBy(this.#props.aggregateFunctionNode),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
withinGroupOrderBy(...args) {
|
|
100
89
|
return new AggregateFunctionBuilder({
|
|
101
90
|
...this.#props,
|
|
102
|
-
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithOrderBy(this.#props.aggregateFunctionNode, (0, order_by_parser_js_1.parseOrderBy)(
|
|
91
|
+
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithOrderBy(this.#props.aggregateFunctionNode, (0, order_by_parser_js_1.parseOrderBy)(args), true),
|
|
103
92
|
});
|
|
104
93
|
}
|
|
105
94
|
filterWhere(...args) {
|
|
@@ -228,7 +217,6 @@ class AggregateFunctionBuilder {
|
|
|
228
217
|
}
|
|
229
218
|
}
|
|
230
219
|
exports.AggregateFunctionBuilder = AggregateFunctionBuilder;
|
|
231
|
-
(0, prevent_await_js_1.preventAwait)(AggregateFunctionBuilder, "don't await AggregateFunctionBuilder instances. They are never executed directly and are always just a part of a query.");
|
|
232
220
|
/**
|
|
233
221
|
* {@link AggregateFunctionBuilder} with an alias. The result of calling {@link AggregateFunctionBuilder.as}.
|
|
234
222
|
*/
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CTEBuilder = void 0;
|
|
4
4
|
const common_table_expression_node_js_1 = require("../operation-node/common-table-expression-node.js");
|
|
5
|
-
const prevent_await_js_1 = require("../util/prevent-await.js");
|
|
6
5
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
7
6
|
class CTEBuilder {
|
|
8
7
|
#props;
|
|
@@ -36,4 +35,3 @@ class CTEBuilder {
|
|
|
36
35
|
}
|
|
37
36
|
}
|
|
38
37
|
exports.CTEBuilder = CTEBuilder;
|
|
39
|
-
(0, prevent_await_js_1.preventAwait)(CTEBuilder, "don't await CTEBuilder instances. They are never executed directly and are always just a part of a query.");
|