kysely 0.19.9 → 0.19.12
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 +56 -7
- 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/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/sqlite/sqlite-driver.js +3 -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 +4 -0
- package/dist/cjs/index.js +4 -0
- package/dist/cjs/operation-node/create-table-node.d.ts +3 -1
- package/dist/cjs/operation-node/create-table-node.js +2 -1
- package/dist/cjs/operation-node/create-type-node.d.ts +17 -0
- package/dist/cjs/operation-node/create-type-node.js +27 -0
- package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/drop-type-node.d.ts +16 -0
- package/dist/cjs/operation-node/drop-type-node.js +25 -0
- package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +2 -2
- package/dist/cjs/operation-node/insert-query-node.d.ts +2 -1
- package/dist/cjs/operation-node/insert-query-node.js +2 -1
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +4 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +17 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +4 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +2 -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/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/plugin/with-schema/with-schema-transformer.d.ts +4 -0
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +6 -0
- package/dist/cjs/query-builder/insert-query-builder.d.ts +1 -1
- package/dist/cjs/query-builder/select-query-builder.d.ts +27 -0
- package/dist/cjs/query-builder/select-query-builder.js +34 -2
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +5 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +35 -2
- package/dist/cjs/query-compiler/query-compiler.d.ts +3 -1
- 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/schema/column-definition-builder.js +3 -2
- package/dist/cjs/schema/create-table-builder.d.ts +6 -6
- package/dist/cjs/schema/create-table-builder.js +8 -7
- package/dist/cjs/schema/create-type-builder.d.ts +28 -0
- package/dist/cjs/schema/create-type-builder.js +38 -0
- package/dist/cjs/schema/drop-type-builder.d.ts +19 -0
- package/dist/cjs/schema/drop-type-builder.js +31 -0
- package/dist/cjs/schema/foreign-key-constraint-builder.js +3 -2
- package/dist/cjs/schema/schema.d.ts +32 -0
- package/dist/cjs/schema/schema.js +46 -0
- package/dist/cjs/util/deferred.d.ts +7 -0
- package/dist/cjs/util/deferred.js +28 -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/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/sqlite/sqlite-driver.js +3 -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 +4 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/operation-node/create-table-node.d.ts +3 -1
- package/dist/esm/operation-node/create-table-node.js +1 -0
- package/dist/esm/operation-node/create-type-node.d.ts +17 -0
- package/dist/esm/operation-node/create-type-node.js +25 -0
- package/dist/esm/operation-node/data-type-node.d.ts +1 -1
- package/dist/esm/operation-node/drop-type-node.d.ts +16 -0
- package/dist/esm/operation-node/drop-type-node.js +23 -0
- package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +2 -2
- package/dist/esm/operation-node/insert-query-node.d.ts +2 -1
- package/dist/esm/operation-node/insert-query-node.js +2 -1
- package/dist/esm/operation-node/operation-node-transformer.d.ts +4 -0
- package/dist/esm/operation-node/operation-node-transformer.js +17 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +4 -0
- package/dist/esm/operation-node/operation-node-visitor.js +2 -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/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/plugin/with-schema/with-schema-transformer.d.ts +4 -0
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +6 -0
- package/dist/esm/query-builder/insert-query-builder.d.ts +1 -1
- package/dist/esm/query-builder/select-query-builder.d.ts +27 -0
- package/dist/esm/query-builder/select-query-builder.js +34 -2
- package/dist/esm/query-compiler/default-query-compiler.d.ts +5 -0
- package/dist/esm/query-compiler/default-query-compiler.js +35 -2
- package/dist/esm/query-compiler/query-compiler.d.ts +3 -1
- 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/schema/column-definition-builder.js +3 -2
- package/dist/esm/schema/create-table-builder.d.ts +6 -6
- package/dist/esm/schema/create-table-builder.js +8 -7
- package/dist/esm/schema/create-type-builder.d.ts +28 -0
- package/dist/esm/schema/create-type-builder.js +35 -0
- package/dist/esm/schema/drop-type-builder.d.ts +19 -0
- package/dist/esm/schema/drop-type-builder.js +28 -0
- package/dist/esm/schema/foreign-key-constraint-builder.js +3 -2
- package/dist/esm/schema/schema.d.ts +32 -0
- package/dist/esm/schema/schema.js +46 -0
- package/dist/esm/util/deferred.d.ts +7 -0
- package/dist/esm/util/deferred.js +25 -0
- package/package.json +5 -2
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DropTypeBuilder = void 0;
|
|
4
|
+
const drop_type_node_js_1 = require("../operation-node/drop-type-node.js");
|
|
5
|
+
const prevent_await_js_1 = require("../util/prevent-await.js");
|
|
6
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
7
|
+
class DropTypeBuilder {
|
|
8
|
+
#props;
|
|
9
|
+
constructor(props) {
|
|
10
|
+
this.#props = (0, object_utils_js_1.freeze)(props);
|
|
11
|
+
}
|
|
12
|
+
ifExists() {
|
|
13
|
+
return new DropTypeBuilder({
|
|
14
|
+
...this.#props,
|
|
15
|
+
dropTypeNode: drop_type_node_js_1.DropTypeNode.cloneWith(this.#props.dropTypeNode, {
|
|
16
|
+
ifExists: true,
|
|
17
|
+
}),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
toOperationNode() {
|
|
21
|
+
return this.#props.executor.transformQuery(this.#props.dropTypeNode, this.#props.queryId);
|
|
22
|
+
}
|
|
23
|
+
compile() {
|
|
24
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
25
|
+
}
|
|
26
|
+
async execute() {
|
|
27
|
+
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.DropTypeBuilder = DropTypeBuilder;
|
|
31
|
+
(0, prevent_await_js_1.preventAwait)(DropTypeBuilder, "don't await DropTypeBuilder instances directly. To execute the query you need to call `execute`");
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ForeignKeyConstraintBuilder = void 0;
|
|
4
4
|
const foreign_key_constraint_node_js_1 = require("../operation-node/foreign-key-constraint-node.js");
|
|
5
|
+
const on_modify_action_parser_js_1 = require("../parser/on-modify-action-parser.js");
|
|
5
6
|
const prevent_await_js_1 = require("../util/prevent-await.js");
|
|
6
7
|
class ForeignKeyConstraintBuilder {
|
|
7
8
|
#node;
|
|
@@ -10,12 +11,12 @@ class ForeignKeyConstraintBuilder {
|
|
|
10
11
|
}
|
|
11
12
|
onDelete(onDelete) {
|
|
12
13
|
return new ForeignKeyConstraintBuilder(foreign_key_constraint_node_js_1.ForeignKeyConstraintNode.cloneWith(this.#node, {
|
|
13
|
-
onDelete,
|
|
14
|
+
onDelete: (0, on_modify_action_parser_js_1.parseOnModifyForeignAction)(onDelete),
|
|
14
15
|
}));
|
|
15
16
|
}
|
|
16
17
|
onUpdate(onUpdate) {
|
|
17
18
|
return new ForeignKeyConstraintBuilder(foreign_key_constraint_node_js_1.ForeignKeyConstraintNode.cloneWith(this.#node, {
|
|
18
|
-
onUpdate,
|
|
19
|
+
onUpdate: (0, on_modify_action_parser_js_1.parseOnModifyForeignAction)(onUpdate),
|
|
19
20
|
}));
|
|
20
21
|
}
|
|
21
22
|
toOperationNode() {
|
|
@@ -9,6 +9,8 @@ import { DropTableBuilder } from './drop-table-builder.js';
|
|
|
9
9
|
import { CreateViewBuilder } from './create-view-builder.js';
|
|
10
10
|
import { DropViewBuilder } from './drop-view-builder.js';
|
|
11
11
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
12
|
+
import { CreateTypeBuilder } from './create-type-builder.js';
|
|
13
|
+
import { DropTypeBuilder } from './drop-type-builder.js';
|
|
12
14
|
/**
|
|
13
15
|
* Provides methods for building database schema.
|
|
14
16
|
*/
|
|
@@ -170,6 +172,36 @@ export declare class SchemaModule {
|
|
|
170
172
|
* ```
|
|
171
173
|
*/
|
|
172
174
|
dropView(viewName: string): DropViewBuilder;
|
|
175
|
+
/**
|
|
176
|
+
* Create a new type.
|
|
177
|
+
*
|
|
178
|
+
* Only some dialects like PostgreSQL have user-defined types.
|
|
179
|
+
*
|
|
180
|
+
* ### Examples
|
|
181
|
+
*
|
|
182
|
+
* ```ts
|
|
183
|
+
* await db.schema
|
|
184
|
+
* .createType('species')
|
|
185
|
+
* .asEnum(['dog', 'cat', 'frog'])
|
|
186
|
+
* .execute()
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
createType(viewName: string): CreateTypeBuilder;
|
|
190
|
+
/**
|
|
191
|
+
* Drop a type.
|
|
192
|
+
*
|
|
193
|
+
* Only some dialects like PostgreSQL have user-defined types.
|
|
194
|
+
*
|
|
195
|
+
* ### Examples
|
|
196
|
+
*
|
|
197
|
+
* ```ts
|
|
198
|
+
* await db.schema
|
|
199
|
+
* .dropType('species')
|
|
200
|
+
* .ifExists()
|
|
201
|
+
* .execute()
|
|
202
|
+
* ```
|
|
203
|
+
*/
|
|
204
|
+
dropType(viewName: string): DropTypeBuilder;
|
|
173
205
|
/**
|
|
174
206
|
* Returns a copy of this schema module with the given plugin installed.
|
|
175
207
|
*/
|
|
@@ -22,6 +22,10 @@ const create_view_builder_js_1 = require("./create-view-builder.js");
|
|
|
22
22
|
const create_view_node_js_1 = require("../operation-node/create-view-node.js");
|
|
23
23
|
const drop_view_builder_js_1 = require("./drop-view-builder.js");
|
|
24
24
|
const drop_view_node_js_1 = require("../operation-node/drop-view-node.js");
|
|
25
|
+
const create_type_builder_js_1 = require("./create-type-builder.js");
|
|
26
|
+
const drop_type_builder_js_1 = require("./drop-type-builder.js");
|
|
27
|
+
const create_type_node_js_1 = require("../operation-node/create-type-node.js");
|
|
28
|
+
const drop_type_node_js_1 = require("../operation-node/drop-type-node.js");
|
|
25
29
|
/**
|
|
26
30
|
* Provides methods for building database schema.
|
|
27
31
|
*/
|
|
@@ -239,6 +243,48 @@ class SchemaModule {
|
|
|
239
243
|
dropViewNode: drop_view_node_js_1.DropViewNode.create(viewName),
|
|
240
244
|
});
|
|
241
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Create a new type.
|
|
248
|
+
*
|
|
249
|
+
* Only some dialects like PostgreSQL have user-defined types.
|
|
250
|
+
*
|
|
251
|
+
* ### Examples
|
|
252
|
+
*
|
|
253
|
+
* ```ts
|
|
254
|
+
* await db.schema
|
|
255
|
+
* .createType('species')
|
|
256
|
+
* .asEnum(['dog', 'cat', 'frog'])
|
|
257
|
+
* .execute()
|
|
258
|
+
* ```
|
|
259
|
+
*/
|
|
260
|
+
createType(viewName) {
|
|
261
|
+
return new create_type_builder_js_1.CreateTypeBuilder({
|
|
262
|
+
queryId: (0, query_id_js_1.createQueryId)(),
|
|
263
|
+
executor: this.#executor,
|
|
264
|
+
createTypeNode: create_type_node_js_1.CreateTypeNode.create(viewName),
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Drop a type.
|
|
269
|
+
*
|
|
270
|
+
* Only some dialects like PostgreSQL have user-defined types.
|
|
271
|
+
*
|
|
272
|
+
* ### Examples
|
|
273
|
+
*
|
|
274
|
+
* ```ts
|
|
275
|
+
* await db.schema
|
|
276
|
+
* .dropType('species')
|
|
277
|
+
* .ifExists()
|
|
278
|
+
* .execute()
|
|
279
|
+
* ```
|
|
280
|
+
*/
|
|
281
|
+
dropType(viewName) {
|
|
282
|
+
return new drop_type_builder_js_1.DropTypeBuilder({
|
|
283
|
+
queryId: (0, query_id_js_1.createQueryId)(),
|
|
284
|
+
executor: this.#executor,
|
|
285
|
+
dropTypeNode: drop_type_node_js_1.DropTypeNode.create(viewName),
|
|
286
|
+
});
|
|
287
|
+
}
|
|
242
288
|
/**
|
|
243
289
|
* Returns a copy of this schema module with the given plugin installed.
|
|
244
290
|
*/
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Deferred = void 0;
|
|
4
|
+
class Deferred {
|
|
5
|
+
#promise;
|
|
6
|
+
#resolve;
|
|
7
|
+
#reject;
|
|
8
|
+
constructor() {
|
|
9
|
+
this.#promise = new Promise((resolve, reject) => {
|
|
10
|
+
this.#reject = reject;
|
|
11
|
+
this.#resolve = resolve;
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
get promise() {
|
|
15
|
+
return this.#promise;
|
|
16
|
+
}
|
|
17
|
+
resolve = (value) => {
|
|
18
|
+
if (this.#resolve) {
|
|
19
|
+
this.#resolve(value);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
reject = (reason) => {
|
|
23
|
+
if (this.#reject) {
|
|
24
|
+
this.#reject(reason);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
exports.Deferred = Deferred;
|
|
@@ -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 {};
|
|
@@ -121,6 +121,31 @@ class MysqlConnection {
|
|
|
121
121
|
});
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
|
+
async *streamQuery(compiledQuery, chunkSize) {
|
|
125
|
+
const stream = this.#rawConnection
|
|
126
|
+
.query(compiledQuery.sql, compiledQuery.parameters)
|
|
127
|
+
.stream({
|
|
128
|
+
objectMode: true,
|
|
129
|
+
});
|
|
130
|
+
try {
|
|
131
|
+
for await (const row of stream) {
|
|
132
|
+
yield {
|
|
133
|
+
rows: [row],
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (ex) {
|
|
138
|
+
if (ex &&
|
|
139
|
+
typeof ex === 'object' &&
|
|
140
|
+
'code' in ex &&
|
|
141
|
+
// @ts-ignore
|
|
142
|
+
ex.code === 'ERR_STREAM_PREMATURE_CLOSE') {
|
|
143
|
+
// Most likely because of https://github.com/mysqljs/mysql/blob/master/lib/protocol/sequences/Query.js#L220
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
throw ex;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
124
149
|
[PRIVATE_RELEASE_METHOD]() {
|
|
125
150
|
this.#rawConnection.release();
|
|
126
151
|
}
|
|
@@ -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 {};
|
|
@@ -19,7 +19,9 @@ export class PostgresDriver {
|
|
|
19
19
|
const client = await this.#pool.connect();
|
|
20
20
|
let connection = this.#connections.get(client);
|
|
21
21
|
if (!connection) {
|
|
22
|
-
connection = new PostgresConnection(client
|
|
22
|
+
connection = new PostgresConnection(client, {
|
|
23
|
+
cursor: this.#config.cursor ?? null,
|
|
24
|
+
});
|
|
23
25
|
this.#connections.set(client, connection);
|
|
24
26
|
// The driver must take care of calling `onCreateConnection` when a new
|
|
25
27
|
// connection is created. The `pg` module doesn't provide an async hook
|
|
@@ -57,8 +59,10 @@ export class PostgresDriver {
|
|
|
57
59
|
}
|
|
58
60
|
class PostgresConnection {
|
|
59
61
|
#client;
|
|
60
|
-
|
|
62
|
+
#options;
|
|
63
|
+
constructor(client, options) {
|
|
61
64
|
this.#client = client;
|
|
65
|
+
this.#options = options;
|
|
62
66
|
}
|
|
63
67
|
async executeQuery(compiledQuery) {
|
|
64
68
|
try {
|
|
@@ -79,6 +83,24 @@ class PostgresConnection {
|
|
|
79
83
|
throw extendStackTrace(err, new Error());
|
|
80
84
|
}
|
|
81
85
|
}
|
|
86
|
+
async *streamQuery(compiledQuery, chunkSize) {
|
|
87
|
+
if (!this.#options.cursor) {
|
|
88
|
+
throw new Error("'cursor' is not present in your postgres dialect config. It's required to make streaming work in postgres.");
|
|
89
|
+
}
|
|
90
|
+
const cursor = this.#client.query(new this.#options.cursor(compiledQuery.sql, compiledQuery.parameters));
|
|
91
|
+
while (true) {
|
|
92
|
+
if (cursor.state === 'done') {
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
if (cursor.state === 'error') {
|
|
96
|
+
throw cursor._error;
|
|
97
|
+
}
|
|
98
|
+
const rows = await cursor.read(chunkSize);
|
|
99
|
+
yield {
|
|
100
|
+
rows,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
82
104
|
[PRIVATE_RELEASE_METHOD]() {
|
|
83
105
|
this.#client.release();
|
|
84
106
|
}
|
|
@@ -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/esm/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';
|
package/dist/esm/index.js
CHANGED
|
@@ -26,7 +26,9 @@ export * from './query-compiler/default-query-compiler.js';
|
|
|
26
26
|
export * from './query-compiler/compiled-query.js';
|
|
27
27
|
export * from './schema/schema.js';
|
|
28
28
|
export * from './schema/create-table-builder.js';
|
|
29
|
+
export * from './schema/create-type-builder.js';
|
|
29
30
|
export * from './schema/drop-table-builder.js';
|
|
31
|
+
export * from './schema/drop-type-builder.js';
|
|
30
32
|
export * from './schema/create-index-builder.js';
|
|
31
33
|
export * from './schema/drop-index-builder.js';
|
|
32
34
|
export * from './schema/create-schema-builder.js';
|
|
@@ -88,6 +90,7 @@ export * from './operation-node/constraint-node.js';
|
|
|
88
90
|
export * from './operation-node/create-index-node.js';
|
|
89
91
|
export * from './operation-node/create-schema-node.js';
|
|
90
92
|
export * from './operation-node/create-table-node.js';
|
|
93
|
+
export * from './operation-node/create-type-node.js';
|
|
91
94
|
export * from './operation-node/create-view-node.js';
|
|
92
95
|
export * from './operation-node/data-type-node.js';
|
|
93
96
|
export * from './operation-node/default-value-node.js';
|
|
@@ -97,6 +100,7 @@ export * from './operation-node/drop-constraint-node.js';
|
|
|
97
100
|
export * from './operation-node/drop-index-node.js';
|
|
98
101
|
export * from './operation-node/drop-schema-node.js';
|
|
99
102
|
export * from './operation-node/drop-table-node.js';
|
|
103
|
+
export * from './operation-node/drop-type-node.js';
|
|
100
104
|
export * from './operation-node/drop-view-node.js';
|
|
101
105
|
export * from './operation-node/filter-node.js';
|
|
102
106
|
export * from './operation-node/foreign-key-constraint-node.js';
|
|
@@ -2,7 +2,9 @@ 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
|
-
|
|
5
|
+
import { ArrayItemType } from '../util/type-utils.js';
|
|
6
|
+
export declare const ON_COMMIT_ACTIONS: string[];
|
|
7
|
+
export declare type OnCommitAction = ArrayItemType<typeof ON_COMMIT_ACTIONS>;
|
|
6
8
|
export declare type CreateTableNodeParams = Omit<CreateTableNode, 'kind' | 'table' | 'columns' | 'constraints'>;
|
|
7
9
|
export interface CreateTableNode extends OperationNode {
|
|
8
10
|
readonly kind: 'CreateTableNode';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
import { ValueListNode } from './value-list-node.js';
|
|
4
|
+
export declare type CreateTypeNodeParams = Omit<Partial<CreateTypeNode>, 'kind'>;
|
|
5
|
+
export interface CreateTypeNode extends OperationNode {
|
|
6
|
+
readonly kind: 'CreateTypeNode';
|
|
7
|
+
readonly name: IdentifierNode;
|
|
8
|
+
readonly enum?: ValueListNode;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare const CreateTypeNode: Readonly<{
|
|
14
|
+
is(node: OperationNode): node is CreateTypeNode;
|
|
15
|
+
create(name: string): CreateTypeNode;
|
|
16
|
+
cloneWithEnum(createType: CreateTypeNode, values: string[]): CreateTypeNode;
|
|
17
|
+
}>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/// <reference types="./create-type-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
4
|
+
import { ValueListNode } from './value-list-node.js';
|
|
5
|
+
import { ValueNode } from './value-node.js';
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export const CreateTypeNode = freeze({
|
|
10
|
+
is(node) {
|
|
11
|
+
return node.kind === 'CreateTypeNode';
|
|
12
|
+
},
|
|
13
|
+
create(name) {
|
|
14
|
+
return freeze({
|
|
15
|
+
kind: 'CreateTypeNode',
|
|
16
|
+
name: IdentifierNode.create(name),
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
cloneWithEnum(createType, values) {
|
|
20
|
+
return freeze({
|
|
21
|
+
...createType,
|
|
22
|
+
enum: ValueListNode.create(values.map((value) => ValueNode.createImmediate(value))),
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
});
|
|
@@ -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';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
export declare type DropTypeNodeParams = Omit<Partial<DropTypeNode>, 'kind' | 'name'>;
|
|
4
|
+
export interface DropTypeNode extends OperationNode {
|
|
5
|
+
readonly kind: 'DropTypeNode';
|
|
6
|
+
readonly name: IdentifierNode;
|
|
7
|
+
readonly ifExists?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export declare const DropTypeNode: Readonly<{
|
|
13
|
+
is(node: OperationNode): node is DropTypeNode;
|
|
14
|
+
create(name: string): DropTypeNode;
|
|
15
|
+
cloneWith(dropType: DropTypeNode, params: DropTypeNodeParams): DropTypeNode;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/// <reference types="./drop-type-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export const DropTypeNode = freeze({
|
|
8
|
+
is(node) {
|
|
9
|
+
return node.kind === 'DropTypeNode';
|
|
10
|
+
},
|
|
11
|
+
create(name) {
|
|
12
|
+
return freeze({
|
|
13
|
+
kind: 'DropTypeNode',
|
|
14
|
+
name: IdentifierNode.create(name),
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
cloneWith(dropType, params) {
|
|
18
|
+
return freeze({
|
|
19
|
+
...dropType,
|
|
20
|
+
...params,
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
});
|
|
@@ -20,8 +20,8 @@ export declare const ForeignKeyConstraintNode: Readonly<{
|
|
|
20
20
|
create(sourceColumns: ReadonlyArray<ColumnNode>, targetTable: TableNode, targetColumns: ReadonlyArray<ColumnNode>, constraintName?: string): ForeignKeyConstraintNode;
|
|
21
21
|
cloneWith(node: ForeignKeyConstraintNode, props: ForeignKeyConstraintNodeProps): Readonly<{
|
|
22
22
|
name?: IdentifierNode | undefined;
|
|
23
|
-
onDelete?:
|
|
24
|
-
onUpdate?:
|
|
23
|
+
onDelete?: "no action" | "restrict" | "cascade" | "set null" | "set default" | undefined;
|
|
24
|
+
onUpdate?: "no action" | "restrict" | "cascade" | "set null" | "set default" | undefined;
|
|
25
25
|
kind: 'ForeignKeyConstraintNode';
|
|
26
26
|
columns: ReadonlyArray<ColumnNode>;
|
|
27
27
|
references: ReferencesNode;
|
|
@@ -19,12 +19,13 @@ export interface InsertQueryNode extends OperationNode {
|
|
|
19
19
|
readonly onDuplicateKey?: OnDuplicateKeyNode;
|
|
20
20
|
readonly with?: WithNode;
|
|
21
21
|
readonly ignore?: boolean;
|
|
22
|
+
readonly replace?: boolean;
|
|
22
23
|
}
|
|
23
24
|
/**
|
|
24
25
|
* @internal
|
|
25
26
|
*/
|
|
26
27
|
export declare const InsertQueryNode: Readonly<{
|
|
27
28
|
is(node: OperationNode): node is InsertQueryNode;
|
|
28
|
-
create(into: TableNode, withNode?: WithNode): InsertQueryNode;
|
|
29
|
+
create(into: TableNode, withNode?: WithNode, replace?: boolean): InsertQueryNode;
|
|
29
30
|
cloneWith(insertQuery: InsertQueryNode, props: InsertQueryNodeProps): InsertQueryNode;
|
|
30
31
|
}>;
|
|
@@ -7,11 +7,12 @@ export const InsertQueryNode = freeze({
|
|
|
7
7
|
is(node) {
|
|
8
8
|
return node.kind === 'InsertQueryNode';
|
|
9
9
|
},
|
|
10
|
-
create(into, withNode) {
|
|
10
|
+
create(into, withNode, replace) {
|
|
11
11
|
return freeze({
|
|
12
12
|
kind: 'InsertQueryNode',
|
|
13
13
|
into,
|
|
14
14
|
...(withNode && { with: withNode }),
|
|
15
|
+
replace,
|
|
15
16
|
});
|
|
16
17
|
},
|
|
17
18
|
cloneWith(insertQuery, props) {
|
|
@@ -66,6 +66,8 @@ import { DefaultValueNode } from './default-value-node.js';
|
|
|
66
66
|
import { OnNode } from './on-node.js';
|
|
67
67
|
import { ValuesNode } from './values-node.js';
|
|
68
68
|
import { SelectModifierNode } from './select-modifier-node.js';
|
|
69
|
+
import { CreateTypeNode } from './create-type-node.js';
|
|
70
|
+
import { DropTypeNode } from './drop-type-node.js';
|
|
69
71
|
/**
|
|
70
72
|
* Transforms an operation node tree into another one.
|
|
71
73
|
*
|
|
@@ -162,6 +164,8 @@ export declare class OperationNodeTransformer {
|
|
|
162
164
|
protected transformDefaultValue(node: DefaultValueNode): DefaultValueNode;
|
|
163
165
|
protected transformOn(node: OnNode): OnNode;
|
|
164
166
|
protected transformSelectModifier(node: SelectModifierNode): SelectModifierNode;
|
|
167
|
+
protected transformCreateType(node: CreateTypeNode): CreateTypeNode;
|
|
168
|
+
protected transformDropType(node: DropTypeNode): DropTypeNode;
|
|
165
169
|
protected transformDataType(node: DataTypeNode): DataTypeNode;
|
|
166
170
|
protected transformSelectAll(node: SelectAllNode): SelectAllNode;
|
|
167
171
|
protected transformIdentifier(node: IdentifierNode): IdentifierNode;
|