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
|
@@ -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
|
* ```
|
|
@@ -215,7 +215,9 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
215
215
|
*
|
|
216
216
|
* <!-- siteExample("insert", "Insert subquery", 50) -->
|
|
217
217
|
*
|
|
218
|
-
* You can create an `INSERT INTO SELECT FROM` query using the `expression` method
|
|
218
|
+
* You can create an `INSERT INTO SELECT FROM` query using the `expression` method.
|
|
219
|
+
* This API doesn't follow our WYSIWYG principles and might be a bit difficult to
|
|
220
|
+
* remember. The reasons for this design stem from implementation difficulties.
|
|
219
221
|
*
|
|
220
222
|
* ```ts
|
|
221
223
|
* const result = await db.insertInto('person')
|
|
@@ -241,6 +243,14 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
241
243
|
expression(expression: ExpressionOrFactory<DB, TB, any>): InsertQueryBuilder<DB, TB, O>;
|
|
242
244
|
/**
|
|
243
245
|
* Creates an `insert into "person" default values` query.
|
|
246
|
+
*
|
|
247
|
+
* ### Examples
|
|
248
|
+
*
|
|
249
|
+
* ```ts
|
|
250
|
+
* await db.insertInto('person')
|
|
251
|
+
* .defaultValues()
|
|
252
|
+
* .execute()
|
|
253
|
+
* ```
|
|
244
254
|
*/
|
|
245
255
|
defaultValues(): InsertQueryBuilder<DB, TB, O>;
|
|
246
256
|
/**
|
|
@@ -265,6 +275,50 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
265
275
|
* ```
|
|
266
276
|
*/
|
|
267
277
|
ignore(): InsertQueryBuilder<DB, TB, O>;
|
|
278
|
+
/**
|
|
279
|
+
* Changes an `insert into` query to an `insert top into` query.
|
|
280
|
+
*
|
|
281
|
+
* `top` clause is only supported by some dialects like MS SQL Server.
|
|
282
|
+
*
|
|
283
|
+
* ### Examples
|
|
284
|
+
*
|
|
285
|
+
* Insert the first 5 rows:
|
|
286
|
+
*
|
|
287
|
+
* ```ts
|
|
288
|
+
* await db.insertInto('person')
|
|
289
|
+
* .top(5)
|
|
290
|
+
* .columns(['first_name', 'gender'])
|
|
291
|
+
* .expression(
|
|
292
|
+
* (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
|
|
293
|
+
* )
|
|
294
|
+
* .execute()
|
|
295
|
+
* ```
|
|
296
|
+
*
|
|
297
|
+
* The generated SQL (MS SQL Server):
|
|
298
|
+
*
|
|
299
|
+
* ```sql
|
|
300
|
+
* insert top(5) into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
|
|
301
|
+
* ```
|
|
302
|
+
*
|
|
303
|
+
* Insert the first 50 percent of rows:
|
|
304
|
+
*
|
|
305
|
+
* ```ts
|
|
306
|
+
* await db.insertInto('person')
|
|
307
|
+
* .top(50, 'percent')
|
|
308
|
+
* .columns(['first_name', 'gender'])
|
|
309
|
+
* .expression(
|
|
310
|
+
* (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
|
|
311
|
+
* )
|
|
312
|
+
* .execute()
|
|
313
|
+
* ```
|
|
314
|
+
*
|
|
315
|
+
* The generated SQL (MS SQL Server):
|
|
316
|
+
*
|
|
317
|
+
* ```sql
|
|
318
|
+
* insert top(50) percent into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
|
|
319
|
+
* ```
|
|
320
|
+
*/
|
|
321
|
+
top(expression: number | bigint, modifiers?: 'percent'): InsertQueryBuilder<DB, TB, O>;
|
|
268
322
|
/**
|
|
269
323
|
* Adds an `on conflict` clause to the query.
|
|
270
324
|
*
|
|
@@ -334,7 +388,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
334
388
|
* species: 'cat',
|
|
335
389
|
* })
|
|
336
390
|
* .onConflict((oc) => oc
|
|
337
|
-
* .expression(sql
|
|
391
|
+
* .expression(sql<string>`lower(name)`)
|
|
338
392
|
* .doUpdateSet({ species: 'hamster' })
|
|
339
393
|
* )
|
|
340
394
|
* .execute()
|
|
@@ -501,8 +555,110 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
501
555
|
/**
|
|
502
556
|
* Adds a `returning *` to an insert/update/delete query on databases
|
|
503
557
|
* that support `returning` such as PostgreSQL.
|
|
558
|
+
*
|
|
559
|
+
* Also see the {@link returning} method.
|
|
504
560
|
*/
|
|
505
561
|
returningAll(): InsertQueryBuilder<DB, TB, Selectable<DB[TB]>>;
|
|
562
|
+
/**
|
|
563
|
+
* Allows you to return data from modified rows.
|
|
564
|
+
*
|
|
565
|
+
* On supported databases like MS SQL Server (MSSQL), this method can be chained
|
|
566
|
+
* to `insert`, `update`, `delete` and `merge` queries to return data.
|
|
567
|
+
*
|
|
568
|
+
* Also see the {@link outputAll} method.
|
|
569
|
+
*
|
|
570
|
+
* ### Examples
|
|
571
|
+
*
|
|
572
|
+
* Return one column:
|
|
573
|
+
*
|
|
574
|
+
* ```ts
|
|
575
|
+
* const { id } = await db
|
|
576
|
+
* .insertInto('person')
|
|
577
|
+
* .output('inserted.id')
|
|
578
|
+
* .values({
|
|
579
|
+
* first_name: 'Jennifer',
|
|
580
|
+
* last_name: 'Aniston'
|
|
581
|
+
* })
|
|
582
|
+
* .executeTakeFirst()
|
|
583
|
+
* ```
|
|
584
|
+
*
|
|
585
|
+
* Return multiple columns:
|
|
586
|
+
*
|
|
587
|
+
* ```ts
|
|
588
|
+
* const { id, first_name } = await db
|
|
589
|
+
* .updateTable('person')
|
|
590
|
+
* .set({ first_name: 'John', last_name: 'Doe' })
|
|
591
|
+
* .output([
|
|
592
|
+
* 'deleted.first_name as old_first_name',
|
|
593
|
+
* 'deleted.last_name as old_last_name',
|
|
594
|
+
* 'inserted.first_name as new_first_name',
|
|
595
|
+
* 'inserted.last_name as new_last_name',
|
|
596
|
+
* ])
|
|
597
|
+
* .where('created_at', '<', new Date())
|
|
598
|
+
* .executeTakeFirst()
|
|
599
|
+
* ```
|
|
600
|
+
*
|
|
601
|
+
* Return arbitrary expressions:
|
|
602
|
+
*
|
|
603
|
+
* ```ts
|
|
604
|
+
* import { sql } from 'kysely'
|
|
605
|
+
*
|
|
606
|
+
* const { id, full_name } = await db
|
|
607
|
+
* .deleteFrom('person')
|
|
608
|
+
* .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
|
|
609
|
+
* .where('created_at', '<', new Date())
|
|
610
|
+
* .executeTakeFirst()
|
|
611
|
+
* ```
|
|
612
|
+
*
|
|
613
|
+
* Return the action performed on the row:
|
|
614
|
+
*
|
|
615
|
+
* ```ts
|
|
616
|
+
* await db
|
|
617
|
+
* .mergeInto('person')
|
|
618
|
+
* .using('pet', 'pet.owner_id', 'person.id')
|
|
619
|
+
* .whenMatched()
|
|
620
|
+
* .thenDelete()
|
|
621
|
+
* .whenNotMatched()
|
|
622
|
+
* .thenInsertValues({
|
|
623
|
+
* first_name: 'John',
|
|
624
|
+
* last_name: 'Doe',
|
|
625
|
+
* gender: 'male'
|
|
626
|
+
* })
|
|
627
|
+
* .output([
|
|
628
|
+
* 'inserted.id as inserted_id',
|
|
629
|
+
* 'deleted.id as deleted_id',
|
|
630
|
+
* ])
|
|
631
|
+
* ```
|
|
632
|
+
*/
|
|
633
|
+
output<OE extends OutputExpression<DB, TB, 'inserted'>>(selections: readonly OE[]): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
|
|
634
|
+
output<CB extends OutputCallback<DB, TB, 'inserted'>>(callback: CB): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputCallback<CB>>>;
|
|
635
|
+
output<OE extends OutputExpression<DB, TB, 'inserted'>>(selection: OE): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
|
|
636
|
+
/**
|
|
637
|
+
* Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
|
|
638
|
+
* that support `output` such as MS SQL Server (MSSQL).
|
|
639
|
+
*
|
|
640
|
+
* Also see the {@link output} method.
|
|
641
|
+
*/
|
|
642
|
+
outputAll(table: 'inserted'): InsertQueryBuilder<DB, TB, ReturningAllRow<DB, TB, O>>;
|
|
643
|
+
/**
|
|
644
|
+
* Clears all `returning` clauses from the query.
|
|
645
|
+
*
|
|
646
|
+
* ### Examples
|
|
647
|
+
*
|
|
648
|
+
* ```ts
|
|
649
|
+
* db.insertInto('person')
|
|
650
|
+
* .values({ first_name: 'James', last_name: 'Smith', age: 42 })
|
|
651
|
+
* .returning(['first_name'])
|
|
652
|
+
* .clearReturning()
|
|
653
|
+
* ```
|
|
654
|
+
*
|
|
655
|
+
* The generated SQL(PostgreSQL):
|
|
656
|
+
*
|
|
657
|
+
* ```sql
|
|
658
|
+
* insert into "person" ("James", "Smith", 42)
|
|
659
|
+
* ```
|
|
660
|
+
*/
|
|
661
|
+
clearReturning(): InsertQueryBuilder<DB, TB, InsertResult>;
|
|
506
662
|
/**
|
|
507
663
|
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
508
664
|
* what the provided function returns.
|
|
@@ -614,17 +770,17 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
614
770
|
/**
|
|
615
771
|
* Asserts that query's output row type equals the given type `T`.
|
|
616
772
|
*
|
|
617
|
-
* This method can be used to simplify excessively complex types to make
|
|
773
|
+
* This method can be used to simplify excessively complex types to make TypeScript happy
|
|
618
774
|
* and much faster.
|
|
619
775
|
*
|
|
620
776
|
* Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
|
|
621
|
-
* for
|
|
777
|
+
* for TypeScript and you get errors like this:
|
|
622
778
|
*
|
|
623
779
|
* ```
|
|
624
780
|
* error TS2589: Type instantiation is excessively deep and possibly infinite.
|
|
625
781
|
* ```
|
|
626
782
|
*
|
|
627
|
-
* In these case you can often use this method to help
|
|
783
|
+
* In these case you can often use this method to help TypeScript a little bit. When you use this
|
|
628
784
|
* method to assert the output type of a query, Kysely can drop the complex output type that
|
|
629
785
|
* consists of multiple nested helper types and replace it with the simple asserted type.
|
|
630
786
|
*
|
|
@@ -13,6 +13,7 @@ import { parseExpression, } from '../parser/expression-parser.js';
|
|
|
13
13
|
import { ColumnNode } from '../operation-node/column-node.js';
|
|
14
14
|
import { OnConflictBuilder, } from './on-conflict-builder.js';
|
|
15
15
|
import { OnConflictNode } from '../operation-node/on-conflict-node.js';
|
|
16
|
+
import { parseTop } from '../parser/top-parser.js';
|
|
16
17
|
export class InsertQueryBuilder {
|
|
17
18
|
#props;
|
|
18
19
|
constructor(props) {
|
|
@@ -137,11 +138,10 @@ export class InsertQueryBuilder {
|
|
|
137
138
|
* .insertInto('person')
|
|
138
139
|
* .values(({ ref, selectFrom, fn }) => ({
|
|
139
140
|
* first_name: 'Jennifer',
|
|
140
|
-
* last_name: sql
|
|
141
|
+
* last_name: sql<string>`>concat(${ani}, ${ston})`,
|
|
141
142
|
* middle_name: ref('first_name'),
|
|
142
143
|
* age: selectFrom('person')
|
|
143
|
-
* .select(fn.avg<number>('age')
|
|
144
|
-
* .as('avg_age')),
|
|
144
|
+
* .select(fn.avg<number>('age').as('avg_age')),
|
|
145
145
|
* }))
|
|
146
146
|
* .executeTakeFirst()
|
|
147
147
|
* ```
|
|
@@ -225,7 +225,9 @@ export class InsertQueryBuilder {
|
|
|
225
225
|
*
|
|
226
226
|
* <!-- siteExample("insert", "Insert subquery", 50) -->
|
|
227
227
|
*
|
|
228
|
-
* You can create an `INSERT INTO SELECT FROM` query using the `expression` method
|
|
228
|
+
* You can create an `INSERT INTO SELECT FROM` query using the `expression` method.
|
|
229
|
+
* This API doesn't follow our WYSIWYG principles and might be a bit difficult to
|
|
230
|
+
* remember. The reasons for this design stem from implementation difficulties.
|
|
229
231
|
*
|
|
230
232
|
* ```ts
|
|
231
233
|
* const result = await db.insertInto('person')
|
|
@@ -258,6 +260,14 @@ export class InsertQueryBuilder {
|
|
|
258
260
|
}
|
|
259
261
|
/**
|
|
260
262
|
* Creates an `insert into "person" default values` query.
|
|
263
|
+
*
|
|
264
|
+
* ### Examples
|
|
265
|
+
*
|
|
266
|
+
* ```ts
|
|
267
|
+
* await db.insertInto('person')
|
|
268
|
+
* .defaultValues()
|
|
269
|
+
* .execute()
|
|
270
|
+
* ```
|
|
261
271
|
*/
|
|
262
272
|
defaultValues() {
|
|
263
273
|
return new InsertQueryBuilder({
|
|
@@ -296,6 +306,55 @@ export class InsertQueryBuilder {
|
|
|
296
306
|
}),
|
|
297
307
|
});
|
|
298
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* Changes an `insert into` query to an `insert top into` query.
|
|
311
|
+
*
|
|
312
|
+
* `top` clause is only supported by some dialects like MS SQL Server.
|
|
313
|
+
*
|
|
314
|
+
* ### Examples
|
|
315
|
+
*
|
|
316
|
+
* Insert the first 5 rows:
|
|
317
|
+
*
|
|
318
|
+
* ```ts
|
|
319
|
+
* await db.insertInto('person')
|
|
320
|
+
* .top(5)
|
|
321
|
+
* .columns(['first_name', 'gender'])
|
|
322
|
+
* .expression(
|
|
323
|
+
* (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
|
|
324
|
+
* )
|
|
325
|
+
* .execute()
|
|
326
|
+
* ```
|
|
327
|
+
*
|
|
328
|
+
* The generated SQL (MS SQL Server):
|
|
329
|
+
*
|
|
330
|
+
* ```sql
|
|
331
|
+
* insert top(5) into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
|
|
332
|
+
* ```
|
|
333
|
+
*
|
|
334
|
+
* Insert the first 50 percent of rows:
|
|
335
|
+
*
|
|
336
|
+
* ```ts
|
|
337
|
+
* await db.insertInto('person')
|
|
338
|
+
* .top(50, 'percent')
|
|
339
|
+
* .columns(['first_name', 'gender'])
|
|
340
|
+
* .expression(
|
|
341
|
+
* (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
|
|
342
|
+
* )
|
|
343
|
+
* .execute()
|
|
344
|
+
* ```
|
|
345
|
+
*
|
|
346
|
+
* The generated SQL (MS SQL Server):
|
|
347
|
+
*
|
|
348
|
+
* ```sql
|
|
349
|
+
* insert top(50) percent into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
|
|
350
|
+
* ```
|
|
351
|
+
*/
|
|
352
|
+
top(expression, modifiers) {
|
|
353
|
+
return new InsertQueryBuilder({
|
|
354
|
+
...this.#props,
|
|
355
|
+
queryNode: QueryNode.cloneWithTop(this.#props.queryNode, parseTop(expression, modifiers)),
|
|
356
|
+
});
|
|
357
|
+
}
|
|
299
358
|
/**
|
|
300
359
|
* Adds an `on conflict` clause to the query.
|
|
301
360
|
*
|
|
@@ -365,7 +424,7 @@ export class InsertQueryBuilder {
|
|
|
365
424
|
* species: 'cat',
|
|
366
425
|
* })
|
|
367
426
|
* .onConflict((oc) => oc
|
|
368
|
-
* .expression(sql
|
|
427
|
+
* .expression(sql<string>`lower(name)`)
|
|
369
428
|
* .doUpdateSet({ species: 'hamster' })
|
|
370
429
|
* )
|
|
371
430
|
* .execute()
|
|
@@ -495,6 +554,42 @@ export class InsertQueryBuilder {
|
|
|
495
554
|
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll()),
|
|
496
555
|
});
|
|
497
556
|
}
|
|
557
|
+
output(args) {
|
|
558
|
+
return new InsertQueryBuilder({
|
|
559
|
+
...this.#props,
|
|
560
|
+
queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectArg(args)),
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
outputAll(table) {
|
|
564
|
+
return new InsertQueryBuilder({
|
|
565
|
+
...this.#props,
|
|
566
|
+
queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectAll(table)),
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* Clears all `returning` clauses from the query.
|
|
571
|
+
*
|
|
572
|
+
* ### Examples
|
|
573
|
+
*
|
|
574
|
+
* ```ts
|
|
575
|
+
* db.insertInto('person')
|
|
576
|
+
* .values({ first_name: 'James', last_name: 'Smith', age: 42 })
|
|
577
|
+
* .returning(['first_name'])
|
|
578
|
+
* .clearReturning()
|
|
579
|
+
* ```
|
|
580
|
+
*
|
|
581
|
+
* The generated SQL(PostgreSQL):
|
|
582
|
+
*
|
|
583
|
+
* ```sql
|
|
584
|
+
* insert into "person" ("James", "Smith", 42)
|
|
585
|
+
* ```
|
|
586
|
+
*/
|
|
587
|
+
clearReturning() {
|
|
588
|
+
return new InsertQueryBuilder({
|
|
589
|
+
...this.#props,
|
|
590
|
+
queryNode: QueryNode.cloneWithoutReturning(this.#props.queryNode),
|
|
591
|
+
});
|
|
592
|
+
}
|
|
498
593
|
/**
|
|
499
594
|
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
500
595
|
* what the provided function returns.
|
|
@@ -619,17 +714,17 @@ export class InsertQueryBuilder {
|
|
|
619
714
|
/**
|
|
620
715
|
* Asserts that query's output row type equals the given type `T`.
|
|
621
716
|
*
|
|
622
|
-
* This method can be used to simplify excessively complex types to make
|
|
717
|
+
* This method can be used to simplify excessively complex types to make TypeScript happy
|
|
623
718
|
* and much faster.
|
|
624
719
|
*
|
|
625
720
|
* Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
|
|
626
|
-
* for
|
|
721
|
+
* for TypeScript and you get errors like this:
|
|
627
722
|
*
|
|
628
723
|
* ```
|
|
629
724
|
* error TS2589: Type instantiation is excessively deep and possibly infinite.
|
|
630
725
|
* ```
|
|
631
726
|
*
|
|
632
|
-
* In these case you can often use this method to help
|
|
727
|
+
* In these case you can often use this method to help TypeScript a little bit. When you use this
|
|
633
728
|
* method to assert the output type of a query, Kysely can drop the complex output type that
|
|
634
729
|
* consists of multiple nested helper types and replace it with the simple asserted type.
|
|
635
730
|
*
|
|
@@ -682,9 +777,11 @@ export class InsertQueryBuilder {
|
|
|
682
777
|
*/
|
|
683
778
|
async execute() {
|
|
684
779
|
const compiledQuery = this.compile();
|
|
685
|
-
const query = compiledQuery.query;
|
|
686
780
|
const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
|
|
687
|
-
|
|
781
|
+
const { adapter } = this.#props.executor;
|
|
782
|
+
const query = compiledQuery.query;
|
|
783
|
+
if ((query.returning && adapter.supportsReturning) ||
|
|
784
|
+
(query.output && adapter.supportsOutput)) {
|
|
688
785
|
return result.rows;
|
|
689
786
|
}
|
|
690
787
|
return [
|