kysely 0.27.3 → 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/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/postgres/postgres-introspector.js +1 -1
- package/dist/cjs/driver/database-connection.d.ts +3 -1
- 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 +2 -2
- package/dist/cjs/expression/expression-builder.js +2 -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 +28 -21
- package/dist/cjs/index.js +28 -21
- package/dist/cjs/kysely.d.ts +1 -1
- package/dist/cjs/kysely.js +3 -3
- 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 +5 -3
- package/dist/cjs/operation-node/delete-query-node.d.ts +2 -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 +2 -0
- package/dist/cjs/operation-node/merge-query-node.d.ts +2 -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 +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +12 -0
- 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 +11 -6
- package/dist/cjs/operation-node/query-node.js +9 -0
- package/dist/cjs/operation-node/select-query-node.d.ts +1 -0
- package/dist/cjs/operation-node/select-query-node.js +6 -0
- package/dist/cjs/operation-node/update-query-node.d.ts +2 -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 +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/query-builder/delete-query-builder.d.ts +89 -5
- package/dist/cjs/query-builder/delete-query-builder.js +19 -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 +95 -10
- package/dist/cjs/query-builder/insert-query-builder.js +25 -10
- package/dist/cjs/query-builder/merge-query-builder.d.ts +167 -3
- package/dist/cjs/query-builder/merge-query-builder.js +30 -1
- 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 +76 -11
- package/dist/cjs/query-builder/select-query-builder.js +7 -2
- package/dist/cjs/query-builder/update-query-builder.d.ts +95 -10
- package/dist/cjs/query-builder/update-query-builder.js +21 -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 +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +25 -1
- package/dist/cjs/query-creator.d.ts +56 -3
- package/dist/cjs/query-creator.js +54 -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 +1 -1
- package/dist/cjs/schema/alter-table-builder.js +1 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +5 -0
- package/dist/cjs/schema/column-definition-builder.js +7 -0
- package/dist/cjs/util/assert.js +2 -3
- 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.js +1 -2
- package/dist/cjs/util/stack-trace-utils.js +1 -2
- 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/postgres/postgres-introspector.js +1 -1
- package/dist/esm/driver/database-connection.d.ts +3 -1
- 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 +2 -2
- 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 +28 -21
- package/dist/esm/index.js +28 -21
- package/dist/esm/kysely.d.ts +1 -1
- package/dist/esm/kysely.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/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 +3 -1
- package/dist/esm/operation-node/delete-query-node.d.ts +2 -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 +2 -0
- package/dist/esm/operation-node/merge-query-node.d.ts +2 -0
- package/dist/esm/operation-node/on-node.d.ts +1 -1
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +12 -0
- 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 +11 -6
- package/dist/esm/operation-node/query-node.js +9 -0
- package/dist/esm/operation-node/select-query-node.d.ts +1 -0
- package/dist/esm/operation-node/select-query-node.js +6 -0
- package/dist/esm/operation-node/update-query-node.d.ts +2 -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 +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/query-builder/delete-query-builder.d.ts +89 -5
- package/dist/esm/query-builder/delete-query-builder.js +19 -5
- package/dist/esm/query-builder/function-module.d.ts +5 -5
- package/dist/esm/query-builder/insert-query-builder.d.ts +95 -10
- package/dist/esm/query-builder/insert-query-builder.js +25 -10
- package/dist/esm/query-builder/merge-query-builder.d.ts +167 -3
- package/dist/esm/query-builder/merge-query-builder.js +30 -1
- 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 +76 -11
- package/dist/esm/query-builder/select-query-builder.js +6 -0
- package/dist/esm/query-builder/update-query-builder.d.ts +95 -10
- package/dist/esm/query-builder/update-query-builder.js +21 -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 +2 -0
- package/dist/esm/query-compiler/default-query-compiler.js +25 -1
- package/dist/esm/query-creator.d.ts +56 -3
- package/dist/esm/query-creator.js +54 -1
- 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 +1 -1
- package/dist/esm/schema/alter-table-builder.js +1 -2
- package/dist/esm/schema/column-definition-builder.d.ts +5 -0
- package/dist/esm/schema/column-definition-builder.js +7 -0
- package/dist/esm/util/object-utils.js +18 -5
- package/package.json +7 -6
|
@@ -106,7 +106,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
106
106
|
* ```ts
|
|
107
107
|
* db.selectFrom('person')
|
|
108
108
|
* .selectAll('person')
|
|
109
|
-
* .where(sql
|
|
109
|
+
* .where(sql<string>`upper(first_name)`, '=', 'JENNIFER')
|
|
110
110
|
* ```
|
|
111
111
|
*/
|
|
112
112
|
<O, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(name: string, args?: ReadonlyArray<RE>): ExpressionWrapper<DB, TB, O>;
|
|
@@ -173,7 +173,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
173
173
|
* If this function is used in a `select` statement, the type of the selected
|
|
174
174
|
* expression will be `number | string` by default. This is because Kysely can't know the
|
|
175
175
|
* type the db driver outputs. Sometimes the output can be larger than the largest
|
|
176
|
-
*
|
|
176
|
+
* JavaScript number and a string is returned instead. Most drivers allow you
|
|
177
177
|
* to configure the output type of large numbers and Kysely can't know if you've
|
|
178
178
|
* done so.
|
|
179
179
|
*
|
|
@@ -292,7 +292,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
292
292
|
* If this function is used in a `select` statement, the type of the selected
|
|
293
293
|
* expression will be `number | string | bigint` by default. This is because
|
|
294
294
|
* Kysely can't know the type the db driver outputs. Sometimes the output can
|
|
295
|
-
* be larger than the largest
|
|
295
|
+
* be larger than the largest JavaScript number and a string is returned instead.
|
|
296
296
|
* Most drivers allow you to configure the output type of large numbers and Kysely
|
|
297
297
|
* can't know if you've done so.
|
|
298
298
|
*
|
|
@@ -344,7 +344,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
344
344
|
* If this is used in a `select` statement, the type of the selected expression
|
|
345
345
|
* will be `number | string | bigint` by default. This is because Kysely
|
|
346
346
|
* can't know the type the db driver outputs. Sometimes the output can be larger
|
|
347
|
-
* than the largest
|
|
347
|
+
* than the largest JavaScript number and a string is returned instead. Most
|
|
348
348
|
* drivers allow you to configure the output type of large numbers and Kysely
|
|
349
349
|
* can't know if you've done so.
|
|
350
350
|
*
|
|
@@ -513,7 +513,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
513
513
|
* If this function is used in a `select` statement, the type of the selected
|
|
514
514
|
* expression will be `number | string` by default. This is because Kysely can't know the
|
|
515
515
|
* type the db driver outputs. Sometimes the output can be larger than the largest
|
|
516
|
-
*
|
|
516
|
+
* JavaScript number and a string is returned instead. Most drivers allow you
|
|
517
517
|
* to configure the output type of large numbers and Kysely can't know if you've
|
|
518
518
|
* done so.
|
|
519
519
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createFunctionModule =
|
|
3
|
+
exports.createFunctionModule = createFunctionModule;
|
|
4
4
|
const expression_wrapper_js_1 = require("../expression/expression-wrapper.js");
|
|
5
5
|
const aggregate_function_node_js_1 = require("../operation-node/aggregate-function-node.js");
|
|
6
6
|
const function_node_js_1 = require("../operation-node/function-node.js");
|
|
@@ -60,4 +60,3 @@ function createFunctionModule() {
|
|
|
60
60
|
},
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
|
-
exports.createFunctionModule = createFunctionModule;
|
|
@@ -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')
|
|
@@ -386,7 +388,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
386
388
|
* species: 'cat',
|
|
387
389
|
* })
|
|
388
390
|
* .onConflict((oc) => oc
|
|
389
|
-
* .expression(sql
|
|
391
|
+
* .expression(sql<string>`lower(name)`)
|
|
390
392
|
* .doUpdateSet({ species: 'hamster' })
|
|
391
393
|
* )
|
|
392
394
|
* .execute()
|
|
@@ -553,8 +555,91 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
553
555
|
/**
|
|
554
556
|
* Adds a `returning *` to an insert/update/delete query on databases
|
|
555
557
|
* that support `returning` such as PostgreSQL.
|
|
558
|
+
*
|
|
559
|
+
* Also see the {@link returning} method.
|
|
556
560
|
*/
|
|
557
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>>;
|
|
558
643
|
/**
|
|
559
644
|
* Clears all `returning` clauses from the query.
|
|
560
645
|
*
|
|
@@ -685,17 +770,17 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
685
770
|
/**
|
|
686
771
|
* Asserts that query's output row type equals the given type `T`.
|
|
687
772
|
*
|
|
688
|
-
* 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
|
|
689
774
|
* and much faster.
|
|
690
775
|
*
|
|
691
776
|
* Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
|
|
692
|
-
* for
|
|
777
|
+
* for TypeScript and you get errors like this:
|
|
693
778
|
*
|
|
694
779
|
* ```
|
|
695
780
|
* error TS2589: Type instantiation is excessively deep and possibly infinite.
|
|
696
781
|
* ```
|
|
697
782
|
*
|
|
698
|
-
* 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
|
|
699
784
|
* method to assert the output type of a query, Kysely can drop the complex output type that
|
|
700
785
|
* consists of multiple nested helper types and replace it with the simple asserted type.
|
|
701
786
|
*
|
|
@@ -140,11 +140,10 @@ class InsertQueryBuilder {
|
|
|
140
140
|
* .insertInto('person')
|
|
141
141
|
* .values(({ ref, selectFrom, fn }) => ({
|
|
142
142
|
* first_name: 'Jennifer',
|
|
143
|
-
* last_name: sql
|
|
143
|
+
* last_name: sql<string>`>concat(${ani}, ${ston})`,
|
|
144
144
|
* middle_name: ref('first_name'),
|
|
145
145
|
* age: selectFrom('person')
|
|
146
|
-
* .select(fn.avg<number>('age')
|
|
147
|
-
* .as('avg_age')),
|
|
146
|
+
* .select(fn.avg<number>('age').as('avg_age')),
|
|
148
147
|
* }))
|
|
149
148
|
* .executeTakeFirst()
|
|
150
149
|
* ```
|
|
@@ -228,7 +227,9 @@ class InsertQueryBuilder {
|
|
|
228
227
|
*
|
|
229
228
|
* <!-- siteExample("insert", "Insert subquery", 50) -->
|
|
230
229
|
*
|
|
231
|
-
* You can create an `INSERT INTO SELECT FROM` query using the `expression` method
|
|
230
|
+
* You can create an `INSERT INTO SELECT FROM` query using the `expression` method.
|
|
231
|
+
* This API doesn't follow our WYSIWYG principles and might be a bit difficult to
|
|
232
|
+
* remember. The reasons for this design stem from implementation difficulties.
|
|
232
233
|
*
|
|
233
234
|
* ```ts
|
|
234
235
|
* const result = await db.insertInto('person')
|
|
@@ -425,7 +426,7 @@ class InsertQueryBuilder {
|
|
|
425
426
|
* species: 'cat',
|
|
426
427
|
* })
|
|
427
428
|
* .onConflict((oc) => oc
|
|
428
|
-
* .expression(sql
|
|
429
|
+
* .expression(sql<string>`lower(name)`)
|
|
429
430
|
* .doUpdateSet({ species: 'hamster' })
|
|
430
431
|
* )
|
|
431
432
|
* .execute()
|
|
@@ -555,6 +556,18 @@ class InsertQueryBuilder {
|
|
|
555
556
|
queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)()),
|
|
556
557
|
});
|
|
557
558
|
}
|
|
559
|
+
output(args) {
|
|
560
|
+
return new InsertQueryBuilder({
|
|
561
|
+
...this.#props,
|
|
562
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOutput(this.#props.queryNode, (0, select_parser_js_1.parseSelectArg)(args)),
|
|
563
|
+
});
|
|
564
|
+
}
|
|
565
|
+
outputAll(table) {
|
|
566
|
+
return new InsertQueryBuilder({
|
|
567
|
+
...this.#props,
|
|
568
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOutput(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)(table)),
|
|
569
|
+
});
|
|
570
|
+
}
|
|
558
571
|
/**
|
|
559
572
|
* Clears all `returning` clauses from the query.
|
|
560
573
|
*
|
|
@@ -703,17 +716,17 @@ class InsertQueryBuilder {
|
|
|
703
716
|
/**
|
|
704
717
|
* Asserts that query's output row type equals the given type `T`.
|
|
705
718
|
*
|
|
706
|
-
* This method can be used to simplify excessively complex types to make
|
|
719
|
+
* This method can be used to simplify excessively complex types to make TypeScript happy
|
|
707
720
|
* and much faster.
|
|
708
721
|
*
|
|
709
722
|
* Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
|
|
710
|
-
* for
|
|
723
|
+
* for TypeScript and you get errors like this:
|
|
711
724
|
*
|
|
712
725
|
* ```
|
|
713
726
|
* error TS2589: Type instantiation is excessively deep and possibly infinite.
|
|
714
727
|
* ```
|
|
715
728
|
*
|
|
716
|
-
* In these case you can often use this method to help
|
|
729
|
+
* In these case you can often use this method to help TypeScript a little bit. When you use this
|
|
717
730
|
* method to assert the output type of a query, Kysely can drop the complex output type that
|
|
718
731
|
* consists of multiple nested helper types and replace it with the simple asserted type.
|
|
719
732
|
*
|
|
@@ -766,9 +779,11 @@ class InsertQueryBuilder {
|
|
|
766
779
|
*/
|
|
767
780
|
async execute() {
|
|
768
781
|
const compiledQuery = this.compile();
|
|
769
|
-
const query = compiledQuery.query;
|
|
770
782
|
const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
|
|
771
|
-
|
|
783
|
+
const { adapter } = this.#props.executor;
|
|
784
|
+
const query = compiledQuery.query;
|
|
785
|
+
if ((query.returning && adapter.supportsReturning) ||
|
|
786
|
+
(query.output && adapter.supportsOutput)) {
|
|
772
787
|
return result.rows;
|
|
773
788
|
}
|
|
774
789
|
return [
|
|
@@ -7,6 +7,7 @@ import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
|
7
7
|
import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert-values-parser.js';
|
|
8
8
|
import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
|
|
9
9
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
10
|
+
import { ReturningAllRow, ReturningRow } from '../parser/returning-parser.js';
|
|
10
11
|
import { TableExpression } from '../parser/table-parser.js';
|
|
11
12
|
import { ExtractUpdateTypeFromReferenceExpression, UpdateObject, UpdateObjectFactory } from '../parser/update-set-parser.js';
|
|
12
13
|
import { ValueExpression } from '../parser/value-parser.js';
|
|
@@ -17,8 +18,9 @@ import { QueryId } from '../util/query-id.js';
|
|
|
17
18
|
import { ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
|
|
18
19
|
import { MergeResult } from './merge-result.js';
|
|
19
20
|
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
21
|
+
import { OutputCallback, OutputExpression, OutputInterface, OutputPrefix, SelectExpressionFromOutputCallback, SelectExpressionFromOutputExpression } from './output-interface.js';
|
|
20
22
|
import { UpdateQueryBuilder } from './update-query-builder.js';
|
|
21
|
-
export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> {
|
|
23
|
+
export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> implements OutputInterface<DB, TT, O> {
|
|
22
24
|
#private;
|
|
23
25
|
constructor(props: MergeQueryBuilderProps);
|
|
24
26
|
/**
|
|
@@ -96,13 +98,94 @@ export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> {
|
|
|
96
98
|
*/
|
|
97
99
|
using<TE extends TableExpression<DB, TT>, K1 extends JoinReferenceExpression<DB, TT, TE>, K2 extends JoinReferenceExpression<DB, TT, TE>>(sourceTable: TE, k1: K1, k2: K2): ExtractWheneableMergeQueryBuilder<DB, TT, TE, O>;
|
|
98
100
|
using<TE extends TableExpression<DB, TT>, FN extends JoinCallbackExpression<DB, TT, TE>>(sourceTable: TE, callback: FN): ExtractWheneableMergeQueryBuilder<DB, TT, TE, O>;
|
|
101
|
+
/**
|
|
102
|
+
* Allows you to return data from modified rows.
|
|
103
|
+
*
|
|
104
|
+
* On supported databases like MS SQL Server (MSSQL), this method can be chained
|
|
105
|
+
* to `insert`, `update`, `delete` and `merge` queries to return data.
|
|
106
|
+
*
|
|
107
|
+
* Also see the {@link outputAll} method.
|
|
108
|
+
*
|
|
109
|
+
* ### Examples
|
|
110
|
+
*
|
|
111
|
+
* Return one column:
|
|
112
|
+
*
|
|
113
|
+
* ```ts
|
|
114
|
+
* const { id } = await db
|
|
115
|
+
* .insertInto('person')
|
|
116
|
+
* .output('inserted.id')
|
|
117
|
+
* .values({
|
|
118
|
+
* first_name: 'Jennifer',
|
|
119
|
+
* last_name: 'Aniston'
|
|
120
|
+
* })
|
|
121
|
+
* .executeTakeFirst()
|
|
122
|
+
* ```
|
|
123
|
+
*
|
|
124
|
+
* Return multiple columns:
|
|
125
|
+
*
|
|
126
|
+
* ```ts
|
|
127
|
+
* const { id, first_name } = await db
|
|
128
|
+
* .updateTable('person')
|
|
129
|
+
* .set({ first_name: 'John', last_name: 'Doe' })
|
|
130
|
+
* .output([
|
|
131
|
+
* 'deleted.first_name as old_first_name',
|
|
132
|
+
* 'deleted.last_name as old_last_name',
|
|
133
|
+
* 'inserted.first_name as new_first_name',
|
|
134
|
+
* 'inserted.last_name as new_last_name',
|
|
135
|
+
* ])
|
|
136
|
+
* .where('created_at', '<', new Date())
|
|
137
|
+
* .executeTakeFirst()
|
|
138
|
+
* ```
|
|
139
|
+
*
|
|
140
|
+
* Return arbitrary expressions:
|
|
141
|
+
*
|
|
142
|
+
* ```ts
|
|
143
|
+
* import { sql } from 'kysely'
|
|
144
|
+
*
|
|
145
|
+
* const { id, full_name } = await db
|
|
146
|
+
* .deleteFrom('person')
|
|
147
|
+
* .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
|
|
148
|
+
* .where('created_at', '<', new Date())
|
|
149
|
+
* .executeTakeFirst()
|
|
150
|
+
* ```
|
|
151
|
+
*
|
|
152
|
+
* Return the action performed on the row:
|
|
153
|
+
*
|
|
154
|
+
* ```ts
|
|
155
|
+
* await db
|
|
156
|
+
* .mergeInto('person')
|
|
157
|
+
* .using('pet', 'pet.owner_id', 'person.id')
|
|
158
|
+
* .whenMatched()
|
|
159
|
+
* .thenDelete()
|
|
160
|
+
* .whenNotMatched()
|
|
161
|
+
* .thenInsertValues({
|
|
162
|
+
* first_name: 'John',
|
|
163
|
+
* last_name: 'Doe',
|
|
164
|
+
* gender: 'male'
|
|
165
|
+
* })
|
|
166
|
+
* .output([
|
|
167
|
+
* 'inserted.id as inserted_id',
|
|
168
|
+
* 'deleted.id as deleted_id',
|
|
169
|
+
* ])
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
output<OE extends OutputExpression<DB, TT>>(selections: readonly OE[]): MergeQueryBuilder<DB, TT, ReturningRow<DB, TT, O, SelectExpressionFromOutputExpression<OE>>>;
|
|
173
|
+
output<CB extends OutputCallback<DB, TT>>(callback: CB): MergeQueryBuilder<DB, TT, ReturningRow<DB, TT, O, SelectExpressionFromOutputCallback<CB>>>;
|
|
174
|
+
output<OE extends OutputExpression<DB, TT>>(selection: OE): MergeQueryBuilder<DB, TT, ReturningRow<DB, TT, O, SelectExpressionFromOutputExpression<OE>>>;
|
|
175
|
+
/**
|
|
176
|
+
* Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
|
|
177
|
+
* that support `output` such as MS SQL Server (MSSQL).
|
|
178
|
+
*
|
|
179
|
+
* Also see the {@link output} method.
|
|
180
|
+
*/
|
|
181
|
+
outputAll(table: OutputPrefix): MergeQueryBuilder<DB, TT, ReturningAllRow<DB, TT, O>>;
|
|
99
182
|
}
|
|
100
183
|
export interface MergeQueryBuilderProps {
|
|
101
184
|
readonly queryId: QueryId;
|
|
102
185
|
readonly queryNode: MergeQueryNode;
|
|
103
186
|
readonly executor: QueryExecutor;
|
|
104
187
|
}
|
|
105
|
-
export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST extends keyof DB, O> implements Compilable<O>, OperationNodeSource {
|
|
188
|
+
export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST extends keyof DB, O> implements Compilable<O>, OutputInterface<DB, TT, O>, OperationNodeSource {
|
|
106
189
|
#private;
|
|
107
190
|
constructor(props: MergeQueryBuilderProps);
|
|
108
191
|
/**
|
|
@@ -275,6 +358,87 @@ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST exte
|
|
|
275
358
|
* the target table, and not from source table and returns a {@link MatchedThenableMergeQueryBuilder}.
|
|
276
359
|
*/
|
|
277
360
|
whenNotMatchedBySourceAndRef<LRE extends ReferenceExpression<DB, TT>, RRE extends ReferenceExpression<DB, TT>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT, O>;
|
|
361
|
+
/**
|
|
362
|
+
* Allows you to return data from modified rows.
|
|
363
|
+
*
|
|
364
|
+
* On supported databases like MS SQL Server (MSSQL), this method can be chained
|
|
365
|
+
* to `insert`, `update`, `delete` and `merge` queries to return data.
|
|
366
|
+
*
|
|
367
|
+
* Also see the {@link outputAll} method.
|
|
368
|
+
*
|
|
369
|
+
* ### Examples
|
|
370
|
+
*
|
|
371
|
+
* Return one column:
|
|
372
|
+
*
|
|
373
|
+
* ```ts
|
|
374
|
+
* const { id } = await db
|
|
375
|
+
* .insertInto('person')
|
|
376
|
+
* .output('inserted.id')
|
|
377
|
+
* .values({
|
|
378
|
+
* first_name: 'Jennifer',
|
|
379
|
+
* last_name: 'Aniston'
|
|
380
|
+
* })
|
|
381
|
+
* .executeTakeFirst()
|
|
382
|
+
* ```
|
|
383
|
+
*
|
|
384
|
+
* Return multiple columns:
|
|
385
|
+
*
|
|
386
|
+
* ```ts
|
|
387
|
+
* const { id, first_name } = await db
|
|
388
|
+
* .updateTable('person')
|
|
389
|
+
* .set({ first_name: 'John', last_name: 'Doe' })
|
|
390
|
+
* .output([
|
|
391
|
+
* 'deleted.first_name as old_first_name',
|
|
392
|
+
* 'deleted.last_name as old_last_name',
|
|
393
|
+
* 'inserted.first_name as new_first_name',
|
|
394
|
+
* 'inserted.last_name as new_last_name',
|
|
395
|
+
* ])
|
|
396
|
+
* .where('created_at', '<', new Date())
|
|
397
|
+
* .executeTakeFirst()
|
|
398
|
+
* ```
|
|
399
|
+
*
|
|
400
|
+
* Return arbitrary expressions:
|
|
401
|
+
*
|
|
402
|
+
* ```ts
|
|
403
|
+
* import { sql } from 'kysely'
|
|
404
|
+
*
|
|
405
|
+
* const { id, full_name } = await db
|
|
406
|
+
* .deleteFrom('person')
|
|
407
|
+
* .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
|
|
408
|
+
* .where('created_at', '<', new Date())
|
|
409
|
+
* .executeTakeFirst()
|
|
410
|
+
* ```
|
|
411
|
+
*
|
|
412
|
+
* Return the action performed on the row:
|
|
413
|
+
*
|
|
414
|
+
* ```ts
|
|
415
|
+
* await db
|
|
416
|
+
* .mergeInto('person')
|
|
417
|
+
* .using('pet', 'pet.owner_id', 'person.id')
|
|
418
|
+
* .whenMatched()
|
|
419
|
+
* .thenDelete()
|
|
420
|
+
* .whenNotMatched()
|
|
421
|
+
* .thenInsertValues({
|
|
422
|
+
* first_name: 'John',
|
|
423
|
+
* last_name: 'Doe',
|
|
424
|
+
* gender: 'male'
|
|
425
|
+
* })
|
|
426
|
+
* .output([
|
|
427
|
+
* 'inserted.id as inserted_id',
|
|
428
|
+
* 'deleted.id as deleted_id',
|
|
429
|
+
* ])
|
|
430
|
+
* ```
|
|
431
|
+
*/
|
|
432
|
+
output<OE extends OutputExpression<DB, TT>>(selections: readonly OE[]): WheneableMergeQueryBuilder<DB, TT, ST, ReturningRow<DB, TT, O, SelectExpressionFromOutputExpression<OE>>>;
|
|
433
|
+
output<CB extends OutputCallback<DB, TT>>(callback: CB): WheneableMergeQueryBuilder<DB, TT, ST, ReturningRow<DB, TT, O, SelectExpressionFromOutputCallback<CB>>>;
|
|
434
|
+
output<OE extends OutputExpression<DB, TT>>(selection: OE): WheneableMergeQueryBuilder<DB, TT, ST, ReturningRow<DB, TT, O, SelectExpressionFromOutputExpression<OE>>>;
|
|
435
|
+
/**
|
|
436
|
+
* Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
|
|
437
|
+
* that support `output` such as MS SQL Server (MSSQL).
|
|
438
|
+
*
|
|
439
|
+
* Also see the {@link output} method.
|
|
440
|
+
*/
|
|
441
|
+
outputAll(table: OutputPrefix): WheneableMergeQueryBuilder<DB, TT, ST, ReturningAllRow<DB, TT, O>>;
|
|
278
442
|
/**
|
|
279
443
|
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
280
444
|
* what the provided function returns.
|
|
@@ -337,7 +501,7 @@ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST exte
|
|
|
337
501
|
*/
|
|
338
502
|
$if<O2>(condition: boolean, func: (qb: this) => WheneableMergeQueryBuilder<any, any, any, O2>): O2 extends MergeResult ? WheneableMergeQueryBuilder<DB, TT, ST, MergeResult> : O2 extends O & infer E ? WheneableMergeQueryBuilder<DB, TT, ST, O & Partial<E>> : WheneableMergeQueryBuilder<DB, TT, ST, Partial<O2>>;
|
|
339
503
|
toOperationNode(): MergeQueryNode;
|
|
340
|
-
compile(): CompiledQuery<
|
|
504
|
+
compile(): CompiledQuery<O>;
|
|
341
505
|
/**
|
|
342
506
|
* Executes the query and returns an array of rows.
|
|
343
507
|
*
|
|
@@ -8,6 +8,7 @@ const update_query_node_js_1 = require("../operation-node/update-query-node.js")
|
|
|
8
8
|
const insert_values_parser_js_1 = require("../parser/insert-values-parser.js");
|
|
9
9
|
const join_parser_js_1 = require("../parser/join-parser.js");
|
|
10
10
|
const merge_parser_js_1 = require("../parser/merge-parser.js");
|
|
11
|
+
const select_parser_js_1 = require("../parser/select-parser.js");
|
|
11
12
|
const top_parser_js_1 = require("../parser/top-parser.js");
|
|
12
13
|
const noop_query_executor_js_1 = require("../query-executor/noop-query-executor.js");
|
|
13
14
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
@@ -79,6 +80,18 @@ class MergeQueryBuilder {
|
|
|
79
80
|
queryNode: merge_query_node_js_1.MergeQueryNode.cloneWithUsing(this.#props.queryNode, (0, join_parser_js_1.parseJoin)('Using', args)),
|
|
80
81
|
});
|
|
81
82
|
}
|
|
83
|
+
output(args) {
|
|
84
|
+
return new MergeQueryBuilder({
|
|
85
|
+
...this.#props,
|
|
86
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOutput(this.#props.queryNode, (0, select_parser_js_1.parseSelectArg)(args)),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
outputAll(table) {
|
|
90
|
+
return new MergeQueryBuilder({
|
|
91
|
+
...this.#props,
|
|
92
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOutput(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)(table)),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
82
95
|
}
|
|
83
96
|
exports.MergeQueryBuilder = MergeQueryBuilder;
|
|
84
97
|
(0, prevent_await_js_1.preventAwait)(MergeQueryBuilder, "don't await MergeQueryBuilder instances directly. To execute the query you need to call `execute` when available.");
|
|
@@ -217,6 +230,18 @@ class WheneableMergeQueryBuilder {
|
|
|
217
230
|
whenNotMatchedBySourceAndRef(lhs, op, rhs) {
|
|
218
231
|
return this.#whenNotMatched([lhs, op, rhs], true, true);
|
|
219
232
|
}
|
|
233
|
+
output(args) {
|
|
234
|
+
return new WheneableMergeQueryBuilder({
|
|
235
|
+
...this.#props,
|
|
236
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOutput(this.#props.queryNode, (0, select_parser_js_1.parseSelectArg)(args)),
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
outputAll(table) {
|
|
240
|
+
return new WheneableMergeQueryBuilder({
|
|
241
|
+
...this.#props,
|
|
242
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOutput(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)(table)),
|
|
243
|
+
});
|
|
244
|
+
}
|
|
220
245
|
#whenNotMatched(args, refRight = false, bySource = false) {
|
|
221
246
|
const props = {
|
|
222
247
|
...this.#props,
|
|
@@ -301,7 +326,7 @@ class WheneableMergeQueryBuilder {
|
|
|
301
326
|
return this.#props.executor.transformQuery(this.#props.queryNode, this.#props.queryId);
|
|
302
327
|
}
|
|
303
328
|
compile() {
|
|
304
|
-
return this.#props.executor.compileQuery(this
|
|
329
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
305
330
|
}
|
|
306
331
|
/**
|
|
307
332
|
* Executes the query and returns an array of rows.
|
|
@@ -311,6 +336,10 @@ class WheneableMergeQueryBuilder {
|
|
|
311
336
|
async execute() {
|
|
312
337
|
const compiledQuery = this.compile();
|
|
313
338
|
const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
|
|
339
|
+
if (compiledQuery.query.output &&
|
|
340
|
+
this.#props.executor.adapter.supportsOutput) {
|
|
341
|
+
return result.rows;
|
|
342
|
+
}
|
|
314
343
|
return [new merge_result_js_1.MergeResult(result.numAffectedRows)];
|
|
315
344
|
}
|
|
316
345
|
/**
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.NoResultError = void 0;
|
|
4
|
+
exports.isNoResultErrorConstructor = isNoResultErrorConstructor;
|
|
4
5
|
class NoResultError extends Error {
|
|
5
6
|
/**
|
|
6
7
|
* The operation node tree of the query that was executed.
|
|
@@ -15,4 +16,3 @@ exports.NoResultError = NoResultError;
|
|
|
15
16
|
function isNoResultErrorConstructor(fn) {
|
|
16
17
|
return Object.prototype.hasOwnProperty.call(fn, 'prototype');
|
|
17
18
|
}
|
|
18
|
-
exports.isNoResultErrorConstructor = isNoResultErrorConstructor;
|
|
@@ -303,7 +303,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
303
303
|
* .selectFrom('person')
|
|
304
304
|
* .selectAll()
|
|
305
305
|
* .where(
|
|
306
|
-
* sql
|
|
306
|
+
* sql<string>`coalesce(first_name, last_name)`,
|
|
307
307
|
* 'like',
|
|
308
308
|
* '%' + name + '%',
|
|
309
309
|
* )
|
|
@@ -767,7 +767,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
|
|
|
767
767
|
* .selectFrom('person')
|
|
768
768
|
* .selectAll()
|
|
769
769
|
* .where(
|
|
770
|
-
* sql
|
|
770
|
+
* sql<string>`coalesce(first_name, last_name)`,
|
|
771
771
|
* 'like',
|
|
772
772
|
* '%' + name + '%',
|
|
773
773
|
* )
|