kysely 0.19.10 → 0.20.0
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 +52 -4
- package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +10 -0
- package/dist/cjs/dialect/mysql/mysql-driver.d.ts +1 -0
- package/dist/cjs/dialect/mysql/mysql-driver.js +25 -0
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +5 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +16 -0
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +29 -0
- package/dist/cjs/dialect/postgres/postgres-driver.d.ts +6 -2
- package/dist/cjs/dialect/postgres/postgres-driver.js +24 -2
- package/dist/cjs/dialect/postgres/postgres-introspector.js +7 -1
- package/dist/cjs/dialect/postgres/postgres-query-compiler.d.ts +1 -3
- package/dist/cjs/dialect/postgres/postgres-query-compiler.js +3 -8
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +3 -0
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +2 -0
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +3 -0
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +10 -0
- package/dist/cjs/driver/database-connection.d.ts +1 -0
- package/dist/cjs/driver/dummy-driver.js +3 -0
- package/dist/cjs/index.d.ts +6 -0
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/operation-node/create-table-node.d.ts +9 -2
- package/dist/cjs/operation-node/create-table-node.js +18 -1
- package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/delete-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/delete-query-node.js +6 -0
- package/dist/cjs/operation-node/explain-node.d.ts +16 -0
- package/dist/cjs/operation-node/explain-node.js +19 -0
- package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +2 -2
- package/dist/cjs/operation-node/insert-query-node.d.ts +4 -1
- package/dist/cjs/operation-node/insert-query-node.js +2 -1
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +15 -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/references-node.d.ts +3 -1
- package/dist/cjs/operation-node/references-node.js +8 -1
- package/dist/cjs/operation-node/select-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/select-query-node.js +6 -0
- package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/update-query-node.js +6 -0
- package/dist/cjs/parser/on-commit-action-parse.d.ts +2 -0
- package/dist/cjs/parser/on-commit-action-parse.js +11 -0
- package/dist/cjs/parser/on-modify-action-parser.d.ts +2 -0
- package/dist/cjs/parser/on-modify-action-parser.js +11 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +19 -1
- package/dist/cjs/query-builder/delete-query-builder.js +24 -0
- package/dist/cjs/query-builder/function-builder.d.ts +3 -3
- package/dist/cjs/query-builder/insert-query-builder.d.ts +21 -3
- package/dist/cjs/query-builder/insert-query-builder.js +26 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +65 -1
- package/dist/cjs/query-builder/select-query-builder.js +79 -4
- package/dist/cjs/query-builder/update-query-builder.d.ts +20 -1
- package/dist/cjs/query-builder/update-query-builder.js +25 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +7 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +75 -2
- package/dist/cjs/query-creator.d.ts +27 -0
- package/dist/cjs/query-creator.js +33 -0
- package/dist/cjs/query-executor/query-executor-base.d.ts +6 -0
- package/dist/cjs/query-executor/query-executor-base.js +19 -0
- package/dist/cjs/query-executor/query-executor.d.ts +11 -0
- package/dist/cjs/raw-builder/sql.d.ts +96 -96
- package/dist/cjs/raw-builder/sql.js +0 -96
- package/dist/cjs/schema/column-definition-builder.js +3 -2
- package/dist/cjs/schema/create-table-builder.d.ts +60 -6
- package/dist/cjs/schema/create-table-builder.js +72 -7
- package/dist/cjs/schema/create-type-builder.d.ts +9 -0
- package/dist/cjs/schema/create-type-builder.js +9 -0
- package/dist/cjs/schema/foreign-key-constraint-builder.js +3 -2
- package/dist/cjs/util/deferred.d.ts +7 -0
- package/dist/cjs/util/deferred.js +28 -0
- package/dist/cjs/util/explainable.d.ts +5 -0
- package/dist/cjs/util/explainable.js +2 -0
- package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +10 -0
- package/dist/esm/dialect/mysql/mysql-driver.d.ts +1 -0
- package/dist/esm/dialect/mysql/mysql-driver.js +25 -0
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +5 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +16 -0
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +29 -0
- package/dist/esm/dialect/postgres/postgres-driver.d.ts +6 -2
- package/dist/esm/dialect/postgres/postgres-driver.js +24 -2
- package/dist/esm/dialect/postgres/postgres-introspector.js +7 -1
- package/dist/esm/dialect/postgres/postgres-query-compiler.d.ts +1 -3
- package/dist/esm/dialect/postgres/postgres-query-compiler.js +3 -8
- package/dist/esm/dialect/sqlite/sqlite-driver.js +3 -0
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -0
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +3 -0
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +10 -0
- package/dist/esm/driver/database-connection.d.ts +1 -0
- package/dist/esm/driver/dummy-driver.js +3 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/operation-node/create-table-node.d.ts +9 -2
- package/dist/esm/operation-node/create-table-node.js +17 -0
- package/dist/esm/operation-node/data-type-node.d.ts +1 -1
- package/dist/esm/operation-node/delete-query-node.d.ts +3 -0
- package/dist/esm/operation-node/delete-query-node.js +6 -0
- package/dist/esm/operation-node/explain-node.d.ts +16 -0
- package/dist/esm/operation-node/explain-node.js +17 -0
- package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +2 -2
- package/dist/esm/operation-node/insert-query-node.d.ts +4 -1
- package/dist/esm/operation-node/insert-query-node.js +2 -1
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +15 -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/references-node.d.ts +3 -1
- package/dist/esm/operation-node/references-node.js +7 -0
- package/dist/esm/operation-node/select-query-node.d.ts +3 -0
- package/dist/esm/operation-node/select-query-node.js +6 -0
- package/dist/esm/operation-node/update-query-node.d.ts +3 -0
- package/dist/esm/operation-node/update-query-node.js +6 -0
- package/dist/esm/parser/on-commit-action-parse.d.ts +2 -0
- package/dist/esm/parser/on-commit-action-parse.js +8 -0
- package/dist/esm/parser/on-modify-action-parser.d.ts +2 -0
- package/dist/esm/parser/on-modify-action-parser.js +8 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +19 -1
- package/dist/esm/query-builder/delete-query-builder.js +24 -0
- package/dist/esm/query-builder/function-builder.d.ts +3 -3
- package/dist/esm/query-builder/insert-query-builder.d.ts +21 -3
- package/dist/esm/query-builder/insert-query-builder.js +26 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +65 -1
- package/dist/esm/query-builder/select-query-builder.js +79 -4
- package/dist/esm/query-builder/update-query-builder.d.ts +20 -1
- package/dist/esm/query-builder/update-query-builder.js +25 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +7 -0
- package/dist/esm/query-compiler/default-query-compiler.js +75 -2
- package/dist/esm/query-creator.d.ts +27 -0
- package/dist/esm/query-creator.js +33 -0
- package/dist/esm/query-executor/query-executor-base.d.ts +6 -0
- package/dist/esm/query-executor/query-executor-base.js +19 -0
- package/dist/esm/query-executor/query-executor.d.ts +11 -0
- package/dist/esm/raw-builder/sql.d.ts +96 -96
- package/dist/esm/raw-builder/sql.js +0 -96
- package/dist/esm/schema/column-definition-builder.js +3 -2
- package/dist/esm/schema/create-table-builder.d.ts +60 -6
- package/dist/esm/schema/create-table-builder.js +72 -7
- package/dist/esm/schema/create-type-builder.d.ts +9 -0
- package/dist/esm/schema/create-type-builder.js +9 -0
- package/dist/esm/schema/foreign-key-constraint-builder.js +3 -2
- package/dist/esm/util/deferred.d.ts +7 -0
- package/dist/esm/util/deferred.js +25 -0
- package/dist/esm/util/explainable.d.ts +5 -0
- package/dist/esm/util/explainable.js +2 -0
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ column names, aliases and types from selected subqueries, joined subqueries, `wi
|
|
|
21
21
|
much anything you can think of.
|
|
22
22
|
|
|
23
23
|
Of course there are cases where things cannot be typed at compile time, and Kysely offers escape
|
|
24
|
-
hatches for these situations. See the [sql template tag](https://koskimas.github.io/kysely/
|
|
24
|
+
hatches for these situations. See the [sql template tag](https://koskimas.github.io/kysely/functions/sql.html)
|
|
25
25
|
and the [DynamicModule](https://koskimas.github.io/kysely/classes/DynamicModule.html#ref) for more info.
|
|
26
26
|
|
|
27
27
|
If you start using Kysely and can't find something you'd want to use, please open an issue or join our
|
|
@@ -32,15 +32,21 @@ You can find a more thorough introduction [here](https://www.jakso.me/blog/kysel
|
|
|
32
32
|
# Table of contents
|
|
33
33
|
|
|
34
34
|
- [Installation](#installation)
|
|
35
|
+
- [3rd party dialects](#3rd-party-dialects)
|
|
35
36
|
- [Minimal example](#minimal-example)
|
|
36
37
|
- [Generating types](#generating-types)
|
|
37
38
|
- [Query examples](#query-examples)
|
|
38
|
-
- [
|
|
39
|
+
- [Select queries](#select-queries)
|
|
40
|
+
- [Stream select query results](#stream-select-query-results)
|
|
41
|
+
- [Update queries](#update-queries)
|
|
42
|
+
- [Insert queries](#insert-queries)
|
|
43
|
+
- [Delete queries](#delete-queries)
|
|
39
44
|
- [Migrations](#migrations)
|
|
45
|
+
- [PostgreSQL migration example](#postgresql-migration-example)
|
|
46
|
+
- [MySQL migration example](#mysql-migration-example)
|
|
40
47
|
- [Deno](#deno)
|
|
41
48
|
- [Browser](#browser)
|
|
42
|
-
- [
|
|
43
|
-
- [Changelog](https://github.com/koskimas/kysely/releases)
|
|
49
|
+
- [Why not just contribute to knex](#why-not-just-contribute-to-knex)
|
|
44
50
|
|
|
45
51
|
# Installation
|
|
46
52
|
|
|
@@ -180,6 +186,48 @@ You can find examples of select queries in the documentation of the
|
|
|
180
186
|
the [where method](https://koskimas.github.io/kysely/classes/SelectQueryBuilder.html#where)
|
|
181
187
|
among other places.
|
|
182
188
|
|
|
189
|
+
### Stream select query results
|
|
190
|
+
|
|
191
|
+
*Currently only supported by `postgres` and `mysql` dialects.*
|
|
192
|
+
|
|
193
|
+
```ts
|
|
194
|
+
import { Pool } from 'pg'
|
|
195
|
+
// or `import * as Cursor from 'pg-cursor'` depending on your tsconfig
|
|
196
|
+
import Cursor from 'pg-cursor'
|
|
197
|
+
import {
|
|
198
|
+
Kysely,
|
|
199
|
+
PostgresDialect,
|
|
200
|
+
} from 'kysely'
|
|
201
|
+
|
|
202
|
+
const db = new Kysely<Database>({
|
|
203
|
+
// PostgresDialect requires the Cursor dependency
|
|
204
|
+
dialect: new PostgresDialect({
|
|
205
|
+
pool: new Pool({
|
|
206
|
+
host: 'localhost',
|
|
207
|
+
database: 'kysely_test'
|
|
208
|
+
}),
|
|
209
|
+
cursor: Cursor
|
|
210
|
+
}),
|
|
211
|
+
|
|
212
|
+
// MysqlDialect doesn't require any special configuration
|
|
213
|
+
})
|
|
214
|
+
|
|
215
|
+
async function demo() {
|
|
216
|
+
for await (const male of db.selectFrom("person")
|
|
217
|
+
.selectAll()
|
|
218
|
+
.where("person.gender", "=", "male")
|
|
219
|
+
.stream()) {
|
|
220
|
+
console.log(`Hello mr. ${male.first_name}!`)
|
|
221
|
+
|
|
222
|
+
if (male.first_name === "John") {
|
|
223
|
+
// After this line the db connection is released and no more
|
|
224
|
+
// rows are streamed from the database to the client
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
183
231
|
## Update queries
|
|
184
232
|
|
|
185
233
|
See the [set method](https://koskimas.github.io/kysely/classes/UpdateQueryBuilder.html#set) and the
|
|
@@ -31,9 +31,19 @@ export interface MysqlPool {
|
|
|
31
31
|
end(callback: (error: unknown) => void): void;
|
|
32
32
|
}
|
|
33
33
|
export interface MysqlPoolConnection {
|
|
34
|
+
query(sql: string, parameters: ReadonlyArray<unknown>): {
|
|
35
|
+
stream: <T>(options: MysqlStreamOptions) => MysqlStream<T>;
|
|
36
|
+
};
|
|
34
37
|
query(sql: string, parameters: ReadonlyArray<unknown>, callback: (error: unknown, result: MysqlQueryResult) => void): void;
|
|
35
38
|
release(): void;
|
|
36
39
|
}
|
|
40
|
+
export interface MysqlStreamOptions {
|
|
41
|
+
highWaterMark?: number;
|
|
42
|
+
objectMode?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface MysqlStream<T> {
|
|
45
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<T>;
|
|
46
|
+
}
|
|
37
47
|
export interface MysqlOkPacket {
|
|
38
48
|
affectedRows: number;
|
|
39
49
|
insertId: number;
|
|
@@ -42,6 +42,7 @@ declare class MysqlConnection implements DatabaseConnection {
|
|
|
42
42
|
#private;
|
|
43
43
|
constructor(rawConnection: MysqlPoolConnection);
|
|
44
44
|
executeQuery<O>(compiledQuery: CompiledQuery): Promise<QueryResult<O>>;
|
|
45
|
+
streamQuery<O>(compiledQuery: CompiledQuery, chunkSize: number): AsyncIterableIterator<QueryResult<O>>;
|
|
45
46
|
[PRIVATE_RELEASE_METHOD](): void;
|
|
46
47
|
}
|
|
47
48
|
export {};
|
|
@@ -124,6 +124,31 @@ class MysqlConnection {
|
|
|
124
124
|
});
|
|
125
125
|
});
|
|
126
126
|
}
|
|
127
|
+
async *streamQuery(compiledQuery, chunkSize) {
|
|
128
|
+
const stream = this.#rawConnection
|
|
129
|
+
.query(compiledQuery.sql, compiledQuery.parameters)
|
|
130
|
+
.stream({
|
|
131
|
+
objectMode: true,
|
|
132
|
+
});
|
|
133
|
+
try {
|
|
134
|
+
for await (const row of stream) {
|
|
135
|
+
yield {
|
|
136
|
+
rows: [row],
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (ex) {
|
|
141
|
+
if (ex &&
|
|
142
|
+
typeof ex === 'object' &&
|
|
143
|
+
'code' in ex &&
|
|
144
|
+
// @ts-ignore
|
|
145
|
+
ex.code === 'ERR_STREAM_PREMATURE_CLOSE') {
|
|
146
|
+
// Most likely because of https://github.com/mysqljs/mysql/blob/master/lib/protocol/sequences/Query.js#L220
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
throw ex;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
127
152
|
[PRIVATE_RELEASE_METHOD]() {
|
|
128
153
|
this.#rawConnection.release();
|
|
129
154
|
}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
2
2
|
export declare class MysqlQueryCompiler extends DefaultQueryCompiler {
|
|
3
3
|
protected getCurrentParameterPlaceholder(): string;
|
|
4
|
+
protected getLeftExplainOptionsWrapper(): string;
|
|
5
|
+
protected getExplainOptionAssignment(): string;
|
|
6
|
+
protected getExplainOptionsDelimiter(): string;
|
|
7
|
+
protected getRightExplainOptionsWrapper(): string;
|
|
4
8
|
protected getLeftIdentifierWrapper(): string;
|
|
5
9
|
protected getRightIdentifierWrapper(): string;
|
|
10
|
+
protected sanitizeIdentifier(identifier: string): string;
|
|
6
11
|
}
|
|
@@ -2,15 +2,31 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MysqlQueryCompiler = void 0;
|
|
4
4
|
const default_query_compiler_js_1 = require("../../query-compiler/default-query-compiler.js");
|
|
5
|
+
const ID_WRAP_REGEX = /`/g;
|
|
5
6
|
class MysqlQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompiler {
|
|
6
7
|
getCurrentParameterPlaceholder() {
|
|
7
8
|
return '?';
|
|
8
9
|
}
|
|
10
|
+
getLeftExplainOptionsWrapper() {
|
|
11
|
+
return '';
|
|
12
|
+
}
|
|
13
|
+
getExplainOptionAssignment() {
|
|
14
|
+
return '=';
|
|
15
|
+
}
|
|
16
|
+
getExplainOptionsDelimiter() {
|
|
17
|
+
return ' ';
|
|
18
|
+
}
|
|
19
|
+
getRightExplainOptionsWrapper() {
|
|
20
|
+
return '';
|
|
21
|
+
}
|
|
9
22
|
getLeftIdentifierWrapper() {
|
|
10
23
|
return '`';
|
|
11
24
|
}
|
|
12
25
|
getRightIdentifierWrapper() {
|
|
13
26
|
return '`';
|
|
14
27
|
}
|
|
28
|
+
sanitizeIdentifier(identifier) {
|
|
29
|
+
return identifier.replace(ID_WRAP_REGEX, '``');
|
|
30
|
+
}
|
|
15
31
|
}
|
|
16
32
|
exports.MysqlQueryCompiler = MysqlQueryCompiler;
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import { DatabaseConnection } from '../../driver/database-connection.js';
|
|
2
|
+
export declare type PostgresCursorConstructor = new <T>(sql: string, parameters: readonly unknown[]) => PostgresCursor<T>;
|
|
3
|
+
export declare type PostgresCursor<T> = {
|
|
4
|
+
state: 'initialized' | 'idle' | 'submitted' | 'busy';
|
|
5
|
+
read: (rowsCount: number) => Promise<T[]>;
|
|
6
|
+
} | {
|
|
7
|
+
state: 'done';
|
|
8
|
+
} | {
|
|
9
|
+
state: 'error';
|
|
10
|
+
_error: Error;
|
|
11
|
+
};
|
|
2
12
|
/**
|
|
3
13
|
* Config for the PostgreSQL dialect.
|
|
4
14
|
*/
|
|
@@ -11,6 +21,19 @@ export interface PostgresDialectConfig {
|
|
|
11
21
|
* https://node-postgres.com/api/pool
|
|
12
22
|
*/
|
|
13
23
|
pool: PostgresPool | (() => Promise<PostgresPool>);
|
|
24
|
+
/**
|
|
25
|
+
* https://github.com/brianc/node-postgres/tree/master/packages/pg-cursor
|
|
26
|
+
* ```ts
|
|
27
|
+
* import Cursor from 'pg-cursor'
|
|
28
|
+
* // or
|
|
29
|
+
* import * as Cursor from 'pg-cursor'
|
|
30
|
+
*
|
|
31
|
+
* new PostgresDialect({
|
|
32
|
+
* cursor: Cursor
|
|
33
|
+
* })
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
cursor?: PostgresCursorConstructor;
|
|
14
37
|
/**
|
|
15
38
|
* Called once for each created connection.
|
|
16
39
|
*/
|
|
@@ -30,6 +53,7 @@ export interface PostgresPool {
|
|
|
30
53
|
}
|
|
31
54
|
export interface PostgresPoolClient {
|
|
32
55
|
query<R>(sql: string, parameters: ReadonlyArray<unknown>): Promise<PostgresQueryResult<R>>;
|
|
56
|
+
query<R>(cursor: PostgresCursor<R>): PostgresCursor<R>;
|
|
33
57
|
release(): void;
|
|
34
58
|
}
|
|
35
59
|
export interface PostgresQueryResult<R> {
|
|
@@ -37,3 +61,8 @@ export interface PostgresQueryResult<R> {
|
|
|
37
61
|
rowCount: number;
|
|
38
62
|
rows: R[];
|
|
39
63
|
}
|
|
64
|
+
export interface PostgresStreamOptions {
|
|
65
|
+
}
|
|
66
|
+
export interface PostgresStream<T> {
|
|
67
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<T>;
|
|
68
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DatabaseConnection, QueryResult } from '../../driver/database-connection.js';
|
|
2
2
|
import { Driver, TransactionSettings } from '../../driver/driver.js';
|
|
3
3
|
import { CompiledQuery } from '../../query-compiler/compiled-query.js';
|
|
4
|
-
import { PostgresDialectConfig, PostgresPoolClient } from './postgres-dialect-config.js';
|
|
4
|
+
import { PostgresCursorConstructor, PostgresDialectConfig, PostgresPoolClient } from './postgres-dialect-config.js';
|
|
5
5
|
declare const PRIVATE_RELEASE_METHOD: unique symbol;
|
|
6
6
|
export declare class PostgresDriver implements Driver {
|
|
7
7
|
#private;
|
|
@@ -38,10 +38,14 @@ export declare class PostgresDriver implements Driver {
|
|
|
38
38
|
*/
|
|
39
39
|
destroy(): Promise<void>;
|
|
40
40
|
}
|
|
41
|
+
interface PostgresConnectionOptions {
|
|
42
|
+
cursor: PostgresCursorConstructor | null;
|
|
43
|
+
}
|
|
41
44
|
declare class PostgresConnection implements DatabaseConnection {
|
|
42
45
|
#private;
|
|
43
|
-
constructor(client: PostgresPoolClient);
|
|
46
|
+
constructor(client: PostgresPoolClient, options: PostgresConnectionOptions);
|
|
44
47
|
executeQuery<O>(compiledQuery: CompiledQuery): Promise<QueryResult<O>>;
|
|
48
|
+
streamQuery<O>(compiledQuery: CompiledQuery, chunkSize: number): AsyncIterableIterator<QueryResult<O>>;
|
|
45
49
|
[PRIVATE_RELEASE_METHOD](): void;
|
|
46
50
|
}
|
|
47
51
|
export {};
|
|
@@ -21,7 +21,9 @@ class PostgresDriver {
|
|
|
21
21
|
const client = await this.#pool.connect();
|
|
22
22
|
let connection = this.#connections.get(client);
|
|
23
23
|
if (!connection) {
|
|
24
|
-
connection = new PostgresConnection(client
|
|
24
|
+
connection = new PostgresConnection(client, {
|
|
25
|
+
cursor: this.#config.cursor ?? null,
|
|
26
|
+
});
|
|
25
27
|
this.#connections.set(client, connection);
|
|
26
28
|
// The driver must take care of calling `onCreateConnection` when a new
|
|
27
29
|
// connection is created. The `pg` module doesn't provide an async hook
|
|
@@ -60,8 +62,10 @@ class PostgresDriver {
|
|
|
60
62
|
exports.PostgresDriver = PostgresDriver;
|
|
61
63
|
class PostgresConnection {
|
|
62
64
|
#client;
|
|
63
|
-
|
|
65
|
+
#options;
|
|
66
|
+
constructor(client, options) {
|
|
64
67
|
this.#client = client;
|
|
68
|
+
this.#options = options;
|
|
65
69
|
}
|
|
66
70
|
async executeQuery(compiledQuery) {
|
|
67
71
|
try {
|
|
@@ -82,6 +86,24 @@ class PostgresConnection {
|
|
|
82
86
|
throw (0, stack_trace_utils_js_1.extendStackTrace)(err, new Error());
|
|
83
87
|
}
|
|
84
88
|
}
|
|
89
|
+
async *streamQuery(compiledQuery, chunkSize) {
|
|
90
|
+
if (!this.#options.cursor) {
|
|
91
|
+
throw new Error("'cursor' is not present in your postgres dialect config. It's required to make streaming work in postgres.");
|
|
92
|
+
}
|
|
93
|
+
const cursor = this.#client.query(new this.#options.cursor(compiledQuery.sql, compiledQuery.parameters));
|
|
94
|
+
while (true) {
|
|
95
|
+
if (cursor.state === 'done') {
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
if (cursor.state === 'error') {
|
|
99
|
+
throw cursor._error;
|
|
100
|
+
}
|
|
101
|
+
const rows = await cursor.read(chunkSize);
|
|
102
|
+
yield {
|
|
103
|
+
rows,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
85
107
|
[PRIVATE_RELEASE_METHOD]() {
|
|
86
108
|
this.#client.release();
|
|
87
109
|
}
|
|
@@ -21,7 +21,10 @@ class PostgresIntrospector {
|
|
|
21
21
|
let query = this.#db
|
|
22
22
|
.selectFrom('pg_catalog.pg_attribute as a')
|
|
23
23
|
.innerJoin('pg_catalog.pg_class as c', 'a.attrelid', 'c.oid')
|
|
24
|
-
.innerJoin('pg_catalog.
|
|
24
|
+
.innerJoin('pg_catalog.pg_namespace as ns', 'c.relnamespace', 'ns.oid')
|
|
25
|
+
.innerJoin('pg_catalog.pg_tables as t', (join) => join
|
|
26
|
+
.onRef('t.tablename', '=', 'c.relname')
|
|
27
|
+
.onRef('t.schemaname', '=', 'ns.nspname'))
|
|
25
28
|
.innerJoin('pg_catalog.pg_type as typ', 'a.atttypid', 'typ.oid')
|
|
26
29
|
.select([
|
|
27
30
|
'a.attname as column',
|
|
@@ -43,6 +46,9 @@ class PostgresIntrospector {
|
|
|
43
46
|
.where('t.schemaname', '!=', 'information_schema')
|
|
44
47
|
.where('a.attnum', '>=', 0) // No system columns
|
|
45
48
|
.where('a.attisdropped', '!=', true)
|
|
49
|
+
.orderBy('t.schemaname')
|
|
50
|
+
.orderBy('t.tablename')
|
|
51
|
+
.orderBy('a.attname')
|
|
46
52
|
.castTo();
|
|
47
53
|
if (!options.withInternalKyselyTables) {
|
|
48
54
|
query = query
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
2
2
|
export declare class PostgresQueryCompiler extends DefaultQueryCompiler {
|
|
3
|
-
protected
|
|
4
|
-
protected getLeftIdentifierWrapper(): string;
|
|
5
|
-
protected getRightIdentifierWrapper(): string;
|
|
3
|
+
protected sanitizeIdentifier(identifier: string): string;
|
|
6
4
|
}
|
|
@@ -2,15 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PostgresQueryCompiler = void 0;
|
|
4
4
|
const default_query_compiler_js_1 = require("../../query-compiler/default-query-compiler.js");
|
|
5
|
+
const ID_WRAP_REGEX = /"/g;
|
|
5
6
|
class PostgresQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompiler {
|
|
6
|
-
|
|
7
|
-
return '
|
|
8
|
-
}
|
|
9
|
-
getLeftIdentifierWrapper() {
|
|
10
|
-
return '"';
|
|
11
|
-
}
|
|
12
|
-
getRightIdentifierWrapper() {
|
|
13
|
-
return '"';
|
|
7
|
+
sanitizeIdentifier(identifier) {
|
|
8
|
+
return identifier.replace(ID_WRAP_REGEX, '""');
|
|
14
9
|
}
|
|
15
10
|
}
|
|
16
11
|
exports.PostgresQueryCompiler = PostgresQueryCompiler;
|
|
@@ -18,6 +18,7 @@ class SqliteIntrospector {
|
|
|
18
18
|
.where('type', '=', 'table')
|
|
19
19
|
.where('name', 'not like', 'sqlite_%')
|
|
20
20
|
.select('name')
|
|
21
|
+
.orderBy('name')
|
|
21
22
|
.castTo();
|
|
22
23
|
if (!options.withInternalKyselyTables) {
|
|
23
24
|
query = query
|
|
@@ -50,6 +51,7 @@ class SqliteIntrospector {
|
|
|
50
51
|
const columns = await db
|
|
51
52
|
.selectFrom((0, sql_js_1.sql) `pragma_table_info(${table})`.as('table_info'))
|
|
52
53
|
.select(['name', 'type', 'notnull', 'dflt_value'])
|
|
54
|
+
.orderBy('name')
|
|
53
55
|
.execute();
|
|
54
56
|
return {
|
|
55
57
|
name: table,
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
2
2
|
export declare class SqliteQueryCompiler extends DefaultQueryCompiler {
|
|
3
3
|
protected getCurrentParameterPlaceholder(): string;
|
|
4
|
+
protected getLeftExplainOptionsWrapper(): string;
|
|
5
|
+
protected getRightExplainOptionsWrapper(): string;
|
|
4
6
|
protected getLeftIdentifierWrapper(): string;
|
|
5
7
|
protected getRightIdentifierWrapper(): string;
|
|
6
8
|
protected getAutoIncrement(): string;
|
|
9
|
+
protected sanitizeIdentifier(identifier: string): string;
|
|
7
10
|
}
|
|
@@ -2,10 +2,17 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SqliteQueryCompiler = void 0;
|
|
4
4
|
const default_query_compiler_js_1 = require("../../query-compiler/default-query-compiler.js");
|
|
5
|
+
const ID_WRAP_REGEX = /"/g;
|
|
5
6
|
class SqliteQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompiler {
|
|
6
7
|
getCurrentParameterPlaceholder() {
|
|
7
8
|
return '?';
|
|
8
9
|
}
|
|
10
|
+
getLeftExplainOptionsWrapper() {
|
|
11
|
+
return '';
|
|
12
|
+
}
|
|
13
|
+
getRightExplainOptionsWrapper() {
|
|
14
|
+
return '';
|
|
15
|
+
}
|
|
9
16
|
getLeftIdentifierWrapper() {
|
|
10
17
|
return '"';
|
|
11
18
|
}
|
|
@@ -15,5 +22,8 @@ class SqliteQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompil
|
|
|
15
22
|
getAutoIncrement() {
|
|
16
23
|
return 'autoincrement';
|
|
17
24
|
}
|
|
25
|
+
sanitizeIdentifier(identifier) {
|
|
26
|
+
return identifier.replace(ID_WRAP_REGEX, '""');
|
|
27
|
+
}
|
|
18
28
|
}
|
|
19
29
|
exports.SqliteQueryCompiler = SqliteQueryCompiler;
|
|
@@ -6,6 +6,7 @@ import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
|
6
6
|
*/
|
|
7
7
|
export interface DatabaseConnection {
|
|
8
8
|
executeQuery<R>(compiledQuery: CompiledQuery): Promise<QueryResult<R>>;
|
|
9
|
+
streamQuery<R>(compiledQuery: CompiledQuery, chunkSize?: number): AsyncIterableIterator<QueryResult<R>>;
|
|
9
10
|
}
|
|
10
11
|
export interface QueryResult<O> {
|
|
11
12
|
/**
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -25,7 +25,9 @@ export * from './query-compiler/default-query-compiler.js';
|
|
|
25
25
|
export * from './query-compiler/compiled-query.js';
|
|
26
26
|
export * from './schema/schema.js';
|
|
27
27
|
export * from './schema/create-table-builder.js';
|
|
28
|
+
export * from './schema/create-type-builder.js';
|
|
28
29
|
export * from './schema/drop-table-builder.js';
|
|
30
|
+
export * from './schema/drop-type-builder.js';
|
|
29
31
|
export * from './schema/create-index-builder.js';
|
|
30
32
|
export * from './schema/drop-index-builder.js';
|
|
31
33
|
export * from './schema/create-schema-builder.js';
|
|
@@ -87,6 +89,7 @@ export * from './operation-node/constraint-node.js';
|
|
|
87
89
|
export * from './operation-node/create-index-node.js';
|
|
88
90
|
export * from './operation-node/create-schema-node.js';
|
|
89
91
|
export * from './operation-node/create-table-node.js';
|
|
92
|
+
export * from './operation-node/create-type-node.js';
|
|
90
93
|
export * from './operation-node/create-view-node.js';
|
|
91
94
|
export * from './operation-node/data-type-node.js';
|
|
92
95
|
export * from './operation-node/default-value-node.js';
|
|
@@ -96,6 +99,7 @@ export * from './operation-node/drop-constraint-node.js';
|
|
|
96
99
|
export * from './operation-node/drop-index-node.js';
|
|
97
100
|
export * from './operation-node/drop-schema-node.js';
|
|
98
101
|
export * from './operation-node/drop-table-node.js';
|
|
102
|
+
export * from './operation-node/drop-type-node.js';
|
|
99
103
|
export * from './operation-node/drop-view-node.js';
|
|
100
104
|
export * from './operation-node/filter-node.js';
|
|
101
105
|
export * from './operation-node/foreign-key-constraint-node.js';
|
|
@@ -145,8 +149,10 @@ export * from './operation-node/value-node.js';
|
|
|
145
149
|
export * from './operation-node/values-node.js';
|
|
146
150
|
export * from './operation-node/where-node.js';
|
|
147
151
|
export * from './operation-node/with-node.js';
|
|
152
|
+
export * from './operation-node/explain-node.js';
|
|
148
153
|
export * from './util/column-type.js';
|
|
149
154
|
export * from './util/compilable.js';
|
|
155
|
+
export * from './util/explainable.js';
|
|
150
156
|
export * from './util/log.js';
|
|
151
157
|
export { AnyColumn, UnknownRow, AnySelectQueryBuilder, } from './util/type-utils.js';
|
|
152
158
|
export { SelectExpression, SelectExpressionOrList, Selection, } from './parser/select-parser.js';
|
package/dist/cjs/index.js
CHANGED
|
@@ -41,7 +41,9 @@ __exportStar(require("./query-compiler/default-query-compiler.js"), exports);
|
|
|
41
41
|
__exportStar(require("./query-compiler/compiled-query.js"), exports);
|
|
42
42
|
__exportStar(require("./schema/schema.js"), exports);
|
|
43
43
|
__exportStar(require("./schema/create-table-builder.js"), exports);
|
|
44
|
+
__exportStar(require("./schema/create-type-builder.js"), exports);
|
|
44
45
|
__exportStar(require("./schema/drop-table-builder.js"), exports);
|
|
46
|
+
__exportStar(require("./schema/drop-type-builder.js"), exports);
|
|
45
47
|
__exportStar(require("./schema/create-index-builder.js"), exports);
|
|
46
48
|
__exportStar(require("./schema/drop-index-builder.js"), exports);
|
|
47
49
|
__exportStar(require("./schema/create-schema-builder.js"), exports);
|
|
@@ -103,6 +105,7 @@ __exportStar(require("./operation-node/constraint-node.js"), exports);
|
|
|
103
105
|
__exportStar(require("./operation-node/create-index-node.js"), exports);
|
|
104
106
|
__exportStar(require("./operation-node/create-schema-node.js"), exports);
|
|
105
107
|
__exportStar(require("./operation-node/create-table-node.js"), exports);
|
|
108
|
+
__exportStar(require("./operation-node/create-type-node.js"), exports);
|
|
106
109
|
__exportStar(require("./operation-node/create-view-node.js"), exports);
|
|
107
110
|
__exportStar(require("./operation-node/data-type-node.js"), exports);
|
|
108
111
|
__exportStar(require("./operation-node/default-value-node.js"), exports);
|
|
@@ -112,6 +115,7 @@ __exportStar(require("./operation-node/drop-constraint-node.js"), exports);
|
|
|
112
115
|
__exportStar(require("./operation-node/drop-index-node.js"), exports);
|
|
113
116
|
__exportStar(require("./operation-node/drop-schema-node.js"), exports);
|
|
114
117
|
__exportStar(require("./operation-node/drop-table-node.js"), exports);
|
|
118
|
+
__exportStar(require("./operation-node/drop-type-node.js"), exports);
|
|
115
119
|
__exportStar(require("./operation-node/drop-view-node.js"), exports);
|
|
116
120
|
__exportStar(require("./operation-node/filter-node.js"), exports);
|
|
117
121
|
__exportStar(require("./operation-node/foreign-key-constraint-node.js"), exports);
|
|
@@ -161,6 +165,8 @@ __exportStar(require("./operation-node/value-node.js"), exports);
|
|
|
161
165
|
__exportStar(require("./operation-node/values-node.js"), exports);
|
|
162
166
|
__exportStar(require("./operation-node/where-node.js"), exports);
|
|
163
167
|
__exportStar(require("./operation-node/with-node.js"), exports);
|
|
168
|
+
__exportStar(require("./operation-node/explain-node.js"), exports);
|
|
164
169
|
__exportStar(require("./util/column-type.js"), exports);
|
|
165
170
|
__exportStar(require("./util/compilable.js"), exports);
|
|
171
|
+
__exportStar(require("./util/explainable.js"), exports);
|
|
166
172
|
__exportStar(require("./util/log.js"), exports);
|
|
@@ -2,8 +2,11 @@ import { OperationNode } from './operation-node.js';
|
|
|
2
2
|
import { TableNode } from './table-node.js';
|
|
3
3
|
import { ConstraintNode } from './constraint-node.js';
|
|
4
4
|
import { ColumnDefinitionNode } from './column-definition-node.js';
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { ArrayItemType } from '../util/type-utils.js';
|
|
6
|
+
import { RawNode } from './raw-node.js';
|
|
7
|
+
export declare const ON_COMMIT_ACTIONS: string[];
|
|
8
|
+
export declare type OnCommitAction = ArrayItemType<typeof ON_COMMIT_ACTIONS>;
|
|
9
|
+
export declare type CreateTableNodeParams = Omit<CreateTableNode, 'kind' | 'table' | 'columns' | 'constraints' | 'frontModifiers' | 'endModifiers'>;
|
|
7
10
|
export interface CreateTableNode extends OperationNode {
|
|
8
11
|
readonly kind: 'CreateTableNode';
|
|
9
12
|
readonly table: TableNode;
|
|
@@ -12,6 +15,8 @@ export interface CreateTableNode extends OperationNode {
|
|
|
12
15
|
readonly temporary?: boolean;
|
|
13
16
|
readonly ifNotExists?: boolean;
|
|
14
17
|
readonly onCommit?: OnCommitAction;
|
|
18
|
+
readonly frontModifiers?: ReadonlyArray<RawNode>;
|
|
19
|
+
readonly endModifiers?: ReadonlyArray<RawNode>;
|
|
15
20
|
}
|
|
16
21
|
/**
|
|
17
22
|
* @internal
|
|
@@ -21,5 +26,7 @@ export declare const CreateTableNode: Readonly<{
|
|
|
21
26
|
create(table: TableNode): CreateTableNode;
|
|
22
27
|
cloneWithColumn(createTable: CreateTableNode, column: ColumnDefinitionNode): CreateTableNode;
|
|
23
28
|
cloneWithConstraint(createTable: CreateTableNode, constraint: ConstraintNode): CreateTableNode;
|
|
29
|
+
cloneWithFrontModifier(createTable: CreateTableNode, modifier: RawNode): CreateTableNode;
|
|
30
|
+
cloneWithEndModifier(createTable: CreateTableNode, modifier: RawNode): CreateTableNode;
|
|
24
31
|
cloneWith(createTable: CreateTableNode, params: CreateTableNodeParams): CreateTableNode;
|
|
25
32
|
}>;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CreateTableNode = void 0;
|
|
3
|
+
exports.CreateTableNode = exports.ON_COMMIT_ACTIONS = void 0;
|
|
4
4
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
5
|
+
exports.ON_COMMIT_ACTIONS = ['preserve rows', 'delete rows', 'drop'];
|
|
5
6
|
/**
|
|
6
7
|
* @internal
|
|
7
8
|
*/
|
|
@@ -30,6 +31,22 @@ exports.CreateTableNode = (0, object_utils_js_1.freeze)({
|
|
|
30
31
|
: (0, object_utils_js_1.freeze)([constraint]),
|
|
31
32
|
});
|
|
32
33
|
},
|
|
34
|
+
cloneWithFrontModifier(createTable, modifier) {
|
|
35
|
+
return (0, object_utils_js_1.freeze)({
|
|
36
|
+
...createTable,
|
|
37
|
+
frontModifiers: createTable.frontModifiers
|
|
38
|
+
? (0, object_utils_js_1.freeze)([...createTable.frontModifiers, modifier])
|
|
39
|
+
: (0, object_utils_js_1.freeze)([modifier]),
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
cloneWithEndModifier(createTable, modifier) {
|
|
43
|
+
return (0, object_utils_js_1.freeze)({
|
|
44
|
+
...createTable,
|
|
45
|
+
endModifiers: createTable.endModifiers
|
|
46
|
+
? (0, object_utils_js_1.freeze)([...createTable.endModifiers, modifier])
|
|
47
|
+
: (0, object_utils_js_1.freeze)([modifier]),
|
|
48
|
+
});
|
|
49
|
+
},
|
|
33
50
|
cloneWith(createTable, params) {
|
|
34
51
|
return (0, object_utils_js_1.freeze)({
|
|
35
52
|
...createTable,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { OperationNode } from './operation-node.js';
|
|
2
|
-
export declare type ColumnDataType = 'varchar' | `varchar(${number})` | 'text' | 'integer' | 'int2' | 'int4' | 'int8' | 'bigint' | 'boolean' | 'real' | 'double precision' | 'float4' | 'float8' | 'decimal' | `decimal(${number}, ${number})` | 'numeric' | `numeric(${number}, ${number})` | 'binary' | 'date' | 'datetime' | 'time' | 'timetz' | 'timestamp' | 'timestamptz' | 'serial' | 'bigserial' | 'uuid' | 'json' | 'jsonb' | 'blob';
|
|
2
|
+
export declare type ColumnDataType = 'varchar' | `varchar(${number})` | 'text' | 'integer' | 'int2' | 'int4' | 'int8' | 'bigint' | 'boolean' | 'real' | 'double precision' | 'float4' | 'float8' | 'decimal' | `decimal(${number}, ${number})` | 'numeric' | `numeric(${number}, ${number})` | 'binary' | 'date' | 'datetime' | `datetime(${number})` | 'time' | `time(${number})` | 'timetz' | `timetz(${number})` | 'timestamp' | `timestamp(${number})` | 'timestamptz' | `timestamptz(${number})` | 'serial' | 'bigserial' | 'uuid' | 'json' | 'jsonb' | 'blob';
|
|
3
3
|
export declare type DataTypeParams = Omit<DataTypeNode, 'kind' | 'dataType'>;
|
|
4
4
|
export interface DataTypeNode extends OperationNode {
|
|
5
5
|
readonly kind: 'DataTypeNode';
|
|
@@ -8,6 +8,7 @@ import { WithNode } from './with-node.js';
|
|
|
8
8
|
import { LimitNode } from './limit-node.js';
|
|
9
9
|
import { OrderByNode } from './order-by-node.js';
|
|
10
10
|
import { OrderByItemNode } from './order-by-item-node.js';
|
|
11
|
+
import { ExplainNode } from './explain-node.js';
|
|
11
12
|
export interface DeleteQueryNode extends OperationNode {
|
|
12
13
|
readonly kind: 'DeleteQueryNode';
|
|
13
14
|
readonly from: FromNode;
|
|
@@ -17,6 +18,7 @@ export interface DeleteQueryNode extends OperationNode {
|
|
|
17
18
|
readonly with?: WithNode;
|
|
18
19
|
readonly orderBy?: OrderByNode;
|
|
19
20
|
readonly limit?: LimitNode;
|
|
21
|
+
readonly explain?: ExplainNode;
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
22
24
|
* @internal
|
|
@@ -26,4 +28,5 @@ export declare const DeleteQueryNode: Readonly<{
|
|
|
26
28
|
create(fromItem: TableExpressionNode, withNode?: WithNode): DeleteQueryNode;
|
|
27
29
|
cloneWithOrderByItem(deleteNode: DeleteQueryNode, item: OrderByItemNode): DeleteQueryNode;
|
|
28
30
|
cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
|
|
31
|
+
cloneWithExplain(deleteNode: DeleteQueryNode, explain: ExplainNode): DeleteQueryNode;
|
|
29
32
|
}>;
|