kysely 0.25.0 → 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 +10 -563
- package/dist/cjs/dialect/database-introspector.d.ts +1 -1
- package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +2 -2
- 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 -4
- 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/expression/expression-builder.d.ts +207 -108
- package/dist/cjs/expression/expression-builder.js +28 -7
- package/dist/cjs/expression/expression-wrapper.d.ts +296 -5
- package/dist/cjs/expression/expression-wrapper.js +70 -2
- package/dist/cjs/helpers/postgres.d.ts +30 -18
- package/dist/cjs/helpers/postgres.js +30 -18
- package/dist/cjs/index.d.ts +6 -0
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/kysely.d.ts +23 -13
- package/dist/cjs/kysely.js +13 -9
- package/dist/cjs/migration/file-migration-provider.js +2 -2
- package/dist/cjs/operation-node/alter-column-node.d.ts +2 -3
- package/dist/cjs/operation-node/alter-column-node.js +2 -7
- package/dist/cjs/operation-node/alter-table-node.d.ts +2 -2
- 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 +2 -2
- 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 +8 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +33 -1
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +8 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/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/with-node.d.ts +1 -1
- package/dist/cjs/parser/binary-operation-parser.d.ts +9 -12
- package/dist/cjs/parser/binary-operation-parser.js +40 -119
- 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 +5 -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 +3 -3
- package/dist/cjs/parser/partition-by-parser.d.ts +2 -2
- package/dist/cjs/parser/reference-parser.d.ts +13 -9
- package/dist/cjs/parser/reference-parser.js +28 -16
- package/dist/cjs/parser/returning-parser.d.ts +2 -2
- package/dist/cjs/parser/select-parser.d.ts +10 -10
- package/dist/cjs/parser/table-parser.d.ts +12 -12
- 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 +12 -8
- 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 +11 -11
- package/dist/cjs/query-builder/case-builder.js +2 -2
- package/dist/cjs/query-builder/delete-query-builder.d.ts +84 -59
- package/dist/cjs/query-builder/delete-query-builder.js +1 -62
- 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 +44 -66
- package/dist/cjs/query-builder/having-interface.d.ts +2 -35
- package/dist/cjs/query-builder/insert-query-builder.d.ts +58 -47
- package/dist/cjs/query-builder/insert-query-builder.js +17 -34
- 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 +139 -134
- package/dist/cjs/query-builder/select-query-builder.js +24 -133
- package/dist/cjs/query-builder/update-query-builder.d.ts +89 -62
- package/dist/cjs/query-builder/update-query-builder.js +3 -63
- 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 +8 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +37 -2
- 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 +11 -5
- package/dist/cjs/schema/alter-column-builder.js +19 -21
- 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.js +1 -1
- 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 +1 -2
- package/dist/cjs/util/column-type.d.ts +22 -18
- 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 +4 -4
- package/dist/cjs/util/require-all-props.d.ts +1 -1
- package/dist/cjs/util/type-utils.d.ts +19 -19
- package/dist/esm/dialect/database-introspector.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +2 -2
- 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 -4
- 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/expression/expression-builder.d.ts +207 -108
- package/dist/esm/expression/expression-builder.js +30 -9
- package/dist/esm/expression/expression-wrapper.d.ts +296 -5
- package/dist/esm/expression/expression-wrapper.js +67 -1
- package/dist/esm/helpers/postgres.d.ts +30 -18
- package/dist/esm/helpers/postgres.js +30 -18
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/kysely.d.ts +23 -13
- package/dist/esm/kysely.js +13 -9
- package/dist/esm/operation-node/alter-column-node.d.ts +2 -3
- package/dist/esm/operation-node/alter-column-node.js +2 -7
- package/dist/esm/operation-node/alter-table-node.d.ts +2 -2
- 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 +2 -2
- 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 +8 -0
- package/dist/esm/operation-node/operation-node-transformer.js +33 -1
- package/dist/esm/operation-node/operation-node-visitor.d.ts +8 -0
- package/dist/esm/operation-node/operation-node-visitor.js +4 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/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/with-node.d.ts +1 -1
- package/dist/esm/parser/binary-operation-parser.d.ts +9 -12
- package/dist/esm/parser/binary-operation-parser.js +38 -114
- 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 +5 -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 +3 -3
- package/dist/esm/parser/partition-by-parser.d.ts +2 -2
- package/dist/esm/parser/reference-parser.d.ts +13 -9
- package/dist/esm/parser/reference-parser.js +26 -15
- package/dist/esm/parser/returning-parser.d.ts +2 -2
- package/dist/esm/parser/select-parser.d.ts +10 -10
- package/dist/esm/parser/table-parser.d.ts +12 -12
- 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 +12 -8
- 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 +11 -11
- package/dist/esm/query-builder/case-builder.js +3 -3
- package/dist/esm/query-builder/delete-query-builder.d.ts +84 -59
- package/dist/esm/query-builder/delete-query-builder.js +2 -63
- 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 +44 -66
- package/dist/esm/query-builder/having-interface.d.ts +2 -35
- package/dist/esm/query-builder/insert-query-builder.d.ts +58 -47
- package/dist/esm/query-builder/insert-query-builder.js +17 -34
- 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 +139 -134
- package/dist/esm/query-builder/select-query-builder.js +25 -134
- package/dist/esm/query-builder/update-query-builder.d.ts +89 -62
- package/dist/esm/query-builder/update-query-builder.js +4 -64
- 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 +8 -0
- package/dist/esm/query-compiler/default-query-compiler.js +37 -2
- 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 +11 -5
- package/dist/esm/schema/alter-column-builder.js +19 -21
- 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.js +2 -2
- 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 +1 -2
- package/dist/esm/util/column-type.d.ts +22 -18
- 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 +4 -4
- package/dist/esm/util/require-all-props.d.ts +1 -1
- package/dist/esm/util/type-utils.d.ts +19 -19
- 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,7 +1,14 @@
|
|
|
1
1
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
2
|
+
import { AndNode } from '../operation-node/and-node.js';
|
|
2
3
|
import { OperationNode } from '../operation-node/operation-node.js';
|
|
4
|
+
import { OrNode } from '../operation-node/or-node.js';
|
|
5
|
+
import { ParensNode } from '../operation-node/parens-node.js';
|
|
6
|
+
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
7
|
+
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
8
|
+
import { KyselyTypeError } from '../util/type-error.js';
|
|
9
|
+
import { SqlBool } from '../util/type-utils.js';
|
|
3
10
|
import { AliasedExpression, Expression } from './expression.js';
|
|
4
|
-
export declare class ExpressionWrapper<T> implements Expression<T> {
|
|
11
|
+
export declare class ExpressionWrapper<DB, TB extends keyof DB, T> implements Expression<T> {
|
|
5
12
|
#private;
|
|
6
13
|
constructor(node: OperationNode);
|
|
7
14
|
/** @private */
|
|
@@ -31,8 +38,8 @@ export declare class ExpressionWrapper<T> implements Expression<T> {
|
|
|
31
38
|
* ```ts
|
|
32
39
|
* const result = await db
|
|
33
40
|
* .selectFrom('person')
|
|
34
|
-
* .select(eb =>
|
|
35
|
-
* eb
|
|
41
|
+
* .select((eb) =>
|
|
42
|
+
* eb('first_name', '=', 'Jennifer').as('is_jennifer')
|
|
36
43
|
* )
|
|
37
44
|
* .executeTakeFirstOrThrow()
|
|
38
45
|
*
|
|
@@ -50,12 +57,136 @@ export declare class ExpressionWrapper<T> implements Expression<T> {
|
|
|
50
57
|
as<A extends string>(alias: A): AliasedExpression<T, A>;
|
|
51
58
|
as<A extends string>(alias: Expression<unknown>): AliasedExpression<T, A>;
|
|
52
59
|
/**
|
|
53
|
-
*
|
|
60
|
+
* Combines `this` and another expression using `OR`.
|
|
61
|
+
*
|
|
62
|
+
* Also see {@link ExpressionBuilder.or}
|
|
63
|
+
*
|
|
64
|
+
* ### Examples
|
|
65
|
+
*
|
|
66
|
+
* ```ts
|
|
67
|
+
* db.selectFrom('person')
|
|
68
|
+
* .selectAll()
|
|
69
|
+
* .where(eb => eb('first_name', '=', 'Jennifer')
|
|
70
|
+
* .or('first_name', '=', 'Arnold')
|
|
71
|
+
* .or('first_name', '=', 'Sylvester')
|
|
72
|
+
* )
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* The generated SQL (PostgreSQL):
|
|
76
|
+
*
|
|
77
|
+
* ```ts
|
|
78
|
+
* select *
|
|
79
|
+
* from "person"
|
|
80
|
+
* where (
|
|
81
|
+
* "first_name" = $1
|
|
82
|
+
* or "first_name" = $2
|
|
83
|
+
* or "first_name" = $3
|
|
84
|
+
* )
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* You can also pass any expression as the only argument to
|
|
88
|
+
* this method:
|
|
89
|
+
*
|
|
90
|
+
* ```ts
|
|
91
|
+
* db.selectFrom('person')
|
|
92
|
+
* .selectAll()
|
|
93
|
+
* .where(eb => eb('first_name', '=', 'Jennifer')
|
|
94
|
+
* .or(eb('first_name', '=', 'Sylvester').and('last_name', '=', 'Stallone'))
|
|
95
|
+
* .or(eb.exists(
|
|
96
|
+
* eb.selectFrom('pet')
|
|
97
|
+
* .select('id')
|
|
98
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
99
|
+
* )
|
|
100
|
+
* )
|
|
101
|
+
* ```
|
|
102
|
+
*
|
|
103
|
+
* The generated SQL (PostgreSQL):
|
|
104
|
+
*
|
|
105
|
+
* ```ts
|
|
106
|
+
* select *
|
|
107
|
+
* from "person"
|
|
108
|
+
* where (
|
|
109
|
+
* "first_name" = $1
|
|
110
|
+
* or ("first_name" = $2 and "last_name" = $3)
|
|
111
|
+
* or exists (
|
|
112
|
+
* select "id"
|
|
113
|
+
* from "pet"
|
|
114
|
+
* where "pet"."owner_id" = "person"."id"
|
|
115
|
+
* )
|
|
116
|
+
* )
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
or<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): T extends SqlBool ? OrWrapper<DB, TB, SqlBool> : KyselyTypeError<'or() method can only be called on boolean expressions'>;
|
|
120
|
+
or(expression: Expression<SqlBool>): T extends SqlBool ? OrWrapper<DB, TB, SqlBool> : KyselyTypeError<'or() method can only be called on boolean expressions'>;
|
|
121
|
+
/**
|
|
122
|
+
* Combines `this` and another expression using `AND`.
|
|
123
|
+
*
|
|
124
|
+
* Also see {@link ExpressionBuilder.and}
|
|
125
|
+
*
|
|
126
|
+
* ### Examples
|
|
127
|
+
*
|
|
128
|
+
* ```ts
|
|
129
|
+
* db.selectFrom('person')
|
|
130
|
+
* .selectAll()
|
|
131
|
+
* .where(eb => eb('first_name', '=', 'Jennifer')
|
|
132
|
+
* .and('last_name', '=', 'Aniston')
|
|
133
|
+
* .and('age', '>', 40)
|
|
134
|
+
* )
|
|
135
|
+
* ```
|
|
136
|
+
*
|
|
137
|
+
* The generated SQL (PostgreSQL):
|
|
138
|
+
*
|
|
139
|
+
* ```ts
|
|
140
|
+
* select *
|
|
141
|
+
* from "person"
|
|
142
|
+
* where (
|
|
143
|
+
* "first_name" = $1
|
|
144
|
+
* and "last_name" = $2
|
|
145
|
+
* and "age" > $3
|
|
146
|
+
* )
|
|
147
|
+
* ```
|
|
148
|
+
*
|
|
149
|
+
* You can also pass any expression as the only argument to
|
|
150
|
+
* this method:
|
|
151
|
+
*
|
|
152
|
+
* ```ts
|
|
153
|
+
* db.selectFrom('person')
|
|
154
|
+
* .selectAll()
|
|
155
|
+
* .where(eb => eb('first_name', '=', 'Jennifer')
|
|
156
|
+
* .and(eb('first_name', '=', 'Sylvester').or('last_name', '=', 'Stallone'))
|
|
157
|
+
* .and(eb.exists(
|
|
158
|
+
* eb.selectFrom('pet')
|
|
159
|
+
* .select('id')
|
|
160
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
161
|
+
* )
|
|
162
|
+
* )
|
|
163
|
+
* ```
|
|
164
|
+
*
|
|
165
|
+
* The generated SQL (PostgreSQL):
|
|
166
|
+
*
|
|
167
|
+
* ```ts
|
|
168
|
+
* select *
|
|
169
|
+
* from "person"
|
|
170
|
+
* where (
|
|
171
|
+
* "first_name" = $1
|
|
172
|
+
* and ("first_name" = $2 or "last_name" = $3)
|
|
173
|
+
* and exists (
|
|
174
|
+
* select "id"
|
|
175
|
+
* from "pet"
|
|
176
|
+
* where "pet"."owner_id" = "person"."id"
|
|
177
|
+
* )
|
|
178
|
+
* )
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
and<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): T extends SqlBool ? AndWrapper<DB, TB, SqlBool> : KyselyTypeError<'and() method can only be called on boolean expressions'>;
|
|
182
|
+
and(expression: Expression<SqlBool>): T extends SqlBool ? AndWrapper<DB, TB, SqlBool> : KyselyTypeError<'and() method can only be called on boolean expressions'>;
|
|
183
|
+
/**
|
|
184
|
+
* Change the output type of the expression.
|
|
54
185
|
*
|
|
55
186
|
* This method call doesn't change the SQL in any way. This methods simply
|
|
56
187
|
* returns a copy of this `ExpressionWrapper` with a new output type.
|
|
57
188
|
*/
|
|
58
|
-
$castTo<T>(): ExpressionWrapper<T>;
|
|
189
|
+
$castTo<T>(): ExpressionWrapper<DB, TB, T>;
|
|
59
190
|
/**
|
|
60
191
|
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
61
192
|
*
|
|
@@ -90,3 +221,163 @@ export declare class AliasedExpressionWrapper<T, A extends string> implements Al
|
|
|
90
221
|
*/
|
|
91
222
|
toOperationNode(): AliasNode;
|
|
92
223
|
}
|
|
224
|
+
export declare class OrWrapper<DB, TB extends keyof DB, T extends SqlBool> implements Expression<T> {
|
|
225
|
+
#private;
|
|
226
|
+
constructor(node: OrNode);
|
|
227
|
+
/** @private */
|
|
228
|
+
/**
|
|
229
|
+
* All expressions need to have this getter for complicated type-related reasons.
|
|
230
|
+
* Simply add this getter for your expression and always return `undefined` from it:
|
|
231
|
+
*
|
|
232
|
+
* ```ts
|
|
233
|
+
* class SomeExpression<T> implements Expression<T> {
|
|
234
|
+
* get expressionType(): T | undefined {
|
|
235
|
+
* return undefined
|
|
236
|
+
* }
|
|
237
|
+
* }
|
|
238
|
+
* ```
|
|
239
|
+
*
|
|
240
|
+
* The getter is needed to make the expression assignable to another expression only
|
|
241
|
+
* if the types `T` are assignable. Without this property (or some other property
|
|
242
|
+
* that references `T`), you could assing `Expression<string>` to `Expression<number>`.
|
|
243
|
+
*/
|
|
244
|
+
get expressionType(): T | undefined;
|
|
245
|
+
/**
|
|
246
|
+
* Returns an aliased version of the expression.
|
|
247
|
+
*
|
|
248
|
+
* In addition to slapping `as "the_alias"` to the end of the SQL,
|
|
249
|
+
* this method also provides strict typing:
|
|
250
|
+
*
|
|
251
|
+
* ```ts
|
|
252
|
+
* const result = await db
|
|
253
|
+
* .selectFrom('person')
|
|
254
|
+
* .select(eb =>
|
|
255
|
+
* eb('first_name', '=', 'Jennifer')
|
|
256
|
+
* .or('first_name', '=', 'Sylvester')
|
|
257
|
+
* .as('is_jennifer_or_sylvester')
|
|
258
|
+
* )
|
|
259
|
+
* .executeTakeFirstOrThrow()
|
|
260
|
+
*
|
|
261
|
+
* // `is_jennifer_or_sylvester: SqlBool` field exists in the result type.
|
|
262
|
+
* console.log(result.is_jennifer_or_sylvester)
|
|
263
|
+
* ```
|
|
264
|
+
*
|
|
265
|
+
* The generated SQL (PostgreSQL):
|
|
266
|
+
*
|
|
267
|
+
* ```ts
|
|
268
|
+
* select "first_name" = $1 or "first_name" = $2 as "is_jennifer_or_sylvester"
|
|
269
|
+
* from "person"
|
|
270
|
+
* ```
|
|
271
|
+
*/
|
|
272
|
+
as<A extends string>(alias: A): AliasedExpression<T, A>;
|
|
273
|
+
as<A extends string>(alias: Expression<unknown>): AliasedExpression<T, A>;
|
|
274
|
+
/**
|
|
275
|
+
* Combines `this` and another expression using `OR`.
|
|
276
|
+
*
|
|
277
|
+
* See {@link ExpressionWrapper.or} for examples.
|
|
278
|
+
*/
|
|
279
|
+
or<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): OrWrapper<DB, TB, T>;
|
|
280
|
+
or(expression: Expression<SqlBool>): OrWrapper<DB, TB, T>;
|
|
281
|
+
/**
|
|
282
|
+
* Change the output type of the expression.
|
|
283
|
+
*
|
|
284
|
+
* This method call doesn't change the SQL in any way. This methods simply
|
|
285
|
+
* returns a copy of this `OrWrapper` with a new output type.
|
|
286
|
+
*/
|
|
287
|
+
$castTo<T extends SqlBool>(): OrWrapper<DB, TB, T>;
|
|
288
|
+
/**
|
|
289
|
+
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
290
|
+
*
|
|
291
|
+
* If you are creating a custom expression, it's often easiest to use the {@link sql}
|
|
292
|
+
* template tag to build the node:
|
|
293
|
+
*
|
|
294
|
+
* ```ts
|
|
295
|
+
* class SomeExpression<T> implements Expression<T> {
|
|
296
|
+
* toOperationNode(): OperationNode {
|
|
297
|
+
* return sql`some sql here`.toOperationNode()
|
|
298
|
+
* }
|
|
299
|
+
* }
|
|
300
|
+
* ```
|
|
301
|
+
*/
|
|
302
|
+
toOperationNode(): ParensNode;
|
|
303
|
+
}
|
|
304
|
+
export declare class AndWrapper<DB, TB extends keyof DB, T extends SqlBool> implements Expression<T> {
|
|
305
|
+
#private;
|
|
306
|
+
constructor(node: AndNode);
|
|
307
|
+
/** @private */
|
|
308
|
+
/**
|
|
309
|
+
* All expressions need to have this getter for complicated type-related reasons.
|
|
310
|
+
* Simply add this getter for your expression and always return `undefined` from it:
|
|
311
|
+
*
|
|
312
|
+
* ```ts
|
|
313
|
+
* class SomeExpression<T> implements Expression<T> {
|
|
314
|
+
* get expressionType(): T | undefined {
|
|
315
|
+
* return undefined
|
|
316
|
+
* }
|
|
317
|
+
* }
|
|
318
|
+
* ```
|
|
319
|
+
*
|
|
320
|
+
* The getter is needed to make the expression assignable to another expression only
|
|
321
|
+
* if the types `T` are assignable. Without this property (or some other property
|
|
322
|
+
* that references `T`), you could assing `Expression<string>` to `Expression<number>`.
|
|
323
|
+
*/
|
|
324
|
+
get expressionType(): T | undefined;
|
|
325
|
+
/**
|
|
326
|
+
* Returns an aliased version of the expression.
|
|
327
|
+
*
|
|
328
|
+
* In addition to slapping `as "the_alias"` to the end of the SQL,
|
|
329
|
+
* this method also provides strict typing:
|
|
330
|
+
*
|
|
331
|
+
* ```ts
|
|
332
|
+
* const result = await db
|
|
333
|
+
* .selectFrom('person')
|
|
334
|
+
* .select(eb =>
|
|
335
|
+
* eb('first_name', '=', 'Jennifer')
|
|
336
|
+
* .and('last_name', '=', 'Aniston')
|
|
337
|
+
* .as('is_jennifer_aniston')
|
|
338
|
+
* )
|
|
339
|
+
* .executeTakeFirstOrThrow()
|
|
340
|
+
*
|
|
341
|
+
* // `is_jennifer_aniston: SqlBool` field exists in the result type.
|
|
342
|
+
* console.log(result.is_jennifer_or_sylvester)
|
|
343
|
+
* ```
|
|
344
|
+
*
|
|
345
|
+
* The generated SQL (PostgreSQL):
|
|
346
|
+
*
|
|
347
|
+
* ```ts
|
|
348
|
+
* select "first_name" = $1 and "first_name" = $2 as "is_jennifer_aniston"
|
|
349
|
+
* from "person"
|
|
350
|
+
* ```
|
|
351
|
+
*/
|
|
352
|
+
as<A extends string>(alias: A): AliasedExpression<T, A>;
|
|
353
|
+
as<A extends string>(alias: Expression<unknown>): AliasedExpression<T, A>;
|
|
354
|
+
/**
|
|
355
|
+
* Combines `this` and another expression using `AND`.
|
|
356
|
+
*
|
|
357
|
+
* See {@link ExpressionWrapper.and} for examples.
|
|
358
|
+
*/
|
|
359
|
+
and<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): AndWrapper<DB, TB, T>;
|
|
360
|
+
and(expression: Expression<SqlBool>): AndWrapper<DB, TB, T>;
|
|
361
|
+
/**
|
|
362
|
+
* Change the output type of the expression.
|
|
363
|
+
*
|
|
364
|
+
* This method call doesn't change the SQL in any way. This methods simply
|
|
365
|
+
* returns a copy of this `AndWrapper` with a new output type.
|
|
366
|
+
*/
|
|
367
|
+
$castTo<T extends SqlBool>(): AndWrapper<DB, TB, T>;
|
|
368
|
+
/**
|
|
369
|
+
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
370
|
+
*
|
|
371
|
+
* If you are creating a custom expression, it's often easiest to use the {@link sql}
|
|
372
|
+
* template tag to build the node:
|
|
373
|
+
*
|
|
374
|
+
* ```ts
|
|
375
|
+
* class SomeExpression<T> implements Expression<T> {
|
|
376
|
+
* toOperationNode(): OperationNode {
|
|
377
|
+
* return sql`some sql here`.toOperationNode()
|
|
378
|
+
* }
|
|
379
|
+
* }
|
|
380
|
+
* ```
|
|
381
|
+
*/
|
|
382
|
+
toOperationNode(): ParensNode;
|
|
383
|
+
}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AliasedExpressionWrapper = exports.ExpressionWrapper = void 0;
|
|
3
|
+
exports.AndWrapper = exports.OrWrapper = exports.AliasedExpressionWrapper = exports.ExpressionWrapper = void 0;
|
|
4
4
|
const alias_node_js_1 = require("../operation-node/alias-node.js");
|
|
5
|
+
const and_node_js_1 = require("../operation-node/and-node.js");
|
|
5
6
|
const identifier_node_js_1 = require("../operation-node/identifier-node.js");
|
|
6
7
|
const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
|
|
8
|
+
const or_node_js_1 = require("../operation-node/or-node.js");
|
|
9
|
+
const parens_node_js_1 = require("../operation-node/parens-node.js");
|
|
10
|
+
const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
|
|
7
11
|
class ExpressionWrapper {
|
|
8
12
|
#node;
|
|
9
13
|
constructor(node) {
|
|
@@ -16,8 +20,14 @@ class ExpressionWrapper {
|
|
|
16
20
|
as(alias) {
|
|
17
21
|
return new AliasedExpressionWrapper(this, alias);
|
|
18
22
|
}
|
|
23
|
+
or(...args) {
|
|
24
|
+
return new OrWrapper(or_node_js_1.OrNode.create(this.#node, (0, binary_operation_parser_js_1.parseFilter)(args)));
|
|
25
|
+
}
|
|
26
|
+
and(...args) {
|
|
27
|
+
return new AndWrapper(and_node_js_1.AndNode.create(this.#node, (0, binary_operation_parser_js_1.parseFilter)(args)));
|
|
28
|
+
}
|
|
19
29
|
/**
|
|
20
|
-
* Change the output type of the
|
|
30
|
+
* Change the output type of the expression.
|
|
21
31
|
*
|
|
22
32
|
* This method call doesn't change the SQL in any way. This methods simply
|
|
23
33
|
* returns a copy of this `ExpressionWrapper` with a new output type.
|
|
@@ -52,3 +62,61 @@ class AliasedExpressionWrapper {
|
|
|
52
62
|
}
|
|
53
63
|
}
|
|
54
64
|
exports.AliasedExpressionWrapper = AliasedExpressionWrapper;
|
|
65
|
+
class OrWrapper {
|
|
66
|
+
#node;
|
|
67
|
+
constructor(node) {
|
|
68
|
+
this.#node = node;
|
|
69
|
+
}
|
|
70
|
+
/** @private */
|
|
71
|
+
get expressionType() {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
as(alias) {
|
|
75
|
+
return new AliasedExpressionWrapper(this, alias);
|
|
76
|
+
}
|
|
77
|
+
or(...args) {
|
|
78
|
+
return new OrWrapper(or_node_js_1.OrNode.create(this.#node, (0, binary_operation_parser_js_1.parseFilter)(args)));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Change the output type of the expression.
|
|
82
|
+
*
|
|
83
|
+
* This method call doesn't change the SQL in any way. This methods simply
|
|
84
|
+
* returns a copy of this `OrWrapper` with a new output type.
|
|
85
|
+
*/
|
|
86
|
+
$castTo() {
|
|
87
|
+
return new OrWrapper(this.#node);
|
|
88
|
+
}
|
|
89
|
+
toOperationNode() {
|
|
90
|
+
return parens_node_js_1.ParensNode.create(this.#node);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.OrWrapper = OrWrapper;
|
|
94
|
+
class AndWrapper {
|
|
95
|
+
#node;
|
|
96
|
+
constructor(node) {
|
|
97
|
+
this.#node = node;
|
|
98
|
+
}
|
|
99
|
+
/** @private */
|
|
100
|
+
get expressionType() {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
as(alias) {
|
|
104
|
+
return new AliasedExpressionWrapper(this, alias);
|
|
105
|
+
}
|
|
106
|
+
and(...args) {
|
|
107
|
+
return new AndWrapper(and_node_js_1.AndNode.create(this.#node, (0, binary_operation_parser_js_1.parseFilter)(args)));
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Change the output type of the expression.
|
|
111
|
+
*
|
|
112
|
+
* This method call doesn't change the SQL in any way. This methods simply
|
|
113
|
+
* returns a copy of this `AndWrapper` with a new output type.
|
|
114
|
+
*/
|
|
115
|
+
$castTo() {
|
|
116
|
+
return new AndWrapper(this.#node);
|
|
117
|
+
}
|
|
118
|
+
toOperationNode() {
|
|
119
|
+
return parens_node_js_1.ParensNode.create(this.#node);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.AndWrapper = AndWrapper;
|
|
@@ -4,13 +4,23 @@ import { Simplify } from '../util/type-utils.js';
|
|
|
4
4
|
/**
|
|
5
5
|
* A postgres helper for aggregating a subquery (or other expression) into a JSONB array.
|
|
6
6
|
*
|
|
7
|
-
* NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
|
|
8
|
-
* While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
|
|
9
|
-
* may not parse the nested results into arrays.
|
|
10
|
-
*
|
|
11
7
|
* ### Examples
|
|
12
8
|
*
|
|
9
|
+
* <!-- siteExample("select", "Nested array", 110) -->
|
|
10
|
+
*
|
|
11
|
+
* While kysely is not an ORM and it doesn't have the concept of relations, we do provide
|
|
12
|
+
* helpers for fetching nested objects and arrays in a single query. In this example we
|
|
13
|
+
* use the `jsonArrayFrom` helper to fetch person's pets along with the person's id.
|
|
14
|
+
*
|
|
15
|
+
* Please keep in mind that the helpers under the `kysely/helpers` folder, including
|
|
16
|
+
* `jsonArrayFrom`, are not guaranteed to work with third party dialects. In order for
|
|
17
|
+
* them to work, the dialect must automatically parse the `json` data type into
|
|
18
|
+
* javascript JSON values like objects and arrays. Some dialects might simply return
|
|
19
|
+
* the data as a JSON string.
|
|
20
|
+
*
|
|
13
21
|
* ```ts
|
|
22
|
+
* import { jsonArrayFrom } from 'kysely/helpers/postgres'
|
|
23
|
+
*
|
|
14
24
|
* const result = await db
|
|
15
25
|
* .selectFrom('person')
|
|
16
26
|
* .select((eb) => [
|
|
@@ -18,15 +28,11 @@ import { Simplify } from '../util/type-utils.js';
|
|
|
18
28
|
* jsonArrayFrom(
|
|
19
29
|
* eb.selectFrom('pet')
|
|
20
30
|
* .select(['pet.id as pet_id', 'pet.name'])
|
|
21
|
-
* .
|
|
31
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
22
32
|
* .orderBy('pet.name')
|
|
23
33
|
* ).as('pets')
|
|
24
34
|
* ])
|
|
25
35
|
* .execute()
|
|
26
|
-
*
|
|
27
|
-
* result[0].id
|
|
28
|
-
* result[0].pets[0].pet_id
|
|
29
|
-
* result[0].pets[0].name
|
|
30
36
|
* ```
|
|
31
37
|
*
|
|
32
38
|
* The generated SQL (PostgreSQL):
|
|
@@ -49,13 +55,23 @@ export declare function jsonArrayFrom<O>(expr: Expression<O>): RawBuilder<Simpli
|
|
|
49
55
|
*
|
|
50
56
|
* The subquery must only return one row.
|
|
51
57
|
*
|
|
52
|
-
* NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
|
|
53
|
-
* While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
|
|
54
|
-
* may not parse the nested results into objects.
|
|
55
|
-
*
|
|
56
58
|
* ### Examples
|
|
57
59
|
*
|
|
60
|
+
* <!-- siteExample("select", "Nested object", 120) -->
|
|
61
|
+
*
|
|
62
|
+
* While kysely is not an ORM and it doesn't have the concept of relations, we do provide
|
|
63
|
+
* helpers for fetching nested objects and arrays in a single query. In this example we
|
|
64
|
+
* use the `jsonObjectFrom` helper to fetch person's favorite pet along with the person's id.
|
|
65
|
+
*
|
|
66
|
+
* Please keep in mind that the helpers under the `kysely/helpers` folder, including
|
|
67
|
+
* `jsonObjectFrom`, are not guaranteed to work with third party dialects. In order for
|
|
68
|
+
* them to work, the dialect must automatically parse the `json` data type into
|
|
69
|
+
* javascript JSON values like objects and arrays. Some dialects might simply return
|
|
70
|
+
* the data as a JSON string.
|
|
71
|
+
*
|
|
58
72
|
* ```ts
|
|
73
|
+
* import { jsonObjectFrom } from 'kysely/helpers/postgres'
|
|
74
|
+
*
|
|
59
75
|
* const result = await db
|
|
60
76
|
* .selectFrom('person')
|
|
61
77
|
* .select((eb) => [
|
|
@@ -63,15 +79,11 @@ export declare function jsonArrayFrom<O>(expr: Expression<O>): RawBuilder<Simpli
|
|
|
63
79
|
* jsonObjectFrom(
|
|
64
80
|
* eb.selectFrom('pet')
|
|
65
81
|
* .select(['pet.id as pet_id', 'pet.name'])
|
|
66
|
-
* .
|
|
82
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
67
83
|
* .where('pet.is_favorite', '=', true)
|
|
68
84
|
* ).as('favorite_pet')
|
|
69
85
|
* ])
|
|
70
86
|
* .execute()
|
|
71
|
-
*
|
|
72
|
-
* result[0].id
|
|
73
|
-
* result[0].favorite_pet.pet_id
|
|
74
|
-
* result[0].favorite_pet.name
|
|
75
87
|
* ```
|
|
76
88
|
*
|
|
77
89
|
* The generated SQL (PostgreSQL):
|
|
@@ -5,13 +5,23 @@ const sql_js_1 = require("../raw-builder/sql.js");
|
|
|
5
5
|
/**
|
|
6
6
|
* A postgres helper for aggregating a subquery (or other expression) into a JSONB array.
|
|
7
7
|
*
|
|
8
|
-
* NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
|
|
9
|
-
* While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
|
|
10
|
-
* may not parse the nested results into arrays.
|
|
11
|
-
*
|
|
12
8
|
* ### Examples
|
|
13
9
|
*
|
|
10
|
+
* <!-- siteExample("select", "Nested array", 110) -->
|
|
11
|
+
*
|
|
12
|
+
* While kysely is not an ORM and it doesn't have the concept of relations, we do provide
|
|
13
|
+
* helpers for fetching nested objects and arrays in a single query. In this example we
|
|
14
|
+
* use the `jsonArrayFrom` helper to fetch person's pets along with the person's id.
|
|
15
|
+
*
|
|
16
|
+
* Please keep in mind that the helpers under the `kysely/helpers` folder, including
|
|
17
|
+
* `jsonArrayFrom`, are not guaranteed to work with third party dialects. In order for
|
|
18
|
+
* them to work, the dialect must automatically parse the `json` data type into
|
|
19
|
+
* javascript JSON values like objects and arrays. Some dialects might simply return
|
|
20
|
+
* the data as a JSON string.
|
|
21
|
+
*
|
|
14
22
|
* ```ts
|
|
23
|
+
* import { jsonArrayFrom } from 'kysely/helpers/postgres'
|
|
24
|
+
*
|
|
15
25
|
* const result = await db
|
|
16
26
|
* .selectFrom('person')
|
|
17
27
|
* .select((eb) => [
|
|
@@ -19,15 +29,11 @@ const sql_js_1 = require("../raw-builder/sql.js");
|
|
|
19
29
|
* jsonArrayFrom(
|
|
20
30
|
* eb.selectFrom('pet')
|
|
21
31
|
* .select(['pet.id as pet_id', 'pet.name'])
|
|
22
|
-
* .
|
|
32
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
23
33
|
* .orderBy('pet.name')
|
|
24
34
|
* ).as('pets')
|
|
25
35
|
* ])
|
|
26
36
|
* .execute()
|
|
27
|
-
*
|
|
28
|
-
* result[0].id
|
|
29
|
-
* result[0].pets[0].pet_id
|
|
30
|
-
* result[0].pets[0].name
|
|
31
37
|
* ```
|
|
32
38
|
*
|
|
33
39
|
* The generated SQL (PostgreSQL):
|
|
@@ -53,13 +59,23 @@ exports.jsonArrayFrom = jsonArrayFrom;
|
|
|
53
59
|
*
|
|
54
60
|
* The subquery must only return one row.
|
|
55
61
|
*
|
|
56
|
-
* NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
|
|
57
|
-
* While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
|
|
58
|
-
* may not parse the nested results into objects.
|
|
59
|
-
*
|
|
60
62
|
* ### Examples
|
|
61
63
|
*
|
|
64
|
+
* <!-- siteExample("select", "Nested object", 120) -->
|
|
65
|
+
*
|
|
66
|
+
* While kysely is not an ORM and it doesn't have the concept of relations, we do provide
|
|
67
|
+
* helpers for fetching nested objects and arrays in a single query. In this example we
|
|
68
|
+
* use the `jsonObjectFrom` helper to fetch person's favorite pet along with the person's id.
|
|
69
|
+
*
|
|
70
|
+
* Please keep in mind that the helpers under the `kysely/helpers` folder, including
|
|
71
|
+
* `jsonObjectFrom`, are not guaranteed to work with third party dialects. In order for
|
|
72
|
+
* them to work, the dialect must automatically parse the `json` data type into
|
|
73
|
+
* javascript JSON values like objects and arrays. Some dialects might simply return
|
|
74
|
+
* the data as a JSON string.
|
|
75
|
+
*
|
|
62
76
|
* ```ts
|
|
77
|
+
* import { jsonObjectFrom } from 'kysely/helpers/postgres'
|
|
78
|
+
*
|
|
63
79
|
* const result = await db
|
|
64
80
|
* .selectFrom('person')
|
|
65
81
|
* .select((eb) => [
|
|
@@ -67,15 +83,11 @@ exports.jsonArrayFrom = jsonArrayFrom;
|
|
|
67
83
|
* jsonObjectFrom(
|
|
68
84
|
* eb.selectFrom('pet')
|
|
69
85
|
* .select(['pet.id as pet_id', 'pet.name'])
|
|
70
|
-
* .
|
|
86
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
71
87
|
* .where('pet.is_favorite', '=', true)
|
|
72
88
|
* ).as('favorite_pet')
|
|
73
89
|
* ])
|
|
74
90
|
* .execute()
|
|
75
|
-
*
|
|
76
|
-
* result[0].id
|
|
77
|
-
* result[0].favorite_pet.pet_id
|
|
78
|
-
* result[0].favorite_pet.name
|
|
79
91
|
* ```
|
|
80
92
|
*
|
|
81
93
|
* The generated SQL (PostgreSQL):
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export * from './query-builder/update-result.js';
|
|
|
19
19
|
export * from './query-builder/on-conflict-builder.js';
|
|
20
20
|
export * from './query-builder/aggregate-function-builder.js';
|
|
21
21
|
export * from './query-builder/case-builder.js';
|
|
22
|
+
export * from './query-builder/json-path-builder.js';
|
|
22
23
|
export * from './raw-builder/raw-builder.js';
|
|
23
24
|
export * from './raw-builder/sql.js';
|
|
24
25
|
export * from './query-executor/query-executor.js';
|
|
@@ -79,6 +80,7 @@ export * from './plugin/kysely-plugin.js';
|
|
|
79
80
|
export * from './plugin/camel-case/camel-case-plugin.js';
|
|
80
81
|
export * from './plugin/deduplicate-joins/deduplicate-joins-plugin.js';
|
|
81
82
|
export * from './plugin/with-schema/with-schema-plugin.js';
|
|
83
|
+
export * from './plugin/parse-json-results/parse-json-results-plugin.js';
|
|
82
84
|
export * from './operation-node/add-column-node.js';
|
|
83
85
|
export * from './operation-node/add-constraint-node.js';
|
|
84
86
|
export * from './operation-node/alias-node.js';
|
|
@@ -164,6 +166,10 @@ export * from './operation-node/set-operation-node.js';
|
|
|
164
166
|
export * from './operation-node/binary-operation-node.js';
|
|
165
167
|
export * from './operation-node/unary-operation-node.js';
|
|
166
168
|
export * from './operation-node/using-node.js';
|
|
169
|
+
export * from './operation-node/json-reference-node.js';
|
|
170
|
+
export * from './operation-node/json-path-leg-node.js';
|
|
171
|
+
export * from './operation-node/json-path-node.js';
|
|
172
|
+
export * from './operation-node/json-operator-chain-node.js';
|
|
167
173
|
export * from './util/column-type.js';
|
|
168
174
|
export * from './util/compilable.js';
|
|
169
175
|
export * from './util/explainable.js';
|
package/dist/cjs/index.js
CHANGED
|
@@ -37,6 +37,7 @@ __exportStar(require("./query-builder/update-result.js"), exports);
|
|
|
37
37
|
__exportStar(require("./query-builder/on-conflict-builder.js"), exports);
|
|
38
38
|
__exportStar(require("./query-builder/aggregate-function-builder.js"), exports);
|
|
39
39
|
__exportStar(require("./query-builder/case-builder.js"), exports);
|
|
40
|
+
__exportStar(require("./query-builder/json-path-builder.js"), exports);
|
|
40
41
|
__exportStar(require("./raw-builder/raw-builder.js"), exports);
|
|
41
42
|
__exportStar(require("./raw-builder/sql.js"), exports);
|
|
42
43
|
__exportStar(require("./query-executor/query-executor.js"), exports);
|
|
@@ -97,6 +98,7 @@ __exportStar(require("./plugin/kysely-plugin.js"), exports);
|
|
|
97
98
|
__exportStar(require("./plugin/camel-case/camel-case-plugin.js"), exports);
|
|
98
99
|
__exportStar(require("./plugin/deduplicate-joins/deduplicate-joins-plugin.js"), exports);
|
|
99
100
|
__exportStar(require("./plugin/with-schema/with-schema-plugin.js"), exports);
|
|
101
|
+
__exportStar(require("./plugin/parse-json-results/parse-json-results-plugin.js"), exports);
|
|
100
102
|
__exportStar(require("./operation-node/add-column-node.js"), exports);
|
|
101
103
|
__exportStar(require("./operation-node/add-constraint-node.js"), exports);
|
|
102
104
|
__exportStar(require("./operation-node/alias-node.js"), exports);
|
|
@@ -182,6 +184,10 @@ __exportStar(require("./operation-node/set-operation-node.js"), exports);
|
|
|
182
184
|
__exportStar(require("./operation-node/binary-operation-node.js"), exports);
|
|
183
185
|
__exportStar(require("./operation-node/unary-operation-node.js"), exports);
|
|
184
186
|
__exportStar(require("./operation-node/using-node.js"), exports);
|
|
187
|
+
__exportStar(require("./operation-node/json-reference-node.js"), exports);
|
|
188
|
+
__exportStar(require("./operation-node/json-path-leg-node.js"), exports);
|
|
189
|
+
__exportStar(require("./operation-node/json-path-node.js"), exports);
|
|
190
|
+
__exportStar(require("./operation-node/json-operator-chain-node.js"), exports);
|
|
185
191
|
__exportStar(require("./util/column-type.js"), exports);
|
|
186
192
|
__exportStar(require("./util/compilable.js"), exports);
|
|
187
193
|
__exportStar(require("./util/explainable.js"), exports);
|