kysely 0.16.3 → 0.16.7
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/README.md +122 -9
- package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +205 -0
- package/dist/cjs/dialect/mysql/mysql-dialect-config.js +2 -0
- package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +1 -205
- package/dist/cjs/dialect/mysql/mysql-dialect.js +2 -1
- package/dist/cjs/dialect/mysql/mysql-driver.d.ts +1 -1
- package/dist/cjs/dialect/mysql/mysql-driver.js +11 -3
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +103 -0
- package/dist/cjs/dialect/postgres/postgres-dialect-config.js +2 -0
- package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +1 -103
- package/dist/cjs/dialect/postgres/postgres-dialect.js +2 -1
- package/dist/cjs/dialect/postgres/postgres-driver.d.ts +1 -1
- package/dist/cjs/dialect/postgres/postgres-driver.js +12 -3
- package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +43 -0
- package/dist/cjs/dialect/sqlite/sqlite-dialect-config.js +2 -0
- package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +1 -43
- package/dist/cjs/dialect/sqlite/sqlite-dialect.js +2 -1
- package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +11 -3
- package/dist/cjs/driver/dummy-driver.d.ts +68 -0
- package/dist/cjs/driver/dummy-driver.js +62 -0
- package/dist/cjs/driver/runtime-driver.d.ts +1 -1
- package/dist/cjs/driver/runtime-driver.js +30 -33
- package/dist/cjs/index-nodeless.d.ts +2 -0
- package/dist/cjs/index-nodeless.js +2 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/kysely.d.ts +8 -6
- package/dist/cjs/kysely.js +8 -6
- package/dist/cjs/migration/migrator.d.ts +2 -2
- package/dist/cjs/operation-node/primitive-value-list-node.d.ts +2 -3
- package/dist/cjs/operation-node/value-node.d.ts +3 -4
- package/dist/cjs/parser/complex-expression-parser.d.ts +1 -0
- package/dist/cjs/parser/complex-expression-parser.js +5 -1
- package/dist/cjs/parser/default-value-parser.d.ts +2 -3
- package/dist/cjs/parser/default-value-parser.js +2 -2
- package/dist/cjs/parser/insert-values-parser.js +4 -3
- package/dist/cjs/parser/reference-parser.d.ts +2 -3
- package/dist/cjs/parser/value-parser.d.ts +2 -3
- package/dist/cjs/parser/value-parser.js +6 -7
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +48 -0
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +19 -0
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +9 -0
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +42 -0
- package/dist/cjs/plugin/{immediate-value.ts → immediate-value}/immediate-value-plugin.d.ts +0 -0
- package/dist/cjs/plugin/{immediate-value.ts → immediate-value}/immediate-value-plugin.js +0 -0
- package/dist/cjs/plugin/{immediate-value.ts → immediate-value}/immediate-value-transformer.d.ts +0 -0
- package/dist/cjs/plugin/{immediate-value.ts → immediate-value}/immediate-value-transformer.js +0 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +51 -9
- package/dist/cjs/query-builder/delete-query-builder.js +56 -8
- package/dist/cjs/query-builder/expression-builder.d.ts +1 -1
- package/dist/cjs/query-builder/expression-builder.js +2 -2
- package/dist/cjs/query-builder/function-builder.d.ts +29 -5
- package/dist/cjs/query-builder/function-builder.js +31 -7
- package/dist/cjs/query-builder/insert-query-builder.d.ts +53 -11
- package/dist/cjs/query-builder/insert-query-builder.js +58 -10
- package/dist/cjs/query-builder/select-query-builder.d.ts +58 -16
- package/dist/cjs/query-builder/select-query-builder.js +64 -15
- package/dist/cjs/query-builder/update-query-builder.d.ts +52 -9
- package/dist/cjs/query-builder/update-query-builder.js +57 -8
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +1 -2
- package/dist/cjs/query-creator.d.ts +2 -2
- package/dist/cjs/query-creator.js +2 -2
- package/dist/cjs/schema/alter-table-builder.d.ts +30 -4
- package/dist/cjs/schema/alter-table-builder.js +2 -5
- package/dist/cjs/schema/column-definition-builder.d.ts +27 -2
- package/dist/cjs/schema/create-view-builder.js +1 -1
- package/dist/cjs/util/log.d.ts +1 -0
- package/dist/cjs/util/log.js +3 -0
- package/dist/cjs/util/object-utils.d.ts +5 -5
- package/dist/cjs/util/object-utils.js +52 -11
- package/dist/cjs/util/type-utils.d.ts +21 -0
- package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +205 -0
- package/dist/esm/dialect/mysql/mysql-dialect-config.js +2 -0
- package/dist/esm/dialect/mysql/mysql-dialect.d.ts +1 -205
- package/dist/esm/dialect/mysql/mysql-dialect.js +2 -1
- package/dist/esm/dialect/mysql/mysql-driver.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-driver.js +12 -4
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +103 -0
- package/dist/esm/dialect/postgres/postgres-dialect-config.js +2 -0
- package/dist/esm/dialect/postgres/postgres-dialect.d.ts +1 -103
- package/dist/esm/dialect/postgres/postgres-dialect.js +2 -1
- package/dist/esm/dialect/postgres/postgres-driver.d.ts +1 -1
- package/dist/esm/dialect/postgres/postgres-driver.js +12 -3
- package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +43 -0
- package/dist/esm/dialect/sqlite/sqlite-dialect-config.js +2 -0
- package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +1 -43
- package/dist/esm/dialect/sqlite/sqlite-dialect.js +2 -1
- package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +1 -1
- package/dist/esm/dialect/sqlite/sqlite-driver.js +12 -4
- package/dist/esm/driver/dummy-driver.d.ts +68 -0
- package/dist/esm/driver/dummy-driver.js +59 -0
- package/dist/esm/driver/runtime-driver.d.ts +1 -1
- package/dist/esm/driver/runtime-driver.js +29 -32
- package/dist/esm/index-nodeless.d.ts +2 -0
- package/dist/esm/index-nodeless.js +2 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/kysely.d.ts +8 -6
- package/dist/esm/kysely.js +8 -6
- package/dist/esm/migration/migrator.d.ts +2 -2
- package/dist/esm/operation-node/primitive-value-list-node.d.ts +2 -3
- package/dist/esm/operation-node/value-node.d.ts +3 -4
- package/dist/esm/parser/complex-expression-parser.d.ts +1 -0
- package/dist/esm/parser/complex-expression-parser.js +3 -0
- package/dist/esm/parser/default-value-parser.d.ts +2 -3
- package/dist/esm/parser/default-value-parser.js +2 -2
- package/dist/esm/parser/insert-values-parser.js +5 -4
- package/dist/esm/parser/reference-parser.d.ts +2 -3
- package/dist/esm/parser/reference-parser.js +1 -1
- package/dist/esm/parser/value-parser.d.ts +2 -3
- package/dist/esm/parser/value-parser.js +8 -9
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +48 -0
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +16 -0
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +9 -0
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +39 -0
- package/dist/esm/plugin/{immediate-value.ts → immediate-value}/immediate-value-plugin.d.ts +0 -0
- package/dist/esm/plugin/{immediate-value.ts → immediate-value}/immediate-value-plugin.js +0 -0
- package/dist/esm/plugin/{immediate-value.ts → immediate-value}/immediate-value-transformer.d.ts +0 -0
- package/dist/esm/plugin/{immediate-value.ts → immediate-value}/immediate-value-transformer.js +0 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +51 -9
- package/dist/esm/query-builder/delete-query-builder.js +56 -8
- package/dist/esm/query-builder/expression-builder.d.ts +1 -1
- package/dist/esm/query-builder/expression-builder.js +1 -1
- package/dist/esm/query-builder/function-builder.d.ts +29 -5
- package/dist/esm/query-builder/function-builder.js +31 -7
- package/dist/esm/query-builder/insert-query-builder.d.ts +53 -11
- package/dist/esm/query-builder/insert-query-builder.js +58 -10
- package/dist/esm/query-builder/select-query-builder.d.ts +58 -16
- package/dist/esm/query-builder/select-query-builder.js +64 -15
- package/dist/esm/query-builder/update-query-builder.d.ts +52 -9
- package/dist/esm/query-builder/update-query-builder.js +57 -8
- package/dist/esm/query-compiler/default-query-compiler.d.ts +1 -2
- package/dist/esm/query-creator.d.ts +2 -2
- package/dist/esm/query-creator.js +2 -2
- package/dist/esm/schema/alter-table-builder.d.ts +30 -4
- package/dist/esm/schema/alter-table-builder.js +2 -5
- package/dist/esm/schema/column-definition-builder.d.ts +27 -2
- package/dist/esm/schema/create-view-builder.js +1 -1
- package/dist/esm/util/log.d.ts +1 -0
- package/dist/esm/util/log.js +3 -0
- package/dist/esm/util/object-utils.d.ts +5 -5
- package/dist/esm/util/object-utils.js +50 -9
- package/dist/esm/util/type-utils.d.ts +21 -0
- package/package.json +11 -5
- package/.prettierignore +0 -1
- package/dist/cjs/util/dynamic-import.d.ts +0 -2
- package/dist/cjs/util/dynamic-import.js +0 -32
- package/dist/esm/util/dynamic-import.d.ts +0 -2
- package/dist/esm/util/dynamic-import.js +0 -28
|
@@ -12,7 +12,7 @@ class RuntimeDriver {
|
|
|
12
12
|
#log;
|
|
13
13
|
#initPromise;
|
|
14
14
|
#destroyPromise;
|
|
15
|
-
#connections = new
|
|
15
|
+
#connections = new WeakSet();
|
|
16
16
|
constructor(driver, log) {
|
|
17
17
|
this.#driver = driver;
|
|
18
18
|
this.#log = log;
|
|
@@ -29,17 +29,16 @@ class RuntimeDriver {
|
|
|
29
29
|
async acquireConnection() {
|
|
30
30
|
await this.init();
|
|
31
31
|
const connection = await this.#driver.acquireConnection();
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
if (!this.#connections.has(connection)) {
|
|
33
|
+
if (this.#needsLogging()) {
|
|
34
|
+
this.#addLogging(connection);
|
|
35
|
+
}
|
|
36
|
+
this.#connections.add(connection);
|
|
36
37
|
}
|
|
37
|
-
return
|
|
38
|
+
return connection;
|
|
38
39
|
}
|
|
39
|
-
async releaseConnection(
|
|
40
|
-
|
|
41
|
-
await this.#driver.releaseConnection(runtimeConnection.connection);
|
|
42
|
-
}
|
|
40
|
+
async releaseConnection(connection) {
|
|
41
|
+
await this.#driver.releaseConnection(connection);
|
|
43
42
|
}
|
|
44
43
|
beginTransaction(connection, settings) {
|
|
45
44
|
return this.#driver.beginTransaction(connection, settings);
|
|
@@ -63,30 +62,27 @@ class RuntimeDriver {
|
|
|
63
62
|
}
|
|
64
63
|
await this.#destroyPromise;
|
|
65
64
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
class RuntimeConnection {
|
|
69
|
-
#connection;
|
|
70
|
-
#log;
|
|
71
|
-
get connection() {
|
|
72
|
-
return this.#connection;
|
|
73
|
-
}
|
|
74
|
-
constructor(connection, log) {
|
|
75
|
-
this.#connection = connection;
|
|
76
|
-
this.#log = log;
|
|
65
|
+
#needsLogging() {
|
|
66
|
+
return (this.#log.isLevelEnabled('query') || this.#log.isLevelEnabled('error'));
|
|
77
67
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
68
|
+
// This method monkey patches the database connection's executeQuery method
|
|
69
|
+
// by adding logging code around it. Monkey patching is not pretty, but it's
|
|
70
|
+
// the best option in this case.
|
|
71
|
+
#addLogging(connection) {
|
|
72
|
+
const executeQuery = connection.executeQuery;
|
|
73
|
+
connection.executeQuery = async (compiledQuery) => {
|
|
74
|
+
const startTime = (0, performance_now_js_1.performanceNow)();
|
|
75
|
+
try {
|
|
76
|
+
return await executeQuery.call(connection, compiledQuery);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
this.#logError(error);
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
this.#logQuery(compiledQuery, startTime);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
90
86
|
}
|
|
91
87
|
#logError(error) {
|
|
92
88
|
this.#log.error(() => ({
|
|
@@ -105,3 +101,4 @@ class RuntimeConnection {
|
|
|
105
101
|
return (0, performance_now_js_1.performanceNow)() - startTime;
|
|
106
102
|
}
|
|
107
103
|
}
|
|
104
|
+
exports.RuntimeDriver = RuntimeDriver;
|
|
@@ -40,6 +40,7 @@ export * from './driver/database-connection.js';
|
|
|
40
40
|
export * from './driver/connection-provider.js';
|
|
41
41
|
export * from './driver/default-connection-provider.js';
|
|
42
42
|
export * from './driver/single-connection-provider.js';
|
|
43
|
+
export * from './driver/dummy-driver.js';
|
|
43
44
|
export * from './dialect/dialect.js';
|
|
44
45
|
export * from './dialect/dialect-adapter.js';
|
|
45
46
|
export * from './dialect/dialect-adapter-base.js';
|
|
@@ -58,6 +59,7 @@ export * from './query-compiler/query-compiler.js';
|
|
|
58
59
|
export * from './migration/migrator.js';
|
|
59
60
|
export * from './plugin/kysely-plugin.js';
|
|
60
61
|
export * from './plugin/camel-case/camel-case-plugin.js';
|
|
62
|
+
export * from './plugin/deduplicate-joins/deduplicate-joins-plugin.js';
|
|
61
63
|
export * from './operation-node/add-column-node.js';
|
|
62
64
|
export * from './operation-node/add-constraint-node.js';
|
|
63
65
|
export * from './operation-node/alias-node.js';
|
|
@@ -52,6 +52,7 @@ __exportStar(require("./driver/database-connection.js"), exports);
|
|
|
52
52
|
__exportStar(require("./driver/connection-provider.js"), exports);
|
|
53
53
|
__exportStar(require("./driver/default-connection-provider.js"), exports);
|
|
54
54
|
__exportStar(require("./driver/single-connection-provider.js"), exports);
|
|
55
|
+
__exportStar(require("./driver/dummy-driver.js"), exports);
|
|
55
56
|
__exportStar(require("./dialect/dialect.js"), exports);
|
|
56
57
|
__exportStar(require("./dialect/dialect-adapter.js"), exports);
|
|
57
58
|
__exportStar(require("./dialect/dialect-adapter-base.js"), exports);
|
|
@@ -70,6 +71,7 @@ __exportStar(require("./query-compiler/query-compiler.js"), exports);
|
|
|
70
71
|
__exportStar(require("./migration/migrator.js"), exports);
|
|
71
72
|
__exportStar(require("./plugin/kysely-plugin.js"), exports);
|
|
72
73
|
__exportStar(require("./plugin/camel-case/camel-case-plugin.js"), exports);
|
|
74
|
+
__exportStar(require("./plugin/deduplicate-joins/deduplicate-joins-plugin.js"), exports);
|
|
73
75
|
__exportStar(require("./operation-node/add-column-node.js"), exports);
|
|
74
76
|
__exportStar(require("./operation-node/add-constraint-node.js"), exports);
|
|
75
77
|
__exportStar(require("./operation-node/alias-node.js"), exports);
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export * from './index-nodeless.js';
|
|
2
2
|
export * from './migration/file-migration-provider.js';
|
|
3
3
|
export * from './dialect/sqlite/sqlite-dialect.js';
|
|
4
|
+
export * from './dialect/sqlite/sqlite-dialect-config.js';
|
|
4
5
|
export * from './dialect/sqlite/sqlite-driver.js';
|
|
5
6
|
export * from './dialect/mysql/mysql-dialect.js';
|
|
7
|
+
export * from './dialect/mysql/mysql-dialect-config.js';
|
|
6
8
|
export * from './dialect/mysql/mysql-driver.js';
|
|
7
9
|
export * from './dialect/postgres/postgres-driver.js';
|
|
10
|
+
export * from './dialect/postgres/postgres-dialect-config.js';
|
|
8
11
|
export * from './dialect/postgres/postgres-dialect.js';
|
package/dist/cjs/index.js
CHANGED
|
@@ -13,8 +13,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
__exportStar(require("./index-nodeless.js"), exports);
|
|
14
14
|
__exportStar(require("./migration/file-migration-provider.js"), exports);
|
|
15
15
|
__exportStar(require("./dialect/sqlite/sqlite-dialect.js"), exports);
|
|
16
|
+
__exportStar(require("./dialect/sqlite/sqlite-dialect-config.js"), exports);
|
|
16
17
|
__exportStar(require("./dialect/sqlite/sqlite-driver.js"), exports);
|
|
17
18
|
__exportStar(require("./dialect/mysql/mysql-dialect.js"), exports);
|
|
19
|
+
__exportStar(require("./dialect/mysql/mysql-dialect-config.js"), exports);
|
|
18
20
|
__exportStar(require("./dialect/mysql/mysql-driver.js"), exports);
|
|
19
21
|
__exportStar(require("./dialect/postgres/postgres-driver.js"), exports);
|
|
22
|
+
__exportStar(require("./dialect/postgres/postgres-dialect-config.js"), exports);
|
|
20
23
|
__exportStar(require("./dialect/postgres/postgres-dialect.js"), exports);
|
package/dist/cjs/kysely.d.ts
CHANGED
|
@@ -22,22 +22,24 @@ import { DialectAdapter } from './dialect/dialect-adapter.js';
|
|
|
22
22
|
* This example assumes your database has tables `person` and `pet`:
|
|
23
23
|
*
|
|
24
24
|
* ```ts
|
|
25
|
-
*
|
|
26
|
-
*
|
|
25
|
+
* import { Kysely, Generated, PostgresDialect } from 'kysely'
|
|
26
|
+
*
|
|
27
|
+
* interface PersonTable {
|
|
28
|
+
* id: Generated<number>
|
|
27
29
|
* first_name: string
|
|
28
30
|
* last_name: string
|
|
29
31
|
* }
|
|
30
32
|
*
|
|
31
|
-
* interface
|
|
32
|
-
* id: number
|
|
33
|
+
* interface PetTable {
|
|
34
|
+
* id: Generated<number>
|
|
33
35
|
* owner_id: number
|
|
34
36
|
* name: string
|
|
35
37
|
* species 'cat' | 'dog'
|
|
36
38
|
* }
|
|
37
39
|
*
|
|
38
40
|
* interface Database {
|
|
39
|
-
* person:
|
|
40
|
-
* pet:
|
|
41
|
+
* person: PersonTable,
|
|
42
|
+
* pet: PetTable
|
|
41
43
|
* }
|
|
42
44
|
*
|
|
43
45
|
* const db = new Kysely<Database>({
|
package/dist/cjs/kysely.js
CHANGED
|
@@ -26,22 +26,24 @@ const private_symbols_js_1 = require("./util/private-symbols.js");
|
|
|
26
26
|
* This example assumes your database has tables `person` and `pet`:
|
|
27
27
|
*
|
|
28
28
|
* ```ts
|
|
29
|
-
*
|
|
30
|
-
*
|
|
29
|
+
* import { Kysely, Generated, PostgresDialect } from 'kysely'
|
|
30
|
+
*
|
|
31
|
+
* interface PersonTable {
|
|
32
|
+
* id: Generated<number>
|
|
31
33
|
* first_name: string
|
|
32
34
|
* last_name: string
|
|
33
35
|
* }
|
|
34
36
|
*
|
|
35
|
-
* interface
|
|
36
|
-
* id: number
|
|
37
|
+
* interface PetTable {
|
|
38
|
+
* id: Generated<number>
|
|
37
39
|
* owner_id: number
|
|
38
40
|
* name: string
|
|
39
41
|
* species 'cat' | 'dog'
|
|
40
42
|
* }
|
|
41
43
|
*
|
|
42
44
|
* interface Database {
|
|
43
|
-
* person:
|
|
44
|
-
* pet:
|
|
45
|
+
* person: PersonTable,
|
|
46
|
+
* pet: PetTable
|
|
45
47
|
* }
|
|
46
48
|
*
|
|
47
49
|
* const db = new Kysely<Database>({
|
|
@@ -144,8 +144,8 @@ export interface MigratorProps {
|
|
|
144
144
|
readonly provider: MigrationProvider;
|
|
145
145
|
}
|
|
146
146
|
/**
|
|
147
|
-
* All migration methods ({@link
|
|
148
|
-
* {@link
|
|
147
|
+
* All migration methods ({@link Migrator.migrateTo | migrateTo},
|
|
148
|
+
* {@link Migrator.migrateToLatest | migrateToLatest} etc.) never
|
|
149
149
|
* throw but return this object instead.
|
|
150
150
|
*/
|
|
151
151
|
export interface MigrationResultSet {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { PrimitiveValue } from '../util/object-utils.js';
|
|
2
1
|
import { OperationNode } from './operation-node.js';
|
|
3
2
|
/**
|
|
4
3
|
* This node is basically just a performance optimization over the normal ValueListNode.
|
|
@@ -7,12 +6,12 @@ import { OperationNode } from './operation-node.js';
|
|
|
7
6
|
*/
|
|
8
7
|
export interface PrimitiveValueListNode extends OperationNode {
|
|
9
8
|
readonly kind: 'PrimitiveValueListNode';
|
|
10
|
-
readonly values: ReadonlyArray<
|
|
9
|
+
readonly values: ReadonlyArray<unknown>;
|
|
11
10
|
}
|
|
12
11
|
/**
|
|
13
12
|
* @internal
|
|
14
13
|
*/
|
|
15
14
|
export declare const PrimitiveValueListNode: Readonly<{
|
|
16
15
|
is(node: OperationNode): node is PrimitiveValueListNode;
|
|
17
|
-
create(values: ReadonlyArray<
|
|
16
|
+
create(values: ReadonlyArray<unknown>): PrimitiveValueListNode;
|
|
18
17
|
}>;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { PrimitiveValue } from '../util/object-utils.js';
|
|
2
1
|
import { OperationNode } from './operation-node.js';
|
|
3
2
|
export interface ValueNode extends OperationNode {
|
|
4
3
|
readonly kind: 'ValueNode';
|
|
5
|
-
readonly value:
|
|
4
|
+
readonly value: unknown;
|
|
6
5
|
readonly immediate?: boolean;
|
|
7
6
|
}
|
|
8
7
|
/**
|
|
@@ -10,6 +9,6 @@ export interface ValueNode extends OperationNode {
|
|
|
10
9
|
*/
|
|
11
10
|
export declare const ValueNode: Readonly<{
|
|
12
11
|
is(node: OperationNode): node is ValueNode;
|
|
13
|
-
create(value:
|
|
14
|
-
createImmediate(value:
|
|
12
|
+
create(value: unknown): ValueNode;
|
|
13
|
+
createImmediate(value: unknown): ValueNode;
|
|
15
14
|
}>;
|
|
@@ -7,3 +7,4 @@ export declare type ComplexExpression<DB, TB extends keyof DB> = AnySelectQueryB
|
|
|
7
7
|
export declare type AliasedComplexExpression<DB, TB extends keyof DB> = AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB> | AnyAliasedRawBuilder | AliasedRawBuilderFactory<DB, TB>;
|
|
8
8
|
export declare function parseComplexExpression(ctx: ParseContext, exp: ComplexExpression<any, any>): SelectQueryNode | RawNode;
|
|
9
9
|
export declare function parseAliasedComplexExpression(ctx: ParseContext, exp: AliasedComplexExpression<any, any>): AliasNode;
|
|
10
|
+
export declare function isComplexExpression(obj: unknown): obj is ComplexExpression<any, any>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseAliasedComplexExpression = exports.parseComplexExpression = void 0;
|
|
3
|
+
exports.isComplexExpression = exports.parseAliasedComplexExpression = exports.parseComplexExpression = void 0;
|
|
4
4
|
const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
|
|
5
5
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
6
6
|
function parseComplexExpression(ctx, exp) {
|
|
@@ -23,3 +23,7 @@ function parseAliasedComplexExpression(ctx, exp) {
|
|
|
23
23
|
throw new Error(`invalid aliased expression: ${JSON.stringify(exp)}`);
|
|
24
24
|
}
|
|
25
25
|
exports.parseAliasedComplexExpression = parseAliasedComplexExpression;
|
|
26
|
+
function isComplexExpression(obj) {
|
|
27
|
+
return (0, operation_node_source_js_1.isOperationNodeSource)(obj) || (0, object_utils_js_1.isFunction)(obj);
|
|
28
|
+
}
|
|
29
|
+
exports.isComplexExpression = isComplexExpression;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
2
2
|
import { ValueNode } from '../operation-node/value-node.js';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export declare type DefaultValueExpression = PrimitiveValue | AnyRawBuilder;
|
|
3
|
+
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
4
|
+
export declare type DefaultValueExpression = unknown | RawBuilder;
|
|
6
5
|
export declare function parseDefaultValueExpression(value: DefaultValueExpression): ValueNode | RawNode;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseDefaultValueExpression = void 0;
|
|
4
|
-
const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
|
|
5
4
|
const value_node_js_1 = require("../operation-node/value-node.js");
|
|
5
|
+
const raw_builder_js_1 = require("../raw-builder/raw-builder.js");
|
|
6
6
|
function parseDefaultValueExpression(value) {
|
|
7
|
-
return
|
|
7
|
+
return value instanceof raw_builder_js_1.RawBuilder
|
|
8
8
|
? value.toOperationNode()
|
|
9
9
|
: value_node_js_1.ValueNode.createImmediate(value);
|
|
10
10
|
}
|
|
@@ -7,6 +7,7 @@ const value_list_node_js_1 = require("../operation-node/value-list-node.js");
|
|
|
7
7
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
8
8
|
const value_parser_js_1 = require("./value-parser.js");
|
|
9
9
|
const values_node_js_1 = require("../operation-node/values-node.js");
|
|
10
|
+
const complex_expression_parser_js_1 = require("./complex-expression-parser.js");
|
|
10
11
|
function parseInsertObjectOrList(ctx, args) {
|
|
11
12
|
return parseInsertColumnsAndValues(ctx, Array.isArray(args) ? args : [args]);
|
|
12
13
|
}
|
|
@@ -40,8 +41,8 @@ function parseRowValues(ctx, row, columns) {
|
|
|
40
41
|
rowValues[columnIdx] = value;
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
|
-
if (rowValues.
|
|
44
|
-
return
|
|
44
|
+
if (rowValues.some(complex_expression_parser_js_1.isComplexExpression)) {
|
|
45
|
+
return value_list_node_js_1.ValueListNode.create(rowValues.map((it) => (0, value_parser_js_1.parseValueExpression)(ctx, it)));
|
|
45
46
|
}
|
|
46
|
-
return
|
|
47
|
+
return primitive_value_list_node_js_1.PrimitiveValueListNode.create(rowValues);
|
|
47
48
|
}
|
|
@@ -2,7 +2,6 @@ import { AliasNode } from '../operation-node/alias-node.js';
|
|
|
2
2
|
import { ColumnNode } from '../operation-node/column-node.js';
|
|
3
3
|
import { ReferenceExpressionNode } from '../operation-node/operation-node-utils.js';
|
|
4
4
|
import { ReferenceNode } from '../operation-node/reference-node.js';
|
|
5
|
-
import { PrimitiveValue } from '../util/object-utils.js';
|
|
6
5
|
import { AnyColumn, AnyColumnWithTable, ExtractColumnType, ValueType } from '../util/type-utils.js';
|
|
7
6
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
8
7
|
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
@@ -13,8 +12,8 @@ import { SelectType } from '../util/column-type.js';
|
|
|
13
12
|
export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | DynamicReferenceBuilder<any> | ComplexExpression<DB, TB>;
|
|
14
13
|
export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
|
|
15
14
|
export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
|
|
16
|
-
export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? SelectType<ExtractTypeFromStringReference<DB, TB, RE>> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => SelectQueryBuilder<any, any, infer O> ? ValueType<O> :
|
|
17
|
-
declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, RE> :
|
|
15
|
+
export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? SelectType<ExtractTypeFromStringReference<DB, TB, RE>> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => SelectQueryBuilder<any, any, infer O> ? ValueType<O> : unknown;
|
|
16
|
+
declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, RE> : unknown;
|
|
18
17
|
export declare function parseReferenceExpressionOrList(ctx: ParseContext, arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
|
|
19
18
|
export declare function parseReferenceExpression(ctx: ParseContext, exp: ReferenceExpression<any, any>): ReferenceExpressionNode;
|
|
20
19
|
export declare function parseStringReference(ref: string): ColumnNode | ReferenceNode;
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { ValueExpressionNode } from '../operation-node/operation-node-utils.js';
|
|
2
2
|
import { ValueNode } from '../operation-node/value-node.js';
|
|
3
|
-
import { PrimitiveValue } from '../util/object-utils.js';
|
|
4
3
|
import { ParseContext } from './parse-context.js';
|
|
5
4
|
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
6
5
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
7
6
|
import { ComplexExpression } from './complex-expression-parser.js';
|
|
8
7
|
export declare type ValueExpression<DB, TB extends keyof DB, V> = V | ComplexExpression<DB, TB>;
|
|
9
8
|
export declare type ValueExpressionOrList<DB, TB extends keyof DB, V> = ValueExpression<DB, TB, V> | ReadonlyArray<ValueExpression<DB, TB, V>>;
|
|
10
|
-
export declare function parseValueExpressionOrList(ctx: ParseContext, arg: ValueExpressionOrList<any, any,
|
|
11
|
-
export declare function parseValueExpression(ctx: ParseContext, exp: ValueExpression<any, any,
|
|
9
|
+
export declare function parseValueExpressionOrList(ctx: ParseContext, arg: ValueExpressionOrList<any, any, unknown>): ValueExpressionNode;
|
|
10
|
+
export declare function parseValueExpression(ctx: ParseContext, exp: ValueExpression<any, any, unknown>): ValueNode | SelectQueryNode | RawNode;
|
|
@@ -16,16 +16,15 @@ function parseValueExpressionOrList(ctx, arg) {
|
|
|
16
16
|
}
|
|
17
17
|
exports.parseValueExpressionOrList = parseValueExpressionOrList;
|
|
18
18
|
function parseValueExpression(ctx, exp) {
|
|
19
|
-
if ((0,
|
|
20
|
-
return
|
|
19
|
+
if ((0, complex_expression_parser_js_1.isComplexExpression)(exp)) {
|
|
20
|
+
return (0, complex_expression_parser_js_1.parseComplexExpression)(ctx, exp);
|
|
21
21
|
}
|
|
22
|
-
return
|
|
22
|
+
return value_node_js_1.ValueNode.create(exp);
|
|
23
23
|
}
|
|
24
24
|
exports.parseValueExpression = parseValueExpression;
|
|
25
25
|
function parseValueExpressionList(ctx, arg) {
|
|
26
|
-
if (arg.
|
|
27
|
-
|
|
28
|
-
return primitive_value_list_node_js_1.PrimitiveValueListNode.create(arg);
|
|
26
|
+
if (arg.some(complex_expression_parser_js_1.isComplexExpression)) {
|
|
27
|
+
return value_list_node_js_1.ValueListNode.create(arg.map((it) => parseValueExpression(ctx, it)));
|
|
29
28
|
}
|
|
30
|
-
return
|
|
29
|
+
return primitive_value_list_node_js_1.PrimitiveValueListNode.create(arg);
|
|
31
30
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { QueryResult } from '../../driver/database-connection.js';
|
|
2
|
+
import { RootOperationNode } from '../../query-compiler/query-compiler.js';
|
|
3
|
+
import { UnknownRow } from '../../util/type-utils.js';
|
|
4
|
+
import { KyselyPlugin, PluginTransformQueryArgs, PluginTransformResultArgs } from '../kysely-plugin.js';
|
|
5
|
+
/**
|
|
6
|
+
* Plugin that removes duplicate joins from queries.
|
|
7
|
+
*
|
|
8
|
+
* See [this recipe](https://github.com/koskimas/kysely/tree/master/recipes/deduplicate-joins.md)
|
|
9
|
+
*/
|
|
10
|
+
export declare class DeduplicateJoinsPlugin implements KyselyPlugin {
|
|
11
|
+
#private;
|
|
12
|
+
/**
|
|
13
|
+
* This is called for each query before it is executed. You can modify the query by
|
|
14
|
+
* transforming its {@link OperationNode} tree provided in {@link PluginTransformQueryArgs.node | args.node}
|
|
15
|
+
* and returning the transformed tree. You'd usually want to use an {@link OperationNodeTransformer}
|
|
16
|
+
* for this.
|
|
17
|
+
*
|
|
18
|
+
* If you need to pass some query-related data between this method and `transformResult` you
|
|
19
|
+
* can use a `WeakMap` with {@link PluginTransformQueryArgs.queryId | args.queryId} as the key:
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* const plugin = {
|
|
23
|
+
* data: new WeakMap<QueryId, SomeData>(),
|
|
24
|
+
*
|
|
25
|
+
* transformQuery(args: PluginTransformQueryArgs): RootOperationNode {
|
|
26
|
+
* this.data.set(args.queryId, something)
|
|
27
|
+
* return args.node
|
|
28
|
+
* },
|
|
29
|
+
*
|
|
30
|
+
* transformResult(args: PluginTransformResultArgs): QueryResult<UnknownRow> {
|
|
31
|
+
* const data = this.data.get(args.queryId)
|
|
32
|
+
* return args.result
|
|
33
|
+
* }
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* You should use a `WeakMap` instead of a `Map` or some other strong references because `transformQuery`
|
|
38
|
+
* is not always matched by a call to `transformResult` which would leave orphaned items in the map
|
|
39
|
+
* and cause a memory leak.
|
|
40
|
+
*/
|
|
41
|
+
transformQuery(args: PluginTransformQueryArgs): RootOperationNode;
|
|
42
|
+
/**
|
|
43
|
+
* This method is called for each query after it has been executed. The result
|
|
44
|
+
* of the query can be accessed through {@link PluginTransformResultArgs.result | args.result}.
|
|
45
|
+
* You can modify the result and return the modifier result.
|
|
46
|
+
*/
|
|
47
|
+
transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>>;
|
|
48
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeduplicateJoinsPlugin = void 0;
|
|
4
|
+
const deduplicate_joins_transformer_js_1 = require("./deduplicate-joins-transformer.js");
|
|
5
|
+
/**
|
|
6
|
+
* Plugin that removes duplicate joins from queries.
|
|
7
|
+
*
|
|
8
|
+
* See [this recipe](https://github.com/koskimas/kysely/tree/master/recipes/deduplicate-joins.md)
|
|
9
|
+
*/
|
|
10
|
+
class DeduplicateJoinsPlugin {
|
|
11
|
+
#transformer = new deduplicate_joins_transformer_js_1.DeduplicateJoinsTransformer();
|
|
12
|
+
transformQuery(args) {
|
|
13
|
+
return this.#transformer.transformNode(args.node);
|
|
14
|
+
}
|
|
15
|
+
transformResult(args) {
|
|
16
|
+
return Promise.resolve(args.result);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.DeduplicateJoinsPlugin = DeduplicateJoinsPlugin;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DeleteQueryNode, UpdateQueryNode } from '../../index-nodeless.js';
|
|
2
|
+
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
3
|
+
import { SelectQueryNode } from '../../operation-node/select-query-node.js';
|
|
4
|
+
export declare class DeduplicateJoinsTransformer extends OperationNodeTransformer {
|
|
5
|
+
#private;
|
|
6
|
+
protected transformSelectQuery(node: SelectQueryNode): SelectQueryNode;
|
|
7
|
+
protected transformUpdateQuery(node: UpdateQueryNode): UpdateQueryNode;
|
|
8
|
+
protected transformDeleteQuery(node: DeleteQueryNode): DeleteQueryNode;
|
|
9
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeduplicateJoinsTransformer = void 0;
|
|
4
|
+
const operation_node_transformer_js_1 = require("../../operation-node/operation-node-transformer.js");
|
|
5
|
+
const object_utils_js_1 = require("../../util/object-utils.js");
|
|
6
|
+
class DeduplicateJoinsTransformer extends operation_node_transformer_js_1.OperationNodeTransformer {
|
|
7
|
+
transformSelectQuery(node) {
|
|
8
|
+
return this.#transformQuery(super.transformSelectQuery(node));
|
|
9
|
+
}
|
|
10
|
+
transformUpdateQuery(node) {
|
|
11
|
+
return this.#transformQuery(super.transformUpdateQuery(node));
|
|
12
|
+
}
|
|
13
|
+
transformDeleteQuery(node) {
|
|
14
|
+
return this.#transformQuery(super.transformDeleteQuery(node));
|
|
15
|
+
}
|
|
16
|
+
#transformQuery(node) {
|
|
17
|
+
if (!node.joins || node.joins.length === 0) {
|
|
18
|
+
return node;
|
|
19
|
+
}
|
|
20
|
+
return (0, object_utils_js_1.freeze)({
|
|
21
|
+
...node,
|
|
22
|
+
joins: this.#deduplicateJoins(node.joins),
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
#deduplicateJoins(joins) {
|
|
26
|
+
const out = [];
|
|
27
|
+
for (let i = 0; i < joins.length; ++i) {
|
|
28
|
+
let foundDuplicate = false;
|
|
29
|
+
for (let j = i + 1; j < joins.length; ++j) {
|
|
30
|
+
if ((0, object_utils_js_1.compare)(joins[i], joins[j])) {
|
|
31
|
+
foundDuplicate = true;
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (!foundDuplicate) {
|
|
36
|
+
out.push(joins[i]);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return (0, object_utils_js_1.freeze)(out);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.DeduplicateJoinsTransformer = DeduplicateJoinsTransformer;
|
|
File without changes
|
|
File without changes
|
package/dist/cjs/plugin/{immediate-value.ts → immediate-value}/immediate-value-transformer.d.ts
RENAMED
|
File without changes
|
package/dist/cjs/plugin/{immediate-value.ts → immediate-value}/immediate-value-transformer.js
RENAMED
|
File without changes
|
|
@@ -6,7 +6,7 @@ import { SelectExpression } from '../parser/select-parser.js';
|
|
|
6
6
|
import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper } from '../parser/filter-parser.js';
|
|
7
7
|
import { ReturningRow } from '../parser/returning-parser.js';
|
|
8
8
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
9
|
-
import { AnyRawBuilder, SingleResultType } from '../util/type-utils.js';
|
|
9
|
+
import { AnyRawBuilder, MergePartial, SingleResultType } from '../util/type-utils.js';
|
|
10
10
|
import { Compilable } from '../util/compilable.js';
|
|
11
11
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
12
12
|
import { QueryId } from '../util/query-id.js';
|
|
@@ -16,6 +16,7 @@ import { WhereInterface } from './where-interface.js';
|
|
|
16
16
|
import { JoinInterface } from './join-interface.js';
|
|
17
17
|
import { ReturningInterface } from './returning-interface.js';
|
|
18
18
|
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
19
|
+
import { DeleteResult } from './delete-result.js';
|
|
19
20
|
import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
|
|
20
21
|
import { Selectable } from '../util/column-type.js';
|
|
21
22
|
export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, JoinInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
|
|
@@ -589,23 +590,61 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
589
590
|
/**
|
|
590
591
|
* Simply calls the given function passing `this` as the only argument.
|
|
591
592
|
*
|
|
592
|
-
*
|
|
593
|
+
* If you want to conditionally call a method on `this`, see
|
|
594
|
+
* the {@link if} method.
|
|
593
595
|
*
|
|
594
596
|
* ### Examples
|
|
595
597
|
*
|
|
598
|
+
* The next example uses a helper funtion `log` to log a query:
|
|
599
|
+
*
|
|
596
600
|
* ```ts
|
|
601
|
+
* function log<T extends Compilable>(qb: T): T {
|
|
602
|
+
* console.log(qb.compile())
|
|
603
|
+
* return qb
|
|
604
|
+
* }
|
|
605
|
+
*
|
|
597
606
|
* db.deleteFrom('person')
|
|
598
|
-
* .call(
|
|
599
|
-
* if (something) {
|
|
600
|
-
* return qb.where('something', '=', something)
|
|
601
|
-
* } else {
|
|
602
|
-
* return qb.where('somethingElse', '=', somethingElse)
|
|
603
|
-
* }
|
|
604
|
-
* })
|
|
607
|
+
* .call(log)
|
|
605
608
|
* .execute()
|
|
606
609
|
* ```
|
|
607
610
|
*/
|
|
608
611
|
call<T>(func: (qb: this) => T): T;
|
|
612
|
+
/**
|
|
613
|
+
* Call `func(this)` if `condition` is true.
|
|
614
|
+
*
|
|
615
|
+
* This method is especially handy with optional selects. Any `returning` or `returningAll`
|
|
616
|
+
* method calls add columns as optional fields to the output type when called inside
|
|
617
|
+
* the `func` callback. This is because we can't know if those selections were actually
|
|
618
|
+
* made before running the code.
|
|
619
|
+
*
|
|
620
|
+
* You can also call any other methods inside the callback.
|
|
621
|
+
*
|
|
622
|
+
* ### Examples
|
|
623
|
+
*
|
|
624
|
+
* ```ts
|
|
625
|
+
* async function deletePerson(id: number, returnLastName: boolean) {
|
|
626
|
+
* return await db
|
|
627
|
+
* .deleteFrom('person')
|
|
628
|
+
* .where('id', '=', id)
|
|
629
|
+
* .returning(['id', 'first_name'])
|
|
630
|
+
* .if(returnLastName, (qb) => qb.returning('last_name'))
|
|
631
|
+
* .executeTakeFirstOrThrow()
|
|
632
|
+
* }
|
|
633
|
+
* ```
|
|
634
|
+
*
|
|
635
|
+
* Any selections added inside the `if` callback will be added as optional fields to the
|
|
636
|
+
* output type since we can't know if the selections were actually made before running
|
|
637
|
+
* the code. In the example above the return type of the `deletePerson` function is:
|
|
638
|
+
*
|
|
639
|
+
* ```ts
|
|
640
|
+
* {
|
|
641
|
+
* id: number
|
|
642
|
+
* first_name: string
|
|
643
|
+
* last_name?: string
|
|
644
|
+
* }
|
|
645
|
+
* ```
|
|
646
|
+
*/
|
|
647
|
+
if<O2>(condition: boolean, func: (qb: this) => DeleteQueryBuilder<DB, TB, O2>): DeleteQueryBuilder<DB, TB, O2 extends DeleteResult ? DeleteResult : O extends DeleteResult ? Partial<O2> : MergePartial<O, O2>>;
|
|
609
648
|
/**
|
|
610
649
|
* Change the output type of the query.
|
|
611
650
|
*
|
|
@@ -613,6 +652,9 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
613
652
|
* don't support your use case.
|
|
614
653
|
*/
|
|
615
654
|
castTo<T>(): DeleteQueryBuilder<DB, TB, T>;
|
|
655
|
+
/**
|
|
656
|
+
* Returns a copy of this DeleteQueryBuilder instance with the given plugin installed.
|
|
657
|
+
*/
|
|
616
658
|
withPlugin(plugin: KyselyPlugin): DeleteQueryBuilder<DB, TB, O>;
|
|
617
659
|
toOperationNode(): DeleteQueryNode;
|
|
618
660
|
compile(): CompiledQuery;
|