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
|
@@ -65,17 +65,29 @@ class InsertQueryBuilder {
|
|
|
65
65
|
*
|
|
66
66
|
* ### Examples
|
|
67
67
|
*
|
|
68
|
+
* <!-- siteExample("insert", "Insert subquery", 50) -->
|
|
69
|
+
*
|
|
70
|
+
* You can create an `INSERT INTO SELECT FROM` query using the `expression` method:
|
|
71
|
+
*
|
|
68
72
|
* ```ts
|
|
69
|
-
* db.insertInto('person')
|
|
70
|
-
* .columns(['first_name'])
|
|
71
|
-
* .expression((eb) => eb
|
|
73
|
+
* const result = await db.insertInto('person')
|
|
74
|
+
* .columns(['first_name', 'last_name', 'age'])
|
|
75
|
+
* .expression((eb) => eb
|
|
76
|
+
* .selectFrom('pet')
|
|
77
|
+
* .select((eb) => [
|
|
78
|
+
* 'pet.name',
|
|
79
|
+
* eb.val('Petson').as('last_name'),
|
|
80
|
+
* eb.val(7).as('age'),
|
|
81
|
+
* ])
|
|
82
|
+
* )
|
|
83
|
+
* .execute()
|
|
72
84
|
* ```
|
|
73
85
|
*
|
|
74
86
|
* The generated SQL (PostgreSQL):
|
|
75
87
|
*
|
|
76
88
|
* ```sql
|
|
77
|
-
* insert into "person" ("first_name")
|
|
78
|
-
* select "pet"."name" from "pet"
|
|
89
|
+
* insert into "person" ("first_name", "last_name", "age")
|
|
90
|
+
* select "pet"."name", $1 as "first_name", $2 as "last_name" from "pet"
|
|
79
91
|
* ```
|
|
80
92
|
*/
|
|
81
93
|
expression(expression) {
|
|
@@ -340,12 +352,6 @@ class InsertQueryBuilder {
|
|
|
340
352
|
$call(func) {
|
|
341
353
|
return func(this);
|
|
342
354
|
}
|
|
343
|
-
/**
|
|
344
|
-
* @deprecated Use `$call` instead
|
|
345
|
-
*/
|
|
346
|
-
call(func) {
|
|
347
|
-
return this.$call(func);
|
|
348
|
-
}
|
|
349
355
|
/**
|
|
350
356
|
* Call `func(this)` if `condition` is true.
|
|
351
357
|
*
|
|
@@ -389,17 +395,6 @@ class InsertQueryBuilder {
|
|
|
389
395
|
...this.#props,
|
|
390
396
|
});
|
|
391
397
|
}
|
|
392
|
-
/**
|
|
393
|
-
* @deprecated Use `$if` instead
|
|
394
|
-
*/
|
|
395
|
-
if(condition, func) {
|
|
396
|
-
if (condition) {
|
|
397
|
-
return func(this);
|
|
398
|
-
}
|
|
399
|
-
return new InsertQueryBuilder({
|
|
400
|
-
...this.#props,
|
|
401
|
-
});
|
|
402
|
-
}
|
|
403
398
|
/**
|
|
404
399
|
* Change the output type of the query.
|
|
405
400
|
*
|
|
@@ -409,12 +404,6 @@ class InsertQueryBuilder {
|
|
|
409
404
|
$castTo() {
|
|
410
405
|
return new InsertQueryBuilder(this.#props);
|
|
411
406
|
}
|
|
412
|
-
/**
|
|
413
|
-
* @deprecated Use `$castTo` instead.
|
|
414
|
-
*/
|
|
415
|
-
castTo() {
|
|
416
|
-
return this.$castTo();
|
|
417
|
-
}
|
|
418
407
|
/**
|
|
419
408
|
* Narrows (parts of) the output type of the query.
|
|
420
409
|
*
|
|
@@ -502,12 +491,6 @@ class InsertQueryBuilder {
|
|
|
502
491
|
$assertType() {
|
|
503
492
|
return new InsertQueryBuilder(this.#props);
|
|
504
493
|
}
|
|
505
|
-
/**
|
|
506
|
-
* @deprecated Use `$assertType` instead.
|
|
507
|
-
*/
|
|
508
|
-
assertType() {
|
|
509
|
-
return new InsertQueryBuilder(this.#props);
|
|
510
|
-
}
|
|
511
494
|
/**
|
|
512
495
|
* Returns a copy of this InsertQueryBuilder instance with the given plugin installed.
|
|
513
496
|
*/
|
|
@@ -22,14 +22,13 @@
|
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
24
|
export declare class InsertResult {
|
|
25
|
-
#private;
|
|
26
|
-
constructor(insertId: bigint | undefined, numInsertedOrUpdatedRows: bigint | undefined);
|
|
27
25
|
/**
|
|
28
26
|
* The auto incrementing primary key
|
|
29
27
|
*/
|
|
30
|
-
|
|
28
|
+
readonly insertId: bigint | undefined;
|
|
31
29
|
/**
|
|
32
30
|
* Affected rows count.
|
|
33
31
|
*/
|
|
34
|
-
|
|
32
|
+
readonly numInsertedOrUpdatedRows: bigint | undefined;
|
|
33
|
+
constructor(insertId: bigint | undefined, numInsertedOrUpdatedRows: bigint | undefined);
|
|
35
34
|
}
|
|
@@ -25,26 +25,17 @@ exports.InsertResult = void 0;
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
class InsertResult {
|
|
28
|
-
#insertId;
|
|
29
|
-
#numInsertedOrUpdatedRows;
|
|
30
|
-
constructor(insertId, numInsertedOrUpdatedRows) {
|
|
31
|
-
this.#insertId = insertId;
|
|
32
|
-
this.#numInsertedOrUpdatedRows = numInsertedOrUpdatedRows;
|
|
33
|
-
}
|
|
34
28
|
/**
|
|
35
29
|
* The auto incrementing primary key
|
|
36
30
|
*/
|
|
37
|
-
|
|
38
|
-
return this.#insertId;
|
|
39
|
-
}
|
|
31
|
+
insertId;
|
|
40
32
|
/**
|
|
41
33
|
* Affected rows count.
|
|
42
34
|
*/
|
|
43
|
-
|
|
44
|
-
|
|
35
|
+
numInsertedOrUpdatedRows;
|
|
36
|
+
constructor(insertId, numInsertedOrUpdatedRows) {
|
|
37
|
+
this.insertId = insertId;
|
|
38
|
+
this.numInsertedOrUpdatedRows = numInsertedOrUpdatedRows;
|
|
45
39
|
}
|
|
46
40
|
}
|
|
47
41
|
exports.InsertResult = InsertResult;
|
|
48
|
-
for (const property of ['insertId', 'numInsertedOrUpdatedRows']) {
|
|
49
|
-
Object.defineProperty(InsertResult.prototype, property, { enumerable: true });
|
|
50
|
-
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
+
import { ExpressionBuilder } from '../expression/expression-builder.js';
|
|
1
2
|
import { Expression } from '../expression/expression.js';
|
|
2
3
|
import { JoinNode } from '../operation-node/join-node.js';
|
|
3
4
|
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
4
5
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
5
6
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
6
|
-
import { ExistsExpression } from '../parser/unary-operation-parser.js';
|
|
7
7
|
import { SqlBool } from '../util/type-utils.js';
|
|
8
|
-
import { OnExpressionBuilder } from './deprecated-on-expression-builder.js';
|
|
9
8
|
export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNodeSource {
|
|
10
9
|
#private;
|
|
11
10
|
constructor(props: JoinBuilderProps);
|
|
@@ -18,18 +17,6 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
|
|
|
18
17
|
on<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): JoinBuilder<DB, TB>;
|
|
19
18
|
on(factory: OnExpressionFactory<DB, TB>): JoinBuilder<DB, TB>;
|
|
20
19
|
on(expression: Expression<any>): JoinBuilder<DB, TB>;
|
|
21
|
-
/**
|
|
22
|
-
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
23
|
-
*/
|
|
24
|
-
orOn<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): JoinBuilder<DB, TB>;
|
|
25
|
-
/**
|
|
26
|
-
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
27
|
-
*/
|
|
28
|
-
orOn(factory: OnExpressionFactory<DB, TB>): JoinBuilder<DB, TB>;
|
|
29
|
-
/**
|
|
30
|
-
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
31
|
-
*/
|
|
32
|
-
orOn(expression: Expression<any>): JoinBuilder<DB, TB>;
|
|
33
20
|
/**
|
|
34
21
|
* Just like {@link WhereInterface.whereRef} but adds an item to the join's
|
|
35
22
|
* `on` clause instead.
|
|
@@ -37,26 +24,6 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
|
|
|
37
24
|
* See {@link WhereInterface.whereRef} for documentation and examples.
|
|
38
25
|
*/
|
|
39
26
|
onRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): JoinBuilder<DB, TB>;
|
|
40
|
-
/**
|
|
41
|
-
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
42
|
-
*/
|
|
43
|
-
orOnRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): JoinBuilder<DB, TB>;
|
|
44
|
-
/**
|
|
45
|
-
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
46
|
-
*/
|
|
47
|
-
onExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB>;
|
|
48
|
-
/**
|
|
49
|
-
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
50
|
-
*/
|
|
51
|
-
onNotExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB>;
|
|
52
|
-
/**
|
|
53
|
-
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
54
|
-
*/
|
|
55
|
-
orOnExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB>;
|
|
56
|
-
/**
|
|
57
|
-
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
58
|
-
*/
|
|
59
|
-
orOnNotExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB>;
|
|
60
27
|
/**
|
|
61
28
|
* Adds `on true`.
|
|
62
29
|
*/
|
|
@@ -71,5 +38,5 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
|
|
|
71
38
|
export interface JoinBuilderProps {
|
|
72
39
|
readonly joinNode: JoinNode;
|
|
73
40
|
}
|
|
74
|
-
|
|
41
|
+
type OnExpressionFactory<DB, TB extends keyof DB> = (eb: ExpressionBuilder<DB, TB>) => Expression<SqlBool>;
|
|
75
42
|
export {};
|
|
@@ -4,7 +4,6 @@ exports.JoinBuilder = void 0;
|
|
|
4
4
|
const join_node_js_1 = require("../operation-node/join-node.js");
|
|
5
5
|
const raw_node_js_1 = require("../operation-node/raw-node.js");
|
|
6
6
|
const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
|
|
7
|
-
const unary_operation_parser_js_1 = require("../parser/unary-operation-parser.js");
|
|
8
7
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
9
8
|
const prevent_await_js_1 = require("../util/prevent-await.js");
|
|
10
9
|
class JoinBuilder {
|
|
@@ -15,16 +14,7 @@ class JoinBuilder {
|
|
|
15
14
|
on(...args) {
|
|
16
15
|
return new JoinBuilder({
|
|
17
16
|
...this.#props,
|
|
18
|
-
joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, binary_operation_parser_js_1.
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
23
|
-
*/
|
|
24
|
-
orOn(...args) {
|
|
25
|
-
return new JoinBuilder({
|
|
26
|
-
...this.#props,
|
|
27
|
-
joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, binary_operation_parser_js_1.parseOn)(args)),
|
|
17
|
+
joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, binary_operation_parser_js_1.parseFilter)(args)),
|
|
28
18
|
});
|
|
29
19
|
}
|
|
30
20
|
/**
|
|
@@ -39,51 +29,6 @@ class JoinBuilder {
|
|
|
39
29
|
joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
|
|
40
30
|
});
|
|
41
31
|
}
|
|
42
|
-
/**
|
|
43
|
-
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
44
|
-
*/
|
|
45
|
-
orOnRef(lhs, op, rhs) {
|
|
46
|
-
return new JoinBuilder({
|
|
47
|
-
...this.#props,
|
|
48
|
-
joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
53
|
-
*/
|
|
54
|
-
onExists(arg) {
|
|
55
|
-
return new JoinBuilder({
|
|
56
|
-
...this.#props,
|
|
57
|
-
joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, unary_operation_parser_js_1.parseExists)(arg)),
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
62
|
-
*/
|
|
63
|
-
onNotExists(arg) {
|
|
64
|
-
return new JoinBuilder({
|
|
65
|
-
...this.#props,
|
|
66
|
-
joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, unary_operation_parser_js_1.parseNotExists)(arg)),
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
71
|
-
*/
|
|
72
|
-
orOnExists(arg) {
|
|
73
|
-
return new JoinBuilder({
|
|
74
|
-
...this.#props,
|
|
75
|
-
joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, unary_operation_parser_js_1.parseExists)(arg)),
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
80
|
-
*/
|
|
81
|
-
orOnNotExists(arg) {
|
|
82
|
-
return new JoinBuilder({
|
|
83
|
-
...this.#props,
|
|
84
|
-
joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, unary_operation_parser_js_1.parseNotExists)(arg)),
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
32
|
/**
|
|
88
33
|
* Adds `on true`.
|
|
89
34
|
*/
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { AliasedExpression, Expression } from '../expression/expression.js';
|
|
2
|
+
import { AliasNode } from '../operation-node/alias-node.js';
|
|
3
|
+
import { JSONReferenceNode } from '../operation-node/json-reference-node.js';
|
|
4
|
+
import { OperationNode } from '../operation-node/operation-node.js';
|
|
5
|
+
export declare class JSONPathBuilder<S, O = S> {
|
|
6
|
+
#private;
|
|
7
|
+
constructor(node: JSONReferenceNode);
|
|
8
|
+
/**
|
|
9
|
+
* Access an element of a JSON array in a specific location.
|
|
10
|
+
*
|
|
11
|
+
* Since there's no guarantee an element exists in the given array location, the
|
|
12
|
+
* resulting type is always nullable. If you're sure the element exists, you
|
|
13
|
+
* should use {@link SelectQueryBuilder.$assertType} to narrow the type safely.
|
|
14
|
+
*
|
|
15
|
+
* See also {@link key} to access properties of JSON objects.
|
|
16
|
+
*
|
|
17
|
+
* ### Examples
|
|
18
|
+
*
|
|
19
|
+
* ```ts
|
|
20
|
+
* db.selectFrom('person').select(eb =>
|
|
21
|
+
* eb.ref('nicknames', '->').at(0).as('primary_nickname')
|
|
22
|
+
* )
|
|
23
|
+
*
|
|
24
|
+
* The generated SQL (PostgreSQL):
|
|
25
|
+
*
|
|
26
|
+
* ```sql
|
|
27
|
+
* select "nicknames"->0 as "primary_nickname" from "person"
|
|
28
|
+
*```
|
|
29
|
+
*
|
|
30
|
+
* Combined with {@link key}:
|
|
31
|
+
*
|
|
32
|
+
* ```ts
|
|
33
|
+
* db.selectFrom('person').select(eb =>
|
|
34
|
+
* eb.ref('experience', '->').at(0).key('role').as('first_role')
|
|
35
|
+
* )
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* The generated SQL (PostgreSQL):
|
|
39
|
+
*
|
|
40
|
+
* ```sql
|
|
41
|
+
* select "experience"->0->'role' as "first_role" from "person"
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* You can use `'last'` to access the last element of the array in MySQL:
|
|
45
|
+
*
|
|
46
|
+
* ```ts
|
|
47
|
+
* db.selectFrom('person').select(eb =>
|
|
48
|
+
* eb.ref('nicknames', '->$').at('last').as('last_nickname')
|
|
49
|
+
* )
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* The generated SQL (MySQL):
|
|
53
|
+
*
|
|
54
|
+
* ```sql
|
|
55
|
+
* select `nicknames`->'$[last]' as `last_nickname` from `person`
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* Or `'#-1'` in SQLite:
|
|
59
|
+
*
|
|
60
|
+
* ```ts
|
|
61
|
+
* db.selectFrom('person').select(eb =>
|
|
62
|
+
* eb.ref('nicknames', '->>$').at('#-1').as('last_nickname')
|
|
63
|
+
* )
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* The generated SQL (SQLite):
|
|
67
|
+
*
|
|
68
|
+
* ```sql
|
|
69
|
+
* select "nicknames"->>'$[#-1]' as `last_nickname` from `person`
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
at<I extends any[] extends O ? number | 'last' | `#-${number}` : never, O2 = null | NonNullable<NonNullable<O>[keyof NonNullable<O> & number]>>(index: `${I}` extends `${any}.${any}` | `#--${any}` ? never : I): TraversedJSONPathBuilder<S, O2>;
|
|
73
|
+
/**
|
|
74
|
+
* Access a property of a JSON object.
|
|
75
|
+
*
|
|
76
|
+
* If a field is optional, the resulting type will be nullable.
|
|
77
|
+
*
|
|
78
|
+
* See also {@link at} to access elements of JSON arrays.
|
|
79
|
+
*
|
|
80
|
+
* ### Examples
|
|
81
|
+
*
|
|
82
|
+
* ```ts
|
|
83
|
+
* db.selectFrom('person').select(eb =>
|
|
84
|
+
* eb.ref('address', '->').key('city').as('city')
|
|
85
|
+
* )
|
|
86
|
+
* ```
|
|
87
|
+
*
|
|
88
|
+
* The generated SQL (PostgreSQL):
|
|
89
|
+
*
|
|
90
|
+
* ```sql
|
|
91
|
+
* select "address"->'city' as "city" from "person"
|
|
92
|
+
* ```
|
|
93
|
+
*
|
|
94
|
+
* Going deeper:
|
|
95
|
+
*
|
|
96
|
+
* ```ts
|
|
97
|
+
* db.selectFrom('person').select(eb =>
|
|
98
|
+
* eb.ref('profile', '->$').key('website').key('url').as('website_url')
|
|
99
|
+
* )
|
|
100
|
+
* ```
|
|
101
|
+
*
|
|
102
|
+
* The generated SQL (MySQL):
|
|
103
|
+
*
|
|
104
|
+
* ```sql
|
|
105
|
+
* select `profile`->'$.website.url' as `website_url` from `person`
|
|
106
|
+
* ```
|
|
107
|
+
*
|
|
108
|
+
* Combined with {@link at}:
|
|
109
|
+
*
|
|
110
|
+
* ```ts
|
|
111
|
+
* db.selectFrom('person').select(eb =>
|
|
112
|
+
* eb.ref('profile', '->').key('addresses').at(0).key('city').as('city')
|
|
113
|
+
* )
|
|
114
|
+
* ```
|
|
115
|
+
*
|
|
116
|
+
* The generated SQL (PostgreSQL):
|
|
117
|
+
*
|
|
118
|
+
* ```sql
|
|
119
|
+
* select "profile"->'addresses'->0->'city' as "city" from "person"
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
key<K extends any[] extends O ? never : O extends object ? keyof NonNullable<O> & string : never, O2 = undefined extends O ? null | NonNullable<NonNullable<O>[K]> : null extends O ? null | NonNullable<NonNullable<O>[K]> : NonNullable<O>[K]>(key: K): TraversedJSONPathBuilder<S, O2>;
|
|
123
|
+
}
|
|
124
|
+
export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O> implements Expression<O> {
|
|
125
|
+
#private;
|
|
126
|
+
constructor(node: JSONReferenceNode);
|
|
127
|
+
/** @private */
|
|
128
|
+
/**
|
|
129
|
+
* All expressions need to have this getter for complicated type-related reasons.
|
|
130
|
+
* Simply add this getter for your expression and always return `undefined` from it:
|
|
131
|
+
*
|
|
132
|
+
* ```ts
|
|
133
|
+
* class SomeExpression<T> implements Expression<T> {
|
|
134
|
+
* get expressionType(): T | undefined {
|
|
135
|
+
* return undefined
|
|
136
|
+
* }
|
|
137
|
+
* }
|
|
138
|
+
* ```
|
|
139
|
+
*
|
|
140
|
+
* The getter is needed to make the expression assignable to another expression only
|
|
141
|
+
* if the types `T` are assignable. Without this property (or some other property
|
|
142
|
+
* that references `T`), you could assing `Expression<string>` to `Expression<number>`.
|
|
143
|
+
*/
|
|
144
|
+
get expressionType(): O | undefined;
|
|
145
|
+
/**
|
|
146
|
+
* Returns an aliased version of the expression.
|
|
147
|
+
*
|
|
148
|
+
* In addition to slapping `as "the_alias"` to the end of the SQL,
|
|
149
|
+
* this method also provides strict typing:
|
|
150
|
+
*
|
|
151
|
+
* ```ts
|
|
152
|
+
* const result = await db
|
|
153
|
+
* .selectFrom('person')
|
|
154
|
+
* .select(eb =>
|
|
155
|
+
* eb.cmpr('first_name', '=', 'Jennifer').as('is_jennifer')
|
|
156
|
+
* )
|
|
157
|
+
* .executeTakeFirstOrThrow()
|
|
158
|
+
*
|
|
159
|
+
* // `is_jennifer: SqlBool` field exists in the result type.
|
|
160
|
+
* console.log(result.is_jennifer)
|
|
161
|
+
* ```
|
|
162
|
+
*
|
|
163
|
+
* The generated SQL (PostgreSQL):
|
|
164
|
+
*
|
|
165
|
+
* ```ts
|
|
166
|
+
* select "first_name" = $1 as "is_jennifer"
|
|
167
|
+
* from "person"
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
as<A extends string>(alias: A): AliasedExpression<O, A>;
|
|
171
|
+
as<A extends string>(alias: Expression<unknown>): AliasedExpression<O, A>;
|
|
172
|
+
/**
|
|
173
|
+
* Change the output type of the json path.
|
|
174
|
+
*
|
|
175
|
+
* This method call doesn't change the SQL in any way. This methods simply
|
|
176
|
+
* returns a copy of this `JSONPathBuilder` with a new output type.
|
|
177
|
+
*/
|
|
178
|
+
$castTo<T>(): JSONPathBuilder<T>;
|
|
179
|
+
/**
|
|
180
|
+
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
181
|
+
*
|
|
182
|
+
* If you are creating a custom expression, it's often easiest to use the {@link sql}
|
|
183
|
+
* template tag to build the node:
|
|
184
|
+
*
|
|
185
|
+
* ```ts
|
|
186
|
+
* class SomeExpression<T> implements Expression<T> {
|
|
187
|
+
* toOperationNode(): OperationNode {
|
|
188
|
+
* return sql`some sql here`.toOperationNode()
|
|
189
|
+
* }
|
|
190
|
+
* }
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
toOperationNode(): OperationNode;
|
|
194
|
+
}
|
|
195
|
+
export declare class AliasedJSONPathBuilder<O, A extends string> implements AliasedExpression<O, A> {
|
|
196
|
+
#private;
|
|
197
|
+
constructor(jsonPath: TraversedJSONPathBuilder<any, O>, alias: A | Expression<unknown>);
|
|
198
|
+
/** @private */
|
|
199
|
+
/**
|
|
200
|
+
* Returns the aliased expression.
|
|
201
|
+
*/
|
|
202
|
+
get expression(): Expression<O>;
|
|
203
|
+
/** @private */
|
|
204
|
+
/**
|
|
205
|
+
* Returns the alias.
|
|
206
|
+
*/
|
|
207
|
+
get alias(): A | Expression<unknown>;
|
|
208
|
+
/**
|
|
209
|
+
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
210
|
+
*/
|
|
211
|
+
toOperationNode(): AliasNode;
|
|
212
|
+
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AliasedJSONPathBuilder = exports.TraversedJSONPathBuilder = exports.JSONPathBuilder = void 0;
|
|
4
|
+
const alias_node_js_1 = require("../operation-node/alias-node.js");
|
|
5
|
+
const identifier_node_js_1 = require("../operation-node/identifier-node.js");
|
|
6
|
+
const json_operator_chain_node_js_1 = require("../operation-node/json-operator-chain-node.js");
|
|
7
|
+
const json_path_leg_node_js_1 = require("../operation-node/json-path-leg-node.js");
|
|
8
|
+
const json_path_node_js_1 = require("../operation-node/json-path-node.js");
|
|
9
|
+
const json_reference_node_js_1 = require("../operation-node/json-reference-node.js");
|
|
10
|
+
const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
|
|
11
|
+
const value_node_js_1 = require("../operation-node/value-node.js");
|
|
12
|
+
class JSONPathBuilder {
|
|
13
|
+
#node;
|
|
14
|
+
constructor(node) {
|
|
15
|
+
this.#node = node;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Access an element of a JSON array in a specific location.
|
|
19
|
+
*
|
|
20
|
+
* Since there's no guarantee an element exists in the given array location, the
|
|
21
|
+
* resulting type is always nullable. If you're sure the element exists, you
|
|
22
|
+
* should use {@link SelectQueryBuilder.$assertType} to narrow the type safely.
|
|
23
|
+
*
|
|
24
|
+
* See also {@link key} to access properties of JSON objects.
|
|
25
|
+
*
|
|
26
|
+
* ### Examples
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* db.selectFrom('person').select(eb =>
|
|
30
|
+
* eb.ref('nicknames', '->').at(0).as('primary_nickname')
|
|
31
|
+
* )
|
|
32
|
+
*
|
|
33
|
+
* The generated SQL (PostgreSQL):
|
|
34
|
+
*
|
|
35
|
+
* ```sql
|
|
36
|
+
* select "nicknames"->0 as "primary_nickname" from "person"
|
|
37
|
+
*```
|
|
38
|
+
*
|
|
39
|
+
* Combined with {@link key}:
|
|
40
|
+
*
|
|
41
|
+
* ```ts
|
|
42
|
+
* db.selectFrom('person').select(eb =>
|
|
43
|
+
* eb.ref('experience', '->').at(0).key('role').as('first_role')
|
|
44
|
+
* )
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* The generated SQL (PostgreSQL):
|
|
48
|
+
*
|
|
49
|
+
* ```sql
|
|
50
|
+
* select "experience"->0->'role' as "first_role" from "person"
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* You can use `'last'` to access the last element of the array in MySQL:
|
|
54
|
+
*
|
|
55
|
+
* ```ts
|
|
56
|
+
* db.selectFrom('person').select(eb =>
|
|
57
|
+
* eb.ref('nicknames', '->$').at('last').as('last_nickname')
|
|
58
|
+
* )
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* The generated SQL (MySQL):
|
|
62
|
+
*
|
|
63
|
+
* ```sql
|
|
64
|
+
* select `nicknames`->'$[last]' as `last_nickname` from `person`
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* Or `'#-1'` in SQLite:
|
|
68
|
+
*
|
|
69
|
+
* ```ts
|
|
70
|
+
* db.selectFrom('person').select(eb =>
|
|
71
|
+
* eb.ref('nicknames', '->>$').at('#-1').as('last_nickname')
|
|
72
|
+
* )
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* The generated SQL (SQLite):
|
|
76
|
+
*
|
|
77
|
+
* ```sql
|
|
78
|
+
* select "nicknames"->>'$[#-1]' as `last_nickname` from `person`
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
at(index) {
|
|
82
|
+
return this.#createBuilderWithPathLeg('ArrayLocation', index);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Access a property of a JSON object.
|
|
86
|
+
*
|
|
87
|
+
* If a field is optional, the resulting type will be nullable.
|
|
88
|
+
*
|
|
89
|
+
* See also {@link at} to access elements of JSON arrays.
|
|
90
|
+
*
|
|
91
|
+
* ### Examples
|
|
92
|
+
*
|
|
93
|
+
* ```ts
|
|
94
|
+
* db.selectFrom('person').select(eb =>
|
|
95
|
+
* eb.ref('address', '->').key('city').as('city')
|
|
96
|
+
* )
|
|
97
|
+
* ```
|
|
98
|
+
*
|
|
99
|
+
* The generated SQL (PostgreSQL):
|
|
100
|
+
*
|
|
101
|
+
* ```sql
|
|
102
|
+
* select "address"->'city' as "city" from "person"
|
|
103
|
+
* ```
|
|
104
|
+
*
|
|
105
|
+
* Going deeper:
|
|
106
|
+
*
|
|
107
|
+
* ```ts
|
|
108
|
+
* db.selectFrom('person').select(eb =>
|
|
109
|
+
* eb.ref('profile', '->$').key('website').key('url').as('website_url')
|
|
110
|
+
* )
|
|
111
|
+
* ```
|
|
112
|
+
*
|
|
113
|
+
* The generated SQL (MySQL):
|
|
114
|
+
*
|
|
115
|
+
* ```sql
|
|
116
|
+
* select `profile`->'$.website.url' as `website_url` from `person`
|
|
117
|
+
* ```
|
|
118
|
+
*
|
|
119
|
+
* Combined with {@link at}:
|
|
120
|
+
*
|
|
121
|
+
* ```ts
|
|
122
|
+
* db.selectFrom('person').select(eb =>
|
|
123
|
+
* eb.ref('profile', '->').key('addresses').at(0).key('city').as('city')
|
|
124
|
+
* )
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* The generated SQL (PostgreSQL):
|
|
128
|
+
*
|
|
129
|
+
* ```sql
|
|
130
|
+
* select "profile"->'addresses'->0->'city' as "city" from "person"
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
key(key) {
|
|
134
|
+
return this.#createBuilderWithPathLeg('Member', key);
|
|
135
|
+
}
|
|
136
|
+
#createBuilderWithPathLeg(legType, value) {
|
|
137
|
+
return new TraversedJSONPathBuilder(json_reference_node_js_1.JSONReferenceNode.cloneWithTraversal(this.#node, json_path_node_js_1.JSONPathNode.is(this.#node.traversal)
|
|
138
|
+
? json_path_node_js_1.JSONPathNode.cloneWithLeg(this.#node.traversal, json_path_leg_node_js_1.JSONPathLegNode.create(legType, value))
|
|
139
|
+
: json_operator_chain_node_js_1.JSONOperatorChainNode.cloneWithValue(this.#node.traversal, value_node_js_1.ValueNode.createImmediate(value))));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.JSONPathBuilder = JSONPathBuilder;
|
|
143
|
+
class TraversedJSONPathBuilder extends JSONPathBuilder {
|
|
144
|
+
#node;
|
|
145
|
+
constructor(node) {
|
|
146
|
+
super(node);
|
|
147
|
+
this.#node = node;
|
|
148
|
+
}
|
|
149
|
+
/** @private */
|
|
150
|
+
get expressionType() {
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
as(alias) {
|
|
154
|
+
return new AliasedJSONPathBuilder(this, alias);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Change the output type of the json path.
|
|
158
|
+
*
|
|
159
|
+
* This method call doesn't change the SQL in any way. This methods simply
|
|
160
|
+
* returns a copy of this `JSONPathBuilder` with a new output type.
|
|
161
|
+
*/
|
|
162
|
+
$castTo() {
|
|
163
|
+
return new JSONPathBuilder(this.#node);
|
|
164
|
+
}
|
|
165
|
+
toOperationNode() {
|
|
166
|
+
return this.#node;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
exports.TraversedJSONPathBuilder = TraversedJSONPathBuilder;
|
|
170
|
+
class AliasedJSONPathBuilder {
|
|
171
|
+
#jsonPath;
|
|
172
|
+
#alias;
|
|
173
|
+
constructor(jsonPath, alias) {
|
|
174
|
+
this.#jsonPath = jsonPath;
|
|
175
|
+
this.#alias = alias;
|
|
176
|
+
}
|
|
177
|
+
/** @private */
|
|
178
|
+
get expression() {
|
|
179
|
+
return this.#jsonPath;
|
|
180
|
+
}
|
|
181
|
+
/** @private */
|
|
182
|
+
get alias() {
|
|
183
|
+
return this.#alias;
|
|
184
|
+
}
|
|
185
|
+
toOperationNode() {
|
|
186
|
+
return alias_node_js_1.AliasNode.create(this.#jsonPath.toOperationNode(), (0, operation_node_source_js_1.isOperationNodeSource)(this.#alias)
|
|
187
|
+
? this.#alias.toOperationNode()
|
|
188
|
+
: identifier_node_js_1.IdentifierNode.create(this.#alias));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
exports.AliasedJSONPathBuilder = AliasedJSONPathBuilder;
|