kysely 0.24.2 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -567
- package/dist/cjs/dialect/database-introspector.d.ts +1 -1
- package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +2 -1
- package/dist/cjs/dialect/mysql/mysql-driver.js +5 -1
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.js +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -1
- package/dist/cjs/driver/database-connection.d.ts +6 -0
- package/dist/cjs/driver/driver.d.ts +1 -1
- package/dist/cjs/driver/runtime-driver.js +6 -6
- package/dist/cjs/dynamic/dynamic.d.ts +1 -1
- package/dist/cjs/dynamic/dynamic.js +1 -1
- package/dist/cjs/expression/expression-builder.d.ts +263 -109
- package/dist/cjs/expression/expression-builder.js +38 -7
- package/dist/cjs/expression/expression-wrapper.d.ts +296 -5
- package/dist/cjs/expression/expression-wrapper.js +70 -2
- package/dist/cjs/helpers/mysql.d.ts +3 -3
- package/dist/cjs/helpers/mysql.js +2 -2
- package/dist/cjs/helpers/postgres.d.ts +31 -19
- package/dist/cjs/helpers/postgres.js +30 -18
- package/dist/cjs/index.d.ts +10 -0
- package/dist/cjs/index.js +10 -0
- package/dist/cjs/kysely.d.ts +42 -15
- package/dist/cjs/kysely.js +41 -10
- package/dist/cjs/migration/file-migration-provider.js +2 -2
- package/dist/cjs/operation-node/aggregate-function-node.d.ts +3 -7
- package/dist/cjs/operation-node/aggregate-function-node.js +1 -1
- package/dist/cjs/operation-node/alter-column-node.d.ts +3 -5
- package/dist/cjs/operation-node/alter-column-node.js +2 -7
- package/dist/cjs/operation-node/alter-table-node.d.ts +3 -3
- package/dist/cjs/operation-node/alter-table-node.js +1 -2
- package/dist/cjs/operation-node/case-node.d.ts +19 -0
- package/dist/cjs/operation-node/case-node.js +42 -0
- package/dist/cjs/operation-node/column-definition-node.d.ts +1 -1
- package/dist/cjs/operation-node/constraint-node.d.ts +1 -1
- package/dist/cjs/operation-node/create-index-node.d.ts +4 -3
- package/dist/cjs/operation-node/create-index-node.js +6 -0
- package/dist/cjs/operation-node/create-schema-node.d.ts +1 -1
- package/dist/cjs/operation-node/create-table-node.d.ts +2 -2
- package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/create-view-node.d.ts +1 -1
- package/dist/cjs/operation-node/data-type-node.d.ts +2 -2
- package/dist/cjs/operation-node/drop-constraint-node.d.ts +1 -1
- package/dist/cjs/operation-node/drop-index-node.d.ts +1 -1
- package/dist/cjs/operation-node/drop-schema-node.d.ts +1 -1
- package/dist/cjs/operation-node/drop-table-node.d.ts +1 -1
- package/dist/cjs/operation-node/drop-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/drop-view-node.d.ts +1 -1
- package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +1 -1
- package/dist/cjs/operation-node/generated-node.d.ts +1 -1
- package/dist/cjs/operation-node/insert-query-node.d.ts +1 -1
- package/dist/cjs/operation-node/join-node.d.ts +1 -2
- package/dist/cjs/operation-node/join-node.js +0 -8
- package/dist/cjs/operation-node/json-operator-chain-node.d.ts +16 -0
- package/dist/cjs/operation-node/json-operator-chain-node.js +25 -0
- package/dist/cjs/operation-node/json-path-leg-node.d.ts +14 -0
- package/dist/cjs/operation-node/json-path-leg-node.js +19 -0
- package/dist/cjs/operation-node/json-path-node.d.ts +16 -0
- package/dist/cjs/operation-node/json-path-node.js +25 -0
- package/dist/cjs/operation-node/json-reference-node.d.ts +17 -0
- package/dist/cjs/operation-node/json-reference-node.js +25 -0
- package/dist/cjs/operation-node/on-conflict-node.d.ts +1 -1
- package/dist/cjs/operation-node/on-duplicate-key-node.d.ts +1 -1
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +12 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +53 -3
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +12 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +6 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.d.ts +13 -9
- package/dist/cjs/operation-node/operator-node.js +12 -2
- package/dist/cjs/operation-node/query-node.d.ts +9 -10
- package/dist/cjs/operation-node/query-node.js +0 -8
- package/dist/cjs/operation-node/reference-node.d.ts +2 -2
- package/dist/cjs/operation-node/reference-node.js +1 -1
- package/dist/cjs/operation-node/references-node.d.ts +1 -1
- package/dist/cjs/operation-node/select-modifier-node.d.ts +1 -1
- package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
- package/dist/cjs/operation-node/select-query-node.js +0 -8
- package/dist/cjs/operation-node/selection-node.d.ts +1 -1
- package/dist/cjs/operation-node/set-operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/simple-reference-expression-node.d.ts +1 -1
- package/dist/cjs/operation-node/update-query-node.d.ts +1 -1
- package/dist/cjs/operation-node/values-node.d.ts +1 -1
- package/dist/cjs/operation-node/when-node.d.ts +14 -0
- package/dist/cjs/operation-node/when-node.js +24 -0
- package/dist/cjs/operation-node/with-node.d.ts +1 -1
- package/dist/cjs/parser/binary-operation-parser.d.ts +9 -11
- package/dist/cjs/parser/binary-operation-parser.js +40 -103
- package/dist/cjs/parser/coalesce-parser.d.ts +1 -1
- package/dist/cjs/parser/data-type-parser.d.ts +1 -1
- package/dist/cjs/parser/default-value-parser.d.ts +1 -1
- package/dist/cjs/parser/expression-parser.d.ts +6 -5
- package/dist/cjs/parser/group-by-parser.d.ts +2 -2
- package/dist/cjs/parser/insert-values-parser.d.ts +4 -4
- package/dist/cjs/parser/join-parser.d.ts +4 -4
- package/dist/cjs/parser/order-by-parser.d.ts +4 -3
- package/dist/cjs/parser/order-by-parser.js +5 -1
- package/dist/cjs/parser/partition-by-parser.d.ts +2 -2
- package/dist/cjs/parser/reference-parser.d.ts +16 -8
- package/dist/cjs/parser/reference-parser.js +43 -16
- package/dist/cjs/parser/returning-parser.d.ts +2 -2
- package/dist/cjs/parser/select-parser.d.ts +9 -9
- package/dist/cjs/parser/table-parser.d.ts +14 -13
- package/dist/cjs/parser/unary-operation-parser.d.ts +1 -1
- package/dist/cjs/parser/update-set-parser.d.ts +3 -3
- package/dist/cjs/parser/update-set-parser.js +1 -3
- package/dist/cjs/parser/value-parser.d.ts +4 -4
- package/dist/cjs/parser/with-parser.d.ts +14 -9
- package/dist/cjs/plugin/camel-case/camel-case.d.ts +1 -1
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +42 -0
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +32 -0
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +22 -6
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -38
- package/dist/cjs/query-builder/aggregate-function-builder.js +4 -59
- package/dist/cjs/query-builder/case-builder.d.ts +111 -0
- package/dist/cjs/query-builder/case-builder.js +75 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +130 -63
- package/dist/cjs/query-builder/delete-query-builder.js +42 -59
- package/dist/cjs/query-builder/delete-result.d.ts +1 -2
- package/dist/cjs/query-builder/delete-result.js +2 -8
- package/dist/cjs/query-builder/function-module.d.ts +78 -69
- package/dist/cjs/query-builder/function-module.js +12 -16
- package/dist/cjs/query-builder/having-interface.d.ts +2 -35
- package/dist/cjs/query-builder/insert-query-builder.d.ts +99 -47
- package/dist/cjs/query-builder/insert-query-builder.js +57 -26
- package/dist/cjs/query-builder/insert-result.d.ts +3 -4
- package/dist/cjs/query-builder/insert-result.js +5 -14
- package/dist/cjs/query-builder/join-builder.d.ts +2 -35
- package/dist/cjs/query-builder/join-builder.js +1 -56
- package/dist/cjs/query-builder/json-path-builder.d.ts +212 -0
- package/dist/cjs/query-builder/json-path-builder.js +191 -0
- package/dist/cjs/query-builder/no-result-error.d.ts +1 -1
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +144 -73
- package/dist/cjs/query-builder/on-conflict-builder.js +2 -111
- package/dist/cjs/query-builder/over-builder.d.ts +2 -2
- package/dist/cjs/query-builder/over-builder.js +1 -1
- package/dist/cjs/query-builder/returning-interface.d.ts +1 -1
- package/dist/cjs/query-builder/select-query-builder.d.ts +184 -138
- package/dist/cjs/query-builder/select-query-builder.js +64 -130
- package/dist/cjs/query-builder/update-query-builder.d.ts +143 -71
- package/dist/cjs/query-builder/update-query-builder.js +47 -60
- package/dist/cjs/query-builder/update-result.d.ts +3 -3
- package/dist/cjs/query-builder/update-result.js +5 -9
- package/dist/cjs/query-builder/where-interface.d.ts +73 -38
- package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
- package/dist/cjs/query-compiler/compiled-query.js +2 -2
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +12 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +67 -5
- package/dist/cjs/query-compiler/query-compiler.d.ts +1 -1
- package/dist/cjs/query-creator.d.ts +4 -2
- package/dist/cjs/schema/alter-column-builder.d.ts +13 -7
- package/dist/cjs/schema/alter-column-builder.js +20 -22
- package/dist/cjs/schema/alter-table-builder.d.ts +0 -4
- package/dist/cjs/schema/alter-table-builder.js +2 -9
- package/dist/cjs/schema/column-definition-builder.d.ts +1 -1
- package/dist/cjs/schema/column-definition-builder.js +1 -2
- package/dist/cjs/schema/create-index-builder.d.ts +49 -7
- package/dist/cjs/schema/create-index-builder.js +52 -14
- package/dist/cjs/schema/create-table-builder.d.ts +2 -6
- package/dist/cjs/schema/create-table-builder.js +0 -6
- package/dist/cjs/schema/schema.d.ts +1 -2
- package/dist/cjs/schema/schema.js +2 -3
- package/dist/cjs/util/column-type.d.ts +21 -16
- package/dist/cjs/util/explainable.d.ts +1 -1
- package/dist/cjs/util/infer-result.d.ts +2 -2
- package/dist/cjs/util/log.d.ts +6 -6
- package/dist/cjs/util/log.js +4 -4
- package/dist/cjs/util/object-utils.d.ts +2 -1
- package/dist/cjs/util/require-all-props.d.ts +1 -1
- package/dist/cjs/util/type-utils.d.ts +54 -40
- package/dist/esm/dialect/database-introspector.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +2 -1
- package/dist/esm/dialect/mysql/mysql-driver.js +5 -1
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
- package/dist/esm/dialect/postgres/postgres-introspector.js +1 -1
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -1
- package/dist/esm/driver/database-connection.d.ts +6 -0
- package/dist/esm/driver/driver.d.ts +1 -1
- package/dist/esm/driver/runtime-driver.js +6 -6
- package/dist/esm/dynamic/dynamic.d.ts +1 -1
- package/dist/esm/dynamic/dynamic.js +1 -1
- package/dist/esm/expression/expression-builder.d.ts +263 -109
- package/dist/esm/expression/expression-builder.js +40 -9
- package/dist/esm/expression/expression-wrapper.d.ts +296 -5
- package/dist/esm/expression/expression-wrapper.js +67 -1
- package/dist/esm/helpers/mysql.d.ts +3 -3
- package/dist/esm/helpers/mysql.js +2 -2
- package/dist/esm/helpers/postgres.d.ts +31 -19
- package/dist/esm/helpers/postgres.js +30 -18
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/kysely.d.ts +42 -15
- package/dist/esm/kysely.js +42 -11
- package/dist/esm/operation-node/aggregate-function-node.d.ts +3 -7
- package/dist/esm/operation-node/aggregate-function-node.js +1 -1
- package/dist/esm/operation-node/alter-column-node.d.ts +3 -5
- package/dist/esm/operation-node/alter-column-node.js +2 -7
- package/dist/esm/operation-node/alter-table-node.d.ts +3 -3
- package/dist/esm/operation-node/alter-table-node.js +1 -2
- package/dist/esm/operation-node/case-node.d.ts +19 -0
- package/dist/esm/operation-node/case-node.js +40 -0
- package/dist/esm/operation-node/column-definition-node.d.ts +1 -1
- package/dist/esm/operation-node/constraint-node.d.ts +1 -1
- package/dist/esm/operation-node/create-index-node.d.ts +4 -3
- package/dist/esm/operation-node/create-index-node.js +6 -0
- package/dist/esm/operation-node/create-schema-node.d.ts +1 -1
- package/dist/esm/operation-node/create-table-node.d.ts +2 -2
- package/dist/esm/operation-node/create-type-node.d.ts +1 -1
- package/dist/esm/operation-node/create-view-node.d.ts +1 -1
- package/dist/esm/operation-node/data-type-node.d.ts +2 -2
- package/dist/esm/operation-node/drop-constraint-node.d.ts +1 -1
- package/dist/esm/operation-node/drop-index-node.d.ts +1 -1
- package/dist/esm/operation-node/drop-schema-node.d.ts +1 -1
- package/dist/esm/operation-node/drop-table-node.d.ts +1 -1
- package/dist/esm/operation-node/drop-type-node.d.ts +1 -1
- package/dist/esm/operation-node/drop-view-node.d.ts +1 -1
- package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +1 -1
- package/dist/esm/operation-node/generated-node.d.ts +1 -1
- package/dist/esm/operation-node/insert-query-node.d.ts +1 -1
- package/dist/esm/operation-node/join-node.d.ts +1 -2
- package/dist/esm/operation-node/join-node.js +0 -8
- package/dist/esm/operation-node/json-operator-chain-node.d.ts +16 -0
- package/dist/esm/operation-node/json-operator-chain-node.js +23 -0
- package/dist/esm/operation-node/json-path-leg-node.d.ts +14 -0
- package/dist/esm/operation-node/json-path-leg-node.js +17 -0
- package/dist/esm/operation-node/json-path-node.d.ts +16 -0
- package/dist/esm/operation-node/json-path-node.js +23 -0
- package/dist/esm/operation-node/json-reference-node.d.ts +17 -0
- package/dist/esm/operation-node/json-reference-node.js +23 -0
- package/dist/esm/operation-node/on-conflict-node.d.ts +1 -1
- package/dist/esm/operation-node/on-duplicate-key-node.d.ts +1 -1
- package/dist/esm/operation-node/operation-node-transformer.d.ts +12 -0
- package/dist/esm/operation-node/operation-node-transformer.js +53 -3
- package/dist/esm/operation-node/operation-node-visitor.d.ts +12 -0
- package/dist/esm/operation-node/operation-node-visitor.js +6 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.d.ts +13 -9
- package/dist/esm/operation-node/operator-node.js +10 -1
- package/dist/esm/operation-node/query-node.d.ts +9 -10
- package/dist/esm/operation-node/query-node.js +0 -8
- package/dist/esm/operation-node/reference-node.d.ts +2 -2
- package/dist/esm/operation-node/reference-node.js +1 -1
- package/dist/esm/operation-node/references-node.d.ts +1 -1
- package/dist/esm/operation-node/select-modifier-node.d.ts +1 -1
- package/dist/esm/operation-node/select-query-node.d.ts +0 -1
- package/dist/esm/operation-node/select-query-node.js +0 -8
- package/dist/esm/operation-node/selection-node.d.ts +1 -1
- package/dist/esm/operation-node/set-operation-node.d.ts +1 -1
- package/dist/esm/operation-node/simple-reference-expression-node.d.ts +1 -1
- package/dist/esm/operation-node/update-query-node.d.ts +1 -1
- package/dist/esm/operation-node/values-node.d.ts +1 -1
- package/dist/esm/operation-node/when-node.d.ts +14 -0
- package/dist/esm/operation-node/when-node.js +22 -0
- package/dist/esm/operation-node/with-node.d.ts +1 -1
- package/dist/esm/parser/binary-operation-parser.d.ts +9 -11
- package/dist/esm/parser/binary-operation-parser.js +38 -99
- package/dist/esm/parser/coalesce-parser.d.ts +1 -1
- package/dist/esm/parser/data-type-parser.d.ts +1 -1
- package/dist/esm/parser/default-value-parser.d.ts +1 -1
- package/dist/esm/parser/expression-parser.d.ts +6 -5
- package/dist/esm/parser/group-by-parser.d.ts +2 -2
- package/dist/esm/parser/insert-values-parser.d.ts +4 -4
- package/dist/esm/parser/join-parser.d.ts +4 -4
- package/dist/esm/parser/order-by-parser.d.ts +4 -3
- package/dist/esm/parser/order-by-parser.js +3 -0
- package/dist/esm/parser/partition-by-parser.d.ts +2 -2
- package/dist/esm/parser/reference-parser.d.ts +16 -8
- package/dist/esm/parser/reference-parser.js +40 -15
- package/dist/esm/parser/returning-parser.d.ts +2 -2
- package/dist/esm/parser/select-parser.d.ts +9 -9
- package/dist/esm/parser/table-parser.d.ts +14 -13
- package/dist/esm/parser/unary-operation-parser.d.ts +1 -1
- package/dist/esm/parser/update-set-parser.d.ts +3 -3
- package/dist/esm/parser/update-set-parser.js +2 -4
- package/dist/esm/parser/value-parser.d.ts +4 -4
- package/dist/esm/parser/with-parser.d.ts +14 -9
- package/dist/esm/plugin/camel-case/camel-case.d.ts +1 -1
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +42 -0
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +29 -0
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +22 -6
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -38
- package/dist/esm/query-builder/aggregate-function-builder.js +5 -60
- package/dist/esm/query-builder/case-builder.d.ts +111 -0
- package/dist/esm/query-builder/case-builder.js +69 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +130 -63
- package/dist/esm/query-builder/delete-query-builder.js +43 -60
- package/dist/esm/query-builder/delete-result.d.ts +1 -2
- package/dist/esm/query-builder/delete-result.js +2 -8
- package/dist/esm/query-builder/function-module.d.ts +78 -69
- package/dist/esm/query-builder/function-module.js +13 -17
- package/dist/esm/query-builder/having-interface.d.ts +2 -35
- package/dist/esm/query-builder/insert-query-builder.d.ts +99 -47
- package/dist/esm/query-builder/insert-query-builder.js +57 -26
- package/dist/esm/query-builder/insert-result.d.ts +3 -4
- package/dist/esm/query-builder/insert-result.js +5 -14
- package/dist/esm/query-builder/join-builder.d.ts +2 -35
- package/dist/esm/query-builder/join-builder.js +2 -57
- package/dist/esm/query-builder/json-path-builder.d.ts +212 -0
- package/dist/esm/query-builder/json-path-builder.js +186 -0
- package/dist/esm/query-builder/no-result-error.d.ts +1 -1
- package/dist/esm/query-builder/on-conflict-builder.d.ts +144 -73
- package/dist/esm/query-builder/on-conflict-builder.js +3 -112
- package/dist/esm/query-builder/over-builder.d.ts +2 -2
- package/dist/esm/query-builder/over-builder.js +1 -1
- package/dist/esm/query-builder/returning-interface.d.ts +1 -1
- package/dist/esm/query-builder/select-query-builder.d.ts +184 -138
- package/dist/esm/query-builder/select-query-builder.js +65 -131
- package/dist/esm/query-builder/update-query-builder.d.ts +143 -71
- package/dist/esm/query-builder/update-query-builder.js +48 -61
- package/dist/esm/query-builder/update-result.d.ts +3 -3
- package/dist/esm/query-builder/update-result.js +5 -9
- package/dist/esm/query-builder/where-interface.d.ts +73 -38
- package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
- package/dist/esm/query-compiler/compiled-query.js +2 -2
- package/dist/esm/query-compiler/default-query-compiler.d.ts +12 -0
- package/dist/esm/query-compiler/default-query-compiler.js +67 -5
- package/dist/esm/query-compiler/query-compiler.d.ts +1 -1
- package/dist/esm/query-creator.d.ts +4 -2
- package/dist/esm/schema/alter-column-builder.d.ts +13 -7
- package/dist/esm/schema/alter-column-builder.js +20 -22
- package/dist/esm/schema/alter-table-builder.d.ts +0 -4
- package/dist/esm/schema/alter-table-builder.js +2 -9
- package/dist/esm/schema/column-definition-builder.d.ts +1 -1
- package/dist/esm/schema/column-definition-builder.js +1 -2
- package/dist/esm/schema/create-index-builder.d.ts +49 -7
- package/dist/esm/schema/create-index-builder.js +54 -16
- package/dist/esm/schema/create-table-builder.d.ts +2 -6
- package/dist/esm/schema/create-table-builder.js +0 -6
- package/dist/esm/schema/schema.d.ts +1 -2
- package/dist/esm/schema/schema.js +2 -3
- package/dist/esm/util/column-type.d.ts +21 -16
- package/dist/esm/util/explainable.d.ts +1 -1
- package/dist/esm/util/infer-result.d.ts +2 -2
- package/dist/esm/util/log.d.ts +6 -6
- package/dist/esm/util/log.js +4 -4
- package/dist/esm/util/object-utils.d.ts +2 -1
- package/dist/esm/util/require-all-props.d.ts +1 -1
- package/dist/esm/util/type-utils.d.ts +54 -40
- package/package.json +25 -23
- package/dist/cjs/query-builder/deprecated-having-expression-builder.d.ts +0 -62
- package/dist/cjs/query-builder/deprecated-having-expression-builder.js +0 -2
- package/dist/cjs/query-builder/deprecated-on-expression-builder.d.ts +0 -62
- package/dist/cjs/query-builder/deprecated-on-expression-builder.js +0 -2
- package/dist/cjs/query-builder/deprecated-where-expression-builder.d.ts +0 -62
- package/dist/cjs/query-builder/deprecated-where-expression-builder.js +0 -2
- package/dist/esm/query-builder/deprecated-having-expression-builder.d.ts +0 -62
- package/dist/esm/query-builder/deprecated-having-expression-builder.js +0 -2
- package/dist/esm/query-builder/deprecated-on-expression-builder.d.ts +0 -62
- package/dist/esm/query-builder/deprecated-on-expression-builder.js +0 -2
- package/dist/esm/query-builder/deprecated-where-expression-builder.d.ts +0 -62
- package/dist/esm/query-builder/deprecated-where-expression-builder.js +0 -2
|
@@ -1,15 +1,87 @@
|
|
|
1
1
|
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
2
2
|
import { TableExpression, From, FromTables, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from '../parser/table-parser.js';
|
|
3
3
|
import { FunctionModule } from '../query-builder/function-module.js';
|
|
4
|
-
import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReference } from '../parser/reference-parser.js';
|
|
4
|
+
import { ExtractTypeFromReferenceExpression, ReferenceExpression, SimpleReferenceExpression, StringReference } from '../parser/reference-parser.js';
|
|
5
5
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
6
6
|
import { BinaryOperatorExpression, ComparisonOperatorExpression, OperandValueExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
7
7
|
import { Expression } from './expression.js';
|
|
8
8
|
import { ExpressionWrapper } from './expression-wrapper.js';
|
|
9
|
-
import { ComparisonOperator, UnaryOperator } from '../operation-node/operator-node.js';
|
|
9
|
+
import { ComparisonOperator, JSONOperatorWith$, UnaryOperator } from '../operation-node/operator-node.js';
|
|
10
10
|
import { SqlBool } from '../util/type-utils.js';
|
|
11
11
|
import { ExtractTypeFromValueExpressionOrList } from '../parser/value-parser.js';
|
|
12
|
+
import { CaseBuilder } from '../query-builder/case-builder.js';
|
|
13
|
+
import { JSONPathBuilder } from '../query-builder/json-path-builder.js';
|
|
12
14
|
export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
15
|
+
/**
|
|
16
|
+
* Creates a binary expression.
|
|
17
|
+
*
|
|
18
|
+
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
19
|
+
* See the examples for a couple of possible use cases.
|
|
20
|
+
*
|
|
21
|
+
* ### Examples
|
|
22
|
+
*
|
|
23
|
+
* In the following example `eb` is used to increment an integer column:
|
|
24
|
+
*
|
|
25
|
+
* ```ts
|
|
26
|
+
* db.updateTable('person')
|
|
27
|
+
* .set((eb) => ({
|
|
28
|
+
* age: eb('age', '+', 1)
|
|
29
|
+
* }))
|
|
30
|
+
* .where('id', '=', id)
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* The generated SQL (PostgreSQL):
|
|
34
|
+
*
|
|
35
|
+
* ```sql
|
|
36
|
+
* update "person"
|
|
37
|
+
* set "age" = "age" + $1
|
|
38
|
+
* where "id" = $2
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* By default the third argument is a value. {@link ref} can be used to
|
|
42
|
+
* pass in a column reference instead:
|
|
43
|
+
*
|
|
44
|
+
* ```ts
|
|
45
|
+
* db.updateTable('person')
|
|
46
|
+
* .set((eb) => ({
|
|
47
|
+
* age: eb('age', '+', eb.ref('age'))
|
|
48
|
+
* }))
|
|
49
|
+
* .where('id', '=', id)
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* The generated SQL (PostgreSQL):
|
|
53
|
+
*
|
|
54
|
+
* ```sql
|
|
55
|
+
* update "person"
|
|
56
|
+
* set "age" = "age" + "age"
|
|
57
|
+
* where "id" = $1
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
61
|
+
/**
|
|
62
|
+
* Returns a copy of `this` expression builder, for destructuring purposes.
|
|
63
|
+
*
|
|
64
|
+
* ### Examples
|
|
65
|
+
*
|
|
66
|
+
* ```ts
|
|
67
|
+
* db.selectFrom('person')
|
|
68
|
+
* .where(({ eb, exists, selectFrom }) =>
|
|
69
|
+
* eb('first_name', '=', 'Jennifer').and(
|
|
70
|
+
* exists(selectFrom('pet').whereRef('owner_id', '=', 'person.id').select('pet.id'))
|
|
71
|
+
* )
|
|
72
|
+
* )
|
|
73
|
+
* .selectAll()
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* The generated SQL (PostgreSQL):
|
|
77
|
+
*
|
|
78
|
+
* ```sql
|
|
79
|
+
* select * from "person" where "first_name" = $1 and exists (
|
|
80
|
+
* select "pet.id" from "pet" where "owner_id" = "person.id"
|
|
81
|
+
* )
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
eb: ExpressionBuilder<DB, TB>;
|
|
13
85
|
/**
|
|
14
86
|
* Returns a {@link FunctionModule} that can be used to write type safe function
|
|
15
87
|
* calls.
|
|
@@ -27,7 +99,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
27
99
|
* eb.fn.count('pet.id').as('pet_count')
|
|
28
100
|
* ])
|
|
29
101
|
* .groupBy('person.id')
|
|
30
|
-
* .having(count('pet.id'), '>', 10)
|
|
102
|
+
* .having((eb) => eb.fn.count('pet.id'), '>', 10)
|
|
31
103
|
* .execute()
|
|
32
104
|
* ```
|
|
33
105
|
*
|
|
@@ -92,25 +164,82 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
92
164
|
selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, TB | ExtractTableAlias<DB, TE>, {}>;
|
|
93
165
|
selectFrom<TE extends TableExpression<DB, TB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
|
|
94
166
|
/**
|
|
95
|
-
*
|
|
167
|
+
* Creates a `case` statement/operator.
|
|
168
|
+
*
|
|
169
|
+
* ### Examples
|
|
170
|
+
*
|
|
171
|
+
* Kitchen sink example with 2 flavors of `case` operator:
|
|
172
|
+
*
|
|
173
|
+
* ```ts
|
|
174
|
+
* import { sql } from 'kysely'
|
|
175
|
+
*
|
|
176
|
+
* const { title, name } = await db
|
|
177
|
+
* .selectFrom('person')
|
|
178
|
+
* .where('id', '=', '123')
|
|
179
|
+
* .select((eb) => [
|
|
180
|
+
* eb.fn.coalesce('last_name', 'first_name').as('name'),
|
|
181
|
+
* eb
|
|
182
|
+
* .case()
|
|
183
|
+
* .when('gender', '=', 'male')
|
|
184
|
+
* .then('Mr.')
|
|
185
|
+
* .when('gender', '=', 'female')
|
|
186
|
+
* .then(
|
|
187
|
+
* eb
|
|
188
|
+
* .case('martialStatus')
|
|
189
|
+
* .when('single')
|
|
190
|
+
* .then('Ms.')
|
|
191
|
+
* .else('Mrs.')
|
|
192
|
+
* .end()
|
|
193
|
+
* )
|
|
194
|
+
* .end()
|
|
195
|
+
* .as('title'),
|
|
196
|
+
* ])
|
|
197
|
+
* .executeTakeFirstOrThrow()
|
|
198
|
+
* ```
|
|
199
|
+
*
|
|
200
|
+
* The generated SQL (PostgreSQL):
|
|
201
|
+
*
|
|
202
|
+
* ```sql
|
|
203
|
+
* select
|
|
204
|
+
* coalesce("last_name", "first_name") as "name",
|
|
205
|
+
* case
|
|
206
|
+
* when "gender" = $1 then $2
|
|
207
|
+
* when "gender" = $3 then
|
|
208
|
+
* case "martialStatus"
|
|
209
|
+
* when $4 then $5
|
|
210
|
+
* else $6
|
|
211
|
+
* end
|
|
212
|
+
* end as "title"
|
|
213
|
+
* from "person"
|
|
214
|
+
* where "id" = $7
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
case(): CaseBuilder<DB, TB>;
|
|
218
|
+
case<C extends SimpleReferenceExpression<DB, TB>>(column: C): CaseBuilder<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, C>>;
|
|
219
|
+
case<O>(expression: Expression<O>): CaseBuilder<DB, TB, O>;
|
|
220
|
+
/**
|
|
221
|
+
* This method can be used to reference columns within the query's context. For
|
|
222
|
+
* a non-type-safe version of this method see {@link sql}'s version.
|
|
223
|
+
*
|
|
224
|
+
* Additionally, this method can be used to reference nested JSON properties or
|
|
225
|
+
* array elements. See {@link JSONPathBuilder} for more information.
|
|
96
226
|
*
|
|
97
227
|
* ### Examples
|
|
98
228
|
*
|
|
99
|
-
* By default the third argument of
|
|
229
|
+
* By default the third argument of binary expressions is a value.
|
|
100
230
|
* This function can be used to pass in a column reference instead:
|
|
101
231
|
*
|
|
102
232
|
* ```ts
|
|
103
233
|
* db.selectFrom('person')
|
|
104
234
|
* .selectAll('person')
|
|
105
|
-
* .where((
|
|
106
|
-
*
|
|
107
|
-
*
|
|
235
|
+
* .where((eb) => eb.or([
|
|
236
|
+
* eb('first_name', '=', eb.ref('last_name')),
|
|
237
|
+
* eb('first_name', '=', eb.ref('middle_name'))
|
|
108
238
|
* ]))
|
|
109
239
|
* ```
|
|
110
240
|
*
|
|
111
|
-
* In the next example we use the `ref` method to reference
|
|
112
|
-
*
|
|
113
|
-
* to create an upsert operation:
|
|
241
|
+
* In the next example we use the `ref` method to reference columns of the virtual
|
|
242
|
+
* table `excluded` in a type-safe way to create an upsert operation:
|
|
114
243
|
*
|
|
115
244
|
* ```ts
|
|
116
245
|
* db.insertInto('person')
|
|
@@ -124,142 +253,126 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
124
253
|
* )
|
|
125
254
|
* ```
|
|
126
255
|
*
|
|
127
|
-
* In the next example we use `ref` in a raw sql expression. Unless you
|
|
128
|
-
*
|
|
256
|
+
* In the next example we use `ref` in a raw sql expression. Unless you want
|
|
257
|
+
* to be as type-safe as possible, this is probably overkill:
|
|
129
258
|
*
|
|
130
259
|
* ```ts
|
|
131
260
|
* db.update('pet').set((eb) => ({
|
|
132
261
|
* name: sql`concat(${eb.ref('pet.name')}, ${suffix})`
|
|
133
262
|
* }))
|
|
134
263
|
* ```
|
|
135
|
-
*/
|
|
136
|
-
ref<RE extends StringReference<DB, TB>>(reference: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
137
|
-
/**
|
|
138
|
-
* Returns a value expression.
|
|
139
264
|
*
|
|
140
|
-
*
|
|
265
|
+
* In the next example we use `ref` to reference a nested JSON property:
|
|
141
266
|
*
|
|
142
|
-
*
|
|
267
|
+
* ```ts
|
|
268
|
+
* db.selectFrom('person')
|
|
269
|
+
* .where(({ cmpr, ref }) => cmpr(
|
|
270
|
+
* ref('address', '->').key('state').key('abbr'),
|
|
271
|
+
* '=',
|
|
272
|
+
* 'CA'
|
|
273
|
+
* ))
|
|
274
|
+
* .selectAll()
|
|
275
|
+
* ```
|
|
143
276
|
*
|
|
144
|
-
*
|
|
277
|
+
* The generated SQL (PostgreSQL):
|
|
145
278
|
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
279
|
+
* ```sql
|
|
280
|
+
* select * from "person" where "address"->'state'->'abbr' = $1
|
|
281
|
+
* ```
|
|
282
|
+
*
|
|
283
|
+
* You can also compile to a JSON path expression by using the `->$`or `->>$` operator:
|
|
148
284
|
*
|
|
149
285
|
* ```ts
|
|
150
|
-
*
|
|
286
|
+
* db.selectFrom('person')
|
|
287
|
+
* .select(({ ref }) =>
|
|
288
|
+
* ref('experience', '->$')
|
|
289
|
+
* .at('last')
|
|
290
|
+
* .key('title')
|
|
291
|
+
* .as('current_job')
|
|
292
|
+
* )
|
|
151
293
|
* ```
|
|
152
294
|
*
|
|
153
|
-
* The generated SQL (
|
|
295
|
+
* The generated SQL (MySQL):
|
|
154
296
|
*
|
|
155
297
|
* ```sql
|
|
156
|
-
* $
|
|
298
|
+
* select `experience`->'$[last].title' as `current_job` from `person`
|
|
157
299
|
* ```
|
|
158
300
|
*/
|
|
159
|
-
|
|
301
|
+
ref<RE extends StringReference<DB, TB>>(reference: RE): ExpressionWrapper<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
302
|
+
ref<RE extends StringReference<DB, TB>>(reference: RE, op: JSONOperatorWith$): JSONPathBuilder<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
160
303
|
/**
|
|
161
|
-
*
|
|
304
|
+
* Returns a value expression.
|
|
162
305
|
*
|
|
163
|
-
* This
|
|
164
|
-
* See the examples for a couple of possible use cases.
|
|
306
|
+
* This can be used to pass in a value where a reference is taken by default.
|
|
165
307
|
*
|
|
166
|
-
*
|
|
308
|
+
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
167
309
|
*
|
|
168
310
|
* ### Examples
|
|
169
311
|
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
312
|
+
* Binary expressions take a reference by default as the first argument. `val` could
|
|
313
|
+
* be used to pass in a value instead:
|
|
172
314
|
*
|
|
173
315
|
* ```ts
|
|
174
|
-
*
|
|
175
|
-
* .selectAll('person')
|
|
176
|
-
* .where(({ or, cmpr }) => or([
|
|
177
|
-
* cmpr('first_name', '=', 'Jennifer'),
|
|
178
|
-
* cmpr('fist_name', '=', 'Arnold'),
|
|
179
|
-
* cmpr('fist_name', '=', 'Sylvester')
|
|
180
|
-
* ]))
|
|
316
|
+
* eb(val(38), '=', ref('age'))
|
|
181
317
|
* ```
|
|
182
318
|
*
|
|
183
319
|
* The generated SQL (PostgreSQL):
|
|
184
320
|
*
|
|
185
321
|
* ```sql
|
|
186
|
-
*
|
|
187
|
-
* from "person"
|
|
188
|
-
* where "first_name" = $1
|
|
189
|
-
* or "first_name" = $2
|
|
190
|
-
* or "first_name" = $3
|
|
322
|
+
* $1 = "age"
|
|
191
323
|
* ```
|
|
324
|
+
*/
|
|
325
|
+
val<VE>(value: VE): ExpressionWrapper<DB, TB, ExtractTypeFromValueExpressionOrList<VE>>;
|
|
326
|
+
/**
|
|
327
|
+
* @deprecated Use the expression builder as a function instead.
|
|
192
328
|
*
|
|
193
|
-
*
|
|
194
|
-
* pass in a column reference instead:
|
|
329
|
+
* Before:
|
|
195
330
|
*
|
|
196
331
|
* ```ts
|
|
197
|
-
*
|
|
198
|
-
* .selectAll('person')
|
|
199
|
-
* .where(({ or, cmpr, ref }) => or([
|
|
200
|
-
* cmpr('first_name', '=', ref('last_name')),
|
|
201
|
-
* cmpr('first_name', '=', ref('middle_name'))
|
|
202
|
-
* ]))
|
|
332
|
+
* where((eb) => eb.cmpr('first_name', '=', 'Jennifer'))
|
|
203
333
|
* ```
|
|
204
334
|
*
|
|
205
|
-
*
|
|
335
|
+
* After:
|
|
206
336
|
*
|
|
207
|
-
* ```
|
|
208
|
-
*
|
|
209
|
-
* from "person"
|
|
210
|
-
* where "first_name" = "last_name"
|
|
211
|
-
* or "first_name" = "middle_name"
|
|
337
|
+
* ```ts
|
|
338
|
+
* where((eb) => eb('first_name', '=', 'Jennifer'))
|
|
212
339
|
* ```
|
|
213
|
-
*/
|
|
214
|
-
cmpr<O extends SqlBool = SqlBool, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<O>;
|
|
215
|
-
/**
|
|
216
|
-
* Creates a binary expression.
|
|
217
|
-
*
|
|
218
|
-
* See {@link cmpr} for creating binary comparison operations.
|
|
219
|
-
*
|
|
220
|
-
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
221
|
-
* See the examples for a couple of possible use cases.
|
|
222
340
|
*
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
* In the following example `bxp` is used to increment an integer column:
|
|
341
|
+
* or
|
|
226
342
|
*
|
|
227
343
|
* ```ts
|
|
228
|
-
*
|
|
229
|
-
* .set((eb) => ({
|
|
230
|
-
* age: eb.bxp('age', '+', 1)
|
|
231
|
-
* }))
|
|
232
|
-
* .where('id', '=', id)
|
|
344
|
+
* where(({ eb }) => eb('first_name', '=', 'Jennifer'))
|
|
233
345
|
* ```
|
|
346
|
+
*/
|
|
347
|
+
cmpr<O extends SqlBool = SqlBool, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<DB, TB, O>;
|
|
348
|
+
/**
|
|
349
|
+
* @deprecated Use the expression builder as a function instead.
|
|
234
350
|
*
|
|
235
|
-
*
|
|
351
|
+
* Before:
|
|
236
352
|
*
|
|
237
|
-
* ```
|
|
238
|
-
*
|
|
239
|
-
*
|
|
240
|
-
*
|
|
353
|
+
* ```ts
|
|
354
|
+
* set((eb) => ({
|
|
355
|
+
* age: eb.bxp('age', '+', 10)
|
|
356
|
+
* }))
|
|
241
357
|
* ```
|
|
242
358
|
*
|
|
243
|
-
*
|
|
244
|
-
* pass in a column reference instead:
|
|
359
|
+
* After:
|
|
245
360
|
*
|
|
246
361
|
* ```ts
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
250
|
-
* }))
|
|
251
|
-
* .where('id', '=', id)
|
|
362
|
+
* set((eb) => ({
|
|
363
|
+
* age: eb('age', '+', 10)
|
|
364
|
+
* }))
|
|
252
365
|
* ```
|
|
253
366
|
*
|
|
254
|
-
*
|
|
367
|
+
* or
|
|
255
368
|
*
|
|
256
|
-
* ```
|
|
257
|
-
*
|
|
258
|
-
*
|
|
259
|
-
*
|
|
369
|
+
* ```ts
|
|
370
|
+
* set(({ eb }) => ({
|
|
371
|
+
* age: eb('age', '+', 10)
|
|
372
|
+
* }))
|
|
260
373
|
* ```
|
|
261
374
|
*/
|
|
262
|
-
bxp<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpression<DB, TB, RE>): ExpressionWrapper<OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
375
|
+
bxp<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpression<DB, TB, RE>): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
263
376
|
/**
|
|
264
377
|
* Creates an unary expression.
|
|
265
378
|
*
|
|
@@ -285,7 +398,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
285
398
|
* from "person"
|
|
286
399
|
* ```
|
|
287
400
|
*/
|
|
288
|
-
unary<RE extends ReferenceExpression<DB, TB>>(op: UnaryOperator, expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
401
|
+
unary<RE extends ReferenceExpression<DB, TB>>(op: UnaryOperator, expr: RE): ExpressionWrapper<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
289
402
|
/**
|
|
290
403
|
* Creates a `not` operation.
|
|
291
404
|
*
|
|
@@ -293,7 +406,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
293
406
|
*
|
|
294
407
|
* @see {@link unary}
|
|
295
408
|
*/
|
|
296
|
-
not<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
409
|
+
not<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
297
410
|
/**
|
|
298
411
|
* Creates an `exists` operation.
|
|
299
412
|
*
|
|
@@ -301,7 +414,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
301
414
|
*
|
|
302
415
|
* @see {@link unary}
|
|
303
416
|
*/
|
|
304
|
-
exists<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<SqlBool>;
|
|
417
|
+
exists<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<DB, TB, SqlBool>;
|
|
305
418
|
/**
|
|
306
419
|
* Creates a negation operation.
|
|
307
420
|
*
|
|
@@ -309,7 +422,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
309
422
|
*
|
|
310
423
|
* @see {@link unary}
|
|
311
424
|
*/
|
|
312
|
-
neg<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
425
|
+
neg<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
313
426
|
/**
|
|
314
427
|
* Combines two or more expressions using the logical `and` operator.
|
|
315
428
|
*
|
|
@@ -318,16 +431,16 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
318
431
|
*
|
|
319
432
|
* ### Examples
|
|
320
433
|
*
|
|
321
|
-
* In this example we use `and`
|
|
434
|
+
* In this example we use `and` to create a `WHERE expr1 AND expr2 AND expr3`
|
|
322
435
|
* statement:
|
|
323
436
|
*
|
|
324
437
|
* ```ts
|
|
325
438
|
* db.selectFrom('person')
|
|
326
439
|
* .selectAll('person')
|
|
327
|
-
* .where((
|
|
328
|
-
*
|
|
329
|
-
*
|
|
330
|
-
*
|
|
440
|
+
* .where((eb) => eb.and([
|
|
441
|
+
* eb('first_name', '=', 'Jennifer'),
|
|
442
|
+
* eb('fist_name', '=', 'Arnold'),
|
|
443
|
+
* eb('fist_name', '=', 'Sylvester')
|
|
331
444
|
* ]))
|
|
332
445
|
* ```
|
|
333
446
|
*
|
|
@@ -341,7 +454,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
341
454
|
* and "first_name" = $3
|
|
342
455
|
* ```
|
|
343
456
|
*/
|
|
344
|
-
and(
|
|
457
|
+
and(exprs: ReadonlyArray<Expression<SqlBool>>): ExpressionWrapper<DB, TB, SqlBool>;
|
|
345
458
|
/**
|
|
346
459
|
* Combines two or more expressions using the logical `or` operator.
|
|
347
460
|
*
|
|
@@ -350,16 +463,16 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
350
463
|
*
|
|
351
464
|
* ### Examples
|
|
352
465
|
*
|
|
353
|
-
* In this example we use `or`
|
|
466
|
+
* In this example we use `or` to create a `WHERE expr1 OR expr2 OR expr3`
|
|
354
467
|
* statement:
|
|
355
468
|
*
|
|
356
469
|
* ```ts
|
|
357
470
|
* db.selectFrom('person')
|
|
358
471
|
* .selectAll('person')
|
|
359
|
-
* .where((
|
|
360
|
-
*
|
|
361
|
-
*
|
|
362
|
-
*
|
|
472
|
+
* .where((eb) => or([
|
|
473
|
+
* eb('first_name', '=', 'Jennifer'),
|
|
474
|
+
* eb('fist_name', '=', 'Arnold'),
|
|
475
|
+
* eb('fist_name', '=', 'Sylvester')
|
|
363
476
|
* ]))
|
|
364
477
|
* ```
|
|
365
478
|
*
|
|
@@ -373,7 +486,48 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
373
486
|
* or "first_name" = $3
|
|
374
487
|
* ```
|
|
375
488
|
*/
|
|
376
|
-
or(
|
|
489
|
+
or(exprs: ReadonlyArray<Expression<SqlBool>>): ExpressionWrapper<DB, TB, SqlBool>;
|
|
490
|
+
/**
|
|
491
|
+
* Wraps the expression in parentheses.
|
|
492
|
+
*
|
|
493
|
+
* ### Examples
|
|
494
|
+
*
|
|
495
|
+
* ```ts
|
|
496
|
+
* db.selectFrom('person')
|
|
497
|
+
* .selectAll('person')
|
|
498
|
+
* .where((eb) => eb(eb.parens('age', '+', 1), '/', 100), '<', 0.1))
|
|
499
|
+
* ```
|
|
500
|
+
*
|
|
501
|
+
* The generated SQL (PostgreSQL):
|
|
502
|
+
*
|
|
503
|
+
* ```sql
|
|
504
|
+
* select "person".*
|
|
505
|
+
* from "person"
|
|
506
|
+
* where ("age" + $1) / $2 < $3
|
|
507
|
+
* ```
|
|
508
|
+
*
|
|
509
|
+
* You can also pass in any expression as the only argument:
|
|
510
|
+
*
|
|
511
|
+
* ```ts
|
|
512
|
+
* db.selectFrom('person')
|
|
513
|
+
* .selectAll('person')
|
|
514
|
+
* .where((eb) => parens(
|
|
515
|
+
* eb('age', '=', 1).or('age', '=', 2))
|
|
516
|
+
* ).and(
|
|
517
|
+
* eb('first_name', '=', 'Jennifer').or('first_name', '=', 'Arnold')
|
|
518
|
+
* ))
|
|
519
|
+
* ```
|
|
520
|
+
*
|
|
521
|
+
* The generated SQL (PostgreSQL):
|
|
522
|
+
*
|
|
523
|
+
* ```sql
|
|
524
|
+
* select "person".*
|
|
525
|
+
* from "person"
|
|
526
|
+
* where ("age" = $1 or "age" = $2) and ("first_name" = $3 or "first_name" = $4)
|
|
527
|
+
* ```
|
|
528
|
+
*/
|
|
529
|
+
parens<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
530
|
+
parens<T>(expr: Expression<T>): ExpressionWrapper<DB, TB, T>;
|
|
377
531
|
/**
|
|
378
532
|
* See {@link QueryCreator.withSchema}
|
|
379
533
|
*
|
|
@@ -5,8 +5,8 @@ import { parseTableExpressionOrList, } from '../parser/table-parser.js';
|
|
|
5
5
|
import { WithSchemaPlugin } from '../plugin/with-schema/with-schema-plugin.js';
|
|
6
6
|
import { createQueryId } from '../util/query-id.js';
|
|
7
7
|
import { createFunctionModule, } from '../query-builder/function-module.js';
|
|
8
|
-
import { parseStringReference, } from '../parser/reference-parser.js';
|
|
9
|
-
import { parseValueBinaryOperation, } from '../parser/binary-operation-parser.js';
|
|
8
|
+
import { parseJSONReference, parseReferenceExpression, parseStringReference, } from '../parser/reference-parser.js';
|
|
9
|
+
import { parseValueBinaryOperation, parseValueBinaryOperationOrExpression, } from '../parser/binary-operation-parser.js';
|
|
10
10
|
import { AndNode } from '../operation-node/and-node.js';
|
|
11
11
|
import { OrNode } from '../operation-node/or-node.js';
|
|
12
12
|
import { ParensNode } from '../operation-node/parens-node.js';
|
|
@@ -15,14 +15,20 @@ import { parseUnaryOperation } from '../parser/unary-operation-parser.js';
|
|
|
15
15
|
import { parseValueExpressionOrList, } from '../parser/value-parser.js';
|
|
16
16
|
import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';
|
|
17
17
|
import { ValueNode } from '../operation-node/value-node.js';
|
|
18
|
+
import { CaseBuilder } from '../query-builder/case-builder.js';
|
|
19
|
+
import { CaseNode } from '../operation-node/case-node.js';
|
|
20
|
+
import { isUndefined } from '../util/object-utils.js';
|
|
21
|
+
import { JSONPathBuilder } from '../query-builder/json-path-builder.js';
|
|
18
22
|
export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
|
|
23
|
+
function binary(lhs, op, rhs) {
|
|
24
|
+
return new ExpressionWrapper(parseValueBinaryOperation(lhs, op, rhs));
|
|
25
|
+
}
|
|
19
26
|
function unary(op, expr) {
|
|
20
27
|
return new ExpressionWrapper(parseUnaryOperation(op, expr));
|
|
21
28
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
},
|
|
29
|
+
const eb = Object.assign(binary, {
|
|
30
|
+
fn: undefined,
|
|
31
|
+
eb: undefined,
|
|
26
32
|
selectFrom(table) {
|
|
27
33
|
return new SelectQueryBuilder({
|
|
28
34
|
queryId: createQueryId(),
|
|
@@ -30,15 +36,27 @@ export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
|
|
|
30
36
|
queryNode: SelectQueryNode.create(parseTableExpressionOrList(table)),
|
|
31
37
|
});
|
|
32
38
|
},
|
|
33
|
-
|
|
34
|
-
return new
|
|
39
|
+
case(reference) {
|
|
40
|
+
return new CaseBuilder({
|
|
41
|
+
node: CaseNode.create(isUndefined(reference)
|
|
42
|
+
? undefined
|
|
43
|
+
: parseReferenceExpression(reference)),
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
ref(reference, op) {
|
|
47
|
+
if (isUndefined(op)) {
|
|
48
|
+
return new ExpressionWrapper(parseStringReference(reference));
|
|
49
|
+
}
|
|
50
|
+
return new JSONPathBuilder(parseJSONReference(reference, op));
|
|
35
51
|
},
|
|
36
52
|
val(value) {
|
|
37
53
|
return new ExpressionWrapper(parseValueExpressionOrList(value));
|
|
38
54
|
},
|
|
55
|
+
// @deprecated
|
|
39
56
|
cmpr(lhs, op, rhs) {
|
|
40
57
|
return new ExpressionWrapper(parseValueBinaryOperation(lhs, op, rhs));
|
|
41
58
|
},
|
|
59
|
+
// @deprecated
|
|
42
60
|
bxp(lhs, op, rhs) {
|
|
43
61
|
return new ExpressionWrapper(parseValueBinaryOperation(lhs, op, rhs));
|
|
44
62
|
},
|
|
@@ -78,10 +96,23 @@ export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
|
|
|
78
96
|
}
|
|
79
97
|
return new ExpressionWrapper(ParensNode.create(node));
|
|
80
98
|
},
|
|
99
|
+
parens(...args) {
|
|
100
|
+
const node = parseValueBinaryOperationOrExpression(args);
|
|
101
|
+
if (ParensNode.is(node)) {
|
|
102
|
+
// No double wrapping.
|
|
103
|
+
return new ExpressionWrapper(node);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
return new ExpressionWrapper(ParensNode.create(node));
|
|
107
|
+
}
|
|
108
|
+
},
|
|
81
109
|
withSchema(schema) {
|
|
82
110
|
return createExpressionBuilder(executor.withPluginAtFront(new WithSchemaPlugin(schema)));
|
|
83
111
|
},
|
|
84
|
-
};
|
|
112
|
+
});
|
|
113
|
+
eb.fn = createFunctionModule();
|
|
114
|
+
eb.eb = eb;
|
|
115
|
+
return eb;
|
|
85
116
|
}
|
|
86
117
|
export function expressionBuilder(_) {
|
|
87
118
|
return createExpressionBuilder();
|