kysely 0.27.2 → 0.27.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +1 -1
- package/README.md +7 -7
- package/dist/cjs/dialect/database-introspector.d.ts +1 -0
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +2 -1
- package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
- package/dist/cjs/dialect/dialect-adapter.d.ts +5 -0
- package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +1 -5
- package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +46 -26
- package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
- package/dist/cjs/dialect/mssql/mssql-driver.js +95 -36
- package/dist/cjs/dialect/mssql/mssql-introspector.js +13 -2
- package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +4 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.js +8 -0
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
- package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -1
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/cjs/driver/database-connection.d.ts +4 -2
- package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
- package/dist/cjs/dynamic/dynamic.d.ts +1 -1
- package/dist/cjs/dynamic/dynamic.js +1 -1
- package/dist/cjs/expression/expression-builder.d.ts +31 -5
- package/dist/cjs/expression/expression-builder.js +7 -3
- package/dist/cjs/expression/expression.js +2 -3
- package/dist/cjs/helpers/mssql.js +3 -4
- package/dist/cjs/helpers/mysql.d.ts +3 -3
- package/dist/cjs/helpers/mysql.js +6 -7
- package/dist/cjs/helpers/postgres.d.ts +4 -4
- package/dist/cjs/helpers/postgres.js +7 -8
- package/dist/cjs/helpers/sqlite.js +3 -4
- package/dist/cjs/index.d.ts +31 -18
- package/dist/cjs/index.js +30 -17
- package/dist/cjs/kysely.d.ts +1 -1
- package/dist/cjs/kysely.js +3 -3
- package/dist/cjs/operation-node/add-index-node.js +1 -1
- 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/cast-node.d.ts +13 -0
- package/dist/cjs/operation-node/cast-node.js +19 -0
- package/dist/cjs/operation-node/column-definition-node.d.ts +2 -0
- package/dist/cjs/operation-node/data-type-node.d.ts +5 -1
- package/dist/cjs/operation-node/data-type-node.js +56 -0
- package/dist/cjs/operation-node/delete-query-node.d.ts +6 -0
- package/dist/cjs/operation-node/delete-query-node.js +12 -0
- package/dist/cjs/operation-node/fetch-node.d.ts +15 -0
- package/dist/cjs/operation-node/fetch-node.js +19 -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 +6 -1
- package/dist/cjs/operation-node/insert-query-node.js +5 -0
- package/dist/cjs/operation-node/join-node.d.ts +1 -1
- package/dist/cjs/operation-node/matched-node.d.ts +13 -0
- package/dist/cjs/operation-node/matched-node.js +19 -0
- package/dist/cjs/operation-node/merge-query-node.d.ts +27 -0
- package/dist/cjs/operation-node/merge-query-node.js +45 -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 +12 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +62 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +12 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +6 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.d.ts +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 +17 -5
- package/dist/cjs/operation-node/query-node.js +24 -1
- package/dist/cjs/operation-node/select-query-node.d.ts +6 -0
- package/dist/cjs/operation-node/select-query-node.js +12 -0
- package/dist/cjs/operation-node/top-node.d.ts +14 -0
- package/dist/cjs/operation-node/top-node.js +19 -0
- package/dist/cjs/operation-node/update-query-node.d.ts +9 -1
- package/dist/cjs/operation-node/update-query-node.js +11 -0
- package/dist/cjs/operation-node/where-node.d.ts +1 -1
- package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
- package/dist/cjs/parser/binary-operation-parser.js +7 -8
- package/dist/cjs/parser/data-type-parser.js +8 -5
- 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.d.ts +2 -0
- package/dist/cjs/parser/fetch-parser.js +17 -0
- 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.d.ts +3 -3
- 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.d.ts +9 -0
- package/dist/cjs/parser/merge-parser.js +31 -0
- 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.d.ts +4 -3
- package/dist/cjs/parser/table-parser.js +4 -5
- package/dist/cjs/parser/top-parser.d.ts +2 -0
- package/dist/cjs/parser/top-parser.js +19 -0
- 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 +2 -2
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +2 -2
- package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +4 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +188 -5
- package/dist/cjs/query-builder/delete-query-builder.js +139 -5
- package/dist/cjs/query-builder/function-module.d.ts +5 -5
- package/dist/cjs/query-builder/function-module.js +1 -2
- package/dist/cjs/query-builder/insert-query-builder.d.ts +166 -10
- package/dist/cjs/query-builder/insert-query-builder.js +107 -10
- package/dist/cjs/query-builder/merge-query-builder.d.ts +721 -0
- package/dist/cjs/query-builder/merge-query-builder.js +547 -0
- package/dist/cjs/query-builder/merge-result.d.ts +4 -0
- package/dist/cjs/query-builder/merge-result.js +10 -0
- package/dist/cjs/query-builder/no-result-error.js +2 -2
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +2 -2
- package/dist/cjs/query-builder/output-interface.d.ts +95 -0
- package/dist/cjs/query-builder/output-interface.js +2 -0
- package/dist/cjs/query-builder/returning-interface.d.ts +2 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +177 -17
- package/dist/cjs/query-builder/select-query-builder.js +21 -2
- package/dist/cjs/query-builder/update-query-builder.d.ts +175 -10
- package/dist/cjs/query-builder/update-query-builder.js +119 -7
- 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 +1 -1
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +12 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +118 -10
- package/dist/cjs/query-compiler/query-compiler.d.ts +2 -1
- package/dist/cjs/query-creator.d.ts +96 -5
- package/dist/cjs/query-creator.js +63 -1
- package/dist/cjs/raw-builder/raw-builder.js +1 -2
- package/dist/cjs/raw-builder/sql.d.ts +5 -5
- package/dist/cjs/schema/alter-column-builder.js +3 -0
- package/dist/cjs/schema/alter-table-add-index-builder.d.ts +1 -1
- package/dist/cjs/schema/alter-table-add-index-builder.js +7 -3
- package/dist/cjs/schema/alter-table-builder.js +1 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +18 -1
- package/dist/cjs/schema/column-definition-builder.js +22 -1
- package/dist/cjs/util/assert.js +2 -3
- package/dist/cjs/util/compilable.js +1 -2
- package/dist/cjs/util/infer-result.d.ts +2 -1
- 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.js +1 -2
- package/dist/cjs/util/stack-trace-utils.js +1 -2
- package/dist/cjs/util/type-utils.d.ts +3 -2
- package/dist/esm/dialect/database-introspector.d.ts +1 -0
- package/dist/esm/dialect/dialect-adapter-base.d.ts +2 -1
- package/dist/esm/dialect/dialect-adapter-base.js +4 -1
- package/dist/esm/dialect/dialect-adapter.d.ts +5 -0
- package/dist/esm/dialect/mssql/mssql-adapter.d.ts +1 -5
- package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +46 -26
- package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
- package/dist/esm/dialect/mssql/mssql-driver.js +95 -36
- package/dist/esm/dialect/mssql/mssql-introspector.js +13 -2
- package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +4 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.js +8 -0
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
- package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
- package/dist/esm/dialect/postgres/postgres-introspector.js +3 -1
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/esm/driver/database-connection.d.ts +4 -2
- package/dist/esm/dynamic/dynamic.d.ts +1 -1
- package/dist/esm/dynamic/dynamic.js +1 -1
- package/dist/esm/expression/expression-builder.d.ts +31 -5
- package/dist/esm/expression/expression-builder.js +5 -0
- package/dist/esm/helpers/mysql.d.ts +3 -3
- package/dist/esm/helpers/mysql.js +3 -3
- package/dist/esm/helpers/postgres.d.ts +4 -4
- package/dist/esm/helpers/postgres.js +4 -4
- package/dist/esm/index.d.ts +31 -18
- package/dist/esm/index.js +30 -17
- package/dist/esm/kysely.d.ts +1 -1
- package/dist/esm/kysely.js +1 -1
- package/dist/esm/operation-node/add-index-node.js +1 -1
- 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/cast-node.d.ts +13 -0
- package/dist/esm/operation-node/cast-node.js +17 -0
- package/dist/esm/operation-node/column-definition-node.d.ts +2 -0
- package/dist/esm/operation-node/data-type-node.d.ts +5 -1
- package/dist/esm/operation-node/data-type-node.js +55 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +6 -0
- package/dist/esm/operation-node/delete-query-node.js +12 -0
- package/dist/esm/operation-node/fetch-node.d.ts +15 -0
- package/dist/esm/operation-node/fetch-node.js +17 -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 +6 -1
- package/dist/esm/operation-node/insert-query-node.js +5 -0
- package/dist/esm/operation-node/join-node.d.ts +1 -1
- package/dist/esm/operation-node/matched-node.d.ts +13 -0
- package/dist/esm/operation-node/matched-node.js +17 -0
- package/dist/esm/operation-node/merge-query-node.d.ts +27 -0
- package/dist/esm/operation-node/merge-query-node.js +43 -0
- package/dist/esm/operation-node/on-node.d.ts +1 -1
- package/dist/esm/operation-node/operation-node-transformer.d.ts +12 -0
- package/dist/esm/operation-node/operation-node-transformer.js +62 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +12 -0
- package/dist/esm/operation-node/operation-node-visitor.js +6 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.d.ts +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 +17 -5
- package/dist/esm/operation-node/query-node.js +24 -1
- package/dist/esm/operation-node/select-query-node.d.ts +6 -0
- package/dist/esm/operation-node/select-query-node.js +12 -0
- package/dist/esm/operation-node/top-node.d.ts +14 -0
- package/dist/esm/operation-node/top-node.js +17 -0
- package/dist/esm/operation-node/update-query-node.d.ts +9 -1
- package/dist/esm/operation-node/update-query-node.js +11 -0
- package/dist/esm/operation-node/where-node.d.ts +1 -1
- package/dist/esm/parser/binary-operation-parser.d.ts +1 -1
- package/dist/esm/parser/binary-operation-parser.js +2 -2
- package/dist/esm/parser/data-type-parser.js +8 -4
- package/dist/esm/parser/fetch-parser.d.ts +2 -0
- package/dist/esm/parser/fetch-parser.js +15 -0
- package/dist/esm/parser/insert-values-parser.d.ts +3 -3
- package/dist/esm/parser/merge-parser.d.ts +9 -0
- package/dist/esm/parser/merge-parser.js +28 -0
- package/dist/esm/parser/returning-parser.d.ts +4 -3
- package/dist/esm/parser/table-parser.d.ts +4 -3
- package/dist/esm/parser/top-parser.d.ts +2 -0
- package/dist/esm/parser/top-parser.js +17 -0
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +2 -2
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +2 -2
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +4 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +188 -5
- package/dist/esm/query-builder/delete-query-builder.js +139 -5
- package/dist/esm/query-builder/function-module.d.ts +5 -5
- package/dist/esm/query-builder/insert-query-builder.d.ts +166 -10
- package/dist/esm/query-builder/insert-query-builder.js +107 -10
- package/dist/esm/query-builder/merge-query-builder.d.ts +721 -0
- package/dist/esm/query-builder/merge-query-builder.js +541 -0
- package/dist/esm/query-builder/merge-result.d.ts +4 -0
- package/dist/esm/query-builder/merge-result.js +7 -0
- package/dist/esm/query-builder/on-conflict-builder.d.ts +2 -2
- package/dist/esm/query-builder/output-interface.d.ts +95 -0
- package/dist/esm/query-builder/output-interface.js +2 -0
- package/dist/esm/query-builder/returning-interface.d.ts +2 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +177 -17
- package/dist/esm/query-builder/select-query-builder.js +20 -0
- package/dist/esm/query-builder/update-query-builder.d.ts +175 -10
- package/dist/esm/query-builder/update-query-builder.js +119 -7
- 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 +1 -1
- package/dist/esm/query-compiler/default-query-compiler.d.ts +12 -0
- package/dist/esm/query-compiler/default-query-compiler.js +118 -10
- package/dist/esm/query-compiler/query-compiler.d.ts +2 -1
- package/dist/esm/query-creator.d.ts +96 -5
- package/dist/esm/query-creator.js +64 -2
- package/dist/esm/raw-builder/sql.d.ts +5 -5
- package/dist/esm/schema/alter-column-builder.js +3 -0
- package/dist/esm/schema/alter-table-add-index-builder.d.ts +1 -1
- package/dist/esm/schema/alter-table-add-index-builder.js +8 -4
- package/dist/esm/schema/alter-table-builder.js +1 -2
- package/dist/esm/schema/column-definition-builder.d.ts +18 -1
- package/dist/esm/schema/column-definition-builder.js +22 -1
- package/dist/esm/util/infer-result.d.ts +2 -1
- package/dist/esm/util/object-utils.js +18 -5
- package/dist/esm/util/type-utils.d.ts +3 -2
- package/package.json +26 -24
|
@@ -67,6 +67,8 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
|
|
|
67
67
|
/**
|
|
68
68
|
* Adds a `returning *` to an insert/update/delete query on databases
|
|
69
69
|
* that support `returning` such as PostgreSQL.
|
|
70
|
+
*
|
|
71
|
+
* Also see the {@link returning} method.
|
|
70
72
|
*/
|
|
71
73
|
returningAll(): ReturningInterface<DB, TB, Selectable<DB[TB]>>;
|
|
72
74
|
}
|
|
@@ -26,6 +26,8 @@ import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
|
26
26
|
import { ExpressionWrapper } from '../expression/expression-wrapper.js';
|
|
27
27
|
import { SelectQueryBuilderExpression } from './select-query-builder-expression.js';
|
|
28
28
|
import { ValueExpression } from '../parser/value-parser.js';
|
|
29
|
+
import { FetchModifier } from '../operation-node/fetch-node.js';
|
|
30
|
+
import { TopModifier } from '../operation-node/top-node.js';
|
|
29
31
|
export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInterface<DB, TB>, HavingInterface<DB, TB>, SelectQueryBuilderExpression<O>, Compilable<O>, Explainable, Streamable<O> {
|
|
30
32
|
/**
|
|
31
33
|
* Adds a `where` expression to the query.
|
|
@@ -289,7 +291,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
289
291
|
* .selectFrom('person')
|
|
290
292
|
* .selectAll()
|
|
291
293
|
* .where(
|
|
292
|
-
* sql
|
|
294
|
+
* sql<string>`coalesce(first_name, last_name)`,
|
|
293
295
|
* 'like',
|
|
294
296
|
* '%' + name + '%',
|
|
295
297
|
* )
|
|
@@ -540,6 +542,45 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
540
542
|
* In case you use the {@link sql} tag you need to specify the type of the expression
|
|
541
543
|
* (in this example `string`).
|
|
542
544
|
*
|
|
545
|
+
* <!-- siteExample("select", "Not null", 51) -->
|
|
546
|
+
*
|
|
547
|
+
* Sometimes you can be sure something's not null, but Kysely isn't able to infer
|
|
548
|
+
* it. For example calling `where('last_name', 'is not', null)` doesn't make
|
|
549
|
+
* `last_name` not null in the result type, but unless you have other where statements
|
|
550
|
+
* you can be sure it's never null.
|
|
551
|
+
*
|
|
552
|
+
* Kysely has a couple of helpers for dealing with these cases: `$notNull()` and `$narrowType`.
|
|
553
|
+
* Both are used in the following example:
|
|
554
|
+
*
|
|
555
|
+
* ```ts
|
|
556
|
+
* import { NotNull } from 'kysely'
|
|
557
|
+
* import { jsonObjectFrom } from 'kysely/helpers/postgres'
|
|
558
|
+
*
|
|
559
|
+
* const persons = db
|
|
560
|
+
* .selectFrom('person')
|
|
561
|
+
* .select((eb) => [
|
|
562
|
+
* 'last_name',
|
|
563
|
+
* // Let's assume we know the person has at least one
|
|
564
|
+
* // pet. We can use the `.$notNull()` method to make
|
|
565
|
+
* // the expression not null. You could just as well
|
|
566
|
+
* // add `pet` to the `$narrowType` call below.
|
|
567
|
+
* jsonObjectFrom(
|
|
568
|
+
* eb.selectFrom('pet')
|
|
569
|
+
* .selectAll()
|
|
570
|
+
* .limit(1)
|
|
571
|
+
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
572
|
+
* ).$notNull().as('pet')
|
|
573
|
+
* ])
|
|
574
|
+
* .where('last_name', 'is not', null)
|
|
575
|
+
* // $narrowType can be used to narrow the output type.
|
|
576
|
+
* // The special `NotNull` type can be used to make a
|
|
577
|
+
* // selection not null. You could add `pet: NotNull`
|
|
578
|
+
* // here and omit the `$notNull()` call on it.
|
|
579
|
+
* // Use whichever way you prefer.
|
|
580
|
+
* .$narrowType<{ last_name: NotNull }>()
|
|
581
|
+
* .execute()
|
|
582
|
+
* ```
|
|
583
|
+
*
|
|
543
584
|
* All the examples above assume you know the column names at compile time.
|
|
544
585
|
* While it's better to build your code like that (that way you also know
|
|
545
586
|
* the types) sometimes it's not possible or you just prefer to write more
|
|
@@ -809,8 +850,10 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
809
850
|
* builder for creating more complex joins. The join builder has a
|
|
810
851
|
* bunch of `on*` methods for building the `on` clause of the join.
|
|
811
852
|
* There's basically an equivalent for every `where` method
|
|
812
|
-
* (`on`, `onRef` etc.).
|
|
813
|
-
*
|
|
853
|
+
* (`on`, `onRef` etc.).
|
|
854
|
+
*
|
|
855
|
+
* You can do all the same things with the
|
|
856
|
+
* `on` method that you can with the corresponding `where` method (like [OR expressions for example](https://kysely.dev/docs/examples/WHERE/or-where)).
|
|
814
857
|
* See the `where` method documentation for more examples.
|
|
815
858
|
*
|
|
816
859
|
* ```ts
|
|
@@ -820,6 +863,10 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
820
863
|
* (join) => join
|
|
821
864
|
* .onRef('pet.owner_id', '=', 'person.id')
|
|
822
865
|
* .on('pet.name', '=', 'Doggo')
|
|
866
|
+
* .on((eb) => eb.or([
|
|
867
|
+
* eb('person.age', '>', 18),
|
|
868
|
+
* eb('person.age', '<', 100)
|
|
869
|
+
* ]))
|
|
823
870
|
* )
|
|
824
871
|
* .selectAll()
|
|
825
872
|
* .execute()
|
|
@@ -833,6 +880,10 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
833
880
|
* inner join "pet"
|
|
834
881
|
* on "pet"."owner_id" = "person"."id"
|
|
835
882
|
* and "pet"."name" = $1
|
|
883
|
+
* and (
|
|
884
|
+
* "person"."age" > $2
|
|
885
|
+
* OR "person"."age" < $3
|
|
886
|
+
* )
|
|
836
887
|
* ```
|
|
837
888
|
*
|
|
838
889
|
* <!-- siteExample("join", "Subquery join", 40) -->
|
|
@@ -992,7 +1043,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
992
1043
|
* .limit(1)
|
|
993
1044
|
* )
|
|
994
1045
|
* .orderBy(
|
|
995
|
-
* sql
|
|
1046
|
+
* sql<string>`concat(first_name, last_name)`
|
|
996
1047
|
* )
|
|
997
1048
|
* .execute()
|
|
998
1049
|
* ```
|
|
@@ -1051,7 +1102,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
1051
1102
|
* .selectFrom('person')
|
|
1052
1103
|
* .select([
|
|
1053
1104
|
* 'first_name',
|
|
1054
|
-
* sql
|
|
1105
|
+
* sql<string>`max(id)`.as('max_id')
|
|
1055
1106
|
* ])
|
|
1056
1107
|
* .groupBy('first_name')
|
|
1057
1108
|
* .execute()
|
|
@@ -1075,7 +1126,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
1075
1126
|
* .select([
|
|
1076
1127
|
* 'first_name',
|
|
1077
1128
|
* 'last_name',
|
|
1078
|
-
* sql
|
|
1129
|
+
* sql<string>`max(id)`.as('max_id')
|
|
1079
1130
|
* ])
|
|
1080
1131
|
* .groupBy([
|
|
1081
1132
|
* 'first_name',
|
|
@@ -1103,10 +1154,10 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
1103
1154
|
* .select([
|
|
1104
1155
|
* 'first_name',
|
|
1105
1156
|
* 'last_name',
|
|
1106
|
-
* sql
|
|
1157
|
+
* sql<string>`max(id)`.as('max_id')
|
|
1107
1158
|
* ])
|
|
1108
1159
|
* .groupBy([
|
|
1109
|
-
* sql
|
|
1160
|
+
* sql<string>`concat(first_name, last_name)`,
|
|
1110
1161
|
* (qb) => qb.selectFrom('pet').select('id').limit(1)
|
|
1111
1162
|
* ])
|
|
1112
1163
|
* .execute()
|
|
@@ -1150,6 +1201,13 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
1150
1201
|
* .selectFrom('person')
|
|
1151
1202
|
* .select('first_name')
|
|
1152
1203
|
* .limit(10)
|
|
1204
|
+
* .execute()
|
|
1205
|
+
* ```
|
|
1206
|
+
*
|
|
1207
|
+
* The generated SQL (PostgreSQL):
|
|
1208
|
+
*
|
|
1209
|
+
* ```sql
|
|
1210
|
+
* select "first_name" from "person" limit $1
|
|
1153
1211
|
* ```
|
|
1154
1212
|
*
|
|
1155
1213
|
* Select rows from index 10 to index 19 of the result:
|
|
@@ -1158,13 +1216,20 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
1158
1216
|
* return await db
|
|
1159
1217
|
* .selectFrom('person')
|
|
1160
1218
|
* .select('first_name')
|
|
1161
|
-
* .offset(10)
|
|
1162
1219
|
* .limit(10)
|
|
1220
|
+
* .offset(10)
|
|
1221
|
+
* .execute()
|
|
1222
|
+
* ```
|
|
1223
|
+
*
|
|
1224
|
+
* The generated SQL (PostgreSQL):
|
|
1225
|
+
*
|
|
1226
|
+
* ```sql
|
|
1227
|
+
* select "first_name" from "person" limit $1 offset $2
|
|
1163
1228
|
* ```
|
|
1164
1229
|
*/
|
|
1165
|
-
limit(limit: ValueExpression<DB, TB, number>): SelectQueryBuilder<DB, TB, O>;
|
|
1230
|
+
limit(limit: ValueExpression<DB, TB, number | bigint>): SelectQueryBuilder<DB, TB, O>;
|
|
1166
1231
|
/**
|
|
1167
|
-
* Adds an offset clause to the query.
|
|
1232
|
+
* Adds an `offset` clause to the query.
|
|
1168
1233
|
*
|
|
1169
1234
|
* ### Examples
|
|
1170
1235
|
*
|
|
@@ -1174,11 +1239,87 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
1174
1239
|
* return await db
|
|
1175
1240
|
* .selectFrom('person')
|
|
1176
1241
|
* .select('first_name')
|
|
1177
|
-
* .offset(10)
|
|
1178
1242
|
* .limit(10)
|
|
1243
|
+
* .offset(10)
|
|
1244
|
+
* .execute()
|
|
1245
|
+
* ```
|
|
1246
|
+
*
|
|
1247
|
+
* The generated SQL (PostgreSQL):
|
|
1248
|
+
*
|
|
1249
|
+
* ```sql
|
|
1250
|
+
* select "first_name" from "person" limit $1 offset $2
|
|
1179
1251
|
* ```
|
|
1180
1252
|
*/
|
|
1181
|
-
offset(offset: ValueExpression<DB, TB, number>): SelectQueryBuilder<DB, TB, O>;
|
|
1253
|
+
offset(offset: ValueExpression<DB, TB, number | bigint>): SelectQueryBuilder<DB, TB, O>;
|
|
1254
|
+
/**
|
|
1255
|
+
* Adds a `fetch` clause to the query.
|
|
1256
|
+
*
|
|
1257
|
+
* This clause is only supported by some dialects like PostgreSQL or MS SQL Server.
|
|
1258
|
+
*
|
|
1259
|
+
* ### Examples
|
|
1260
|
+
*
|
|
1261
|
+
* ```ts
|
|
1262
|
+
* return await db
|
|
1263
|
+
* .selectFrom('person')
|
|
1264
|
+
* .select('first_name')
|
|
1265
|
+
* .orderBy('first_name')
|
|
1266
|
+
* .offset(0)
|
|
1267
|
+
* .fetch(10)
|
|
1268
|
+
* .execute()
|
|
1269
|
+
* ```
|
|
1270
|
+
*
|
|
1271
|
+
* The generated SQL (MS SQL Server):
|
|
1272
|
+
*
|
|
1273
|
+
* ```sql
|
|
1274
|
+
* select "first_name"
|
|
1275
|
+
* from "person"
|
|
1276
|
+
* order by "first_name"
|
|
1277
|
+
* offset 0 rows
|
|
1278
|
+
* fetch next 10 rows only
|
|
1279
|
+
* ```
|
|
1280
|
+
*/
|
|
1281
|
+
fetch(rowCount: number | bigint, modifier?: FetchModifier): SelectQueryBuilder<DB, TB, O>;
|
|
1282
|
+
/**
|
|
1283
|
+
* Adds a `top` clause to the query.
|
|
1284
|
+
*
|
|
1285
|
+
* This clause is only supported by some dialects like MS SQL Server.
|
|
1286
|
+
*
|
|
1287
|
+
* ### Examples
|
|
1288
|
+
*
|
|
1289
|
+
* Select 10 biggest ages:
|
|
1290
|
+
*
|
|
1291
|
+
* ```ts
|
|
1292
|
+
* return await db
|
|
1293
|
+
* .selectFrom('person')
|
|
1294
|
+
* .select('age')
|
|
1295
|
+
* .top(10)
|
|
1296
|
+
* .orderBy('age desc')
|
|
1297
|
+
* .execute()
|
|
1298
|
+
* ```
|
|
1299
|
+
*
|
|
1300
|
+
* The generated SQL (MS SQL Server):
|
|
1301
|
+
*
|
|
1302
|
+
* ```sql
|
|
1303
|
+
* select top(10) "age" from "person" order by "age" desc
|
|
1304
|
+
* ```
|
|
1305
|
+
*
|
|
1306
|
+
* Select 10% first rows:
|
|
1307
|
+
*
|
|
1308
|
+
* ```ts
|
|
1309
|
+
* return await db
|
|
1310
|
+
* .selectFrom('person')
|
|
1311
|
+
* .selectAll()
|
|
1312
|
+
* .top(10, 'percent')
|
|
1313
|
+
* .execute()
|
|
1314
|
+
* ```
|
|
1315
|
+
*
|
|
1316
|
+
* The generated SQL (MS SQL Server):
|
|
1317
|
+
*
|
|
1318
|
+
* ```sql
|
|
1319
|
+
* select top(10) percent * from "person"
|
|
1320
|
+
* ```
|
|
1321
|
+
*/
|
|
1322
|
+
top(expression: number | bigint, modifiers?: TopModifier): SelectQueryBuilder<DB, TB, O>;
|
|
1182
1323
|
/**
|
|
1183
1324
|
* Combines another select query or raw expression to this query using `union`.
|
|
1184
1325
|
*
|
|
@@ -1457,6 +1598,25 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
1457
1598
|
* ```
|
|
1458
1599
|
*/
|
|
1459
1600
|
clearOrderBy(): SelectQueryBuilder<DB, TB, O>;
|
|
1601
|
+
/**
|
|
1602
|
+
* Clears `group by` clause from the query.
|
|
1603
|
+
*
|
|
1604
|
+
* ### Examples
|
|
1605
|
+
*
|
|
1606
|
+
* ```ts
|
|
1607
|
+
* db.selectFrom('person')
|
|
1608
|
+
* .selectAll()
|
|
1609
|
+
* .groupBy('id')
|
|
1610
|
+
* .clearGroupBy()
|
|
1611
|
+
* ```
|
|
1612
|
+
*
|
|
1613
|
+
* The generated SQL(PostgreSQL):
|
|
1614
|
+
*
|
|
1615
|
+
* ```sql
|
|
1616
|
+
* select * from "person"
|
|
1617
|
+
* ```
|
|
1618
|
+
*/
|
|
1619
|
+
clearGroupBy(): SelectQueryBuilder<DB, TB, O>;
|
|
1460
1620
|
/**
|
|
1461
1621
|
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
1462
1622
|
* what the provided function returns.
|
|
@@ -1484,7 +1644,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
1484
1644
|
/**
|
|
1485
1645
|
* Call `func(this)` if `condition` is true.
|
|
1486
1646
|
*
|
|
1487
|
-
* NOTE: This method has an impact on
|
|
1647
|
+
* NOTE: This method has an impact on TypeScript performance and it should only be used
|
|
1488
1648
|
* when necessary. Remember that you can call most methods like `where` conditionally
|
|
1489
1649
|
* like this:
|
|
1490
1650
|
*
|
|
@@ -1662,17 +1822,17 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
|
|
|
1662
1822
|
/**
|
|
1663
1823
|
* Asserts that query's output row type equals the given type `T`.
|
|
1664
1824
|
*
|
|
1665
|
-
* This method can be used to simplify excessively complex types to make
|
|
1825
|
+
* This method can be used to simplify excessively complex types to make TypeScript happy
|
|
1666
1826
|
* and much faster.
|
|
1667
1827
|
*
|
|
1668
1828
|
* Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
|
|
1669
|
-
* for
|
|
1829
|
+
* for TypeScript and you get errors like this:
|
|
1670
1830
|
*
|
|
1671
1831
|
* ```
|
|
1672
1832
|
* error TS2589: Type instantiation is excessively deep and possibly infinite.
|
|
1673
1833
|
* ```
|
|
1674
1834
|
*
|
|
1675
|
-
* In these case you can often use this method to help
|
|
1835
|
+
* In these case you can often use this method to help TypeScript a little bit. When you use this
|
|
1676
1836
|
* method to assert the output type of a query, Kysely can drop the complex output type that
|
|
1677
1837
|
* consists of multiple nested helper types and replace it with the simple asserted type.
|
|
1678
1838
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createSelectQueryBuilder =
|
|
3
|
+
exports.createSelectQueryBuilder = createSelectQueryBuilder;
|
|
4
4
|
const alias_node_js_1 = require("../operation-node/alias-node.js");
|
|
5
5
|
const select_modifier_node_js_1 = require("../operation-node/select-modifier-node.js");
|
|
6
6
|
const join_parser_js_1 = require("../parser/join-parser.js");
|
|
@@ -21,6 +21,8 @@ const set_operation_parser_js_1 = require("../parser/set-operation-parser.js");
|
|
|
21
21
|
const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
|
|
22
22
|
const expression_wrapper_js_1 = require("../expression/expression-wrapper.js");
|
|
23
23
|
const value_parser_js_1 = require("../parser/value-parser.js");
|
|
24
|
+
const fetch_parser_js_1 = require("../parser/fetch-parser.js");
|
|
25
|
+
const top_parser_js_1 = require("../parser/top-parser.js");
|
|
24
26
|
class SelectQueryBuilderImpl {
|
|
25
27
|
#props;
|
|
26
28
|
constructor(props) {
|
|
@@ -188,6 +190,18 @@ class SelectQueryBuilderImpl {
|
|
|
188
190
|
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOffset(this.#props.queryNode, offset_node_js_1.OffsetNode.create((0, value_parser_js_1.parseValueExpression)(offset))),
|
|
189
191
|
});
|
|
190
192
|
}
|
|
193
|
+
fetch(rowCount, modifier = 'only') {
|
|
194
|
+
return new SelectQueryBuilderImpl({
|
|
195
|
+
...this.#props,
|
|
196
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithFetch(this.#props.queryNode, (0, fetch_parser_js_1.parseFetch)(rowCount, modifier)),
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
top(expression, modifiers) {
|
|
200
|
+
return new SelectQueryBuilderImpl({
|
|
201
|
+
...this.#props,
|
|
202
|
+
queryNode: query_node_js_1.QueryNode.cloneWithTop(this.#props.queryNode, (0, top_parser_js_1.parseTop)(expression, modifiers)),
|
|
203
|
+
});
|
|
204
|
+
}
|
|
191
205
|
union(expression) {
|
|
192
206
|
return new SelectQueryBuilderImpl({
|
|
193
207
|
...this.#props,
|
|
@@ -257,6 +271,12 @@ class SelectQueryBuilderImpl {
|
|
|
257
271
|
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithoutOrderBy(this.#props.queryNode),
|
|
258
272
|
});
|
|
259
273
|
}
|
|
274
|
+
clearGroupBy() {
|
|
275
|
+
return new SelectQueryBuilderImpl({
|
|
276
|
+
...this.#props,
|
|
277
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithoutGroupBy(this.#props.queryNode),
|
|
278
|
+
});
|
|
279
|
+
}
|
|
260
280
|
$call(func) {
|
|
261
281
|
return func(this);
|
|
262
282
|
}
|
|
@@ -330,7 +350,6 @@ class SelectQueryBuilderImpl {
|
|
|
330
350
|
function createSelectQueryBuilder(props) {
|
|
331
351
|
return new SelectQueryBuilderImpl(props);
|
|
332
352
|
}
|
|
333
|
-
exports.createSelectQueryBuilder = createSelectQueryBuilder;
|
|
334
353
|
/**
|
|
335
354
|
* {@link SelectQueryBuilder} with an alias. The result of calling {@link SelectQueryBuilder.as}.
|
|
336
355
|
*/
|
|
@@ -3,7 +3,7 @@ import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
|
3
3
|
import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
|
|
4
4
|
import { TableExpression, From, FromTables } from '../parser/table-parser.js';
|
|
5
5
|
import { SelectExpression, SelectCallback } from '../parser/select-parser.js';
|
|
6
|
-
import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
|
|
6
|
+
import { ReturningAllRow, ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
|
|
7
7
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
8
8
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
9
9
|
import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
|
|
@@ -17,7 +17,6 @@ import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
|
17
17
|
import { WhereInterface } from './where-interface.js';
|
|
18
18
|
import { ReturningInterface } from './returning-interface.js';
|
|
19
19
|
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
20
|
-
import { Selectable } from '../util/column-type.js';
|
|
21
20
|
import { Explainable, ExplainFormat } from '../util/explainable.js';
|
|
22
21
|
import { AliasedExpression, Expression } from '../expression/expression.js';
|
|
23
22
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
@@ -25,7 +24,8 @@ import { KyselyTypeError } from '../util/type-error.js';
|
|
|
25
24
|
import { Streamable } from '../util/streamable.js';
|
|
26
25
|
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
27
26
|
import { ValueExpression } from '../parser/value-parser.js';
|
|
28
|
-
|
|
27
|
+
import { OutputCallback, OutputExpression, OutputInterface, OutputPrefix, SelectExpressionFromOutputCallback, SelectExpressionFromOutputExpression } from './output-interface.js';
|
|
28
|
+
export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OutputInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
|
|
29
29
|
#private;
|
|
30
30
|
constructor(props: UpdateQueryBuilderProps);
|
|
31
31
|
/**
|
|
@@ -290,7 +290,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
290
290
|
* .selectFrom('person')
|
|
291
291
|
* .selectAll()
|
|
292
292
|
* .where(
|
|
293
|
-
* sql
|
|
293
|
+
* sql<string>`coalesce(first_name, last_name)`,
|
|
294
294
|
* 'like',
|
|
295
295
|
* '%' + name + '%',
|
|
296
296
|
* )
|
|
@@ -400,6 +400,46 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
400
400
|
* ```
|
|
401
401
|
*/
|
|
402
402
|
clearWhere(): UpdateQueryBuilder<DB, UT, TB, O>;
|
|
403
|
+
/**
|
|
404
|
+
* Changes an `update` query into a `update top` query.
|
|
405
|
+
*
|
|
406
|
+
* `top` clause is only supported by some dialects like MS SQL Server.
|
|
407
|
+
*
|
|
408
|
+
* ### Examples
|
|
409
|
+
*
|
|
410
|
+
* Update the first row:
|
|
411
|
+
*
|
|
412
|
+
* ```ts
|
|
413
|
+
* await db.updateTable('person')
|
|
414
|
+
* .top(1)
|
|
415
|
+
* .set({ first_name: 'Foo' })
|
|
416
|
+
* .where('age', '>', 18)
|
|
417
|
+
* .executeTakeFirstOrThrow()
|
|
418
|
+
* ```
|
|
419
|
+
*
|
|
420
|
+
* The generated SQL (MS SQL Server):
|
|
421
|
+
*
|
|
422
|
+
* ```sql
|
|
423
|
+
* update top(1) "person" set "first_name" = @1 where "age" > @2
|
|
424
|
+
* ```
|
|
425
|
+
*
|
|
426
|
+
* Update the 50% first rows:
|
|
427
|
+
*
|
|
428
|
+
* ```ts
|
|
429
|
+
* await db.updateTable('person')
|
|
430
|
+
* .top(50, 'percent')
|
|
431
|
+
* .set({ first_name: 'Foo' })
|
|
432
|
+
* .where('age', '>', 18)
|
|
433
|
+
* .executeTakeFirstOrThrow()
|
|
434
|
+
* ```
|
|
435
|
+
*
|
|
436
|
+
* The generated SQL (MS SQL Server):
|
|
437
|
+
*
|
|
438
|
+
* ```sql
|
|
439
|
+
* update top(50) percent "person" set "first_name" = @1 where "age" > @2
|
|
440
|
+
* ```
|
|
441
|
+
*/
|
|
442
|
+
top(expression: number | bigint, modifiers?: 'percent'): UpdateQueryBuilder<DB, UT, TB, O>;
|
|
403
443
|
/**
|
|
404
444
|
* Adds a from clause to the update query.
|
|
405
445
|
*
|
|
@@ -555,6 +595,26 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
555
595
|
*/
|
|
556
596
|
fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilderWithFullJoin<DB, UT, TB, O, TE>;
|
|
557
597
|
fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilderWithFullJoin<DB, UT, TB, O, TE>;
|
|
598
|
+
/**
|
|
599
|
+
* Adds a limit clause to the update query for supported databases, such as MySQL.
|
|
600
|
+
*
|
|
601
|
+
* ### Examples
|
|
602
|
+
*
|
|
603
|
+
* Update the first 2 rows in the 'person' table:
|
|
604
|
+
*
|
|
605
|
+
* ```ts
|
|
606
|
+
* return await db
|
|
607
|
+
* .updateTable('person')
|
|
608
|
+
* .set({ first_name: 'Foo' })
|
|
609
|
+
* .limit(2);
|
|
610
|
+
* ```
|
|
611
|
+
*
|
|
612
|
+
* The generated SQL (MySQL):
|
|
613
|
+
* ```sql
|
|
614
|
+
* update `person` set `first_name` = 'Foo' limit 2
|
|
615
|
+
* ```
|
|
616
|
+
*/
|
|
617
|
+
limit(limit: ValueExpression<DB, TB, number>): UpdateQueryBuilder<DB, UT, TB, O>;
|
|
558
618
|
/**
|
|
559
619
|
* Sets the values to update for an {@link Kysely.updateTable | update} query.
|
|
560
620
|
*
|
|
@@ -635,7 +695,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
635
695
|
* .set('first_name', 'Foo')
|
|
636
696
|
* // As always, both arguments can be arbitrary expressions or
|
|
637
697
|
* // callbacks that give you access to an expression builder:
|
|
638
|
-
* .set(sql
|
|
698
|
+
* .set(sql<string>`address['postalCode']`, (eb) => eb.val('61710))
|
|
639
699
|
* .where('id', '=', '1')
|
|
640
700
|
* .executeTakeFirst()
|
|
641
701
|
* ```
|
|
@@ -676,7 +736,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
676
736
|
* first_name: selectFrom('person').select('first_name').limit(1),
|
|
677
737
|
* middle_name: ref('first_name'),
|
|
678
738
|
* age: eb('age', '+', 1),
|
|
679
|
-
* last_name: sql
|
|
739
|
+
* last_name: sql<string>`${'Ani'} || ${'ston'}`,
|
|
680
740
|
* }))
|
|
681
741
|
* .where('id', '=', 1)
|
|
682
742
|
* .executeTakeFirst()
|
|
@@ -762,8 +822,113 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
762
822
|
/**
|
|
763
823
|
* Adds a `returning *` to an insert/update/delete query on databases
|
|
764
824
|
* that support `returning` such as PostgreSQL.
|
|
825
|
+
*
|
|
826
|
+
* Also see the {@link returning} method.
|
|
827
|
+
*/
|
|
828
|
+
returningAll<T extends TB>(tables: ReadonlyArray<T>): UpdateQueryBuilder<DB, UT, TB, ReturningAllRow<DB, T, O>>;
|
|
829
|
+
returningAll<T extends TB>(table: T): UpdateQueryBuilder<DB, UT, TB, ReturningAllRow<DB, T, O>>;
|
|
830
|
+
returningAll(): UpdateQueryBuilder<DB, UT, TB, ReturningAllRow<DB, TB, O>>;
|
|
831
|
+
/**
|
|
832
|
+
* Allows you to return data from modified rows.
|
|
833
|
+
*
|
|
834
|
+
* On supported databases like MS SQL Server (MSSQL), this method can be chained
|
|
835
|
+
* to `insert`, `update`, `delete` and `merge` queries to return data.
|
|
836
|
+
*
|
|
837
|
+
* Also see the {@link outputAll} method.
|
|
838
|
+
*
|
|
839
|
+
* ### Examples
|
|
840
|
+
*
|
|
841
|
+
* Return one column:
|
|
842
|
+
*
|
|
843
|
+
* ```ts
|
|
844
|
+
* const { id } = await db
|
|
845
|
+
* .insertInto('person')
|
|
846
|
+
* .output('inserted.id')
|
|
847
|
+
* .values({
|
|
848
|
+
* first_name: 'Jennifer',
|
|
849
|
+
* last_name: 'Aniston'
|
|
850
|
+
* })
|
|
851
|
+
* .executeTakeFirst()
|
|
852
|
+
* ```
|
|
853
|
+
*
|
|
854
|
+
* Return multiple columns:
|
|
855
|
+
*
|
|
856
|
+
* ```ts
|
|
857
|
+
* const { id, first_name } = await db
|
|
858
|
+
* .updateTable('person')
|
|
859
|
+
* .set({ first_name: 'John', last_name: 'Doe' })
|
|
860
|
+
* .output([
|
|
861
|
+
* 'deleted.first_name as old_first_name',
|
|
862
|
+
* 'deleted.last_name as old_last_name',
|
|
863
|
+
* 'inserted.first_name as new_first_name',
|
|
864
|
+
* 'inserted.last_name as new_last_name',
|
|
865
|
+
* ])
|
|
866
|
+
* .where('created_at', '<', new Date())
|
|
867
|
+
* .executeTakeFirst()
|
|
868
|
+
* ```
|
|
869
|
+
*
|
|
870
|
+
* Return arbitrary expressions:
|
|
871
|
+
*
|
|
872
|
+
* ```ts
|
|
873
|
+
* import { sql } from 'kysely'
|
|
874
|
+
*
|
|
875
|
+
* const { id, full_name } = await db
|
|
876
|
+
* .deleteFrom('person')
|
|
877
|
+
* .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
|
|
878
|
+
* .where('created_at', '<', new Date())
|
|
879
|
+
* .executeTakeFirst()
|
|
880
|
+
* ```
|
|
881
|
+
*
|
|
882
|
+
* Return the action performed on the row:
|
|
883
|
+
*
|
|
884
|
+
* ```ts
|
|
885
|
+
* await db
|
|
886
|
+
* .mergeInto('person')
|
|
887
|
+
* .using('pet', 'pet.owner_id', 'person.id')
|
|
888
|
+
* .whenMatched()
|
|
889
|
+
* .thenDelete()
|
|
890
|
+
* .whenNotMatched()
|
|
891
|
+
* .thenInsertValues({
|
|
892
|
+
* first_name: 'John',
|
|
893
|
+
* last_name: 'Doe',
|
|
894
|
+
* gender: 'male'
|
|
895
|
+
* })
|
|
896
|
+
* .output([
|
|
897
|
+
* 'inserted.id as inserted_id',
|
|
898
|
+
* 'deleted.id as deleted_id',
|
|
899
|
+
* ])
|
|
900
|
+
* ```
|
|
901
|
+
*/
|
|
902
|
+
output<OE extends OutputExpression<DB, UT>>(selections: readonly OE[]): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
|
|
903
|
+
output<CB extends OutputCallback<DB, TB>>(callback: CB): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputCallback<CB>>>;
|
|
904
|
+
output<OE extends OutputExpression<DB, TB>>(selection: OE): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
|
|
905
|
+
/**
|
|
906
|
+
* Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
|
|
907
|
+
* that support `output` such as MS SQL Server (MSSQL).
|
|
908
|
+
*
|
|
909
|
+
* Also see the {@link output} method.
|
|
910
|
+
*/
|
|
911
|
+
outputAll(table: OutputPrefix): UpdateQueryBuilder<DB, UT, TB, ReturningAllRow<DB, TB, O>>;
|
|
912
|
+
/**
|
|
913
|
+
* Clears all `returning` clauses from the query.
|
|
914
|
+
*
|
|
915
|
+
* ### Examples
|
|
916
|
+
*
|
|
917
|
+
* ```ts
|
|
918
|
+
* db.updateTable('person')
|
|
919
|
+
* .returningAll()
|
|
920
|
+
* .set({ age: 39 })
|
|
921
|
+
* .where('first_name', '=', 'John')
|
|
922
|
+
* .clearReturning()
|
|
923
|
+
* ```
|
|
924
|
+
*
|
|
925
|
+
* The generated SQL(PostgreSQL):
|
|
926
|
+
*
|
|
927
|
+
* ```sql
|
|
928
|
+
* update "person" set "age" = 39 where "first_name" = "John"
|
|
929
|
+
* ```
|
|
765
930
|
*/
|
|
766
|
-
|
|
931
|
+
clearReturning(): UpdateQueryBuilder<DB, UT, TB, UpdateResult>;
|
|
767
932
|
/**
|
|
768
933
|
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
769
934
|
* what the provided function returns.
|
|
@@ -880,17 +1045,17 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
880
1045
|
/**
|
|
881
1046
|
* Asserts that query's output row type equals the given type `T`.
|
|
882
1047
|
*
|
|
883
|
-
* This method can be used to simplify excessively complex types to make
|
|
1048
|
+
* This method can be used to simplify excessively complex types to make TypeScript happy
|
|
884
1049
|
* and much faster.
|
|
885
1050
|
*
|
|
886
1051
|
* Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
|
|
887
|
-
* for
|
|
1052
|
+
* for TypeScript and you get errors like this:
|
|
888
1053
|
*
|
|
889
1054
|
* ```
|
|
890
1055
|
* error TS2589: Type instantiation is excessively deep and possibly infinite.
|
|
891
1056
|
* ```
|
|
892
1057
|
*
|
|
893
|
-
* In these case you can often use this method to help
|
|
1058
|
+
* In these case you can often use this method to help TypeScript a little bit. When you use this
|
|
894
1059
|
* method to assert the output type of a query, Kysely can drop the complex output type that
|
|
895
1060
|
* consists of multiple nested helper types and replace it with the simple asserted type.
|
|
896
1061
|
*
|