kysely 0.21.6 → 0.23.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/CONTRIBUTING.md +70 -0
- package/README.md +27 -4
- package/dist/cjs/dialect/database-introspector.d.ts +4 -0
- package/dist/cjs/dialect/mysql/mysql-driver.js +6 -3
- package/dist/cjs/dialect/postgres/postgres-adapter.js +1 -1
- package/dist/cjs/dialect/postgres/postgres-driver.js +7 -2
- package/dist/cjs/dialect/postgres/postgres-introspector.js +8 -0
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +4 -3
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/cjs/driver/database-connection.d.ts +6 -2
- package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +2 -3
- package/dist/cjs/dynamic/dynamic-reference-builder.js +1 -1
- package/dist/cjs/expression/expression.d.ts +100 -0
- package/dist/cjs/expression/expression.js +16 -0
- package/dist/cjs/index.d.ts +17 -8
- package/dist/cjs/index.js +15 -4
- package/dist/cjs/kysely.d.ts +3 -3
- package/dist/cjs/kysely.js +3 -3
- package/dist/cjs/migration/file-migration-provider.js +11 -4
- package/dist/cjs/operation-node/aggregate-function-node.d.ts +25 -0
- package/dist/cjs/operation-node/aggregate-function-node.js +48 -0
- package/dist/cjs/operation-node/alias-node.d.ts +3 -10
- package/dist/cjs/operation-node/alter-column-node.d.ts +1 -2
- package/dist/cjs/operation-node/alter-table-node.d.ts +5 -7
- package/dist/cjs/operation-node/alter-table-node.js +9 -1
- package/dist/cjs/operation-node/and-node.d.ts +3 -4
- package/dist/cjs/operation-node/binary-operation-node.d.ts +14 -0
- package/dist/cjs/operation-node/binary-operation-node.js +20 -0
- package/dist/cjs/operation-node/check-constraint-node.d.ts +2 -3
- package/dist/cjs/operation-node/column-definition-node.d.ts +6 -5
- package/dist/cjs/operation-node/column-definition-node.js +16 -0
- package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
- package/dist/cjs/operation-node/common-table-expression-node.d.ts +2 -4
- package/dist/cjs/operation-node/create-index-node.d.ts +1 -3
- package/dist/cjs/operation-node/create-table-node.d.ts +4 -5
- package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/create-type-node.js +1 -2
- package/dist/cjs/operation-node/default-value-node.d.ts +2 -4
- package/dist/cjs/operation-node/delete-query-node.d.ts +1 -2
- package/dist/cjs/operation-node/drop-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/drop-type-node.js +1 -2
- package/dist/cjs/operation-node/explain-node.d.ts +2 -4
- package/dist/cjs/operation-node/explain-node.js +1 -1
- package/dist/cjs/operation-node/from-node.d.ts +3 -4
- package/dist/cjs/operation-node/generated-node.d.ts +2 -3
- package/dist/cjs/operation-node/group-by-item-node.d.ts +2 -3
- package/dist/cjs/operation-node/group-by-node.d.ts +1 -1
- package/dist/cjs/operation-node/group-by-node.js +3 -3
- package/dist/cjs/operation-node/having-node.d.ts +3 -4
- package/dist/cjs/operation-node/having-node.js +4 -4
- package/dist/cjs/operation-node/insert-query-node.d.ts +1 -4
- package/dist/cjs/operation-node/join-node.d.ts +5 -9
- package/dist/cjs/operation-node/join-node.js +6 -6
- package/dist/cjs/operation-node/on-conflict-node.d.ts +5 -7
- package/dist/cjs/operation-node/on-conflict-node.js +12 -12
- package/dist/cjs/operation-node/on-node.d.ts +3 -4
- package/dist/cjs/operation-node/on-node.js +4 -4
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +14 -4
- package/dist/cjs/operation-node/operation-node-transformer.js +60 -20
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +14 -4
- package/dist/cjs/operation-node/operation-node-visitor.js +7 -2
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.d.ts +5 -3
- package/dist/cjs/operation-node/operator-node.js +3 -5
- package/dist/cjs/operation-node/or-node.d.ts +3 -4
- package/dist/cjs/operation-node/order-by-item-node.d.ts +3 -5
- package/dist/cjs/operation-node/over-node.d.ts +19 -0
- package/dist/cjs/operation-node/over-node.js +35 -0
- package/dist/cjs/operation-node/parens-node.d.ts +2 -3
- package/dist/cjs/operation-node/partition-by-item-node.d.ts +13 -0
- package/dist/cjs/operation-node/{filter-node.js → partition-by-item-node.js} +6 -8
- package/dist/cjs/operation-node/partition-by-node.d.ts +14 -0
- package/dist/cjs/operation-node/partition-by-node.js +24 -0
- package/dist/cjs/operation-node/query-node.d.ts +2 -3
- package/dist/cjs/operation-node/query-node.js +6 -6
- package/dist/cjs/operation-node/select-modifier-node.d.ts +2 -3
- package/dist/cjs/operation-node/select-modifier-node.js +1 -1
- package/dist/cjs/operation-node/select-query-node.d.ts +8 -9
- package/dist/cjs/operation-node/select-query-node.js +14 -14
- package/dist/cjs/operation-node/selection-node.d.ts +2 -3
- package/dist/cjs/operation-node/set-operation-node.d.ts +15 -0
- package/dist/cjs/operation-node/{union-node.js → set-operation-node.js} +7 -6
- package/dist/cjs/operation-node/simple-reference-expression-node.d.ts +3 -0
- package/dist/cjs/operation-node/{operation-node-utils.js → simple-reference-expression-node.js} +0 -0
- package/dist/cjs/operation-node/unary-operation-node.d.ts +13 -0
- package/dist/cjs/operation-node/unary-operation-node.js +19 -0
- package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
- package/dist/cjs/operation-node/value-list-node.d.ts +2 -8
- package/dist/cjs/operation-node/where-node.d.ts +3 -4
- package/dist/cjs/operation-node/where-node.js +4 -4
- package/dist/cjs/parser/binary-operation-parser.d.ts +20 -0
- package/dist/cjs/parser/binary-operation-parser.js +99 -0
- package/dist/cjs/parser/coalesce-parser.d.ts +4 -0
- package/dist/cjs/parser/coalesce-parser.js +11 -0
- package/dist/cjs/parser/data-type-parser.d.ts +5 -5
- package/dist/cjs/parser/default-value-parser.d.ts +4 -5
- package/dist/cjs/parser/default-value-parser.js +2 -2
- package/dist/cjs/parser/expression-parser.d.ts +10 -0
- package/dist/cjs/parser/{complex-expression-parser.js → expression-parser.js} +9 -8
- package/dist/cjs/parser/group-by-parser.d.ts +1 -1
- package/dist/cjs/parser/group-by-parser.js +2 -2
- package/dist/cjs/parser/identifier-parser.d.ts +2 -0
- package/dist/cjs/parser/identifier-parser.js +23 -0
- package/dist/cjs/parser/insert-values-parser.d.ts +1 -1
- package/dist/cjs/parser/insert-values-parser.js +2 -2
- package/dist/cjs/parser/join-parser.js +2 -2
- package/dist/cjs/parser/order-by-parser.d.ts +2 -2
- package/dist/cjs/parser/parse-utils.d.ts +2 -0
- package/dist/cjs/parser/parse-utils.js +9 -1
- package/dist/cjs/parser/partition-by-parser.d.ts +6 -0
- package/dist/cjs/parser/partition-by-parser.js +9 -0
- package/dist/cjs/parser/reference-parser.d.ts +14 -13
- package/dist/cjs/parser/reference-parser.js +12 -9
- package/dist/cjs/parser/select-parser.d.ts +6 -6
- package/dist/cjs/parser/select-parser.js +2 -2
- package/dist/cjs/parser/set-operation-parser.d.ts +3 -0
- package/dist/cjs/parser/set-operation-parser.js +8 -0
- package/dist/cjs/parser/table-parser.d.ts +11 -12
- package/dist/cjs/parser/table-parser.js +2 -2
- package/dist/cjs/parser/unary-operation-parser.d.ts +5 -0
- package/dist/cjs/parser/unary-operation-parser.js +17 -0
- package/dist/cjs/parser/update-set-parser.d.ts +1 -1
- package/dist/cjs/parser/value-parser.d.ts +5 -8
- package/dist/cjs/parser/value-parser.js +4 -4
- package/dist/cjs/parser/with-parser.d.ts +3 -4
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +348 -0
- package/dist/cjs/query-builder/aggregate-function-builder.js +298 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +20 -20
- package/dist/cjs/query-builder/delete-query-builder.js +19 -16
- package/dist/cjs/query-builder/expression-builder.d.ts +3 -3
- package/dist/cjs/query-builder/expression-builder.js +3 -3
- package/dist/cjs/query-builder/function-module.d.ts +241 -0
- package/dist/cjs/query-builder/function-module.js +214 -0
- package/dist/cjs/query-builder/having-interface.d.ts +9 -8
- package/dist/cjs/query-builder/insert-query-builder.d.ts +7 -6
- package/dist/cjs/query-builder/insert-query-builder.js +11 -9
- package/dist/cjs/query-builder/insert-result.d.ts +8 -1
- package/dist/cjs/query-builder/insert-result.js +12 -1
- package/dist/cjs/query-builder/join-builder.d.ts +9 -8
- package/dist/cjs/query-builder/join-builder.js +10 -9
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +25 -24
- package/dist/cjs/query-builder/on-conflict-builder.js +18 -17
- package/dist/cjs/query-builder/over-builder.d.ts +59 -0
- package/dist/cjs/query-builder/over-builder.js +50 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +138 -47
- package/dist/cjs/query-builder/select-query-builder.js +122 -40
- package/dist/cjs/query-builder/update-query-builder.d.ts +20 -20
- package/dist/cjs/query-builder/update-query-builder.js +19 -16
- package/dist/cjs/query-builder/where-interface.d.ts +12 -11
- package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +15 -5
- package/dist/cjs/query-compiler/default-query-compiler.js +78 -47
- package/dist/cjs/query-executor/query-executor-base.js +16 -1
- package/dist/cjs/raw-builder/raw-builder.d.ts +49 -13
- package/dist/cjs/raw-builder/raw-builder.js +24 -14
- package/dist/cjs/raw-builder/sql.d.ts +15 -7
- package/dist/cjs/raw-builder/sql.js +6 -0
- package/dist/cjs/schema/alter-column-builder.d.ts +28 -0
- package/dist/cjs/schema/alter-column-builder.js +55 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +39 -341
- package/dist/cjs/schema/alter-table-builder.js +65 -280
- package/dist/cjs/schema/column-definition-builder.d.ts +43 -155
- package/dist/cjs/schema/column-definition-builder.js +189 -0
- package/dist/cjs/schema/create-index-builder.d.ts +2 -2
- package/dist/cjs/schema/create-table-builder.d.ts +38 -5
- package/dist/cjs/schema/create-table-builder.js +36 -1
- package/dist/cjs/schema/create-view-builder.d.ts +3 -2
- package/dist/cjs/schema/schema.d.ts +2 -2
- package/dist/cjs/schema/schema.js +6 -5
- package/dist/cjs/util/compilable.d.ts +2 -2
- package/dist/cjs/util/explainable.d.ts +2 -2
- package/dist/cjs/util/infer-result.d.ts +46 -0
- package/dist/cjs/util/infer-result.js +2 -0
- package/dist/cjs/util/log-once.d.ts +5 -0
- package/dist/cjs/util/log-once.js +16 -0
- package/dist/cjs/util/object-utils.d.ts +1 -0
- package/dist/cjs/util/object-utils.js +5 -1
- package/dist/cjs/util/type-utils.d.ts +3 -13
- package/dist/esm/dialect/database-introspector.d.ts +4 -0
- package/dist/esm/dialect/mysql/mysql-driver.js +6 -3
- package/dist/esm/dialect/postgres/postgres-adapter.js +1 -1
- package/dist/esm/dialect/postgres/postgres-driver.js +7 -2
- package/dist/esm/dialect/postgres/postgres-introspector.js +8 -0
- package/dist/esm/dialect/sqlite/sqlite-driver.js +4 -3
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/esm/driver/database-connection.d.ts +6 -2
- package/dist/esm/dynamic/dynamic-reference-builder.d.ts +2 -3
- package/dist/esm/dynamic/dynamic-reference-builder.js +2 -2
- package/dist/esm/expression/expression.d.ts +100 -0
- package/dist/esm/expression/expression.js +12 -0
- package/dist/esm/index.d.ts +17 -8
- package/dist/esm/index.js +13 -4
- package/dist/esm/kysely.d.ts +3 -3
- package/dist/esm/kysely.js +3 -3
- package/dist/esm/migration/file-migration-provider.js +11 -4
- package/dist/esm/operation-node/aggregate-function-node.d.ts +25 -0
- package/dist/esm/operation-node/aggregate-function-node.js +46 -0
- package/dist/esm/operation-node/alias-node.d.ts +3 -10
- package/dist/esm/operation-node/alter-column-node.d.ts +1 -2
- package/dist/esm/operation-node/alter-table-node.d.ts +5 -7
- package/dist/esm/operation-node/alter-table-node.js +9 -1
- package/dist/esm/operation-node/and-node.d.ts +3 -4
- package/dist/esm/operation-node/binary-operation-node.d.ts +14 -0
- package/dist/esm/operation-node/binary-operation-node.js +18 -0
- package/dist/esm/operation-node/check-constraint-node.d.ts +2 -3
- package/dist/esm/operation-node/column-definition-node.d.ts +6 -5
- package/dist/esm/operation-node/column-definition-node.js +16 -0
- package/dist/esm/operation-node/column-update-node.d.ts +2 -3
- package/dist/esm/operation-node/common-table-expression-node.d.ts +2 -4
- package/dist/esm/operation-node/create-index-node.d.ts +1 -3
- package/dist/esm/operation-node/create-table-node.d.ts +4 -5
- package/dist/esm/operation-node/create-type-node.d.ts +1 -1
- package/dist/esm/operation-node/create-type-node.js +1 -2
- package/dist/esm/operation-node/default-value-node.d.ts +2 -4
- package/dist/esm/operation-node/delete-query-node.d.ts +1 -2
- package/dist/esm/operation-node/drop-type-node.d.ts +1 -1
- package/dist/esm/operation-node/drop-type-node.js +1 -2
- package/dist/esm/operation-node/explain-node.d.ts +2 -4
- package/dist/esm/operation-node/explain-node.js +1 -1
- package/dist/esm/operation-node/from-node.d.ts +3 -4
- package/dist/esm/operation-node/generated-node.d.ts +2 -3
- package/dist/esm/operation-node/group-by-item-node.d.ts +2 -3
- package/dist/esm/operation-node/group-by-node.d.ts +1 -1
- package/dist/esm/operation-node/group-by-node.js +3 -3
- package/dist/esm/operation-node/having-node.d.ts +3 -4
- package/dist/esm/operation-node/having-node.js +4 -4
- package/dist/esm/operation-node/insert-query-node.d.ts +1 -4
- package/dist/esm/operation-node/join-node.d.ts +5 -9
- package/dist/esm/operation-node/join-node.js +6 -6
- package/dist/esm/operation-node/on-conflict-node.d.ts +5 -7
- package/dist/esm/operation-node/on-conflict-node.js +12 -12
- package/dist/esm/operation-node/on-node.d.ts +3 -4
- package/dist/esm/operation-node/on-node.js +4 -4
- package/dist/esm/operation-node/operation-node-transformer.d.ts +14 -4
- package/dist/esm/operation-node/operation-node-transformer.js +60 -20
- package/dist/esm/operation-node/operation-node-visitor.d.ts +14 -4
- package/dist/esm/operation-node/operation-node-visitor.js +7 -2
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.d.ts +5 -3
- package/dist/esm/operation-node/operator-node.js +2 -4
- package/dist/esm/operation-node/or-node.d.ts +3 -4
- package/dist/esm/operation-node/order-by-item-node.d.ts +3 -5
- package/dist/esm/operation-node/over-node.d.ts +19 -0
- package/dist/esm/operation-node/over-node.js +33 -0
- package/dist/esm/operation-node/parens-node.d.ts +2 -3
- package/dist/esm/operation-node/partition-by-item-node.d.ts +13 -0
- package/dist/esm/operation-node/partition-by-item-node.js +16 -0
- package/dist/esm/operation-node/partition-by-node.d.ts +14 -0
- package/dist/esm/operation-node/partition-by-node.js +22 -0
- package/dist/esm/operation-node/query-node.d.ts +2 -3
- package/dist/esm/operation-node/query-node.js +6 -6
- package/dist/esm/operation-node/select-modifier-node.d.ts +2 -3
- package/dist/esm/operation-node/select-modifier-node.js +1 -1
- package/dist/esm/operation-node/select-query-node.d.ts +8 -9
- package/dist/esm/operation-node/select-query-node.js +14 -14
- package/dist/esm/operation-node/selection-node.d.ts +2 -3
- package/dist/esm/operation-node/set-operation-node.d.ts +15 -0
- package/dist/esm/operation-node/set-operation-node.js +18 -0
- package/dist/esm/operation-node/simple-reference-expression-node.d.ts +3 -0
- package/dist/esm/operation-node/simple-reference-expression-node.js +2 -0
- package/dist/esm/operation-node/unary-operation-node.d.ts +13 -0
- package/dist/esm/operation-node/unary-operation-node.js +17 -0
- package/dist/esm/operation-node/update-query-node.d.ts +3 -4
- package/dist/esm/operation-node/value-list-node.d.ts +2 -8
- package/dist/esm/operation-node/where-node.d.ts +3 -4
- package/dist/esm/operation-node/where-node.js +4 -4
- package/dist/esm/parser/binary-operation-parser.d.ts +20 -0
- package/dist/esm/parser/binary-operation-parser.js +92 -0
- package/dist/esm/parser/coalesce-parser.d.ts +4 -0
- package/dist/esm/parser/coalesce-parser.js +8 -0
- package/dist/esm/parser/data-type-parser.d.ts +5 -5
- package/dist/esm/parser/default-value-parser.d.ts +4 -5
- package/dist/esm/parser/default-value-parser.js +2 -2
- package/dist/esm/parser/expression-parser.d.ts +10 -0
- package/dist/esm/parser/{complex-expression-parser.js → expression-parser.js} +6 -5
- package/dist/esm/parser/group-by-parser.d.ts +1 -1
- package/dist/esm/parser/group-by-parser.js +2 -2
- package/dist/esm/parser/identifier-parser.d.ts +2 -0
- package/dist/esm/parser/identifier-parser.js +20 -0
- package/dist/esm/parser/insert-values-parser.d.ts +1 -1
- package/dist/esm/parser/insert-values-parser.js +2 -2
- package/dist/esm/parser/join-parser.js +2 -2
- package/dist/esm/parser/order-by-parser.d.ts +2 -2
- package/dist/esm/parser/parse-utils.d.ts +2 -0
- package/dist/esm/parser/parse-utils.js +7 -0
- package/dist/esm/parser/partition-by-parser.d.ts +6 -0
- package/dist/esm/parser/partition-by-parser.js +6 -0
- package/dist/esm/parser/reference-parser.d.ts +14 -13
- package/dist/esm/parser/reference-parser.js +10 -8
- package/dist/esm/parser/select-parser.d.ts +6 -6
- package/dist/esm/parser/select-parser.js +2 -2
- package/dist/esm/parser/set-operation-parser.d.ts +3 -0
- package/dist/esm/parser/set-operation-parser.js +5 -0
- package/dist/esm/parser/table-parser.d.ts +11 -12
- package/dist/esm/parser/table-parser.js +2 -2
- package/dist/esm/parser/unary-operation-parser.d.ts +5 -0
- package/dist/esm/parser/unary-operation-parser.js +13 -0
- package/dist/esm/parser/update-set-parser.d.ts +1 -1
- package/dist/esm/parser/value-parser.d.ts +5 -8
- package/dist/esm/parser/value-parser.js +4 -4
- package/dist/esm/parser/with-parser.d.ts +3 -4
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +2 -2
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +348 -0
- package/dist/esm/query-builder/aggregate-function-builder.js +294 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +20 -20
- package/dist/esm/query-builder/delete-query-builder.js +19 -16
- package/dist/esm/query-builder/expression-builder.d.ts +3 -3
- package/dist/esm/query-builder/expression-builder.js +3 -3
- package/dist/esm/query-builder/function-module.d.ts +241 -0
- package/dist/esm/query-builder/function-module.js +211 -0
- package/dist/esm/query-builder/having-interface.d.ts +9 -8
- package/dist/esm/query-builder/insert-query-builder.d.ts +7 -6
- package/dist/esm/query-builder/insert-query-builder.js +11 -9
- package/dist/esm/query-builder/insert-result.d.ts +8 -1
- package/dist/esm/query-builder/insert-result.js +12 -1
- package/dist/esm/query-builder/join-builder.d.ts +9 -8
- package/dist/esm/query-builder/join-builder.js +10 -9
- package/dist/esm/query-builder/on-conflict-builder.d.ts +25 -24
- package/dist/esm/query-builder/on-conflict-builder.js +18 -17
- package/dist/esm/query-builder/over-builder.d.ts +59 -0
- package/dist/esm/query-builder/over-builder.js +47 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +138 -47
- package/dist/esm/query-builder/select-query-builder.js +120 -38
- package/dist/esm/query-builder/update-query-builder.d.ts +20 -20
- package/dist/esm/query-builder/update-query-builder.js +19 -16
- package/dist/esm/query-builder/where-interface.d.ts +12 -11
- package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
- package/dist/esm/query-compiler/default-query-compiler.d.ts +15 -5
- package/dist/esm/query-compiler/default-query-compiler.js +79 -48
- package/dist/esm/query-executor/query-executor-base.js +16 -1
- package/dist/esm/raw-builder/raw-builder.d.ts +49 -13
- package/dist/esm/raw-builder/raw-builder.js +23 -14
- package/dist/esm/raw-builder/sql.d.ts +15 -7
- package/dist/esm/raw-builder/sql.js +6 -0
- package/dist/esm/schema/alter-column-builder.d.ts +28 -0
- package/dist/esm/schema/alter-column-builder.js +51 -0
- package/dist/esm/schema/alter-table-builder.d.ts +39 -341
- package/dist/esm/schema/alter-table-builder.js +61 -274
- package/dist/esm/schema/column-definition-builder.d.ts +43 -155
- package/dist/esm/schema/column-definition-builder.js +189 -0
- package/dist/esm/schema/create-index-builder.d.ts +2 -2
- package/dist/esm/schema/create-table-builder.d.ts +38 -5
- package/dist/esm/schema/create-table-builder.js +36 -1
- package/dist/esm/schema/create-view-builder.d.ts +3 -2
- package/dist/esm/schema/schema.d.ts +2 -2
- package/dist/esm/schema/schema.js +6 -5
- package/dist/esm/util/compilable.d.ts +2 -2
- package/dist/esm/util/explainable.d.ts +2 -2
- package/dist/esm/util/infer-result.d.ts +46 -0
- package/dist/esm/util/infer-result.js +2 -0
- package/dist/esm/util/log-once.d.ts +5 -0
- package/dist/esm/util/log-once.js +13 -0
- package/dist/esm/util/object-utils.d.ts +1 -0
- package/dist/esm/util/object-utils.js +3 -0
- package/dist/esm/util/type-utils.d.ts +3 -13
- package/package.json +4 -1
- package/dist/cjs/operation-node/filter-node.d.ts +0 -18
- package/dist/cjs/operation-node/operation-node-utils.d.ts +0 -17
- package/dist/cjs/operation-node/union-node.d.ts +0 -16
- package/dist/cjs/parser/complex-expression-parser.d.ts +0 -10
- package/dist/cjs/parser/filter-parser.d.ts +0 -24
- package/dist/cjs/parser/filter-parser.js +0 -109
- package/dist/cjs/parser/union-parser.d.ts +0 -5
- package/dist/cjs/parser/union-parser.js +0 -8
- package/dist/cjs/query-builder/function-builder.d.ts +0 -133
- package/dist/cjs/query-builder/function-builder.js +0 -160
- package/dist/esm/operation-node/filter-node.d.ts +0 -18
- package/dist/esm/operation-node/filter-node.js +0 -18
- package/dist/esm/operation-node/operation-node-utils.d.ts +0 -17
- package/dist/esm/operation-node/operation-node-utils.js +0 -2
- package/dist/esm/operation-node/union-node.d.ts +0 -16
- package/dist/esm/operation-node/union-node.js +0 -17
- package/dist/esm/parser/complex-expression-parser.d.ts +0 -10
- package/dist/esm/parser/filter-parser.d.ts +0 -24
- package/dist/esm/parser/filter-parser.js +0 -100
- package/dist/esm/parser/union-parser.d.ts +0 -5
- package/dist/esm/parser/union-parser.js +0 -5
- package/dist/esm/query-builder/function-builder.d.ts +0 -133
- package/dist/esm/query-builder/function-builder.js +0 -157
|
@@ -9,7 +9,6 @@ import { DataTypeNode } from '../operation-node/data-type-node.js';
|
|
|
9
9
|
import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
|
|
10
10
|
import { DropIndexNode } from '../operation-node/drop-index-node.js';
|
|
11
11
|
import { DropTableNode } from '../operation-node/drop-table-node.js';
|
|
12
|
-
import { FilterNode } from '../operation-node/filter-node.js';
|
|
13
12
|
import { FromNode } from '../operation-node/from-node.js';
|
|
14
13
|
import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
|
|
15
14
|
import { GroupByNode } from '../operation-node/group-by-node.js';
|
|
@@ -60,7 +59,6 @@ import { ColumnDefinitionNode } from '../operation-node/column-definition-node.j
|
|
|
60
59
|
import { ModifyColumnNode } from '../operation-node/modify-column-node.js';
|
|
61
60
|
import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
|
|
62
61
|
import { ColumnNode } from '../operation-node/column-node.js';
|
|
63
|
-
import { UnionNode } from '../operation-node/union-node.js';
|
|
64
62
|
import { CreateViewNode } from '../operation-node/create-view-node.js';
|
|
65
63
|
import { DropViewNode } from '../operation-node/drop-view-node.js';
|
|
66
64
|
import { GeneratedNode } from '../operation-node/generated-node.js';
|
|
@@ -74,6 +72,13 @@ import { DropTypeNode } from '../operation-node/drop-type-node.js';
|
|
|
74
72
|
import { ExplainNode } from '../operation-node/explain-node.js';
|
|
75
73
|
import { SchemableIdentifierNode } from '../operation-node/schemable-identifier-node.js';
|
|
76
74
|
import { DefaultInsertValueNode } from '../operation-node/default-insert-value-node.js';
|
|
75
|
+
import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
|
|
76
|
+
import { OverNode } from '../operation-node/over-node.js';
|
|
77
|
+
import { PartitionByNode } from '../operation-node/partition-by-node.js';
|
|
78
|
+
import { PartitionByItemNode } from '../operation-node/partition-by-item-node.js';
|
|
79
|
+
import { SetOperationNode } from '../operation-node/set-operation-node.js';
|
|
80
|
+
import { BinaryOperationNode } from '../operation-node/binary-operation-node.js';
|
|
81
|
+
import { UnaryOperationNode } from '../operation-node/unary-operation-node.js';
|
|
77
82
|
export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
|
|
78
83
|
#private;
|
|
79
84
|
protected get numParameters(): number;
|
|
@@ -83,7 +88,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
83
88
|
protected visitFrom(node: FromNode): void;
|
|
84
89
|
protected visitSelection(node: SelectionNode): void;
|
|
85
90
|
protected visitColumn(node: ColumnNode): void;
|
|
86
|
-
protected compileDistinctOn(
|
|
91
|
+
protected compileDistinctOn(expressions: ReadonlyArray<OperationNode>): void;
|
|
87
92
|
protected compileList(nodes: ReadonlyArray<OperationNode>, separator?: string): void;
|
|
88
93
|
protected visitWhere(node: WhereNode): void;
|
|
89
94
|
protected visitHaving(node: HavingNode): void;
|
|
@@ -96,7 +101,6 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
96
101
|
protected visitSelectAll(_: SelectAllNode): void;
|
|
97
102
|
protected visitIdentifier(node: IdentifierNode): void;
|
|
98
103
|
protected compileUnwrappedIdentifier(node: IdentifierNode): void;
|
|
99
|
-
protected visitFilter(node: FilterNode): void;
|
|
100
104
|
protected visitAnd(node: AndNode): void;
|
|
101
105
|
protected visitOr(node: OrNode): void;
|
|
102
106
|
protected visitValue(node: ValueNode): void;
|
|
@@ -145,7 +149,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
145
149
|
protected visitModifyColumn(node: ModifyColumnNode): void;
|
|
146
150
|
protected visitAddConstraint(node: AddConstraintNode): void;
|
|
147
151
|
protected visitDropConstraint(node: DropConstraintNode): void;
|
|
148
|
-
protected
|
|
152
|
+
protected visitSetOperation(node: SetOperationNode): void;
|
|
149
153
|
protected visitCreateView(node: CreateViewNode): void;
|
|
150
154
|
protected visitDropView(node: DropViewNode): void;
|
|
151
155
|
protected visitGenerated(node: GeneratedNode): void;
|
|
@@ -155,6 +159,12 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
155
159
|
protected visitDropType(node: DropTypeNode): void;
|
|
156
160
|
protected visitExplain(node: ExplainNode): void;
|
|
157
161
|
protected visitDefaultInsertValue(_: DefaultInsertValueNode): void;
|
|
162
|
+
protected visitAggregateFunction(node: AggregateFunctionNode): void;
|
|
163
|
+
protected visitOver(node: OverNode): void;
|
|
164
|
+
protected visitPartitionBy(node: PartitionByNode): void;
|
|
165
|
+
protected visitPartitionByItem(node: PartitionByItemNode): void;
|
|
166
|
+
protected visitBinaryOperation(node: BinaryOperationNode): void;
|
|
167
|
+
protected visitUnaryOperation(node: UnaryOperationNode): void;
|
|
158
168
|
protected append(str: string): void;
|
|
159
169
|
protected appendValue(parameter: unknown): void;
|
|
160
170
|
protected getLeftIdentifierWrapper(): string;
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
import { InsertQueryNode } from '../operation-node/insert-query-node.js';
|
|
3
3
|
import { OperationNodeVisitor } from '../operation-node/operation-node-visitor.js';
|
|
4
4
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
5
|
-
import {
|
|
6
|
-
import { getLast, freeze, isString, isNumber, isBoolean, isNull, isDate, isBigInt, } from '../util/object-utils.js';
|
|
7
|
-
import { UnionNode } from '../operation-node/union-node.js';
|
|
5
|
+
import { freeze, isString, isNumber, isBoolean, isNull, isDate, isBigInt, } from '../util/object-utils.js';
|
|
8
6
|
import { CreateViewNode } from '../operation-node/create-view-node.js';
|
|
7
|
+
import { SetOperationNode } from '../operation-node/set-operation-node.js';
|
|
9
8
|
export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
10
9
|
#sql = '';
|
|
11
10
|
#parameters = [];
|
|
@@ -29,7 +28,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
29
28
|
const wrapInParens = this.parentNode !== undefined &&
|
|
30
29
|
!InsertQueryNode.is(this.parentNode) &&
|
|
31
30
|
!CreateViewNode.is(this.parentNode) &&
|
|
32
|
-
!
|
|
31
|
+
!SetOperationNode.is(this.parentNode);
|
|
33
32
|
if (this.parentNode === undefined && node.explain) {
|
|
34
33
|
this.visitNode(node.explain);
|
|
35
34
|
this.append(' ');
|
|
@@ -42,8 +41,8 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
42
41
|
this.append(' ');
|
|
43
42
|
}
|
|
44
43
|
this.append('select ');
|
|
45
|
-
if (node.
|
|
46
|
-
this.compileDistinctOn(node.
|
|
44
|
+
if (node.distinctOn) {
|
|
45
|
+
this.compileDistinctOn(node.distinctOn);
|
|
47
46
|
this.append(' ');
|
|
48
47
|
}
|
|
49
48
|
if (node.frontModifiers && node.frontModifiers.length > 0) {
|
|
@@ -71,9 +70,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
71
70
|
this.append(' ');
|
|
72
71
|
this.visitNode(node.having);
|
|
73
72
|
}
|
|
74
|
-
if (node.
|
|
73
|
+
if (node.setOperations) {
|
|
75
74
|
this.append(' ');
|
|
76
|
-
this.compileList(node.
|
|
75
|
+
this.compileList(node.setOperations, ' ');
|
|
77
76
|
}
|
|
78
77
|
if (node.orderBy) {
|
|
79
78
|
this.append(' ');
|
|
@@ -105,16 +104,16 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
105
104
|
visitColumn(node) {
|
|
106
105
|
this.visitNode(node.column);
|
|
107
106
|
}
|
|
108
|
-
compileDistinctOn(
|
|
107
|
+
compileDistinctOn(expressions) {
|
|
109
108
|
this.append('distinct on (');
|
|
110
|
-
this.compileList(
|
|
109
|
+
this.compileList(expressions);
|
|
111
110
|
this.append(')');
|
|
112
111
|
}
|
|
113
112
|
compileList(nodes, separator = ', ') {
|
|
114
|
-
const
|
|
115
|
-
for (
|
|
116
|
-
this.visitNode(
|
|
117
|
-
if (
|
|
113
|
+
const lastIndex = nodes.length - 1;
|
|
114
|
+
for (let i = 0; i <= lastIndex; i++) {
|
|
115
|
+
this.visitNode(nodes[i]);
|
|
116
|
+
if (i < lastIndex) {
|
|
118
117
|
this.append(separator);
|
|
119
118
|
}
|
|
120
119
|
}
|
|
@@ -242,15 +241,6 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
242
241
|
}
|
|
243
242
|
this.append(this.sanitizeIdentifier(node.name));
|
|
244
243
|
}
|
|
245
|
-
visitFilter(node) {
|
|
246
|
-
if (node.left) {
|
|
247
|
-
this.visitNode(node.left);
|
|
248
|
-
this.append(' ');
|
|
249
|
-
}
|
|
250
|
-
this.visitNode(node.op);
|
|
251
|
-
this.append(' ');
|
|
252
|
-
this.visitNode(node.right);
|
|
253
|
-
}
|
|
254
244
|
visitAnd(node) {
|
|
255
245
|
this.visitNode(node.left);
|
|
256
246
|
this.append(' and ');
|
|
@@ -327,7 +317,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
327
317
|
}
|
|
328
318
|
visitCreateTable(node) {
|
|
329
319
|
this.append('create ');
|
|
330
|
-
if (node.frontModifiers) {
|
|
320
|
+
if (node.frontModifiers && node.frontModifiers.length > 0) {
|
|
331
321
|
this.compileList(node.frontModifiers, ' ');
|
|
332
322
|
this.append(' ');
|
|
333
323
|
}
|
|
@@ -346,7 +336,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
346
336
|
this.append(' on commit ');
|
|
347
337
|
this.append(node.onCommit);
|
|
348
338
|
}
|
|
349
|
-
if (node.endModifiers) {
|
|
339
|
+
if (node.endModifiers && node.endModifiers.length > 0) {
|
|
350
340
|
this.append(' ');
|
|
351
341
|
this.compileList(node.endModifiers, ' ');
|
|
352
342
|
}
|
|
@@ -358,6 +348,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
358
348
|
if (node.unsigned) {
|
|
359
349
|
this.append(' unsigned');
|
|
360
350
|
}
|
|
351
|
+
if (node.frontModifiers && node.frontModifiers.length > 0) {
|
|
352
|
+
this.append(' ');
|
|
353
|
+
this.compileList(node.frontModifiers, ' ');
|
|
354
|
+
}
|
|
361
355
|
if (node.generated) {
|
|
362
356
|
this.append(' ');
|
|
363
357
|
this.visitNode(node.generated);
|
|
@@ -387,6 +381,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
387
381
|
this.append(' ');
|
|
388
382
|
this.visitNode(node.check);
|
|
389
383
|
}
|
|
384
|
+
if (node.endModifiers && node.endModifiers.length > 0) {
|
|
385
|
+
this.append(' ');
|
|
386
|
+
this.compileList(node.endModifiers, ' ');
|
|
387
|
+
}
|
|
390
388
|
}
|
|
391
389
|
getAutoIncrement() {
|
|
392
390
|
return 'auto_increment';
|
|
@@ -542,13 +540,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
542
540
|
}
|
|
543
541
|
if (node.expression) {
|
|
544
542
|
this.append(' (');
|
|
545
|
-
if (RawNode.is(node.expression)) {
|
|
546
|
-
this.append('(');
|
|
547
|
-
}
|
|
548
543
|
this.visitNode(node.expression);
|
|
549
|
-
if (RawNode.is(node.expression)) {
|
|
550
|
-
this.append(')');
|
|
551
|
-
}
|
|
552
544
|
this.append(')');
|
|
553
545
|
}
|
|
554
546
|
}
|
|
@@ -673,20 +665,8 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
673
665
|
if (node.dropConstraint) {
|
|
674
666
|
this.visitNode(node.dropConstraint);
|
|
675
667
|
}
|
|
676
|
-
if (node.
|
|
677
|
-
this.
|
|
678
|
-
}
|
|
679
|
-
if (node.addColumn) {
|
|
680
|
-
this.visitNode(node.addColumn);
|
|
681
|
-
}
|
|
682
|
-
if (node.dropColumn) {
|
|
683
|
-
this.visitNode(node.dropColumn);
|
|
684
|
-
}
|
|
685
|
-
if (node.alterColumn) {
|
|
686
|
-
this.visitNode(node.alterColumn);
|
|
687
|
-
}
|
|
688
|
-
if (node.modifyColumn) {
|
|
689
|
-
this.visitNode(node.modifyColumn);
|
|
668
|
+
if (node.columnAlterations) {
|
|
669
|
+
this.compileList(node.columnAlterations);
|
|
690
670
|
}
|
|
691
671
|
}
|
|
692
672
|
visitAddColumn(node) {
|
|
@@ -750,12 +730,13 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
750
730
|
this.append(' restrict');
|
|
751
731
|
}
|
|
752
732
|
}
|
|
753
|
-
|
|
754
|
-
this.append(
|
|
733
|
+
visitSetOperation(node) {
|
|
734
|
+
this.append(node.operator);
|
|
735
|
+
this.append(' ');
|
|
755
736
|
if (node.all) {
|
|
756
737
|
this.append('all ');
|
|
757
738
|
}
|
|
758
|
-
this.visitNode(node.
|
|
739
|
+
this.visitNode(node.expression);
|
|
759
740
|
}
|
|
760
741
|
visitCreateView(node) {
|
|
761
742
|
this.append('create ');
|
|
@@ -868,6 +849,56 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
868
849
|
visitDefaultInsertValue(_) {
|
|
869
850
|
this.append('default');
|
|
870
851
|
}
|
|
852
|
+
visitAggregateFunction(node) {
|
|
853
|
+
this.append(node.func);
|
|
854
|
+
this.append('(');
|
|
855
|
+
if (node.distinct) {
|
|
856
|
+
this.append('distinct ');
|
|
857
|
+
}
|
|
858
|
+
this.visitNode(node.column);
|
|
859
|
+
this.append(')');
|
|
860
|
+
if (node.filter) {
|
|
861
|
+
this.append(' filter(');
|
|
862
|
+
this.visitNode(node.filter);
|
|
863
|
+
this.append(')');
|
|
864
|
+
}
|
|
865
|
+
if (node.over) {
|
|
866
|
+
this.append(' ');
|
|
867
|
+
this.visitNode(node.over);
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
visitOver(node) {
|
|
871
|
+
this.append('over(');
|
|
872
|
+
if (node.partitionBy) {
|
|
873
|
+
this.visitNode(node.partitionBy);
|
|
874
|
+
if (node.orderBy) {
|
|
875
|
+
this.append(' ');
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
if (node.orderBy) {
|
|
879
|
+
this.visitNode(node.orderBy);
|
|
880
|
+
}
|
|
881
|
+
this.append(')');
|
|
882
|
+
}
|
|
883
|
+
visitPartitionBy(node) {
|
|
884
|
+
this.append('partition by ');
|
|
885
|
+
this.compileList(node.items);
|
|
886
|
+
}
|
|
887
|
+
visitPartitionByItem(node) {
|
|
888
|
+
this.visitNode(node.partitionBy);
|
|
889
|
+
}
|
|
890
|
+
visitBinaryOperation(node) {
|
|
891
|
+
this.visitNode(node.leftOperand);
|
|
892
|
+
this.append(' ');
|
|
893
|
+
this.visitNode(node.operator);
|
|
894
|
+
this.append(' ');
|
|
895
|
+
this.visitNode(node.rightOperand);
|
|
896
|
+
}
|
|
897
|
+
visitUnaryOperation(node) {
|
|
898
|
+
this.visitNode(node.operator);
|
|
899
|
+
this.append(' ');
|
|
900
|
+
this.visitNode(node.operand);
|
|
901
|
+
}
|
|
871
902
|
append(str) {
|
|
872
903
|
this.#sql += str;
|
|
873
904
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="./query-executor-base.d.ts" />
|
|
2
2
|
import { freeze } from '../util/object-utils.js';
|
|
3
3
|
import { Deferred } from '../util/deferred.js';
|
|
4
|
+
import { logOnce } from '../util/log-once.js';
|
|
4
5
|
const NO_PLUGINS = freeze([]);
|
|
5
6
|
export class QueryExecutorBase {
|
|
6
7
|
#plugins;
|
|
@@ -32,7 +33,10 @@ export class QueryExecutorBase {
|
|
|
32
33
|
async executeQuery(compiledQuery, queryId) {
|
|
33
34
|
return await this.provideConnection(async (connection) => {
|
|
34
35
|
const result = await connection.executeQuery(compiledQuery);
|
|
35
|
-
|
|
36
|
+
const transformedResult = await this.#transformResult(result, queryId);
|
|
37
|
+
// TODO: remove.
|
|
38
|
+
warnOfOutdatedDriverOrPlugins(result, transformedResult);
|
|
39
|
+
return transformedResult;
|
|
36
40
|
});
|
|
37
41
|
}
|
|
38
42
|
async *stream(compiledQuery, chunkSize, queryId) {
|
|
@@ -60,3 +64,14 @@ export class QueryExecutorBase {
|
|
|
60
64
|
return result;
|
|
61
65
|
}
|
|
62
66
|
}
|
|
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,20 +1,37 @@
|
|
|
1
1
|
import { QueryResult } from '../driver/database-connection.js';
|
|
2
2
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
3
|
-
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
4
3
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
5
4
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
6
5
|
import { QueryExecutorProvider } from '../query-executor/query-executor-provider.js';
|
|
7
6
|
import { QueryId } from '../util/query-id.js';
|
|
8
|
-
import {
|
|
7
|
+
import { AliasedExpression, Expression } from '../expression/expression.js';
|
|
9
8
|
/**
|
|
10
9
|
* An instance of this class can be used to create raw SQL snippets or queries.
|
|
11
10
|
*
|
|
12
11
|
* You shouldn't need to create `RawBuilder` instances directly. Instead you should
|
|
13
12
|
* use the {@link sql} template tag.
|
|
14
13
|
*/
|
|
15
|
-
export declare class RawBuilder<O
|
|
14
|
+
export declare class RawBuilder<O> implements Expression<O> {
|
|
16
15
|
#private;
|
|
17
16
|
constructor(props: RawBuilderProps);
|
|
17
|
+
/** @private */
|
|
18
|
+
/**
|
|
19
|
+
* All expressions need to have this getter for complicated type-related reasons.
|
|
20
|
+
* Simply add this getter for your expression and always return `undefined` from it:
|
|
21
|
+
*
|
|
22
|
+
* ```ts
|
|
23
|
+
* class SomeExpression<T> implements Expression<T> {
|
|
24
|
+
* get expressionType(): T | undefined {
|
|
25
|
+
* return undefined
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* The getter is needed to make the expression assignable to another expression only
|
|
31
|
+
* if the types `T` are assignable. Without this property (or some other property
|
|
32
|
+
* that references `T`), you could assing `Expression<string>` to `Expression<number>`.
|
|
33
|
+
*/
|
|
34
|
+
get expressionType(): O | undefined;
|
|
18
35
|
/**
|
|
19
36
|
* Returns an aliased version of the SQL expression.
|
|
20
37
|
*
|
|
@@ -69,7 +86,7 @@ export declare class RawBuilder<O = unknown> implements OperationNodeSource {
|
|
|
69
86
|
* ```
|
|
70
87
|
*/
|
|
71
88
|
as<A extends string>(alias: A): AliasedRawBuilder<O, A>;
|
|
72
|
-
as<A extends string = never>(alias:
|
|
89
|
+
as<A extends string = never>(alias: Expression<any>): AliasedRawBuilder<O, A>;
|
|
73
90
|
/**
|
|
74
91
|
* Change the output type of the raw expression.
|
|
75
92
|
*
|
|
@@ -81,25 +98,44 @@ export declare class RawBuilder<O = unknown> implements OperationNodeSource {
|
|
|
81
98
|
* Adds a plugin for this SQL snippet.
|
|
82
99
|
*/
|
|
83
100
|
withPlugin(plugin: KyselyPlugin): RawBuilder<O>;
|
|
101
|
+
/**
|
|
102
|
+
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
103
|
+
*
|
|
104
|
+
* If you are creating a custom expression, it's often easiest to use the {@link sql}
|
|
105
|
+
* template tag to build the node:
|
|
106
|
+
*
|
|
107
|
+
* ```ts
|
|
108
|
+
* class SomeExpression<T> implements Expression<T> {
|
|
109
|
+
* toOperationNode(): OperationNode {
|
|
110
|
+
* return sql`some sql here`.toOperationNode()
|
|
111
|
+
* }
|
|
112
|
+
* }
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
84
115
|
toOperationNode(): RawNode;
|
|
85
116
|
execute(executorProvider: QueryExecutorProvider): Promise<QueryResult<O>>;
|
|
86
117
|
}
|
|
118
|
+
export declare function isRawBuilder(obj: unknown): obj is RawBuilder<unknown>;
|
|
87
119
|
/**
|
|
88
120
|
* {@link RawBuilder} with an alias. The result of calling {@link RawBuilder.as}.
|
|
89
121
|
*/
|
|
90
|
-
export declare class AliasedRawBuilder<O = unknown, A extends string = never> implements
|
|
122
|
+
export declare class AliasedRawBuilder<O = unknown, A extends string = never> implements AliasedExpression<O, A> {
|
|
91
123
|
#private;
|
|
124
|
+
constructor(rawBuilder: RawBuilder<O>, alias: A | Expression<any>);
|
|
125
|
+
/** @private */
|
|
92
126
|
/**
|
|
93
|
-
*
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
*
|
|
127
|
+
* Returns the aliased expression.
|
|
128
|
+
*/
|
|
129
|
+
get expression(): Expression<O>;
|
|
130
|
+
/** @private */
|
|
131
|
+
/**
|
|
132
|
+
* Returns the alias.
|
|
133
|
+
*/
|
|
134
|
+
get alias(): A;
|
|
135
|
+
/**
|
|
136
|
+
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
99
137
|
*/
|
|
100
|
-
protected get alias(): A | AnyRawBuilder;
|
|
101
138
|
toOperationNode(): AliasNode;
|
|
102
|
-
constructor(rawBuilder: RawBuilder<O>, alias: A | AnyRawBuilder);
|
|
103
139
|
}
|
|
104
140
|
export interface RawBuilderProps {
|
|
105
141
|
readonly queryId: QueryId;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/// <reference types="./raw-builder.d.ts" />
|
|
2
2
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
3
|
-
import { isOperationNodeSource, } from '../operation-node/operation-node-source.js';
|
|
4
3
|
import { preventAwait } from '../util/prevent-await.js';
|
|
5
|
-
import { freeze } from '../util/object-utils.js';
|
|
4
|
+
import { freeze, isFunction, isObject } from '../util/object-utils.js';
|
|
6
5
|
import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';
|
|
7
6
|
import { IdentifierNode } from '../operation-node/identifier-node.js';
|
|
7
|
+
import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
8
8
|
/**
|
|
9
9
|
* An instance of this class can be used to create raw SQL snippets or queries.
|
|
10
10
|
*
|
|
@@ -16,6 +16,10 @@ export class RawBuilder {
|
|
|
16
16
|
constructor(props) {
|
|
17
17
|
this.#props = freeze(props);
|
|
18
18
|
}
|
|
19
|
+
/** @private */
|
|
20
|
+
get expressionType() {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
19
23
|
as(alias) {
|
|
20
24
|
return new AliasedRawBuilder(this, alias);
|
|
21
25
|
}
|
|
@@ -58,6 +62,14 @@ export class RawBuilder {
|
|
|
58
62
|
return executor.compileQuery(this.#toOperationNode(executor), this.#props.queryId);
|
|
59
63
|
}
|
|
60
64
|
}
|
|
65
|
+
export function isRawBuilder(obj) {
|
|
66
|
+
return (isObject(obj) &&
|
|
67
|
+
isFunction(obj.as) &&
|
|
68
|
+
isFunction(obj.castTo) &&
|
|
69
|
+
isFunction(obj.withPlugin) &&
|
|
70
|
+
isFunction(obj.toOperationNode) &&
|
|
71
|
+
isFunction(obj.execute));
|
|
72
|
+
}
|
|
61
73
|
preventAwait(RawBuilder, "don't await RawBuilder instances directly. To execute the query you need to call `execute`");
|
|
62
74
|
/**
|
|
63
75
|
* {@link RawBuilder} with an alias. The result of calling {@link RawBuilder.as}.
|
|
@@ -65,14 +77,15 @@ preventAwait(RawBuilder, "don't await RawBuilder instances directly. To execute
|
|
|
65
77
|
export class AliasedRawBuilder {
|
|
66
78
|
#rawBuilder;
|
|
67
79
|
#alias;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
80
|
+
constructor(rawBuilder, alias) {
|
|
81
|
+
this.#rawBuilder = rawBuilder;
|
|
82
|
+
this.#alias = alias;
|
|
83
|
+
}
|
|
84
|
+
/** @private */
|
|
85
|
+
get expression() {
|
|
86
|
+
return this.#rawBuilder;
|
|
87
|
+
}
|
|
88
|
+
/** @private */
|
|
76
89
|
get alias() {
|
|
77
90
|
return this.#alias;
|
|
78
91
|
}
|
|
@@ -81,8 +94,4 @@ export class AliasedRawBuilder {
|
|
|
81
94
|
? this.#alias.toOperationNode()
|
|
82
95
|
: IdentifierNode.create(this.#alias));
|
|
83
96
|
}
|
|
84
|
-
constructor(rawBuilder, alias) {
|
|
85
|
-
this.#rawBuilder = rawBuilder;
|
|
86
|
-
this.#alias = alias;
|
|
87
|
-
}
|
|
88
97
|
}
|
|
@@ -7,13 +7,14 @@ export interface Sql {
|
|
|
7
7
|
* import { sql } from 'kysely'
|
|
8
8
|
*
|
|
9
9
|
* const id = 123
|
|
10
|
-
*
|
|
11
10
|
* const snippet = sql<Person[]>`select * from person where id = ${id}`
|
|
12
11
|
* ```
|
|
13
12
|
*
|
|
14
13
|
* Substitutions (the things inside `${}`) are automatically passed to the database
|
|
15
|
-
* as parameters and are
|
|
16
|
-
* about SQL injection vulnerabilities.
|
|
14
|
+
* as parameters and are never interpolated to the SQL string. There's no need to worry
|
|
15
|
+
* about SQL injection vulnerabilities. Substitutions can be values, other `sql`
|
|
16
|
+
* expressions, queries and almost anything else Kysely can produce and they get
|
|
17
|
+
* handled correctly. See the examples below.
|
|
17
18
|
*
|
|
18
19
|
* If you need your substitutions to be interpreted as identifiers, value literals or
|
|
19
20
|
* lists of things, see the {@link Sql.ref}, {@link Sql.table}, {@link Sql.id},
|
|
@@ -29,8 +30,7 @@ export interface Sql {
|
|
|
29
30
|
* .selectFrom('person')
|
|
30
31
|
* .select(
|
|
31
32
|
* // If you use `sql` in a select statement, remember to call the `as`
|
|
32
|
-
* // method to give it an alias.
|
|
33
|
-
* // the column to the result type.
|
|
33
|
+
* // method to give it an alias.
|
|
34
34
|
* sql<string>`concat(first_name, ' ', last_name)`.as('full_name')
|
|
35
35
|
* )
|
|
36
36
|
* .where(sql`birthdate between ${date1} and ${date2}`)
|
|
@@ -97,6 +97,14 @@ export interface Sql {
|
|
|
97
97
|
* type-safety though... But it's possible.
|
|
98
98
|
*/
|
|
99
99
|
<T = unknown>(sqlFragments: TemplateStringsArray, ...parameters: unknown[]): RawBuilder<T>;
|
|
100
|
+
/**
|
|
101
|
+
* `sql.value(value)` is a shortcut for:
|
|
102
|
+
*
|
|
103
|
+
* ```ts
|
|
104
|
+
* sql<ValueType>`${value}`
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
value<T>(value: T): RawBuilder<T>;
|
|
100
108
|
/**
|
|
101
109
|
* This can be used to add runtime column references to SQL snippets.
|
|
102
110
|
*
|
|
@@ -226,7 +234,7 @@ export interface Sql {
|
|
|
226
234
|
* select "public"."person"."first_name" from "public"."person"
|
|
227
235
|
* ```
|
|
228
236
|
*/
|
|
229
|
-
id(...ids: string[]): RawBuilder<unknown>;
|
|
237
|
+
id(...ids: readonly string[]): RawBuilder<unknown>;
|
|
230
238
|
/**
|
|
231
239
|
* This can be used to add literal values to SQL snippets.
|
|
232
240
|
*
|
|
@@ -326,6 +334,6 @@ export interface Sql {
|
|
|
326
334
|
* BEFORE $1::varchar, (1 == 1)::varchar, (select * from "person")::varchar, false::varchar, "first_name" AFTER
|
|
327
335
|
* ```
|
|
328
336
|
*/
|
|
329
|
-
join(array: unknown[], separator?: RawBuilder<any>): RawBuilder<unknown>;
|
|
337
|
+
join(array: readonly unknown[], separator?: RawBuilder<any>): RawBuilder<unknown>;
|
|
330
338
|
}
|
|
331
339
|
export declare const sql: Sql;
|
|
@@ -19,6 +19,12 @@ export const sql = Object.assign((sqlFragments, ...parameters) => {
|
|
|
19
19
|
rawNode: RawNode.createWithChild(parseStringReference(columnReference)),
|
|
20
20
|
});
|
|
21
21
|
},
|
|
22
|
+
value(value) {
|
|
23
|
+
return new RawBuilder({
|
|
24
|
+
queryId: createQueryId(),
|
|
25
|
+
rawNode: RawNode.createWithChild(parseValueExpression(value)),
|
|
26
|
+
});
|
|
27
|
+
},
|
|
22
28
|
table(tableReference) {
|
|
23
29
|
return new RawBuilder({
|
|
24
30
|
queryId: createQueryId(),
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { AlterColumnNode } from '../operation-node/alter-column-node.js';
|
|
2
|
+
import { ColumnDataType } from '../operation-node/data-type-node.js';
|
|
3
|
+
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
4
|
+
import { DefaultValueExpression } from '../parser/default-value-parser.js';
|
|
5
|
+
export declare class AlterColumnBuilder {
|
|
6
|
+
protected readonly alterColumnNode: AlterColumnNode;
|
|
7
|
+
constructor(alterColumnNode: AlterColumnNode);
|
|
8
|
+
setDataType(dataType: ColumnDataType): AlteredColumnBuilder;
|
|
9
|
+
setDefault(value: DefaultValueExpression): AlteredColumnBuilder;
|
|
10
|
+
dropDefault(): AlteredColumnBuilder;
|
|
11
|
+
setNotNull(): AlteredColumnBuilder;
|
|
12
|
+
dropNotNull(): AlteredColumnBuilder;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Allows us to force consumers to do something, anything, when altering a column.
|
|
16
|
+
*
|
|
17
|
+
* Basically, deny the following:
|
|
18
|
+
*
|
|
19
|
+
* ```ts
|
|
20
|
+
* db.schema.alterTable('person').alterColumn('age', (ac) => ac)
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* Which would now throw a compilation error, instead of a runtime error.
|
|
24
|
+
*/
|
|
25
|
+
export declare class AlteredColumnBuilder extends AlterColumnBuilder implements OperationNodeSource {
|
|
26
|
+
toOperationNode(): AlterColumnNode;
|
|
27
|
+
}
|
|
28
|
+
export declare type AlterColumnBuilderCallback = (builder: AlterColumnBuilder) => AlteredColumnBuilder;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/// <reference types="./alter-column-builder.d.ts" />
|
|
2
|
+
import { AlterColumnNode } from '../operation-node/alter-column-node.js';
|
|
3
|
+
import { DataTypeNode, } from '../operation-node/data-type-node.js';
|
|
4
|
+
import { parseDefaultValueExpression, } from '../parser/default-value-parser.js';
|
|
5
|
+
export class AlterColumnBuilder {
|
|
6
|
+
alterColumnNode;
|
|
7
|
+
constructor(alterColumnNode) {
|
|
8
|
+
this.alterColumnNode = alterColumnNode;
|
|
9
|
+
}
|
|
10
|
+
setDataType(dataType) {
|
|
11
|
+
return new AlteredColumnBuilder(AlterColumnNode.cloneWith(this.alterColumnNode, {
|
|
12
|
+
dataType: DataTypeNode.create(dataType),
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
setDefault(value) {
|
|
16
|
+
return new AlteredColumnBuilder(AlterColumnNode.cloneWith(this.alterColumnNode, {
|
|
17
|
+
setDefault: parseDefaultValueExpression(value),
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
dropDefault() {
|
|
21
|
+
return new AlteredColumnBuilder(AlterColumnNode.cloneWith(this.alterColumnNode, {
|
|
22
|
+
dropDefault: true,
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
setNotNull() {
|
|
26
|
+
return new AlteredColumnBuilder(AlterColumnNode.cloneWith(this.alterColumnNode, {
|
|
27
|
+
setNotNull: true,
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
dropNotNull() {
|
|
31
|
+
return new AlteredColumnBuilder(AlterColumnNode.cloneWith(this.alterColumnNode, {
|
|
32
|
+
dropNotNull: true,
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Allows us to force consumers to do something, anything, when altering a column.
|
|
38
|
+
*
|
|
39
|
+
* Basically, deny the following:
|
|
40
|
+
*
|
|
41
|
+
* ```ts
|
|
42
|
+
* db.schema.alterTable('person').alterColumn('age', (ac) => ac)
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* Which would now throw a compilation error, instead of a runtime error.
|
|
46
|
+
*/
|
|
47
|
+
export class AlteredColumnBuilder extends AlterColumnBuilder {
|
|
48
|
+
toOperationNode() {
|
|
49
|
+
return this.alterColumnNode;
|
|
50
|
+
}
|
|
51
|
+
}
|