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
|
@@ -11,7 +11,7 @@ import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
|
11
11
|
import { QueryId } from '../util/query-id.js';
|
|
12
12
|
import { InsertResult } from './insert-result.js';
|
|
13
13
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
14
|
-
import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
|
|
14
|
+
import { ReturningAllRow, ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
|
|
15
15
|
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
16
16
|
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
17
17
|
import { ReturningInterface } from './returning-interface.js';
|
|
@@ -21,7 +21,8 @@ import { Explainable, ExplainFormat } from '../util/explainable.js';
|
|
|
21
21
|
import { Expression } from '../expression/expression.js';
|
|
22
22
|
import { KyselyTypeError } from '../util/type-error.js';
|
|
23
23
|
import { Streamable } from '../util/streamable.js';
|
|
24
|
-
|
|
24
|
+
import { OutputCallback, OutputExpression, OutputInterface, SelectExpressionFromOutputCallback, SelectExpressionFromOutputExpression } from './output-interface.js';
|
|
25
|
+
export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements ReturningInterface<DB, TB, O>, OutputInterface<DB, TB, O, 'inserted'>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
|
|
25
26
|
#private;
|
|
26
27
|
constructor(props: InsertQueryBuilderProps);
|
|
27
28
|
/**
|
|
@@ -143,11 +144,10 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
143
144
|
* .insertInto('person')
|
|
144
145
|
* .values(({ ref, selectFrom, fn }) => ({
|
|
145
146
|
* first_name: 'Jennifer',
|
|
146
|
-
* last_name: sql
|
|
147
|
+
* last_name: sql<string>`concat(${ani}, ${ston})`,
|
|
147
148
|
* middle_name: ref('first_name'),
|
|
148
149
|
* age: selectFrom('person')
|
|
149
|
-
* .select(fn.avg<number>('age')
|
|
150
|
-
* .as('avg_age')),
|
|
150
|
+
* .select(fn.avg<number>('age').as('avg_age')),
|
|
151
151
|
* }))
|
|
152
152
|
* .executeTakeFirst()
|
|
153
153
|
* ```
|
|
@@ -172,7 +172,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
172
172
|
* You can also use the callback version of subqueries or raw expressions:
|
|
173
173
|
*
|
|
174
174
|
* ```ts
|
|
175
|
-
* db.with('jennifer', (db) => db
|
|
175
|
+
* await db.with('jennifer', (db) => db
|
|
176
176
|
* .selectFrom('person')
|
|
177
177
|
* .where('first_name', '=', 'Jennifer')
|
|
178
178
|
* .select(['id', 'first_name', 'gender'])
|
|
@@ -182,6 +182,24 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
182
182
|
* name: eb.selectFrom('jennifer').select('first_name'),
|
|
183
183
|
* species: 'cat',
|
|
184
184
|
* }))
|
|
185
|
+
* .execute()
|
|
186
|
+
* ```
|
|
187
|
+
*
|
|
188
|
+
* The generated SQL (PostgreSQL):
|
|
189
|
+
*
|
|
190
|
+
* ```sql
|
|
191
|
+
* with "jennifer" as (
|
|
192
|
+
* select "id", "first_name", "gender"
|
|
193
|
+
* from "person"
|
|
194
|
+
* where "first_name" = $1
|
|
195
|
+
* limit $2
|
|
196
|
+
* )
|
|
197
|
+
* insert into "pet" ("owner_id", "name", "species")
|
|
198
|
+
* values (
|
|
199
|
+
* (select "id" from "jennifer"),
|
|
200
|
+
* (select "first_name" from "jennifer"),
|
|
201
|
+
* $3
|
|
202
|
+
* )
|
|
185
203
|
* ```
|
|
186
204
|
*/
|
|
187
205
|
values(insert: InsertExpression<DB, TB>): InsertQueryBuilder<DB, TB, O>;
|
|
@@ -195,9 +213,10 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
195
213
|
* ### Examples
|
|
196
214
|
*
|
|
197
215
|
* ```ts
|
|
198
|
-
* db.insertInto('person')
|
|
216
|
+
* await db.insertInto('person')
|
|
199
217
|
* .columns(['first_name'])
|
|
200
218
|
* .expression((eb) => eb.selectFrom('pet').select('pet.name'))
|
|
219
|
+
* .execute()
|
|
201
220
|
* ```
|
|
202
221
|
*
|
|
203
222
|
* The generated SQL (PostgreSQL):
|
|
@@ -215,7 +234,9 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
215
234
|
*
|
|
216
235
|
* <!-- siteExample("insert", "Insert subquery", 50) -->
|
|
217
236
|
*
|
|
218
|
-
* You can create an `INSERT INTO SELECT FROM` query using the `expression` method
|
|
237
|
+
* You can create an `INSERT INTO SELECT FROM` query using the `expression` method.
|
|
238
|
+
* This API doesn't follow our WYSIWYG principles and might be a bit difficult to
|
|
239
|
+
* remember. The reasons for this design stem from implementation difficulties.
|
|
219
240
|
*
|
|
220
241
|
* ```ts
|
|
221
242
|
* const result = await db.insertInto('person')
|
|
@@ -249,8 +270,40 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
249
270
|
* .defaultValues()
|
|
250
271
|
* .execute()
|
|
251
272
|
* ```
|
|
273
|
+
*
|
|
274
|
+
* The generated SQL (PostgreSQL):
|
|
275
|
+
*
|
|
276
|
+
* ```sql
|
|
277
|
+
* insert into "person" default values
|
|
278
|
+
* ```
|
|
252
279
|
*/
|
|
253
280
|
defaultValues(): InsertQueryBuilder<DB, TB, O>;
|
|
281
|
+
/**
|
|
282
|
+
* This can be used to add any additional SQL to the end of the query.
|
|
283
|
+
*
|
|
284
|
+
* ### Examples
|
|
285
|
+
*
|
|
286
|
+
* ```ts
|
|
287
|
+
* import { sql } from 'kysely'
|
|
288
|
+
*
|
|
289
|
+
* await db.insertInto('person')
|
|
290
|
+
* .values({
|
|
291
|
+
* first_name: 'John',
|
|
292
|
+
* last_name: 'Doe',
|
|
293
|
+
* gender: 'male',
|
|
294
|
+
* })
|
|
295
|
+
* .modifyEnd(sql`-- This is a comment`)
|
|
296
|
+
* .execute()
|
|
297
|
+
* ```
|
|
298
|
+
*
|
|
299
|
+
* The generated SQL (MySQL):
|
|
300
|
+
*
|
|
301
|
+
* ```sql
|
|
302
|
+
* insert into `person` ("first_name", "last_name", "gender")
|
|
303
|
+
* values (?, ?, ?) -- This is a comment
|
|
304
|
+
* ```
|
|
305
|
+
*/
|
|
306
|
+
modifyEnd(modifier: Expression<any>): InsertQueryBuilder<DB, TB, O>;
|
|
254
307
|
/**
|
|
255
308
|
* Changes an `insert into` query to an `insert ignore into` query.
|
|
256
309
|
*
|
|
@@ -268,9 +321,19 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
268
321
|
* ```ts
|
|
269
322
|
* await db.insertInto('person')
|
|
270
323
|
* .ignore()
|
|
271
|
-
* .values(
|
|
324
|
+
* .values({
|
|
325
|
+
* first_name: 'John',
|
|
326
|
+
* last_name: 'Doe',
|
|
327
|
+
* gender: 'female',
|
|
328
|
+
* })
|
|
272
329
|
* .execute()
|
|
273
330
|
* ```
|
|
331
|
+
*
|
|
332
|
+
* The generated SQL (MySQL):
|
|
333
|
+
*
|
|
334
|
+
* ```sql
|
|
335
|
+
* insert ignore into `person` ("first_name", "last_name", "gender") values (?, ?, ?)
|
|
336
|
+
* ```
|
|
274
337
|
*/
|
|
275
338
|
ignore(): InsertQueryBuilder<DB, TB, O>;
|
|
276
339
|
/**
|
|
@@ -283,6 +346,8 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
283
346
|
* Insert the first 5 rows:
|
|
284
347
|
*
|
|
285
348
|
* ```ts
|
|
349
|
+
* import { sql } from 'kysely'
|
|
350
|
+
*
|
|
286
351
|
* await db.insertInto('person')
|
|
287
352
|
* .top(5)
|
|
288
353
|
* .columns(['first_name', 'gender'])
|
|
@@ -301,6 +366,8 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
301
366
|
* Insert the first 50 percent of rows:
|
|
302
367
|
*
|
|
303
368
|
* ```ts
|
|
369
|
+
* import { sql } from 'kysely'
|
|
370
|
+
*
|
|
304
371
|
* await db.insertInto('person')
|
|
305
372
|
* .top(50, 'percent')
|
|
306
373
|
* .columns(['first_name', 'gender'])
|
|
@@ -331,6 +398,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
331
398
|
* .values({
|
|
332
399
|
* name: 'Catto',
|
|
333
400
|
* species: 'cat',
|
|
401
|
+
* owner_id: 3,
|
|
334
402
|
* })
|
|
335
403
|
* .onConflict((oc) => oc
|
|
336
404
|
* .column('name')
|
|
@@ -342,10 +410,10 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
342
410
|
* The generated SQL (PostgreSQL):
|
|
343
411
|
*
|
|
344
412
|
* ```sql
|
|
345
|
-
* insert into "pet" ("name", "species")
|
|
346
|
-
* values ($1, $2)
|
|
413
|
+
* insert into "pet" ("name", "species", "owner_id")
|
|
414
|
+
* values ($1, $2, $3)
|
|
347
415
|
* on conflict ("name")
|
|
348
|
-
* do update set "species" = $
|
|
416
|
+
* do update set "species" = $4
|
|
349
417
|
* ```
|
|
350
418
|
*
|
|
351
419
|
* You can provide the name of the constraint instead of a column name:
|
|
@@ -356,6 +424,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
356
424
|
* .values({
|
|
357
425
|
* name: 'Catto',
|
|
358
426
|
* species: 'cat',
|
|
427
|
+
* owner_id: 3,
|
|
359
428
|
* })
|
|
360
429
|
* .onConflict((oc) => oc
|
|
361
430
|
* .constraint('pet_name_key')
|
|
@@ -367,10 +436,10 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
367
436
|
* The generated SQL (PostgreSQL):
|
|
368
437
|
*
|
|
369
438
|
* ```sql
|
|
370
|
-
* insert into "pet" ("name", "species")
|
|
371
|
-
* values ($1, $2)
|
|
439
|
+
* insert into "pet" ("name", "species", "owner_id")
|
|
440
|
+
* values ($1, $2, $3)
|
|
372
441
|
* on conflict on constraint "pet_name_key"
|
|
373
|
-
* do update set "species" = $
|
|
442
|
+
* do update set "species" = $4
|
|
374
443
|
* ```
|
|
375
444
|
*
|
|
376
445
|
* You can also specify an expression as the conflict target in case
|
|
@@ -384,9 +453,10 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
384
453
|
* .values({
|
|
385
454
|
* name: 'Catto',
|
|
386
455
|
* species: 'cat',
|
|
456
|
+
* owner_id: 3,
|
|
387
457
|
* })
|
|
388
458
|
* .onConflict((oc) => oc
|
|
389
|
-
* .expression(sql
|
|
459
|
+
* .expression(sql<string>`lower(name)`)
|
|
390
460
|
* .doUpdateSet({ species: 'hamster' })
|
|
391
461
|
* )
|
|
392
462
|
* .execute()
|
|
@@ -395,10 +465,10 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
395
465
|
* The generated SQL (PostgreSQL):
|
|
396
466
|
*
|
|
397
467
|
* ```sql
|
|
398
|
-
* insert into "pet" ("name", "species")
|
|
399
|
-
* values ($1, $2)
|
|
468
|
+
* insert into "pet" ("name", "species", "owner_id")
|
|
469
|
+
* values ($1, $2, $3)
|
|
400
470
|
* on conflict (lower(name))
|
|
401
|
-
* do update set "species" = $
|
|
471
|
+
* do update set "species" = $4
|
|
402
472
|
* ```
|
|
403
473
|
*
|
|
404
474
|
* You can add a filter for the update statement like this:
|
|
@@ -409,11 +479,12 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
409
479
|
* .values({
|
|
410
480
|
* name: 'Catto',
|
|
411
481
|
* species: 'cat',
|
|
482
|
+
* owner_id: 3,
|
|
412
483
|
* })
|
|
413
484
|
* .onConflict((oc) => oc
|
|
414
485
|
* .column('name')
|
|
415
486
|
* .doUpdateSet({ species: 'hamster' })
|
|
416
|
-
* .where('excluded.name', '!=', 'Catto'
|
|
487
|
+
* .where('excluded.name', '!=', 'Catto')
|
|
417
488
|
* )
|
|
418
489
|
* .execute()
|
|
419
490
|
* ```
|
|
@@ -421,11 +492,11 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
421
492
|
* The generated SQL (PostgreSQL):
|
|
422
493
|
*
|
|
423
494
|
* ```sql
|
|
424
|
-
* insert into "pet" ("name", "species")
|
|
425
|
-
* values ($1, $2)
|
|
495
|
+
* insert into "pet" ("name", "species", "owner_id")
|
|
496
|
+
* values ($1, $2, $3)
|
|
426
497
|
* on conflict ("name")
|
|
427
|
-
* do update set "species" = $
|
|
428
|
-
* where "excluded"."name" != $
|
|
498
|
+
* do update set "species" = $4
|
|
499
|
+
* where "excluded"."name" != $5
|
|
429
500
|
* ```
|
|
430
501
|
*
|
|
431
502
|
* You can create an `on conflict do nothing` clauses like this:
|
|
@@ -436,6 +507,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
436
507
|
* .values({
|
|
437
508
|
* name: 'Catto',
|
|
438
509
|
* species: 'cat',
|
|
510
|
+
* owner_id: 3,
|
|
439
511
|
* })
|
|
440
512
|
* .onConflict((oc) => oc
|
|
441
513
|
* .column('name')
|
|
@@ -447,8 +519,8 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
447
519
|
* The generated SQL (PostgreSQL):
|
|
448
520
|
*
|
|
449
521
|
* ```sql
|
|
450
|
-
* insert into "pet" ("name", "species")
|
|
451
|
-
* values ($1, $2)
|
|
522
|
+
* insert into "pet" ("name", "species", "owner_id")
|
|
523
|
+
* values ($1, $2, $3)
|
|
452
524
|
* on conflict ("name") do nothing
|
|
453
525
|
* ```
|
|
454
526
|
*
|
|
@@ -457,8 +529,13 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
457
529
|
* `ExpressionBuilder`:
|
|
458
530
|
*
|
|
459
531
|
* ```ts
|
|
460
|
-
* db.insertInto('person')
|
|
461
|
-
* .values(
|
|
532
|
+
* await db.insertInto('person')
|
|
533
|
+
* .values({
|
|
534
|
+
* id: 1,
|
|
535
|
+
* first_name: 'John',
|
|
536
|
+
* last_name: 'Doe',
|
|
537
|
+
* gender: 'male',
|
|
538
|
+
* })
|
|
462
539
|
* .onConflict(oc => oc
|
|
463
540
|
* .column('id')
|
|
464
541
|
* .doUpdateSet({
|
|
@@ -466,6 +543,18 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
466
543
|
* last_name: (eb) => eb.ref('excluded.last_name')
|
|
467
544
|
* })
|
|
468
545
|
* )
|
|
546
|
+
* .execute()
|
|
547
|
+
* ```
|
|
548
|
+
*
|
|
549
|
+
* The generated SQL (PostgreSQL):
|
|
550
|
+
*
|
|
551
|
+
* ```sql
|
|
552
|
+
* insert into "person" ("id", "first_name", "last_name", "gender")
|
|
553
|
+
* values ($1, $2, $3, $4)
|
|
554
|
+
* on conflict ("id")
|
|
555
|
+
* do update set
|
|
556
|
+
* "first_name" = "excluded"."first_name",
|
|
557
|
+
* "last_name" = "excluded"."last_name"
|
|
469
558
|
* ```
|
|
470
559
|
*/
|
|
471
560
|
onConflict(callback: (builder: OnConflictBuilder<DB, TB>) => OnConflictUpdateBuilder<OnConflictDatabase<DB, TB>, OnConflictTables<TB>> | OnConflictDoNothingBuilder<DB, TB>): InsertQueryBuilder<DB, TB, O>;
|
|
@@ -483,8 +572,22 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
483
572
|
* ```ts
|
|
484
573
|
* await db
|
|
485
574
|
* .insertInto('person')
|
|
486
|
-
* .values(
|
|
487
|
-
*
|
|
575
|
+
* .values({
|
|
576
|
+
* id: 1,
|
|
577
|
+
* first_name: 'John',
|
|
578
|
+
* last_name: 'Doe',
|
|
579
|
+
* gender: 'male',
|
|
580
|
+
* })
|
|
581
|
+
* .onDuplicateKeyUpdate({ updated_at: new Date().toISOString() })
|
|
582
|
+
* .execute()
|
|
583
|
+
* ```
|
|
584
|
+
*
|
|
585
|
+
* The generated SQL (MySQL):
|
|
586
|
+
*
|
|
587
|
+
* ```sql
|
|
588
|
+
* insert into `person` (`id`, `first_name`, `last_name`, `gender`)
|
|
589
|
+
* values (?, ?, ?, ?)
|
|
590
|
+
* on duplicate key update `updated_at` = ?
|
|
488
591
|
* ```
|
|
489
592
|
*/
|
|
490
593
|
onDuplicateKeyUpdate(update: UpdateObjectExpression<DB, TB, TB>): InsertQueryBuilder<DB, TB, O>;
|
|
@@ -512,20 +615,20 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
512
615
|
* last_name: 'Aniston'
|
|
513
616
|
* })
|
|
514
617
|
* .returning('id')
|
|
515
|
-
* .
|
|
618
|
+
* .executeTakeFirstOrThrow()
|
|
516
619
|
* ```
|
|
517
620
|
*
|
|
518
621
|
* Return multiple columns:
|
|
519
622
|
*
|
|
520
623
|
* ```ts
|
|
521
|
-
* const { id,
|
|
624
|
+
* const { id, last_name } = await db
|
|
522
625
|
* .insertInto('person')
|
|
523
626
|
* .values({
|
|
524
627
|
* first_name: 'Jennifer',
|
|
525
628
|
* last_name: 'Aniston'
|
|
526
629
|
* })
|
|
527
630
|
* .returning(['id', 'last_name'])
|
|
528
|
-
* .
|
|
631
|
+
* .executeTakeFirstOrThrow()
|
|
529
632
|
* ```
|
|
530
633
|
*
|
|
531
634
|
* Return arbitrary expressions:
|
|
@@ -542,9 +645,9 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
542
645
|
* .returning((eb) => [
|
|
543
646
|
* 'id as id',
|
|
544
647
|
* sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
|
|
545
|
-
* eb.selectFrom('
|
|
648
|
+
* eb.selectFrom('pet').select('pet.id').limit(1).as('first_pet_id')
|
|
546
649
|
* ])
|
|
547
|
-
* .
|
|
650
|
+
* .executeTakeFirstOrThrow()
|
|
548
651
|
* ```
|
|
549
652
|
*/
|
|
550
653
|
returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
|
|
@@ -553,24 +656,151 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
553
656
|
/**
|
|
554
657
|
* Adds a `returning *` to an insert/update/delete query on databases
|
|
555
658
|
* that support `returning` such as PostgreSQL.
|
|
659
|
+
*
|
|
660
|
+
* Also see the {@link returning} method.
|
|
556
661
|
*/
|
|
557
662
|
returningAll(): InsertQueryBuilder<DB, TB, Selectable<DB[TB]>>;
|
|
663
|
+
/**
|
|
664
|
+
* Allows you to return data from modified rows.
|
|
665
|
+
*
|
|
666
|
+
* On supported databases like MS SQL Server (MSSQL), this method can be chained
|
|
667
|
+
* to `insert`, `update`, `delete` and `merge` queries to return data.
|
|
668
|
+
*
|
|
669
|
+
* Also see the {@link outputAll} method.
|
|
670
|
+
*
|
|
671
|
+
* ### Examples
|
|
672
|
+
*
|
|
673
|
+
* Return one column:
|
|
674
|
+
*
|
|
675
|
+
* ```ts
|
|
676
|
+
* const { id } = await db
|
|
677
|
+
* .insertInto('person')
|
|
678
|
+
* .output('inserted.id')
|
|
679
|
+
* .values({
|
|
680
|
+
* first_name: 'Jennifer',
|
|
681
|
+
* last_name: 'Aniston',
|
|
682
|
+
* gender: 'female',
|
|
683
|
+
* })
|
|
684
|
+
* .executeTakeFirstOrThrow()
|
|
685
|
+
* ```
|
|
686
|
+
*
|
|
687
|
+
* The generated SQL (MSSQL):
|
|
688
|
+
*
|
|
689
|
+
* ```sql
|
|
690
|
+
* insert into "person" ("first_name", "last_name", "gender")
|
|
691
|
+
* output "inserted"."id"
|
|
692
|
+
* values (@1, @2, @3)
|
|
693
|
+
* ```
|
|
694
|
+
*
|
|
695
|
+
* Return multiple columns:
|
|
696
|
+
*
|
|
697
|
+
* ```ts
|
|
698
|
+
* const { old_first_name, old_last_name, new_first_name, new_last_name } = await db
|
|
699
|
+
* .updateTable('person')
|
|
700
|
+
* .set({ first_name: 'John', last_name: 'Doe' })
|
|
701
|
+
* .output([
|
|
702
|
+
* 'deleted.first_name as old_first_name',
|
|
703
|
+
* 'deleted.last_name as old_last_name',
|
|
704
|
+
* 'inserted.first_name as new_first_name',
|
|
705
|
+
* 'inserted.last_name as new_last_name',
|
|
706
|
+
* ])
|
|
707
|
+
* .where('created_at', '<', new Date())
|
|
708
|
+
* .executeTakeFirstOrThrow()
|
|
709
|
+
* ```
|
|
710
|
+
*
|
|
711
|
+
* The generated SQL (MSSQL):
|
|
712
|
+
*
|
|
713
|
+
* ```sql
|
|
714
|
+
* update "person"
|
|
715
|
+
* set "first_name" = @1, "last_name" = @2
|
|
716
|
+
* output "deleted"."first_name" as "old_first_name",
|
|
717
|
+
* "deleted"."last_name" as "old_last_name",
|
|
718
|
+
* "inserted"."first_name" as "new_first_name",
|
|
719
|
+
* "inserted"."last_name" as "new_last_name"
|
|
720
|
+
* where "created_at" < @3
|
|
721
|
+
* ```
|
|
722
|
+
*
|
|
723
|
+
* Return arbitrary expressions:
|
|
724
|
+
*
|
|
725
|
+
* ```ts
|
|
726
|
+
* import { sql } from 'kysely'
|
|
727
|
+
*
|
|
728
|
+
* const { full_name } = await db
|
|
729
|
+
* .deleteFrom('person')
|
|
730
|
+
* .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name'))
|
|
731
|
+
* .where('created_at', '<', new Date())
|
|
732
|
+
* .executeTakeFirstOrThrow()
|
|
733
|
+
* ```
|
|
734
|
+
*
|
|
735
|
+
* The generated SQL (MSSQL):
|
|
736
|
+
*
|
|
737
|
+
* ```sql
|
|
738
|
+
* delete from "person"
|
|
739
|
+
* output concat("deleted"."first_name", ' ', "deleted"."last_name") as "full_name"
|
|
740
|
+
* where "created_at" < @1
|
|
741
|
+
* ```
|
|
742
|
+
*
|
|
743
|
+
* Return the action performed on the row:
|
|
744
|
+
*
|
|
745
|
+
* ```ts
|
|
746
|
+
* await db
|
|
747
|
+
* .mergeInto('person')
|
|
748
|
+
* .using('pet', 'pet.owner_id', 'person.id')
|
|
749
|
+
* .whenMatched()
|
|
750
|
+
* .thenDelete()
|
|
751
|
+
* .whenNotMatched()
|
|
752
|
+
* .thenInsertValues({
|
|
753
|
+
* first_name: 'John',
|
|
754
|
+
* last_name: 'Doe',
|
|
755
|
+
* gender: 'male'
|
|
756
|
+
* })
|
|
757
|
+
* .output([
|
|
758
|
+
* 'inserted.id as inserted_id',
|
|
759
|
+
* 'deleted.id as deleted_id',
|
|
760
|
+
* ])
|
|
761
|
+
* .execute()
|
|
762
|
+
* ```
|
|
763
|
+
*
|
|
764
|
+
* The generated SQL (MSSQL):
|
|
765
|
+
*
|
|
766
|
+
* ```sql
|
|
767
|
+
* merge into "person"
|
|
768
|
+
* using "pet" on "pet"."owner_id" = "person"."id"
|
|
769
|
+
* when matched then delete
|
|
770
|
+
* when not matched then
|
|
771
|
+
* insert ("first_name", "last_name", "gender")
|
|
772
|
+
* values (@1, @2, @3)
|
|
773
|
+
* output "inserted"."id" as "inserted_id", "deleted"."id" as "deleted_id"
|
|
774
|
+
* ```
|
|
775
|
+
*
|
|
776
|
+
*/
|
|
777
|
+
output<OE extends OutputExpression<DB, TB, 'inserted'>>(selections: readonly OE[]): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
|
|
778
|
+
output<CB extends OutputCallback<DB, TB, 'inserted'>>(callback: CB): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputCallback<CB>>>;
|
|
779
|
+
output<OE extends OutputExpression<DB, TB, 'inserted'>>(selection: OE): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
|
|
780
|
+
/**
|
|
781
|
+
* Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
|
|
782
|
+
* that support `output` such as MS SQL Server (MSSQL).
|
|
783
|
+
*
|
|
784
|
+
* Also see the {@link output} method.
|
|
785
|
+
*/
|
|
786
|
+
outputAll(table: 'inserted'): InsertQueryBuilder<DB, TB, ReturningAllRow<DB, TB, O>>;
|
|
558
787
|
/**
|
|
559
788
|
* Clears all `returning` clauses from the query.
|
|
560
789
|
*
|
|
561
790
|
* ### Examples
|
|
562
791
|
*
|
|
563
792
|
* ```ts
|
|
564
|
-
* db.insertInto('person')
|
|
565
|
-
* .values({ first_name: 'James', last_name: 'Smith',
|
|
793
|
+
* await db.insertInto('person')
|
|
794
|
+
* .values({ first_name: 'James', last_name: 'Smith', gender: 'male' })
|
|
566
795
|
* .returning(['first_name'])
|
|
567
796
|
* .clearReturning()
|
|
797
|
+
* .execute()
|
|
568
798
|
* ```
|
|
569
799
|
*
|
|
570
800
|
* The generated SQL(PostgreSQL):
|
|
571
801
|
*
|
|
572
802
|
* ```sql
|
|
573
|
-
* insert into "person" ("
|
|
803
|
+
* insert into "person" ("first_name", "last_name", "gender") values ($1, $2, $3)
|
|
574
804
|
* ```
|
|
575
805
|
*/
|
|
576
806
|
clearReturning(): InsertQueryBuilder<DB, TB, InsertResult>;
|
|
@@ -586,13 +816,15 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
586
816
|
* The next example uses a helper function `log` to log a query:
|
|
587
817
|
*
|
|
588
818
|
* ```ts
|
|
819
|
+
* import type { Compilable } from 'kysely'
|
|
820
|
+
*
|
|
589
821
|
* function log<T extends Compilable>(qb: T): T {
|
|
590
822
|
* console.log(qb.compile())
|
|
591
823
|
* return qb
|
|
592
824
|
* }
|
|
593
825
|
*
|
|
594
|
-
* db.
|
|
595
|
-
* .
|
|
826
|
+
* await db.insertInto('person')
|
|
827
|
+
* .values({ first_name: 'John', last_name: 'Doe', gender: 'male' })
|
|
596
828
|
* .$call(log)
|
|
597
829
|
* .execute()
|
|
598
830
|
* ```
|
|
@@ -611,7 +843,9 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
611
843
|
* ### Examples
|
|
612
844
|
*
|
|
613
845
|
* ```ts
|
|
614
|
-
*
|
|
846
|
+
* import type { NewPerson } from 'type-editor' // imaginary module
|
|
847
|
+
*
|
|
848
|
+
* async function insertPerson(values: NewPerson, returnLastName: boolean) {
|
|
615
849
|
* return await db
|
|
616
850
|
* .insertInto('person')
|
|
617
851
|
* .values(values)
|
|
@@ -626,11 +860,11 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
626
860
|
* the code. In the example above the return type of the `insertPerson` function is:
|
|
627
861
|
*
|
|
628
862
|
* ```ts
|
|
629
|
-
* {
|
|
863
|
+
* Promise<{
|
|
630
864
|
* id: number
|
|
631
865
|
* first_name: string
|
|
632
866
|
* last_name?: string
|
|
633
|
-
* }
|
|
867
|
+
* }>
|
|
634
868
|
* ```
|
|
635
869
|
*/
|
|
636
870
|
$if<O2>(condition: boolean, func: (qb: this) => InsertQueryBuilder<any, any, O2>): O2 extends InsertResult ? InsertQueryBuilder<DB, TB, InsertResult> : O2 extends O & infer E ? InsertQueryBuilder<DB, TB, O & Partial<E>> : InsertQueryBuilder<DB, TB, Partial<O2>>;
|
|
@@ -659,23 +893,41 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
659
893
|
* Turn this code:
|
|
660
894
|
*
|
|
661
895
|
* ```ts
|
|
896
|
+
* import type { Person } from 'type-editor' // imaginary module
|
|
897
|
+
*
|
|
662
898
|
* const person = await db.insertInto('person')
|
|
663
|
-
* .values({
|
|
899
|
+
* .values({
|
|
900
|
+
* first_name: 'John',
|
|
901
|
+
* last_name: 'Doe',
|
|
902
|
+
* gender: 'male',
|
|
903
|
+
* nullable_column: 'hell yeah!'
|
|
904
|
+
* })
|
|
664
905
|
* .returningAll()
|
|
665
906
|
* .executeTakeFirstOrThrow()
|
|
666
907
|
*
|
|
667
|
-
* if (
|
|
908
|
+
* if (isWithNoNullValue(person)) {
|
|
668
909
|
* functionThatExpectsPersonWithNonNullValue(person)
|
|
669
910
|
* }
|
|
911
|
+
*
|
|
912
|
+
* function isWithNoNullValue(person: Person): person is Person & { nullable_column: string } {
|
|
913
|
+
* return person.nullable_column != null
|
|
914
|
+
* }
|
|
670
915
|
* ```
|
|
671
916
|
*
|
|
672
917
|
* Into this:
|
|
673
918
|
*
|
|
674
919
|
* ```ts
|
|
920
|
+
* import type { NotNull } from 'kysely'
|
|
921
|
+
*
|
|
675
922
|
* const person = await db.insertInto('person')
|
|
676
|
-
* .values({
|
|
923
|
+
* .values({
|
|
924
|
+
* first_name: 'John',
|
|
925
|
+
* last_name: 'Doe',
|
|
926
|
+
* gender: 'male',
|
|
927
|
+
* nullable_column: 'hell yeah!'
|
|
928
|
+
* })
|
|
677
929
|
* .returningAll()
|
|
678
|
-
* .$narrowType<{ nullable_column:
|
|
930
|
+
* .$narrowType<{ nullable_column: NotNull }>()
|
|
679
931
|
* .executeTakeFirstOrThrow()
|
|
680
932
|
*
|
|
681
933
|
* functionThatExpectsPersonWithNonNullValue(person)
|
|
@@ -685,17 +937,17 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
685
937
|
/**
|
|
686
938
|
* Asserts that query's output row type equals the given type `T`.
|
|
687
939
|
*
|
|
688
|
-
* This method can be used to simplify excessively complex types to make
|
|
940
|
+
* This method can be used to simplify excessively complex types to make TypeScript happy
|
|
689
941
|
* and much faster.
|
|
690
942
|
*
|
|
691
943
|
* Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
|
|
692
|
-
* for
|
|
944
|
+
* for TypeScript and you get errors like this:
|
|
693
945
|
*
|
|
694
946
|
* ```
|
|
695
947
|
* error TS2589: Type instantiation is excessively deep and possibly infinite.
|
|
696
948
|
* ```
|
|
697
949
|
*
|
|
698
|
-
* In these case you can often use this method to help
|
|
950
|
+
* In these case you can often use this method to help TypeScript a little bit. When you use this
|
|
699
951
|
* method to assert the output type of a query, Kysely can drop the complex output type that
|
|
700
952
|
* consists of multiple nested helper types and replace it with the simple asserted type.
|
|
701
953
|
*
|
|
@@ -705,22 +957,29 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
705
957
|
* ### Examples
|
|
706
958
|
*
|
|
707
959
|
* ```ts
|
|
708
|
-
*
|
|
709
|
-
*
|
|
710
|
-
*
|
|
711
|
-
*
|
|
712
|
-
* .
|
|
713
|
-
*
|
|
714
|
-
*
|
|
715
|
-
*
|
|
716
|
-
*
|
|
717
|
-
*
|
|
718
|
-
* .
|
|
719
|
-
*
|
|
720
|
-
*
|
|
721
|
-
*
|
|
722
|
-
*
|
|
723
|
-
*
|
|
960
|
+
* import type { NewPerson, NewPet, Species } from 'type-editor' // imaginary module
|
|
961
|
+
*
|
|
962
|
+
* async function insertPersonAndPet(person: NewPerson, pet: Omit<NewPet, 'owner_id'>) {
|
|
963
|
+
* return await db
|
|
964
|
+
* .with('new_person', (qb) => qb
|
|
965
|
+
* .insertInto('person')
|
|
966
|
+
* .values(person)
|
|
967
|
+
* .returning('id')
|
|
968
|
+
* .$assertType<{ id: number }>()
|
|
969
|
+
* )
|
|
970
|
+
* .with('new_pet', (qb) => qb
|
|
971
|
+
* .insertInto('pet')
|
|
972
|
+
* .values((eb) => ({
|
|
973
|
+
* owner_id: eb.selectFrom('new_person').select('id'),
|
|
974
|
+
* ...pet
|
|
975
|
+
* }))
|
|
976
|
+
* .returning(['name as pet_name', 'species'])
|
|
977
|
+
* .$assertType<{ pet_name: string, species: Species }>()
|
|
978
|
+
* )
|
|
979
|
+
* .selectFrom(['new_person', 'new_pet'])
|
|
980
|
+
* .selectAll()
|
|
981
|
+
* .executeTakeFirstOrThrow()
|
|
982
|
+
* }
|
|
724
983
|
* ```
|
|
725
984
|
*/
|
|
726
985
|
$assertType<T extends O>(): O extends T ? InsertQueryBuilder<DB, TB, T> : KyselyTypeError<`$assertType() call failed: The type passed in is not equal to the output type of the query.`>;
|
|
@@ -759,7 +1018,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
759
1018
|
* ### Examples
|
|
760
1019
|
*
|
|
761
1020
|
* ```ts
|
|
762
|
-
* const stream = db
|
|
1021
|
+
* const stream = db
|
|
763
1022
|
* .selectFrom('person')
|
|
764
1023
|
* .select(['first_name', 'last_name'])
|
|
765
1024
|
* .where('gender', '=', 'other')
|