kysely 0.7.7 → 0.8.1
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 +29 -2
- package/dist/cjs/dialect/dialect-adapter.d.ts +19 -12
- package/dist/cjs/dialect/dialect.d.ts +1 -1
- package/dist/cjs/dialect/mysql/mysql-adapter.js +6 -0
- package/dist/cjs/dialect/mysql/mysql-driver.js +5 -5
- package/dist/cjs/dialect/postgres/postgres-driver.js +5 -5
- package/dist/cjs/driver/database-connection.d.ts +5 -0
- package/dist/cjs/driver/driver.d.ts +3 -5
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/kysely.d.ts +31 -1
- package/dist/cjs/kysely.js +33 -1
- package/dist/cjs/operation-node/operator-node.d.ts +1 -1
- package/dist/cjs/parser/data-type-parser.d.ts +1 -1
- package/dist/cjs/parser/default-value-parser.d.ts +1 -1
- package/dist/cjs/parser/filter-parser.d.ts +1 -1
- package/dist/cjs/parser/insert-values-parser.d.ts +2 -2
- package/dist/cjs/parser/join-parser.d.ts +1 -1
- package/dist/cjs/parser/on-conflict-parser.d.ts +1 -1
- package/dist/cjs/parser/order-by-parser.d.ts +1 -1
- package/dist/cjs/parser/reference-parser.d.ts +3 -2
- package/dist/cjs/parser/returning-parser.d.ts +1 -1
- package/dist/cjs/parser/select-parser.d.ts +1 -1
- package/dist/cjs/parser/table-parser.d.ts +17 -6
- package/dist/cjs/parser/update-set-parser.d.ts +2 -2
- package/dist/cjs/parser/value-parser.d.ts +1 -1
- package/dist/cjs/parser/with-parser.d.ts +1 -1
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +4 -3
- package/dist/cjs/plugin/kysely-plugin.d.ts +9 -5
- package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +3 -2
- package/dist/cjs/query-builder/expression-builder.d.ts +33 -0
- package/dist/cjs/query-builder/expression-builder.js +35 -0
- package/dist/cjs/query-builder/function-builder.d.ts +112 -0
- package/dist/cjs/query-builder/function-builder.js +138 -0
- package/dist/cjs/query-builder/query-builder.d.ts +8 -8
- package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -2
- package/dist/cjs/query-compiler/default-query-compiler.js +9 -9
- package/dist/cjs/query-compiler/query-compiler.d.ts +3 -0
- package/dist/cjs/query-creator.d.ts +9 -9
- package/dist/cjs/query-creator.js +11 -10
- package/dist/cjs/raw-builder/raw-builder.d.ts +14 -5
- package/dist/cjs/raw-builder/raw-builder.js +25 -20
- package/dist/cjs/schema/alter-table-builder.d.ts +1 -1
- package/dist/cjs/schema/column-definition-builder.d.ts +1 -1
- package/dist/cjs/util/generated-placeholder.d.ts +2 -2
- package/dist/cjs/util/generated-placeholder.js +2 -2
- package/dist/cjs/util/random-string.js +3 -3
- package/dist/cjs/{query-builder → util}/type-utils.d.ts +11 -3
- package/dist/cjs/{query-builder → util}/type-utils.js +0 -0
- package/dist/esm/dialect/dialect-adapter.d.ts +19 -12
- package/dist/esm/dialect/dialect.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-adapter.js +6 -0
- package/dist/esm/dialect/mysql/mysql-driver.js +5 -5
- package/dist/esm/dialect/postgres/postgres-driver.js +5 -5
- package/dist/esm/driver/database-connection.d.ts +5 -0
- package/dist/esm/driver/driver.d.ts +3 -5
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/kysely.d.ts +31 -1
- package/dist/esm/kysely.js +34 -2
- package/dist/esm/operation-node/operator-node.d.ts +1 -1
- package/dist/esm/parser/data-type-parser.d.ts +1 -1
- package/dist/esm/parser/default-value-parser.d.ts +1 -1
- package/dist/esm/parser/filter-parser.d.ts +1 -1
- package/dist/esm/parser/insert-values-parser.d.ts +2 -2
- package/dist/esm/parser/join-parser.d.ts +1 -1
- package/dist/esm/parser/on-conflict-parser.d.ts +1 -1
- package/dist/esm/parser/order-by-parser.d.ts +1 -1
- package/dist/esm/parser/reference-parser.d.ts +3 -2
- package/dist/esm/parser/returning-parser.d.ts +1 -1
- package/dist/esm/parser/select-parser.d.ts +1 -1
- package/dist/esm/parser/table-parser.d.ts +17 -6
- package/dist/esm/parser/update-set-parser.d.ts +2 -2
- package/dist/esm/parser/value-parser.d.ts +1 -1
- package/dist/esm/parser/with-parser.d.ts +1 -1
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +4 -3
- package/dist/esm/plugin/kysely-plugin.d.ts +9 -5
- package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +3 -2
- package/dist/esm/query-builder/expression-builder.d.ts +33 -0
- package/dist/esm/query-builder/expression-builder.js +35 -0
- package/dist/esm/query-builder/function-builder.d.ts +112 -0
- package/dist/esm/query-builder/function-builder.js +134 -0
- package/dist/esm/query-builder/query-builder.d.ts +8 -8
- package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -2
- package/dist/esm/query-compiler/default-query-compiler.js +9 -9
- package/dist/esm/query-compiler/query-compiler.d.ts +3 -0
- package/dist/esm/query-creator.d.ts +9 -9
- package/dist/esm/query-creator.js +11 -10
- package/dist/esm/raw-builder/raw-builder.d.ts +14 -5
- package/dist/esm/raw-builder/raw-builder.js +25 -20
- package/dist/esm/schema/alter-table-builder.d.ts +1 -1
- package/dist/esm/schema/column-definition-builder.d.ts +1 -1
- package/dist/esm/util/generated-placeholder.d.ts +2 -2
- package/dist/esm/util/generated-placeholder.js +1 -1
- package/dist/esm/util/random-string.js +3 -3
- package/dist/esm/{query-builder → util}/type-utils.d.ts +11 -3
- package/dist/esm/{query-builder → util}/type-utils.js +0 -0
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# [Kysely](https://koskimas.github.io/kysely/index.html)
|
|
5
5
|
|
|
6
6
|
A type-safe and autocompletion-friendly typescript SQL query builder for node.js. Inspired by
|
|
7
|
-
[knex](http://knexjs.org/).
|
|
7
|
+
[knex](http://knexjs.org/). You can find an introduction to Kysely [here](https://www.jakso.me/blog/kysely-a-type-safe-sql-query-builder-for-typescript).
|
|
8
8
|
|
|
9
9
|

|
|
10
10
|
|
|
@@ -31,6 +31,7 @@ using Kysely and can't find something you'd want to use, please open an issue.
|
|
|
31
31
|
|
|
32
32
|
- [Installation](#installation)
|
|
33
33
|
- [Minimal example](#minimal-example)
|
|
34
|
+
- [Query examples](#query-examples)
|
|
34
35
|
- [Migrations](#migrations)
|
|
35
36
|
- [API reference](https://koskimas.github.io/kysely/index.html)
|
|
36
37
|
|
|
@@ -49,7 +50,7 @@ npm install kysely mysql2
|
|
|
49
50
|
More dialects will be added soon. Kysely also has a simple interface
|
|
50
51
|
for [3rd party dialects](https://koskimas.github.io/kysely/interfaces/Dialect.html).
|
|
51
52
|
|
|
52
|
-
3rd party dialects:
|
|
53
|
+
### 3rd party dialects:
|
|
53
54
|
|
|
54
55
|
- [AWS Data API](https://github.com/serverless-stack/kysely-data-api)
|
|
55
56
|
|
|
@@ -109,6 +110,32 @@ async function demo() {
|
|
|
109
110
|
}
|
|
110
111
|
```
|
|
111
112
|
|
|
113
|
+
# Query examples
|
|
114
|
+
|
|
115
|
+
## Select queries
|
|
116
|
+
|
|
117
|
+
You can find examples of select queries in the documentation of the
|
|
118
|
+
[select method](https://koskimas.github.io/kysely/classes/QueryBuilder.html#select) and
|
|
119
|
+
the [where method](https://koskimas.github.io/kysely/classes/QueryBuilder.html#where)
|
|
120
|
+
among other places.
|
|
121
|
+
|
|
122
|
+
## Update queries
|
|
123
|
+
|
|
124
|
+
See the [set method](https://koskimas.github.io/kysely/classes/QueryBuilder.html#set) and the
|
|
125
|
+
[updateTable method](https://koskimas.github.io/kysely/classes/Kysely.html#updateTable)
|
|
126
|
+
documentation.
|
|
127
|
+
|
|
128
|
+
## Insert queries
|
|
129
|
+
|
|
130
|
+
See the [values method](https://koskimas.github.io/kysely/classes/QueryBuilder.html#values) and the
|
|
131
|
+
[insertInto method](https://koskimas.github.io/kysely/classes/Kysely.html#insertInto)
|
|
132
|
+
documentation.
|
|
133
|
+
|
|
134
|
+
## Delete queries
|
|
135
|
+
|
|
136
|
+
See the [deleteFrom method](https://koskimas.github.io/kysely/classes/Kysely.html#deleteFrom)
|
|
137
|
+
documentation.
|
|
138
|
+
|
|
112
139
|
# Migrations
|
|
113
140
|
|
|
114
141
|
Migration files should look like this:
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { Kysely } from '../kysely.js';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* A `DialectAdapter` encapsulates all differences between dialects outside
|
|
4
|
+
* of `Driver` and `QueryCompiler`.
|
|
5
|
+
*
|
|
6
|
+
* For example, some databases support transactional DDL and therefore we want
|
|
7
|
+
* to run migrations inside a transaction, while other databases don't support
|
|
8
|
+
* it. For that there's a `supportsTransactionalDdl` boolean in this interface.
|
|
9
|
+
*/
|
|
10
|
+
export interface DialectAdapter {
|
|
3
11
|
/**
|
|
4
12
|
* Whether or not this dialect supports transactional DDL.
|
|
5
13
|
*
|
|
@@ -8,19 +16,9 @@ export interface DialectSupports {
|
|
|
8
16
|
readonly supportsTransactionalDdl: boolean;
|
|
9
17
|
/**
|
|
10
18
|
* Whether or not this dialect supports the `returning` in inserts
|
|
11
|
-
*
|
|
19
|
+
* updates and deletes.
|
|
12
20
|
*/
|
|
13
21
|
readonly supportsReturning: boolean;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* The `DialectAdapter` encapsulates all differences between dialects outside
|
|
17
|
-
* the `Driver` and `QueryCompiler`.
|
|
18
|
-
*
|
|
19
|
-
* For example, some databases support transactional DDL and therefore we want
|
|
20
|
-
* to run migrations inside a transaction, while other databases don't support
|
|
21
|
-
* it. For that there's a `supportsTransactionalDdl` boolean in this interface.
|
|
22
|
-
*/
|
|
23
|
-
export interface DialectAdapter extends DialectSupports {
|
|
24
22
|
/**
|
|
25
23
|
* This method is used to acquire a lock for the migrations so that
|
|
26
24
|
* it's not possible for two migration processes to run in parallel.
|
|
@@ -34,10 +32,19 @@ export interface DialectAdapter extends DialectSupports {
|
|
|
34
32
|
* table whose id is {@link MIGRATION_LOCK_ID}. `is_locked` is an integer.
|
|
35
33
|
* Kysely takes care of creating the lock table and inserting the one single
|
|
36
34
|
* row to it before this method is executed.
|
|
35
|
+
*
|
|
36
|
+
* If `supportsTransactionalDdl` is `true` then the `db` passed to this method
|
|
37
|
+
* is a transaction inside which the migrations will be executed. Otherwise
|
|
38
|
+
* `db` is a single connection (session) that will be used to execute the
|
|
39
|
+
* migrations.
|
|
37
40
|
*/
|
|
38
41
|
acquireMigrationLock(db: Kysely<any>): Promise<void>;
|
|
39
42
|
/**
|
|
40
43
|
* Releases the migration lock. See {@link acquireMigrationLock}.
|
|
44
|
+
*
|
|
45
|
+
* If `supportsTransactionalDdl` is `true` then the `db` passed to this method
|
|
46
|
+
* is a transaction inside which the migrations were executed. Otherwise `db`
|
|
47
|
+
* is a single connection (session) that was used to execute the migrations.
|
|
41
48
|
*/
|
|
42
49
|
releaseMigrationLock(db: Kysely<any>): Promise<void>;
|
|
43
50
|
}
|
|
@@ -4,7 +4,7 @@ import { QueryCompiler } from '../query-compiler/query-compiler.js';
|
|
|
4
4
|
import { DatabaseIntrospector } from '../introspection/database-introspector.js';
|
|
5
5
|
import { DialectAdapter } from './dialect-adapter.js';
|
|
6
6
|
/**
|
|
7
|
-
* A Dialect is
|
|
7
|
+
* A Dialect is the glue between Kysely and the underlying database engine.
|
|
8
8
|
*
|
|
9
9
|
* See the built-in {@link PostgresDialect} as an example of a dialect.
|
|
10
10
|
* Users can implement their own dialects and use them by passing it
|
|
@@ -11,6 +11,12 @@ class MysqlAdapter {
|
|
|
11
11
|
return false;
|
|
12
12
|
}
|
|
13
13
|
async acquireMigrationLock(db) {
|
|
14
|
+
// Kysely uses a single connection to run the migrations. Because of that, we
|
|
15
|
+
// can take a lock using `get_lock`. Locks acquired using `get_lock` get
|
|
16
|
+
// released when the connection is destroyed (session ends) or when the lock
|
|
17
|
+
// is released using `release_lock`. This way we know that the lock is either
|
|
18
|
+
// released by us after successfull or failed migrations OR it's released by
|
|
19
|
+
// mysql if the process gets killed for some reason.
|
|
14
20
|
await db
|
|
15
21
|
.raw(`select get_lock('${LOCK_ID}', ${LOCK_TIMEOUT_SECONDS})`)
|
|
16
22
|
.execute();
|
|
@@ -53,16 +53,16 @@ class MysqlDriver {
|
|
|
53
53
|
// On mysql this sets the isolation level of the next transaction.
|
|
54
54
|
await connection.executeQuery({
|
|
55
55
|
sql: `set transaction isolation level ${settings.isolationLevel}`,
|
|
56
|
-
|
|
56
|
+
parameters: [],
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
-
await connection.executeQuery({ sql: 'begin',
|
|
59
|
+
await connection.executeQuery({ sql: 'begin', parameters: [] });
|
|
60
60
|
}
|
|
61
61
|
async commitTransaction(connection) {
|
|
62
|
-
await connection.executeQuery({ sql: 'commit',
|
|
62
|
+
await connection.executeQuery({ sql: 'commit', parameters: [] });
|
|
63
63
|
}
|
|
64
64
|
async rollbackTransaction(connection) {
|
|
65
|
-
await connection.executeQuery({ sql: 'rollback',
|
|
65
|
+
await connection.executeQuery({ sql: 'rollback', parameters: [] });
|
|
66
66
|
}
|
|
67
67
|
async releaseConnection(connection) {
|
|
68
68
|
const mysqlConnection = connection;
|
|
@@ -131,7 +131,7 @@ class MysqlConnection {
|
|
|
131
131
|
}
|
|
132
132
|
#executeQuery(compiledQuery) {
|
|
133
133
|
return new Promise((resolve, reject) => {
|
|
134
|
-
this.#rawConnection.query(compiledQuery.sql, compiledQuery.
|
|
134
|
+
this.#rawConnection.query(compiledQuery.sql, compiledQuery.parameters, (err, result) => {
|
|
135
135
|
if (err) {
|
|
136
136
|
reject(err);
|
|
137
137
|
}
|
|
@@ -40,18 +40,18 @@ class PostgresDriver {
|
|
|
40
40
|
if (settings.isolationLevel) {
|
|
41
41
|
await connection.executeQuery({
|
|
42
42
|
sql: `start transaction isolation level ${settings.isolationLevel}`,
|
|
43
|
-
|
|
43
|
+
parameters: [],
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
else {
|
|
47
|
-
await connection.executeQuery({ sql: 'begin',
|
|
47
|
+
await connection.executeQuery({ sql: 'begin', parameters: [] });
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
async commitTransaction(connection) {
|
|
51
|
-
await connection.executeQuery({ sql: 'commit',
|
|
51
|
+
await connection.executeQuery({ sql: 'commit', parameters: [] });
|
|
52
52
|
}
|
|
53
53
|
async rollbackTransaction(connection) {
|
|
54
|
-
await connection.executeQuery({ sql: 'rollback',
|
|
54
|
+
await connection.executeQuery({ sql: 'rollback', parameters: [] });
|
|
55
55
|
}
|
|
56
56
|
async releaseConnection(connection) {
|
|
57
57
|
const pgConnection = connection;
|
|
@@ -90,7 +90,7 @@ class PostgresConnection {
|
|
|
90
90
|
}
|
|
91
91
|
async executeQuery(compiledQuery) {
|
|
92
92
|
const result = await this.#client.query(compiledQuery.sql, [
|
|
93
|
-
...compiledQuery.
|
|
93
|
+
...compiledQuery.parameters,
|
|
94
94
|
]);
|
|
95
95
|
if (result.command === 'UPDATE' || result.command === 'DELETE') {
|
|
96
96
|
return {
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
2
|
+
/**
|
|
3
|
+
* A single connection to the database engine.
|
|
4
|
+
*
|
|
5
|
+
* These are created by an instance of {@link Driver}.
|
|
6
|
+
*/
|
|
2
7
|
export interface DatabaseConnection {
|
|
3
8
|
executeQuery<R>(compiledQuery: CompiledQuery): Promise<QueryResult<R>>;
|
|
4
9
|
}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { ArrayItemType } from '../
|
|
1
|
+
import { ArrayItemType } from '../util/type-utils.js';
|
|
2
2
|
import { DatabaseConnection } from './database-connection.js';
|
|
3
3
|
/**
|
|
4
|
-
* A Driver
|
|
5
|
-
*
|
|
6
|
-
* The Driver creates and releases database connections and is also responsible
|
|
7
|
-
* for connection pooling.
|
|
4
|
+
* A Driver creates and releases {@link DatabaseConnection | database connections}
|
|
5
|
+
* and is also responsible for connection pooling (if the dialect supports pooling).
|
|
8
6
|
*/
|
|
9
7
|
export interface Driver {
|
|
10
8
|
/**
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -110,7 +110,7 @@ export * from './operation-node/operation-node-source.js';
|
|
|
110
110
|
export * from './operation-node/order-by-node.js';
|
|
111
111
|
export * from './introspection/database-introspector.js';
|
|
112
112
|
export * from './util/compilable.js';
|
|
113
|
-
export { AnyColumn } from './
|
|
113
|
+
export { AnyColumn, UnknownRow as AnyRow } from './util/type-utils.js';
|
|
114
114
|
export { SelectExpression, SelectExpressionOrList, } from './parser/select-parser.js';
|
|
115
115
|
export { ReferenceExpression, ReferenceExpressionOrList, } from './parser/reference-parser.js';
|
|
116
116
|
export { ValueExpression, ValueExpressionOrList, } from './parser/value-parser.js';
|
package/dist/cjs/kysely.d.ts
CHANGED
|
@@ -5,10 +5,11 @@ import { MigrationModule } from './migration/migration.js';
|
|
|
5
5
|
import { QueryExecutor } from './query-executor/query-executor.js';
|
|
6
6
|
import { QueryCreator } from './query-creator.js';
|
|
7
7
|
import { KyselyPlugin } from './plugin/kysely-plugin.js';
|
|
8
|
-
import { GeneratedPlaceholder } from './
|
|
8
|
+
import { GeneratedPlaceholder } from './util/type-utils.js';
|
|
9
9
|
import { DatabaseIntrospector } from './introspection/database-introspector.js';
|
|
10
10
|
import { Driver, IsolationLevel } from './driver/driver.js';
|
|
11
11
|
import { ParseContext } from './parser/parse-context.js';
|
|
12
|
+
import { FunctionBuilder } from './query-builder/function-builder.js';
|
|
12
13
|
/**
|
|
13
14
|
* The main Kysely class.
|
|
14
15
|
*
|
|
@@ -96,6 +97,35 @@ export declare class Kysely<DB> extends QueryCreator<DB> {
|
|
|
96
97
|
* ```
|
|
97
98
|
*/
|
|
98
99
|
get generated(): GeneratedPlaceholder;
|
|
100
|
+
/**
|
|
101
|
+
* Returns a {@link FunctionBuilder} that can be used to write type safe function
|
|
102
|
+
* calls.
|
|
103
|
+
*
|
|
104
|
+
* ```ts
|
|
105
|
+
* const { count } = db.fn
|
|
106
|
+
*
|
|
107
|
+
* await db.selectFrom('person')
|
|
108
|
+
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
109
|
+
* .select([
|
|
110
|
+
* 'person.id',
|
|
111
|
+
* count('pet.id').as('pet_count')
|
|
112
|
+
* ])
|
|
113
|
+
* .groupBy('person.id')
|
|
114
|
+
* .having(count('pet.id'), '>', 10)
|
|
115
|
+
* .execute()
|
|
116
|
+
* ```
|
|
117
|
+
*
|
|
118
|
+
* The generated SQL (postgresql):
|
|
119
|
+
*
|
|
120
|
+
* ```sql
|
|
121
|
+
* select "person"."id", count("pet"."id") as "pet_count"
|
|
122
|
+
* from "person"
|
|
123
|
+
* inner join "pet" on "pet"."owner_id" = "person"."id"
|
|
124
|
+
* group by "person"."id"
|
|
125
|
+
* having count("pet"."id") > $1
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
get fn(): FunctionBuilder<DB, keyof DB>;
|
|
99
129
|
/**
|
|
100
130
|
* Starts a transaction. If the callback throws the transaction is rolled back,
|
|
101
131
|
* otherwise it's committed.
|
package/dist/cjs/kysely.js
CHANGED
|
@@ -14,6 +14,7 @@ const single_connection_provider_js_1 = require("./driver/single-connection-prov
|
|
|
14
14
|
const driver_js_1 = require("./driver/driver.js");
|
|
15
15
|
const prevent_await_js_1 = require("./util/prevent-await.js");
|
|
16
16
|
const parse_context_js_1 = require("./parser/parse-context.js");
|
|
17
|
+
const function_builder_js_1 = require("./query-builder/function-builder.js");
|
|
17
18
|
/**
|
|
18
19
|
* The main Kysely class.
|
|
19
20
|
*
|
|
@@ -131,7 +132,38 @@ class Kysely extends query_creator_js_1.QueryCreator {
|
|
|
131
132
|
* ```
|
|
132
133
|
*/
|
|
133
134
|
get generated() {
|
|
134
|
-
return generated_placeholder_js_1.
|
|
135
|
+
return generated_placeholder_js_1.GENERATED_PLACEHOLDER;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Returns a {@link FunctionBuilder} that can be used to write type safe function
|
|
139
|
+
* calls.
|
|
140
|
+
*
|
|
141
|
+
* ```ts
|
|
142
|
+
* const { count } = db.fn
|
|
143
|
+
*
|
|
144
|
+
* await db.selectFrom('person')
|
|
145
|
+
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
146
|
+
* .select([
|
|
147
|
+
* 'person.id',
|
|
148
|
+
* count('pet.id').as('pet_count')
|
|
149
|
+
* ])
|
|
150
|
+
* .groupBy('person.id')
|
|
151
|
+
* .having(count('pet.id'), '>', 10)
|
|
152
|
+
* .execute()
|
|
153
|
+
* ```
|
|
154
|
+
*
|
|
155
|
+
* The generated SQL (postgresql):
|
|
156
|
+
*
|
|
157
|
+
* ```sql
|
|
158
|
+
* select "person"."id", count("pet"."id") as "pet_count"
|
|
159
|
+
* from "person"
|
|
160
|
+
* inner join "pet" on "pet"."owner_id" = "person"."id"
|
|
161
|
+
* group by "person"."id"
|
|
162
|
+
* having count("pet"."id") > $1
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
get fn() {
|
|
166
|
+
return new function_builder_js_1.FunctionBuilder({ executor: this.#props.executor });
|
|
135
167
|
}
|
|
136
168
|
/**
|
|
137
169
|
* Starts a transaction. If the callback throws the transaction is rolled back,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ArrayItemType } from '../
|
|
1
|
+
import { ArrayItemType } from '../util/type-utils.js';
|
|
2
2
|
import { OperationNode } from './operation-node.js';
|
|
3
3
|
export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "ilike", "not ilike", "@>", "<@", "?", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "exists", "not exists"];
|
|
4
4
|
export declare type Operator = ArrayItemType<typeof OPERATORS>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ColumnDataType, DataTypeNode } from '../operation-node/data-type-node.js';
|
|
2
2
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
3
|
-
import { AnyRawBuilder } from '../
|
|
3
|
+
import { AnyRawBuilder } from '../util/type-utils.js';
|
|
4
4
|
export declare type DataTypeExpression = ColumnDataType | AnyRawBuilder;
|
|
5
5
|
export declare function parseDataTypeExpression(dataType: DataTypeExpression): DataTypeNode | RawNode;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
2
2
|
import { ValueNode } from '../operation-node/value-node.js';
|
|
3
|
-
import { AnyRawBuilder } from '../
|
|
3
|
+
import { AnyRawBuilder } from '../util/type-utils.js';
|
|
4
4
|
import { PrimitiveValue } from '../util/object-utils.js';
|
|
5
5
|
export declare type DefaultValueExpression = PrimitiveValue | AnyRawBuilder;
|
|
6
6
|
export declare function parseDefaultValueExpression(value: DefaultValueExpression): ValueNode | RawNode;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FilterNode } from '../operation-node/filter-node.js';
|
|
2
|
-
import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory } from '../
|
|
2
|
+
import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
|
|
3
3
|
import { Operator } from '../operation-node/operator-node.js';
|
|
4
4
|
import { ReferenceExpression } from './reference-parser.js';
|
|
5
5
|
import { FilterExpressionNode } from '../operation-node/operation-node-utils.js';
|
|
@@ -3,13 +3,13 @@ import { InsertValuesNode } from '../operation-node/insert-query-node.js';
|
|
|
3
3
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
4
4
|
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
5
5
|
import { ValueNode } from '../operation-node/value-node.js';
|
|
6
|
-
import { AnyQueryBuilder, AnyRawBuilder, GeneratedPlaceholder } from '../
|
|
6
|
+
import { AnyQueryBuilder, AnyRawBuilder, GeneratedPlaceholder } from '../util/type-utils.js';
|
|
7
7
|
import { PrimitiveValue } from '../util/object-utils.js';
|
|
8
8
|
export declare type InsertObject<DB, TB extends keyof DB> = {
|
|
9
9
|
[C in keyof DB[TB]]: InsertValueExpression<DB[TB][C]>;
|
|
10
10
|
};
|
|
11
11
|
export declare type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | InsertObject<DB, TB>[];
|
|
12
|
-
declare type InsertValueExpression<T
|
|
12
|
+
declare type InsertValueExpression<T> = T | AnyQueryBuilder | AnyRawBuilder | GeneratedPlaceholder;
|
|
13
13
|
export declare function parseInsertObjectOrList(args: InsertObjectOrList<any, any>): [ReadonlyArray<ColumnNode>, ReadonlyArray<InsertValuesNode>];
|
|
14
14
|
export declare function parseInsertValueExpression(value: InsertValueExpression<PrimitiveValue>): ValueNode | RawNode | SelectQueryNode;
|
|
15
15
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { JoinNode, JoinType } from '../operation-node/join-node.js';
|
|
2
|
-
import { AnyColumn, AnyColumnWithTable } from '../
|
|
2
|
+
import { AnyColumn, AnyColumnWithTable } from '../util/type-utils.js';
|
|
3
3
|
import { ExtractAliasFromTableExpression, TableExpressionDatabaseType } from './table-parser.js';
|
|
4
4
|
import { JoinBuilder } from '../query-builder/join-builder.js';
|
|
5
5
|
import { ParseContext } from './parse-context.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { OnConflictNode } from '../operation-node/on-conflict-node.js';
|
|
2
|
-
import { AnyColumn } from '../
|
|
2
|
+
import { AnyColumn } from '../util/type-utils.js';
|
|
3
3
|
import { ParseContext } from './parse-context.js';
|
|
4
4
|
import { MutationObject } from './update-set-parser.js';
|
|
5
5
|
export declare type OnConflictConstraintTarget = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ReferenceExpressionNode } from '../operation-node/operation-node-utils.js';
|
|
2
2
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
3
|
-
import { AnyRawBuilder } from '../
|
|
3
|
+
import { AnyRawBuilder } from '../util/type-utils.js';
|
|
4
4
|
import { ParseContext } from './parse-context.js';
|
|
5
5
|
import { ReferenceExpression } from './reference-parser.js';
|
|
6
6
|
export declare type OrderByDirection = 'asc' | 'desc';
|
|
@@ -3,13 +3,14 @@ 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
5
|
import { PrimitiveValue } from '../util/object-utils.js';
|
|
6
|
-
import { AnyColumn, AnyColumnWithTable, AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory, RowType, ValueType } from '../
|
|
6
|
+
import { AnyColumn, AnyColumnWithTable, AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory, RowType, ValueType } from '../util/type-utils.js';
|
|
7
7
|
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
8
8
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
9
9
|
import { QueryBuilder } from '../query-builder/query-builder.js';
|
|
10
10
|
import { ParseContext } from './parse-context.js';
|
|
11
|
-
export declare type ReferenceExpression<DB, TB extends keyof DB> =
|
|
11
|
+
export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB> | DynamicReferenceBuilder<any>;
|
|
12
12
|
export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReferenceExpression<DB, TB>[];
|
|
13
|
+
export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
|
|
13
14
|
export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends QueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => QueryBuilder<any, any, infer O> ? ValueType<O> : PrimitiveValue;
|
|
14
15
|
declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, S extends string, R = RowType<DB, TB>> = S extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : S extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : S extends keyof R ? R[S] : PrimitiveValue;
|
|
15
16
|
export declare function parseReferenceExpressionOrList(ctx: ParseContext, arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { QueryBuilder } from '../query-builder/query-builder.js';
|
|
2
|
-
import { DeleteResultTypeTag, InsertResultTypeTag, UpdateResultTypeTag } from '../
|
|
2
|
+
import { DeleteResultTypeTag, InsertResultTypeTag, UpdateResultTypeTag } from '../util/type-utils.js';
|
|
3
3
|
import { Selection } from './select-parser.js';
|
|
4
4
|
/**
|
|
5
5
|
* `returning` method output query builder type
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
|
|
2
2
|
import { AliasedQueryBuilder, QueryBuilder } from '../query-builder/query-builder.js';
|
|
3
3
|
import { SelectionNode } from '../operation-node/selection-node.js';
|
|
4
|
-
import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedColumn, AnyAliasedColumnWithTable, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, AnyColumn, AnyColumnWithTable, InsertResultTypeTag, RowType, ValueType } from '../
|
|
4
|
+
import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedColumn, AnyAliasedColumnWithTable, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, AnyColumn, AnyColumnWithTable, InsertResultTypeTag, RowType, ValueType } from '../util/type-utils.js';
|
|
5
5
|
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
6
6
|
import { ParseContext } from './parse-context.js';
|
|
7
7
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AliasedQueryBuilder, QueryBuilder } from '../query-builder/query-builder.js';
|
|
2
2
|
import { TableNode } from '../operation-node/table-node.js';
|
|
3
|
-
import { AliasedQueryBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder } from '../
|
|
3
|
+
import { AliasedQueryBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, Nullable } from '../util/type-utils.js';
|
|
4
4
|
import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
|
|
5
5
|
import { TableExpressionNode } from '../operation-node/operation-node-utils.js';
|
|
6
6
|
import { ParseContext } from './parse-context.js';
|
|
@@ -8,14 +8,25 @@ export declare type TableExpression<DB, TB extends keyof DB> = TableReference<DB
|
|
|
8
8
|
export declare type TableExpressionOrList<DB, TB extends keyof DB> = TableExpression<DB, TB> | ReadonlyArray<TableExpression<DB, TB>>;
|
|
9
9
|
export declare type TableReference<DB> = AnyAliasedTable<DB, any, any> | AnyTable<DB> | AnyAliasedRawBuilder;
|
|
10
10
|
export declare type QueryBuilderWithTable<DB, TB extends keyof DB, O, TE> = QueryBuilder<TableExpressionDatabaseType<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
11
|
-
export declare type TableExpressionDatabaseType<DB, TE
|
|
11
|
+
export declare type TableExpressionDatabaseType<DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
12
|
+
[C in keyof DB | A]: C extends A ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? DB[C] : never;
|
|
13
|
+
};
|
|
14
|
+
export declare type QueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<LeftJoinTableExpressionDatabaseType<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
15
|
+
export declare type LeftJoinTableExpressionDatabaseType<DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
16
|
+
[C in keyof DB | A]: C extends A ? Nullable<ExtractRowTypeFromTableExpression<DB, TE, C>> : C extends keyof DB ? DB[C] : never;
|
|
17
|
+
};
|
|
18
|
+
export declare type QueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<RightJoinTableExpressionDatabaseType<DB, TB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
19
|
+
export declare type RightJoinTableExpressionDatabaseType<DB, TB extends keyof DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
20
|
+
[C in keyof DB | A]: C extends A ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? C extends TB ? Nullable<DB[C]> : DB[C] : never;
|
|
21
|
+
};
|
|
22
|
+
export declare type QueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<FullJoinTableExpressionDatabaseType<DB, TB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
23
|
+
export declare type FullJoinTableExpressionDatabaseType<DB, TB extends keyof DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
24
|
+
[C in keyof DB | A]: C extends A ? Nullable<ExtractRowTypeFromTableExpression<DB, TE, C>> : C extends keyof DB ? C extends TB ? Nullable<DB[C]> : DB[C] : never;
|
|
25
|
+
};
|
|
12
26
|
export declare type ExtractAliasFromTableExpression<DB, TE> = TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : TE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends AliasedRawBuilder<any, infer RA> ? RA : TE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : never;
|
|
27
|
+
declare type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O : never : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O : never : TE extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : never;
|
|
13
28
|
declare type AnyAliasedTable<DB, TB extends keyof DB, A extends string> = TB extends string ? `${TB} as ${A}` : never;
|
|
14
29
|
declare type AnyTable<DB> = keyof DB;
|
|
15
|
-
declare type ExtractDatabaseTypeFromTableExpression<DB, TE> = {
|
|
16
|
-
[A in ExtractAliasFromTableExpression<DB, TE>]: ExtractRowTypeFromTableExpression<DB, TE, A>;
|
|
17
|
-
};
|
|
18
|
-
declare type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O : never : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O : never : TE extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : never;
|
|
19
30
|
export declare function parseTableExpressionOrList(ctx: ParseContext, table: TableExpressionOrList<any, any>): TableExpressionNode[];
|
|
20
31
|
export declare function parseTableExpression(ctx: ParseContext, table: TableExpression<any, any>): TableExpressionNode;
|
|
21
32
|
export declare function parseAliasedTable(from: string): TableExpressionNode;
|
|
@@ -2,12 +2,12 @@ import { ColumnUpdateNode } from '../operation-node/column-update-node.js';
|
|
|
2
2
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
3
3
|
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
4
4
|
import { ValueNode } from '../operation-node/value-node.js';
|
|
5
|
-
import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory } from '../
|
|
5
|
+
import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
|
|
6
6
|
import { PrimitiveValue } from '../util/object-utils.js';
|
|
7
7
|
import { ParseContext } from './parse-context.js';
|
|
8
8
|
export declare type MutationObject<DB, TB extends keyof DB> = {
|
|
9
9
|
[C in keyof DB[TB]]?: MutationValueExpression<DB, TB, DB[TB][C]>;
|
|
10
10
|
};
|
|
11
|
-
export declare type MutationValueExpression<DB, TB extends keyof DB, T
|
|
11
|
+
export declare type MutationValueExpression<DB, TB extends keyof DB, T> = T | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB>;
|
|
12
12
|
export declare function parseUpdateObject(ctx: ParseContext, row: MutationObject<any, any>): ReadonlyArray<ColumnUpdateNode>;
|
|
13
13
|
export declare function parseMutationValueExpression(ctx: ParseContext, value: MutationValueExpression<any, any, PrimitiveValue>): ValueNode | RawNode | SelectQueryNode;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ValueExpressionNode } from '../operation-node/operation-node-utils.js';
|
|
2
|
-
import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory } from '../
|
|
2
|
+
import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
|
|
3
3
|
import { ExtractTypeFromReferenceExpression } from './reference-parser.js';
|
|
4
4
|
import { ParseContext } from './parse-context.js';
|
|
5
5
|
export declare type ValueExpression<DB, TB extends keyof DB, RE> = ExtractTypeFromReferenceExpression<DB, TB, RE> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB>;
|
|
@@ -2,7 +2,7 @@ import { CommonTableExpressionNode } from '../operation-node/common-table-expres
|
|
|
2
2
|
import { QueryBuilder } from '../query-builder/query-builder.js';
|
|
3
3
|
import { QueryCreator } from '../query-creator.js';
|
|
4
4
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
5
|
-
import { AnyRawBuilder } from '../
|
|
5
|
+
import { AnyRawBuilder } from '../util/type-utils.js';
|
|
6
6
|
import { ParseContext } from './parse-context.js';
|
|
7
7
|
export declare type CommonTableExpression<DB> = (creator: QueryCreator<DB>) => QueryBuilder<DB, any> | AnyRawBuilder;
|
|
8
8
|
export declare type QueryCreatorWithCommonTableExpression<DB, N extends string, E extends CommonTableExpression<DB>> = QueryCreator<DB & Record<N, ExtractRowTypeFromCommonTableExpression<E>>>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { QueryResult } from '../../driver/database-connection.js';
|
|
2
2
|
import { RootOperationNode } from '../../query-compiler/query-compiler.js';
|
|
3
|
-
import {
|
|
3
|
+
import { UnknownRow } from '../../util/type-utils.js';
|
|
4
|
+
import { KyselyPlugin, PluginTransformQueryArgs, PluginTransformResultArgs } from '../kysely-plugin.js';
|
|
4
5
|
export interface CamelCasePluginOptions {
|
|
5
6
|
/**
|
|
6
7
|
* If true, camelCase is transformed into upper case SNAKE_CASE.
|
|
@@ -94,8 +95,8 @@ export declare class CamelCasePlugin implements KyselyPlugin {
|
|
|
94
95
|
#private;
|
|
95
96
|
constructor(opt?: CamelCasePluginOptions);
|
|
96
97
|
transformQuery(args: PluginTransformQueryArgs): RootOperationNode;
|
|
97
|
-
transformResult(args: PluginTransformResultArgs): Promise<QueryResult<
|
|
98
|
-
protected mapRow(row:
|
|
98
|
+
transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>>;
|
|
99
|
+
protected mapRow(row: UnknownRow): UnknownRow;
|
|
99
100
|
protected snakeCase(str: string): string;
|
|
100
101
|
protected camelCase(str: string): string;
|
|
101
102
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { QueryResult } from '../driver/database-connection.js';
|
|
2
2
|
import { RootOperationNode } from '../query-compiler/query-compiler.js';
|
|
3
3
|
import { QueryId } from '../util/query-id.js';
|
|
4
|
+
import { UnknownRow } from '../util/type-utils.js';
|
|
4
5
|
export interface KyselyPlugin {
|
|
5
6
|
/**
|
|
6
7
|
* This is called for each query before it is executed. You can modify the query by
|
|
7
8
|
* transforming its {@link OperationNode} tree provided in {@link PluginTransformQueryArgs.node | args.node}
|
|
8
|
-
* and returning the transformed tree. You'd usually
|
|
9
|
+
* and returning the transformed tree. You'd usually want to use an {@link OperationNodeTransformer}
|
|
9
10
|
* for this.
|
|
10
11
|
*
|
|
11
12
|
* If you need to pass some query-related data between this method and `transformResult` you
|
|
@@ -22,10 +23,14 @@ export interface KyselyPlugin {
|
|
|
22
23
|
*
|
|
23
24
|
* transformResult(args: PluginTransformResultArgs): QueryResult<AnyRow> {
|
|
24
25
|
* const data = this.data.get(args.queryId)
|
|
25
|
-
* return
|
|
26
|
+
* return args.result
|
|
26
27
|
* }
|
|
27
28
|
* }
|
|
28
29
|
* ```
|
|
30
|
+
*
|
|
31
|
+
* You should use a `WeakMap` instead of a `Map` or some other strong references because `transformQuery`
|
|
32
|
+
* is not always matched by a call to `transformResult` which would leave orphaned items in the map
|
|
33
|
+
* and cause a memory leak.
|
|
29
34
|
*/
|
|
30
35
|
transformQuery(args: PluginTransformQueryArgs): RootOperationNode;
|
|
31
36
|
/**
|
|
@@ -33,14 +38,13 @@ export interface KyselyPlugin {
|
|
|
33
38
|
* of the query can be accessed through {@link PluginTransformResultArgs.result | args.result}.
|
|
34
39
|
* You can modify the result and return the modifier result.
|
|
35
40
|
*/
|
|
36
|
-
transformResult(args: PluginTransformResultArgs): Promise<QueryResult<
|
|
41
|
+
transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>>;
|
|
37
42
|
}
|
|
38
43
|
export interface PluginTransformQueryArgs {
|
|
39
44
|
readonly queryId: QueryId;
|
|
40
45
|
readonly node: RootOperationNode;
|
|
41
46
|
}
|
|
42
|
-
export declare type AnyRow = Record<string, unknown>;
|
|
43
47
|
export interface PluginTransformResultArgs {
|
|
44
48
|
readonly queryId: QueryId;
|
|
45
|
-
readonly result: QueryResult<
|
|
49
|
+
readonly result: QueryResult<UnknownRow>;
|
|
46
50
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { QueryResult } from '../../driver/database-connection.js';
|
|
2
2
|
import { RootOperationNode } from '../../query-compiler/query-compiler.js';
|
|
3
|
-
import {
|
|
3
|
+
import { KyselyPlugin, PluginTransformQueryArgs, PluginTransformResultArgs } from '../kysely-plugin.js';
|
|
4
|
+
import { UnknownRow } from '../../util/type-utils.js';
|
|
4
5
|
export declare class WithSchemaPlugin implements KyselyPlugin {
|
|
5
6
|
#private;
|
|
6
7
|
constructor(schema: string);
|
|
7
8
|
transformQuery(args: PluginTransformQueryArgs): RootOperationNode;
|
|
8
|
-
transformResult(args: PluginTransformResultArgs): Promise<QueryResult<
|
|
9
|
+
transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>>;
|
|
9
10
|
}
|