kysely 0.27.3 → 0.27.5
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/.renovaterc.json +3 -0
- package/CONTRIBUTING.md +2 -2
- package/README.md +7 -7
- package/deno.check.d.ts +86 -0
- package/deno.check.json +21 -0
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +13 -3
- package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
- package/dist/cjs/dialect/dialect-adapter.d.ts +16 -2
- package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +12 -7
- package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +83 -55
- package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
- package/dist/cjs/dialect/mssql/mssql-driver.js +114 -48
- package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +11 -2
- package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +4 -0
- package/dist/cjs/dialect/mysql/mysql-driver.js +3 -0
- package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +11 -2
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +10 -3
- package/dist/cjs/dialect/postgres/postgres-driver.js +3 -0
- package/dist/cjs/dialect/postgres/postgres-introspector.js +5 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +11 -2
- package/dist/cjs/driver/database-connection.d.ts +3 -1
- package/dist/cjs/driver/dummy-driver.d.ts +13 -12
- package/dist/cjs/driver/dummy-driver.js +13 -12
- package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
- package/dist/cjs/dynamic/dynamic.d.ts +7 -7
- package/dist/cjs/dynamic/dynamic.js +7 -7
- package/dist/cjs/expression/expression-builder.d.ts +153 -62
- package/dist/cjs/expression/expression-builder.js +2 -3
- package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
- package/dist/cjs/expression/expression.d.ts +40 -5
- package/dist/cjs/expression/expression.js +2 -3
- package/dist/cjs/helpers/mssql.d.ts +74 -14
- package/dist/cjs/helpers/mssql.js +77 -18
- package/dist/cjs/helpers/mysql.d.ts +17 -13
- package/dist/cjs/helpers/mysql.js +20 -17
- package/dist/cjs/helpers/postgres.d.ts +11 -8
- package/dist/cjs/helpers/postgres.js +14 -12
- package/dist/cjs/helpers/sqlite.d.ts +41 -16
- package/dist/cjs/helpers/sqlite.js +44 -20
- package/dist/cjs/index.d.ts +28 -21
- package/dist/cjs/index.js +28 -21
- package/dist/cjs/kysely.d.ts +100 -42
- package/dist/cjs/kysely.js +63 -39
- package/dist/cjs/migration/file-migration-provider.d.ts +2 -2
- package/dist/cjs/migration/file-migration-provider.js +2 -2
- package/dist/cjs/migration/migrator.d.ts +82 -14
- package/dist/cjs/migration/migrator.js +82 -14
- package/dist/cjs/operation-node/aggregate-function-node.d.ts +4 -0
- package/dist/cjs/operation-node/aggregate-function-node.js +9 -0
- package/dist/cjs/operation-node/alter-column-node.d.ts +1 -1
- package/dist/cjs/operation-node/case-node.d.ts +1 -1
- package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
- package/dist/cjs/operation-node/data-type-node.d.ts +2 -2
- package/dist/cjs/operation-node/data-type-node.js +17 -3
- package/dist/cjs/operation-node/delete-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -4
- package/dist/cjs/operation-node/having-node.d.ts +1 -1
- package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/merge-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/on-node.d.ts +1 -1
- package/dist/cjs/operation-node/operation-node-source.js +1 -2
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +11 -3
- package/dist/cjs/operation-node/operation-node-transformer.js +26 -3
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.d.ts +3 -3
- package/dist/cjs/operation-node/operator-node.js +8 -6
- package/dist/cjs/operation-node/output-node.d.ts +13 -0
- package/dist/cjs/operation-node/output-node.js +26 -0
- package/dist/cjs/operation-node/query-node.d.ts +15 -6
- package/dist/cjs/operation-node/query-node.js +17 -0
- package/dist/cjs/operation-node/select-query-node.d.ts +1 -1
- package/dist/cjs/operation-node/select-query-node.js +6 -8
- package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/where-node.d.ts +1 -1
- package/dist/cjs/parser/binary-operation-parser.js +5 -6
- package/dist/cjs/parser/data-type-parser.js +1 -2
- package/dist/cjs/parser/default-value-parser.js +1 -2
- package/dist/cjs/parser/expression-parser.js +3 -4
- package/dist/cjs/parser/fetch-parser.js +1 -2
- package/dist/cjs/parser/group-by-parser.js +1 -2
- package/dist/cjs/parser/identifier-parser.js +1 -2
- package/dist/cjs/parser/insert-values-parser.js +1 -2
- package/dist/cjs/parser/join-parser.js +1 -2
- package/dist/cjs/parser/merge-parser.js +2 -3
- package/dist/cjs/parser/on-commit-action-parse.js +1 -2
- package/dist/cjs/parser/on-modify-action-parser.js +1 -2
- package/dist/cjs/parser/order-by-parser.js +3 -4
- package/dist/cjs/parser/parse-utils.js +4 -5
- package/dist/cjs/parser/partition-by-parser.js +1 -2
- package/dist/cjs/parser/reference-parser.js +8 -9
- package/dist/cjs/parser/returning-parser.d.ts +4 -3
- package/dist/cjs/parser/select-parser.js +2 -3
- package/dist/cjs/parser/set-operation-parser.js +1 -2
- package/dist/cjs/parser/table-parser.js +4 -5
- package/dist/cjs/parser/top-parser.js +1 -2
- package/dist/cjs/parser/unary-operation-parser.js +3 -4
- package/dist/cjs/parser/update-set-parser.js +2 -3
- package/dist/cjs/parser/value-parser.js +4 -5
- package/dist/cjs/parser/with-parser.js +1 -2
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +54 -27
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +26 -21
- package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
- package/dist/cjs/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
- package/dist/cjs/plugin/kysely-plugin.d.ts +28 -6
- package/dist/cjs/plugin/noop-plugin.d.ts +28 -6
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +80 -9
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +53 -14
- package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +43 -1
- package/dist/cjs/query-builder/aggregate-function-builder.js +30 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +219 -43
- package/dist/cjs/query-builder/delete-query-builder.js +95 -31
- package/dist/cjs/query-builder/function-module.d.ts +40 -93
- package/dist/cjs/query-builder/function-module.js +1 -2
- package/dist/cjs/query-builder/insert-query-builder.d.ts +326 -67
- package/dist/cjs/query-builder/insert-query-builder.js +212 -61
- package/dist/cjs/query-builder/insert-result.d.ts +10 -5
- package/dist/cjs/query-builder/insert-result.js +10 -5
- package/dist/cjs/query-builder/json-path-builder.d.ts +33 -9
- package/dist/cjs/query-builder/json-path-builder.js +8 -5
- package/dist/cjs/query-builder/merge-query-builder.d.ts +312 -10
- package/dist/cjs/query-builder/merge-query-builder.js +98 -7
- package/dist/cjs/query-builder/no-result-error.js +2 -2
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +53 -20
- package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
- package/dist/cjs/query-builder/output-interface.d.ts +138 -0
- package/dist/cjs/query-builder/output-interface.js +2 -0
- package/dist/cjs/query-builder/returning-interface.d.ts +7 -5
- package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +370 -73
- package/dist/cjs/query-builder/select-query-builder.js +14 -9
- package/dist/cjs/query-builder/update-query-builder.d.ts +225 -31
- package/dist/cjs/query-builder/update-query-builder.js +96 -17
- package/dist/cjs/query-builder/update-result.d.ts +9 -0
- package/dist/cjs/query-builder/update-result.js +9 -0
- package/dist/cjs/query-builder/where-interface.d.ts +6 -2
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +45 -1
- package/dist/cjs/query-creator.d.ts +122 -21
- package/dist/cjs/query-creator.js +56 -3
- package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
- package/dist/cjs/raw-builder/raw-builder.js +1 -2
- package/dist/cjs/raw-builder/sql.d.ts +31 -12
- package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
- package/dist/cjs/schema/alter-column-builder.js +20 -3
- package/dist/cjs/schema/alter-table-add-index-builder.d.ts +44 -10
- package/dist/cjs/schema/alter-table-add-index-builder.js +27 -10
- package/dist/cjs/schema/alter-table-builder.js +1 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +286 -24
- package/dist/cjs/schema/column-definition-builder.js +288 -24
- package/dist/cjs/schema/create-table-builder.d.ts +86 -33
- package/dist/cjs/schema/create-table-builder.js +86 -33
- package/dist/cjs/util/assert.js +2 -3
- package/dist/cjs/util/column-type.d.ts +5 -9
- package/dist/cjs/util/compilable.js +1 -2
- package/dist/cjs/util/json-object-args.js +1 -2
- package/dist/cjs/util/log-once.js +1 -2
- package/dist/cjs/util/object-utils.js +38 -26
- package/dist/cjs/util/performance-now.js +1 -2
- package/dist/cjs/util/prevent-await.js +1 -2
- package/dist/cjs/util/query-id.js +1 -2
- package/dist/cjs/util/random-string.js +1 -2
- package/dist/cjs/util/require-all-props.d.ts +4 -2
- package/dist/cjs/util/require-all-props.js +5 -4
- package/dist/cjs/util/stack-trace-utils.js +1 -2
- package/dist/cjs/util/streamable.d.ts +1 -1
- package/dist/cjs/util/type-utils.d.ts +4 -2
- package/dist/esm/dialect/dialect-adapter-base.d.ts +13 -3
- package/dist/esm/dialect/dialect-adapter-base.js +4 -1
- package/dist/esm/dialect/dialect-adapter.d.ts +16 -2
- package/dist/esm/dialect/mssql/mssql-adapter.d.ts +12 -7
- package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +83 -55
- package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
- package/dist/esm/dialect/mssql/mssql-driver.js +114 -48
- package/dist/esm/dialect/mysql/mysql-adapter.d.ts +11 -2
- package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +4 -0
- package/dist/esm/dialect/mysql/mysql-driver.js +3 -0
- package/dist/esm/dialect/postgres/postgres-adapter.d.ts +11 -2
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +10 -3
- package/dist/esm/dialect/postgres/postgres-driver.js +3 -0
- package/dist/esm/dialect/postgres/postgres-introspector.js +5 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +11 -2
- package/dist/esm/driver/database-connection.d.ts +3 -1
- package/dist/esm/driver/dummy-driver.d.ts +13 -12
- package/dist/esm/driver/dummy-driver.js +13 -12
- package/dist/esm/dynamic/dynamic.d.ts +7 -7
- package/dist/esm/dynamic/dynamic.js +7 -7
- package/dist/esm/expression/expression-builder.d.ts +153 -62
- package/dist/esm/expression/expression-wrapper.d.ts +92 -23
- package/dist/esm/expression/expression.d.ts +40 -5
- package/dist/esm/helpers/mssql.d.ts +74 -14
- package/dist/esm/helpers/mssql.js +74 -14
- package/dist/esm/helpers/mysql.d.ts +17 -13
- package/dist/esm/helpers/mysql.js +17 -13
- package/dist/esm/helpers/postgres.d.ts +11 -8
- package/dist/esm/helpers/postgres.js +11 -8
- package/dist/esm/helpers/sqlite.d.ts +41 -16
- package/dist/esm/helpers/sqlite.js +41 -16
- package/dist/esm/index.d.ts +28 -21
- package/dist/esm/index.js +28 -21
- package/dist/esm/kysely.d.ts +100 -42
- package/dist/esm/kysely.js +61 -37
- package/dist/esm/migration/file-migration-provider.d.ts +2 -2
- package/dist/esm/migration/file-migration-provider.js +2 -2
- package/dist/esm/migration/migrator.d.ts +82 -14
- package/dist/esm/migration/migrator.js +82 -14
- package/dist/esm/operation-node/aggregate-function-node.d.ts +4 -0
- package/dist/esm/operation-node/aggregate-function-node.js +9 -0
- package/dist/esm/operation-node/alter-column-node.d.ts +1 -1
- package/dist/esm/operation-node/case-node.d.ts +1 -1
- package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
- package/dist/esm/operation-node/data-type-node.d.ts +2 -2
- package/dist/esm/operation-node/data-type-node.js +15 -1
- package/dist/esm/operation-node/delete-query-node.d.ts +3 -0
- package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -4
- package/dist/esm/operation-node/having-node.d.ts +1 -1
- package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
- package/dist/esm/operation-node/merge-query-node.d.ts +3 -0
- package/dist/esm/operation-node/on-node.d.ts +1 -1
- package/dist/esm/operation-node/operation-node-transformer.d.ts +11 -3
- package/dist/esm/operation-node/operation-node-transformer.js +26 -3
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +1 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.d.ts +3 -3
- package/dist/esm/operation-node/operator-node.js +2 -0
- package/dist/esm/operation-node/output-node.d.ts +13 -0
- package/dist/esm/operation-node/output-node.js +24 -0
- package/dist/esm/operation-node/query-node.d.ts +15 -6
- package/dist/esm/operation-node/query-node.js +17 -0
- package/dist/esm/operation-node/select-query-node.d.ts +1 -1
- package/dist/esm/operation-node/select-query-node.js +6 -8
- package/dist/esm/operation-node/update-query-node.d.ts +3 -0
- package/dist/esm/operation-node/where-node.d.ts +1 -1
- package/dist/esm/parser/returning-parser.d.ts +4 -3
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +54 -27
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +26 -21
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
- package/dist/esm/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
- package/dist/esm/plugin/kysely-plugin.d.ts +28 -6
- package/dist/esm/plugin/noop-plugin.d.ts +28 -6
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +80 -9
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +53 -14
- package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +43 -1
- package/dist/esm/query-builder/aggregate-function-builder.js +30 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +219 -43
- package/dist/esm/query-builder/delete-query-builder.js +95 -31
- package/dist/esm/query-builder/function-module.d.ts +40 -93
- package/dist/esm/query-builder/insert-query-builder.d.ts +326 -67
- package/dist/esm/query-builder/insert-query-builder.js +212 -61
- package/dist/esm/query-builder/insert-result.d.ts +10 -5
- package/dist/esm/query-builder/insert-result.js +10 -5
- package/dist/esm/query-builder/json-path-builder.d.ts +33 -9
- package/dist/esm/query-builder/json-path-builder.js +8 -5
- package/dist/esm/query-builder/merge-query-builder.d.ts +312 -10
- package/dist/esm/query-builder/merge-query-builder.js +98 -7
- package/dist/esm/query-builder/on-conflict-builder.d.ts +53 -20
- package/dist/esm/query-builder/on-conflict-builder.js +41 -16
- package/dist/esm/query-builder/output-interface.d.ts +138 -0
- package/dist/esm/query-builder/output-interface.js +2 -0
- package/dist/esm/query-builder/returning-interface.d.ts +7 -5
- package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +370 -73
- package/dist/esm/query-builder/select-query-builder.js +13 -7
- package/dist/esm/query-builder/update-query-builder.d.ts +225 -31
- package/dist/esm/query-builder/update-query-builder.js +96 -17
- package/dist/esm/query-builder/update-result.d.ts +9 -0
- package/dist/esm/query-builder/update-result.js +9 -0
- package/dist/esm/query-builder/where-interface.d.ts +6 -2
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/esm/query-compiler/default-query-compiler.js +45 -1
- package/dist/esm/query-creator.d.ts +122 -21
- package/dist/esm/query-creator.js +56 -3
- package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
- package/dist/esm/raw-builder/sql.d.ts +31 -12
- package/dist/esm/schema/alter-column-builder.d.ts +17 -3
- package/dist/esm/schema/alter-column-builder.js +20 -3
- package/dist/esm/schema/alter-table-add-index-builder.d.ts +44 -10
- package/dist/esm/schema/alter-table-add-index-builder.js +27 -10
- package/dist/esm/schema/alter-table-builder.js +1 -2
- package/dist/esm/schema/column-definition-builder.d.ts +286 -24
- package/dist/esm/schema/column-definition-builder.js +288 -24
- package/dist/esm/schema/create-table-builder.d.ts +86 -33
- package/dist/esm/schema/create-table-builder.js +86 -33
- package/dist/esm/util/column-type.d.ts +5 -9
- package/dist/esm/util/object-utils.js +18 -5
- package/dist/esm/util/require-all-props.d.ts +4 -2
- package/dist/esm/util/require-all-props.js +4 -2
- package/dist/esm/util/streamable.d.ts +1 -1
- package/dist/esm/util/type-utils.d.ts +4 -2
- package/package.json +30 -24
|
@@ -123,16 +123,29 @@ export class DeleteQueryBuilder {
|
|
|
123
123
|
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll(table)),
|
|
124
124
|
});
|
|
125
125
|
}
|
|
126
|
+
output(args) {
|
|
127
|
+
return new DeleteQueryBuilder({
|
|
128
|
+
...this.#props,
|
|
129
|
+
queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectArg(args)),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
outputAll(table) {
|
|
133
|
+
return new DeleteQueryBuilder({
|
|
134
|
+
...this.#props,
|
|
135
|
+
queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectAll(table)),
|
|
136
|
+
});
|
|
137
|
+
}
|
|
126
138
|
/**
|
|
127
139
|
* Clears all `returning` clauses from the query.
|
|
128
140
|
*
|
|
129
141
|
* ### Examples
|
|
130
142
|
*
|
|
131
143
|
* ```ts
|
|
132
|
-
* db.deleteFrom('pet')
|
|
144
|
+
* await db.deleteFrom('pet')
|
|
133
145
|
* .returningAll()
|
|
134
146
|
* .where('name', '=', 'Max')
|
|
135
147
|
* .clearReturning()
|
|
148
|
+
* .execute()
|
|
136
149
|
* ```
|
|
137
150
|
*
|
|
138
151
|
* The generated SQL(PostgreSQL):
|
|
@@ -153,11 +166,12 @@ export class DeleteQueryBuilder {
|
|
|
153
166
|
* ### Examples
|
|
154
167
|
*
|
|
155
168
|
* ```ts
|
|
156
|
-
* db.deleteFrom('pet')
|
|
169
|
+
* await db.deleteFrom('pet')
|
|
157
170
|
* .returningAll()
|
|
158
171
|
* .where('name', '=', 'Max')
|
|
159
172
|
* .limit(5)
|
|
160
173
|
* .clearLimit()
|
|
174
|
+
* .execute()
|
|
161
175
|
* ```
|
|
162
176
|
*
|
|
163
177
|
* The generated SQL(PostgreSQL):
|
|
@@ -178,11 +192,12 @@ export class DeleteQueryBuilder {
|
|
|
178
192
|
* ### Examples
|
|
179
193
|
*
|
|
180
194
|
* ```ts
|
|
181
|
-
* db.deleteFrom('pet')
|
|
195
|
+
* await db.deleteFrom('pet')
|
|
182
196
|
* .returningAll()
|
|
183
197
|
* .where('name', '=', 'Max')
|
|
184
198
|
* .orderBy('id')
|
|
185
199
|
* .clearOrderBy()
|
|
200
|
+
* .execute()
|
|
186
201
|
* ```
|
|
187
202
|
*
|
|
188
203
|
* The generated SQL(PostgreSQL):
|
|
@@ -254,6 +269,12 @@ export class DeleteQueryBuilder {
|
|
|
254
269
|
* .limit(5)
|
|
255
270
|
* .execute()
|
|
256
271
|
* ```
|
|
272
|
+
*
|
|
273
|
+
* The generated SQL (MySQL):
|
|
274
|
+
*
|
|
275
|
+
* ```sql
|
|
276
|
+
* delete from `pet` order by `created_at` limit ?
|
|
277
|
+
* ```
|
|
257
278
|
*/
|
|
258
279
|
limit(limit) {
|
|
259
280
|
return new DeleteQueryBuilder({
|
|
@@ -261,6 +282,33 @@ export class DeleteQueryBuilder {
|
|
|
261
282
|
queryNode: DeleteQueryNode.cloneWithLimit(this.#props.queryNode, LimitNode.create(parseValueExpression(limit))),
|
|
262
283
|
});
|
|
263
284
|
}
|
|
285
|
+
/**
|
|
286
|
+
* This can be used to add any additional SQL to the end of the query.
|
|
287
|
+
*
|
|
288
|
+
* ### Examples
|
|
289
|
+
*
|
|
290
|
+
* ```ts
|
|
291
|
+
* import { sql } from 'kysely'
|
|
292
|
+
*
|
|
293
|
+
* await db.deleteFrom('person')
|
|
294
|
+
* .where('first_name', '=', 'John')
|
|
295
|
+
* .modifyEnd(sql`-- This is a comment`)
|
|
296
|
+
* .execute()
|
|
297
|
+
* ```
|
|
298
|
+
*
|
|
299
|
+
* The generated SQL (MySQL):
|
|
300
|
+
*
|
|
301
|
+
* ```sql
|
|
302
|
+
* delete from `person`
|
|
303
|
+
* where `first_name` = "John" -- This is a comment
|
|
304
|
+
* ```
|
|
305
|
+
*/
|
|
306
|
+
modifyEnd(modifier) {
|
|
307
|
+
return new DeleteQueryBuilder({
|
|
308
|
+
...this.#props,
|
|
309
|
+
queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, modifier.toOperationNode()),
|
|
310
|
+
});
|
|
311
|
+
}
|
|
264
312
|
/**
|
|
265
313
|
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
266
314
|
* what the provided function returns.
|
|
@@ -273,12 +321,14 @@ export class DeleteQueryBuilder {
|
|
|
273
321
|
* The next example uses a helper function `log` to log a query:
|
|
274
322
|
*
|
|
275
323
|
* ```ts
|
|
324
|
+
* import type { Compilable } from 'kysely'
|
|
325
|
+
*
|
|
276
326
|
* function log<T extends Compilable>(qb: T): T {
|
|
277
327
|
* console.log(qb.compile())
|
|
278
328
|
* return qb
|
|
279
329
|
* }
|
|
280
330
|
*
|
|
281
|
-
* db.deleteFrom('person')
|
|
331
|
+
* await db.deleteFrom('person')
|
|
282
332
|
* .$call(log)
|
|
283
333
|
* .execute()
|
|
284
334
|
* ```
|
|
@@ -314,11 +364,11 @@ export class DeleteQueryBuilder {
|
|
|
314
364
|
* the code. In the example above the return type of the `deletePerson` function is:
|
|
315
365
|
*
|
|
316
366
|
* ```ts
|
|
317
|
-
* {
|
|
367
|
+
* Promise<{
|
|
318
368
|
* id: number
|
|
319
369
|
* first_name: string
|
|
320
370
|
* last_name?: string
|
|
321
|
-
* }
|
|
371
|
+
* }>
|
|
322
372
|
* ```
|
|
323
373
|
*/
|
|
324
374
|
$if(condition, func) {
|
|
@@ -355,25 +405,33 @@ export class DeleteQueryBuilder {
|
|
|
355
405
|
* Turn this code:
|
|
356
406
|
*
|
|
357
407
|
* ```ts
|
|
408
|
+
* import type { Person } from 'type-editor' // imaginary module
|
|
409
|
+
*
|
|
358
410
|
* const person = await db.deleteFrom('person')
|
|
359
|
-
* .where('id', '=',
|
|
411
|
+
* .where('id', '=', 3)
|
|
360
412
|
* .where('nullable_column', 'is not', null)
|
|
361
413
|
* .returningAll()
|
|
362
414
|
* .executeTakeFirstOrThrow()
|
|
363
415
|
*
|
|
364
|
-
* if (person
|
|
416
|
+
* if (isWithNoNullValue(person)) {
|
|
365
417
|
* functionThatExpectsPersonWithNonNullValue(person)
|
|
366
418
|
* }
|
|
419
|
+
*
|
|
420
|
+
* function isWithNoNullValue(person: Person): person is Person & { nullable_column: string } {
|
|
421
|
+
* return person.nullable_column != null
|
|
422
|
+
* }
|
|
367
423
|
* ```
|
|
368
424
|
*
|
|
369
425
|
* Into this:
|
|
370
426
|
*
|
|
371
427
|
* ```ts
|
|
428
|
+
* import type { NotNull } from 'kysely'
|
|
429
|
+
*
|
|
372
430
|
* const person = await db.deleteFrom('person')
|
|
373
|
-
* .where('id', '=',
|
|
431
|
+
* .where('id', '=', 3)
|
|
374
432
|
* .where('nullable_column', 'is not', null)
|
|
375
433
|
* .returningAll()
|
|
376
|
-
* .$narrowType<{ nullable_column:
|
|
434
|
+
* .$narrowType<{ nullable_column: NotNull }>()
|
|
377
435
|
* .executeTakeFirstOrThrow()
|
|
378
436
|
*
|
|
379
437
|
* functionThatExpectsPersonWithNonNullValue(person)
|
|
@@ -385,17 +443,17 @@ export class DeleteQueryBuilder {
|
|
|
385
443
|
/**
|
|
386
444
|
* Asserts that query's output row type equals the given type `T`.
|
|
387
445
|
*
|
|
388
|
-
* This method can be used to simplify excessively complex types to make
|
|
446
|
+
* This method can be used to simplify excessively complex types to make TypeScript happy
|
|
389
447
|
* and much faster.
|
|
390
448
|
*
|
|
391
449
|
* Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
|
|
392
|
-
* for
|
|
450
|
+
* for TypeScript and you get errors like this:
|
|
393
451
|
*
|
|
394
452
|
* ```
|
|
395
453
|
* error TS2589: Type instantiation is excessively deep and possibly infinite.
|
|
396
454
|
* ```
|
|
397
455
|
*
|
|
398
|
-
* In these case you can often use this method to help
|
|
456
|
+
* In these case you can often use this method to help TypeScript a little bit. When you use this
|
|
399
457
|
* method to assert the output type of a query, Kysely can drop the complex output type that
|
|
400
458
|
* consists of multiple nested helper types and replace it with the simple asserted type.
|
|
401
459
|
*
|
|
@@ -405,22 +463,26 @@ export class DeleteQueryBuilder {
|
|
|
405
463
|
* ### Examples
|
|
406
464
|
*
|
|
407
465
|
* ```ts
|
|
408
|
-
*
|
|
409
|
-
*
|
|
410
|
-
*
|
|
411
|
-
*
|
|
412
|
-
* .
|
|
413
|
-
*
|
|
414
|
-
*
|
|
415
|
-
*
|
|
416
|
-
*
|
|
417
|
-
*
|
|
418
|
-
* .
|
|
419
|
-
*
|
|
420
|
-
*
|
|
421
|
-
*
|
|
422
|
-
*
|
|
423
|
-
*
|
|
466
|
+
* import type { Species } from 'type-editor' // imaginary module
|
|
467
|
+
*
|
|
468
|
+
* async function deletePersonAndPets(personId: number) {
|
|
469
|
+
* return await db
|
|
470
|
+
* .with('deleted_person', (qb) => qb
|
|
471
|
+
* .deleteFrom('person')
|
|
472
|
+
* .where('id', '=', personId)
|
|
473
|
+
* .returning('first_name')
|
|
474
|
+
* .$assertType<{ first_name: string }>()
|
|
475
|
+
* )
|
|
476
|
+
* .with('deleted_pets', (qb) => qb
|
|
477
|
+
* .deleteFrom('pet')
|
|
478
|
+
* .where('owner_id', '=', personId)
|
|
479
|
+
* .returning(['name as pet_name', 'species'])
|
|
480
|
+
* .$assertType<{ pet_name: string, species: Species }>()
|
|
481
|
+
* )
|
|
482
|
+
* .selectFrom(['deleted_person', 'deleted_pets'])
|
|
483
|
+
* .selectAll()
|
|
484
|
+
* .execute()
|
|
485
|
+
* }
|
|
424
486
|
* ```
|
|
425
487
|
*/
|
|
426
488
|
$assertType() {
|
|
@@ -448,9 +510,11 @@ export class DeleteQueryBuilder {
|
|
|
448
510
|
*/
|
|
449
511
|
async execute() {
|
|
450
512
|
const compiledQuery = this.compile();
|
|
451
|
-
const query = compiledQuery.query;
|
|
452
513
|
const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
|
|
453
|
-
|
|
514
|
+
const { adapter } = this.#props.executor;
|
|
515
|
+
const query = compiledQuery.query;
|
|
516
|
+
if ((query.returning && adapter.supportsReturning) ||
|
|
517
|
+
(query.output && adapter.supportsOutput)) {
|
|
454
518
|
return result.rows;
|
|
455
519
|
}
|
|
456
520
|
return [
|
|
@@ -88,9 +88,10 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
88
88
|
* ### Examples
|
|
89
89
|
*
|
|
90
90
|
* ```ts
|
|
91
|
-
* db.selectFrom('person')
|
|
91
|
+
* await db.selectFrom('person')
|
|
92
92
|
* .selectAll('person')
|
|
93
93
|
* .where(db.fn('upper', ['first_name']), '=', 'JENNIFER')
|
|
94
|
+
* .execute()
|
|
94
95
|
* ```
|
|
95
96
|
*
|
|
96
97
|
* The generated SQL (PostgreSQL):
|
|
@@ -104,9 +105,12 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
104
105
|
* If you prefer readability over type-safety, you can always use raw `sql`:
|
|
105
106
|
*
|
|
106
107
|
* ```ts
|
|
107
|
-
*
|
|
108
|
+
* import { sql } from 'kysely'
|
|
109
|
+
*
|
|
110
|
+
* await db.selectFrom('person')
|
|
108
111
|
* .selectAll('person')
|
|
109
|
-
* .where(sql
|
|
112
|
+
* .where(sql<string>`upper(first_name)`, '=', 'JENNIFER')
|
|
113
|
+
* .execute()
|
|
110
114
|
* ```
|
|
111
115
|
*/
|
|
112
116
|
<O, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(name: string, args?: ReadonlyArray<RE>): ExpressionWrapper<DB, TB, O>;
|
|
@@ -123,11 +127,12 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
123
127
|
* ### Examples
|
|
124
128
|
*
|
|
125
129
|
* ```ts
|
|
126
|
-
* db.selectFrom('person')
|
|
130
|
+
* await db.selectFrom('person')
|
|
127
131
|
* .select(({ fn }) => [
|
|
128
132
|
* fn.agg<number>('rank').over().as('rank'),
|
|
129
133
|
* fn.agg<string>('group_concat', ['first_name']).distinct().as('first_names')
|
|
130
134
|
* ])
|
|
135
|
+
* .execute()
|
|
131
136
|
* ```
|
|
132
137
|
*
|
|
133
138
|
* The generated SQL (MySQL):
|
|
@@ -151,7 +156,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
151
156
|
* ### Examples
|
|
152
157
|
*
|
|
153
158
|
* ```ts
|
|
154
|
-
* db.selectFrom('toy')
|
|
159
|
+
* await db.selectFrom('toy')
|
|
155
160
|
* .select((eb) => eb.fn.avg('price').as('avg_price'))
|
|
156
161
|
* .execute()
|
|
157
162
|
* ```
|
|
@@ -162,18 +167,10 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
162
167
|
* select avg("price") as "avg_price" from "toy"
|
|
163
168
|
* ```
|
|
164
169
|
*
|
|
165
|
-
* You can limit column range to only columns participating in current query:
|
|
166
|
-
*
|
|
167
|
-
* ```ts
|
|
168
|
-
* db.selectFrom('toy')
|
|
169
|
-
* .select((eb) => eb.fn.avg('price').as('avg_price'))
|
|
170
|
-
* .execute()
|
|
171
|
-
* ```
|
|
172
|
-
*
|
|
173
170
|
* If this function is used in a `select` statement, the type of the selected
|
|
174
171
|
* expression will be `number | string` by default. This is because Kysely can't know the
|
|
175
172
|
* type the db driver outputs. Sometimes the output can be larger than the largest
|
|
176
|
-
*
|
|
173
|
+
* JavaScript number and a string is returned instead. Most drivers allow you
|
|
177
174
|
* to configure the output type of large numbers and Kysely can't know if you've
|
|
178
175
|
* done so.
|
|
179
176
|
*
|
|
@@ -181,7 +178,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
181
178
|
* the first type argument:
|
|
182
179
|
*
|
|
183
180
|
* ```ts
|
|
184
|
-
* db.selectFrom('toy')
|
|
181
|
+
* await db.selectFrom('toy')
|
|
185
182
|
* .select((eb) => eb.fn.avg<number>('price').as('avg_price'))
|
|
186
183
|
* .execute()
|
|
187
184
|
* ```
|
|
@@ -192,7 +189,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
192
189
|
* function.
|
|
193
190
|
*
|
|
194
191
|
* ```ts
|
|
195
|
-
* db.selectFrom('toy')
|
|
192
|
+
* await db.selectFrom('toy')
|
|
196
193
|
* .select((eb) => eb.fn.avg<number | null>('price').as('avg_price'))
|
|
197
194
|
* .execute()
|
|
198
195
|
* ```
|
|
@@ -219,35 +216,25 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
219
216
|
* ### Examples
|
|
220
217
|
*
|
|
221
218
|
* ```ts
|
|
222
|
-
*
|
|
223
|
-
*
|
|
224
|
-
*
|
|
219
|
+
* import { sql } from 'kysely'
|
|
220
|
+
*
|
|
221
|
+
* await db.selectFrom('person')
|
|
222
|
+
* .select((eb) => eb.fn.coalesce('nullable_column', sql.lit('<unknown>')).as('column'))
|
|
223
|
+
* .where('first_name', '=', 'Jessie')
|
|
225
224
|
* .execute()
|
|
226
225
|
* ```
|
|
227
226
|
*
|
|
228
227
|
* The generated SQL (PostgreSQL):
|
|
229
228
|
*
|
|
230
229
|
* ```sql
|
|
231
|
-
* select coalesce("
|
|
232
|
-
* from "participant" where "room_id" = $1
|
|
233
|
-
* ```
|
|
234
|
-
*
|
|
235
|
-
* You can limit column range to only columns participating in current query:
|
|
236
|
-
*
|
|
237
|
-
* ```ts
|
|
238
|
-
* db.selectFrom('participant')
|
|
239
|
-
* .select((eb) =>
|
|
240
|
-
* eb.fn.coalesce('nickname', sql<string>`'<anonymous>'`).as('nickname')
|
|
241
|
-
* )
|
|
242
|
-
* .where('room_id', '=', roomId)
|
|
243
|
-
* .execute()
|
|
230
|
+
* select coalesce("nullable_column", '<unknown>') as "column" from "person" where "first_name" = $1
|
|
244
231
|
* ```
|
|
245
232
|
*
|
|
246
233
|
* You can combine this function with other helpers in this module:
|
|
247
234
|
*
|
|
248
235
|
* ```ts
|
|
249
|
-
* db.selectFrom('person')
|
|
250
|
-
* .select((eb) => eb.fn.coalesce(eb.fn.avg<number | null>('age'),
|
|
236
|
+
* await db.selectFrom('person')
|
|
237
|
+
* .select((eb) => eb.fn.coalesce(eb.fn.avg<number | null>('age'), eb.lit(0)).as('avg_age'))
|
|
251
238
|
* .where('first_name', '=', 'Jennifer')
|
|
252
239
|
* .execute()
|
|
253
240
|
* ```
|
|
@@ -278,7 +265,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
278
265
|
* ### Examples
|
|
279
266
|
*
|
|
280
267
|
* ```ts
|
|
281
|
-
* db.selectFrom('toy')
|
|
268
|
+
* await db.selectFrom('toy')
|
|
282
269
|
* .select((eb) => eb.fn.count('id').as('num_toys'))
|
|
283
270
|
* .execute()
|
|
284
271
|
* ```
|
|
@@ -292,7 +279,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
292
279
|
* If this function is used in a `select` statement, the type of the selected
|
|
293
280
|
* expression will be `number | string | bigint` by default. This is because
|
|
294
281
|
* Kysely can't know the type the db driver outputs. Sometimes the output can
|
|
295
|
-
* be larger than the largest
|
|
282
|
+
* be larger than the largest JavaScript number and a string is returned instead.
|
|
296
283
|
* Most drivers allow you to configure the output type of large numbers and Kysely
|
|
297
284
|
* can't know if you've done so.
|
|
298
285
|
*
|
|
@@ -300,18 +287,10 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
300
287
|
* the type as the first type argument:
|
|
301
288
|
*
|
|
302
289
|
* ```ts
|
|
303
|
-
* db.selectFrom('toy')
|
|
290
|
+
* await db.selectFrom('toy')
|
|
304
291
|
* .select((eb) => eb.fn.count<number>('id').as('num_toys'))
|
|
305
292
|
* .execute()
|
|
306
293
|
* ```
|
|
307
|
-
*
|
|
308
|
-
* You can limit column range to only columns participating in current query:
|
|
309
|
-
*
|
|
310
|
-
* ```ts
|
|
311
|
-
* db.selectFrom('toy')
|
|
312
|
-
* .select((eb) => eb.fn.count('id').as('num_toys'))
|
|
313
|
-
* .execute()
|
|
314
|
-
* ```
|
|
315
294
|
*/
|
|
316
295
|
count<O extends number | string | bigint, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, O>;
|
|
317
296
|
/**
|
|
@@ -330,7 +309,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
330
309
|
* ### Examples
|
|
331
310
|
*
|
|
332
311
|
* ```ts
|
|
333
|
-
* db.selectFrom('toy')
|
|
312
|
+
* await db.selectFrom('toy')
|
|
334
313
|
* .select((eb) => eb.fn.countAll().as('num_toys'))
|
|
335
314
|
* .execute()
|
|
336
315
|
* ```
|
|
@@ -344,7 +323,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
344
323
|
* If this is used in a `select` statement, the type of the selected expression
|
|
345
324
|
* will be `number | string | bigint` by default. This is because Kysely
|
|
346
325
|
* can't know the type the db driver outputs. Sometimes the output can be larger
|
|
347
|
-
* than the largest
|
|
326
|
+
* than the largest JavaScript number and a string is returned instead. Most
|
|
348
327
|
* drivers allow you to configure the output type of large numbers and Kysely
|
|
349
328
|
* can't know if you've done so.
|
|
350
329
|
*
|
|
@@ -352,7 +331,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
352
331
|
* the type as the first type argument:
|
|
353
332
|
*
|
|
354
333
|
* ```ts
|
|
355
|
-
* db.selectFrom('toy')
|
|
334
|
+
* await db.selectFrom('toy')
|
|
356
335
|
* .select((eb) => eb.fn.countAll<number>().as('num_toys'))
|
|
357
336
|
* .execute()
|
|
358
337
|
* ```
|
|
@@ -361,7 +340,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
361
340
|
* table:
|
|
362
341
|
*
|
|
363
342
|
* ```ts
|
|
364
|
-
* db.selectFrom('toy')
|
|
343
|
+
* await db.selectFrom('toy')
|
|
365
344
|
* .innerJoin('pet', 'pet.id', 'toy.pet_id')
|
|
366
345
|
* .select((eb) => eb.fn.countAll('toy').as('num_toys'))
|
|
367
346
|
* .execute()
|
|
@@ -373,15 +352,6 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
373
352
|
* select count("toy".*) as "num_toys"
|
|
374
353
|
* from "toy" inner join "pet" on "pet"."id" = "toy"."pet_id"
|
|
375
354
|
* ```
|
|
376
|
-
*
|
|
377
|
-
* You can limit table range to only tables participating in current query:
|
|
378
|
-
*
|
|
379
|
-
* ```ts
|
|
380
|
-
* db.selectFrom('toy')
|
|
381
|
-
* .innerJoin('pet', 'pet.id', 'toy.pet_id')
|
|
382
|
-
* .select((eb) => eb.fn.countAll('toy').as('num_toys'))
|
|
383
|
-
* .execute()
|
|
384
|
-
* ```
|
|
385
355
|
*/
|
|
386
356
|
countAll<O extends number | string | bigint, T extends TB = TB>(table: T): AggregateFunctionBuilder<DB, TB, O>;
|
|
387
357
|
countAll<O extends number | string | bigint>(): AggregateFunctionBuilder<DB, TB, O>;
|
|
@@ -401,7 +371,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
401
371
|
* ### Examples
|
|
402
372
|
*
|
|
403
373
|
* ```ts
|
|
404
|
-
* db.selectFrom('toy')
|
|
374
|
+
* await db.selectFrom('toy')
|
|
405
375
|
* .select((eb) => eb.fn.max('price').as('max_price'))
|
|
406
376
|
* .execute()
|
|
407
377
|
* ```
|
|
@@ -412,21 +382,13 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
412
382
|
* select max("price") as "max_price" from "toy"
|
|
413
383
|
* ```
|
|
414
384
|
*
|
|
415
|
-
* You can limit column range to only columns participating in current query:
|
|
416
|
-
*
|
|
417
|
-
* ```ts
|
|
418
|
-
* db.selectFrom('toy')
|
|
419
|
-
* .select((eb) => eb.fn.max('price').as('max_price'))
|
|
420
|
-
* .execute()
|
|
421
|
-
* ```
|
|
422
|
-
*
|
|
423
385
|
* Sometimes a null is returned, e.g. when row count is 0, and no `group by`
|
|
424
386
|
* was used. It is highly recommended to include null in the output type union
|
|
425
387
|
* and handle null values in post-execute code, or wrap the function with a {@link coalesce}
|
|
426
388
|
* function.
|
|
427
389
|
*
|
|
428
390
|
* ```ts
|
|
429
|
-
* db.selectFrom('toy')
|
|
391
|
+
* await db.selectFrom('toy')
|
|
430
392
|
* .select((eb) => eb.fn.max<number | null>('price').as('max_price'))
|
|
431
393
|
* .execute()
|
|
432
394
|
* ```
|
|
@@ -448,7 +410,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
448
410
|
* ### Examples
|
|
449
411
|
*
|
|
450
412
|
* ```ts
|
|
451
|
-
* db.selectFrom('toy')
|
|
413
|
+
* await db.selectFrom('toy')
|
|
452
414
|
* .select((eb) => eb.fn.min('price').as('min_price'))
|
|
453
415
|
* .execute()
|
|
454
416
|
* ```
|
|
@@ -459,21 +421,13 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
459
421
|
* select min("price") as "min_price" from "toy"
|
|
460
422
|
* ```
|
|
461
423
|
*
|
|
462
|
-
* You can limit column range to only columns participating in current query:
|
|
463
|
-
*
|
|
464
|
-
* ```ts
|
|
465
|
-
* db.selectFrom('toy')
|
|
466
|
-
* .select((eb) => eb.fn.min('price').as('min_price'))
|
|
467
|
-
* .execute()
|
|
468
|
-
* ```
|
|
469
|
-
*
|
|
470
424
|
* Sometimes a null is returned, e.g. when row count is 0, and no `group by`
|
|
471
425
|
* was used. It is highly recommended to include null in the output type union
|
|
472
426
|
* and handle null values in post-execute code, or wrap the function with a {@link coalesce}
|
|
473
427
|
* function.
|
|
474
428
|
*
|
|
475
429
|
* ```ts
|
|
476
|
-
* db.selectFrom('toy')
|
|
430
|
+
* await db.selectFrom('toy')
|
|
477
431
|
* .select((eb) => eb.fn.min<number | null>('price').as('min_price'))
|
|
478
432
|
* .execute()
|
|
479
433
|
* ```
|
|
@@ -491,7 +445,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
491
445
|
* ### Examples
|
|
492
446
|
*
|
|
493
447
|
* ```ts
|
|
494
|
-
* db.selectFrom('toy')
|
|
448
|
+
* await db.selectFrom('toy')
|
|
495
449
|
* .select((eb) => eb.fn.sum('price').as('total_price'))
|
|
496
450
|
* .execute()
|
|
497
451
|
* ```
|
|
@@ -502,18 +456,10 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
502
456
|
* select sum("price") as "total_price" from "toy"
|
|
503
457
|
* ```
|
|
504
458
|
*
|
|
505
|
-
* You can limit column range to only columns participating in current query:
|
|
506
|
-
*
|
|
507
|
-
* ```ts
|
|
508
|
-
* db.selectFrom('toy')
|
|
509
|
-
* .select((eb) => eb.fn.sum('price').as('total_price'))
|
|
510
|
-
* .execute()
|
|
511
|
-
* ```
|
|
512
|
-
*
|
|
513
459
|
* If this function is used in a `select` statement, the type of the selected
|
|
514
460
|
* expression will be `number | string` by default. This is because Kysely can't know the
|
|
515
461
|
* type the db driver outputs. Sometimes the output can be larger than the largest
|
|
516
|
-
*
|
|
462
|
+
* JavaScript number and a string is returned instead. Most drivers allow you
|
|
517
463
|
* to configure the output type of large numbers and Kysely can't know if you've
|
|
518
464
|
* done so.
|
|
519
465
|
*
|
|
@@ -521,7 +467,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
521
467
|
* the first type argument:
|
|
522
468
|
*
|
|
523
469
|
* ```ts
|
|
524
|
-
* db.selectFrom('toy')
|
|
470
|
+
* await db.selectFrom('toy')
|
|
525
471
|
* .select((eb) => eb.fn.sum<number>('price').as('total_price'))
|
|
526
472
|
* .execute()
|
|
527
473
|
* ```
|
|
@@ -532,7 +478,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
532
478
|
* function.
|
|
533
479
|
*
|
|
534
480
|
* ```ts
|
|
535
|
-
* db.selectFrom('toy')
|
|
481
|
+
* await db.selectFrom('toy')
|
|
536
482
|
* .select((eb) => eb.fn.sum<number | null>('price').as('total_price'))
|
|
537
483
|
* .execute()
|
|
538
484
|
* ```
|
|
@@ -548,11 +494,12 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
548
494
|
* In the following example, `nicknames` is assumed to be a column of type `string[]`:
|
|
549
495
|
*
|
|
550
496
|
* ```ts
|
|
551
|
-
* db.selectFrom('person')
|
|
497
|
+
* await db.selectFrom('person')
|
|
552
498
|
* .selectAll('person')
|
|
553
499
|
* .where((eb) => eb(
|
|
554
500
|
* eb.val('Jen'), '=', eb.fn.any('person.nicknames')
|
|
555
501
|
* ))
|
|
502
|
+
* .execute()
|
|
556
503
|
* ```
|
|
557
504
|
*
|
|
558
505
|
*
|
|
@@ -576,7 +523,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
576
523
|
* This function is only available on PostgreSQL.
|
|
577
524
|
*
|
|
578
525
|
* ```ts
|
|
579
|
-
* db.selectFrom('person')
|
|
526
|
+
* await db.selectFrom('person')
|
|
580
527
|
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
581
528
|
* .select((eb) => ['first_name', eb.fn.jsonAgg('pet').as('pets')])
|
|
582
529
|
* .groupBy('person.first_name')
|
|
@@ -599,7 +546,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
599
546
|
* This function is only available on PostgreSQL.
|
|
600
547
|
*
|
|
601
548
|
* ```ts
|
|
602
|
-
* db.selectFrom('person')
|
|
549
|
+
* await db.selectFrom('person')
|
|
603
550
|
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
604
551
|
* .select((eb) => ['first_name', eb.fn.toJson('pet').as('pet')])
|
|
605
552
|
* .execute()
|