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.
Files changed (116) hide show
  1. package/README.md +56 -7
  2. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +10 -0
  3. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +1 -0
  4. package/dist/cjs/dialect/mysql/mysql-driver.js +25 -0
  5. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +29 -0
  6. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +6 -2
  7. package/dist/cjs/dialect/postgres/postgres-driver.js +24 -2
  8. package/dist/cjs/dialect/sqlite/sqlite-driver.js +3 -0
  9. package/dist/cjs/driver/database-connection.d.ts +1 -0
  10. package/dist/cjs/driver/dummy-driver.js +3 -0
  11. package/dist/cjs/index.d.ts +4 -0
  12. package/dist/cjs/index.js +4 -0
  13. package/dist/cjs/operation-node/create-table-node.d.ts +3 -1
  14. package/dist/cjs/operation-node/create-table-node.js +2 -1
  15. package/dist/cjs/operation-node/create-type-node.d.ts +17 -0
  16. package/dist/cjs/operation-node/create-type-node.js +27 -0
  17. package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
  18. package/dist/cjs/operation-node/drop-type-node.d.ts +16 -0
  19. package/dist/cjs/operation-node/drop-type-node.js +25 -0
  20. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +2 -2
  21. package/dist/cjs/operation-node/insert-query-node.d.ts +2 -1
  22. package/dist/cjs/operation-node/insert-query-node.js +2 -1
  23. package/dist/cjs/operation-node/operation-node-transformer.d.ts +4 -0
  24. package/dist/cjs/operation-node/operation-node-transformer.js +17 -0
  25. package/dist/cjs/operation-node/operation-node-visitor.d.ts +4 -0
  26. package/dist/cjs/operation-node/operation-node-visitor.js +2 -0
  27. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  28. package/dist/cjs/operation-node/references-node.d.ts +3 -1
  29. package/dist/cjs/operation-node/references-node.js +8 -1
  30. package/dist/cjs/parser/on-commit-action-parse.d.ts +2 -0
  31. package/dist/cjs/parser/on-commit-action-parse.js +11 -0
  32. package/dist/cjs/parser/on-modify-action-parser.d.ts +2 -0
  33. package/dist/cjs/parser/on-modify-action-parser.js +11 -0
  34. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +4 -0
  35. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +6 -0
  36. package/dist/cjs/query-builder/insert-query-builder.d.ts +1 -1
  37. package/dist/cjs/query-builder/select-query-builder.d.ts +27 -0
  38. package/dist/cjs/query-builder/select-query-builder.js +34 -2
  39. package/dist/cjs/query-compiler/default-query-compiler.d.ts +5 -0
  40. package/dist/cjs/query-compiler/default-query-compiler.js +35 -2
  41. package/dist/cjs/query-compiler/query-compiler.d.ts +3 -1
  42. package/dist/cjs/query-creator.d.ts +27 -0
  43. package/dist/cjs/query-creator.js +33 -0
  44. package/dist/cjs/query-executor/query-executor-base.d.ts +6 -0
  45. package/dist/cjs/query-executor/query-executor-base.js +19 -0
  46. package/dist/cjs/query-executor/query-executor.d.ts +11 -0
  47. package/dist/cjs/schema/column-definition-builder.js +3 -2
  48. package/dist/cjs/schema/create-table-builder.d.ts +6 -6
  49. package/dist/cjs/schema/create-table-builder.js +8 -7
  50. package/dist/cjs/schema/create-type-builder.d.ts +28 -0
  51. package/dist/cjs/schema/create-type-builder.js +38 -0
  52. package/dist/cjs/schema/drop-type-builder.d.ts +19 -0
  53. package/dist/cjs/schema/drop-type-builder.js +31 -0
  54. package/dist/cjs/schema/foreign-key-constraint-builder.js +3 -2
  55. package/dist/cjs/schema/schema.d.ts +32 -0
  56. package/dist/cjs/schema/schema.js +46 -0
  57. package/dist/cjs/util/deferred.d.ts +7 -0
  58. package/dist/cjs/util/deferred.js +28 -0
  59. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +10 -0
  60. package/dist/esm/dialect/mysql/mysql-driver.d.ts +1 -0
  61. package/dist/esm/dialect/mysql/mysql-driver.js +25 -0
  62. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +29 -0
  63. package/dist/esm/dialect/postgres/postgres-driver.d.ts +6 -2
  64. package/dist/esm/dialect/postgres/postgres-driver.js +24 -2
  65. package/dist/esm/dialect/sqlite/sqlite-driver.js +3 -0
  66. package/dist/esm/driver/database-connection.d.ts +1 -0
  67. package/dist/esm/driver/dummy-driver.js +3 -0
  68. package/dist/esm/index.d.ts +4 -0
  69. package/dist/esm/index.js +4 -0
  70. package/dist/esm/operation-node/create-table-node.d.ts +3 -1
  71. package/dist/esm/operation-node/create-table-node.js +1 -0
  72. package/dist/esm/operation-node/create-type-node.d.ts +17 -0
  73. package/dist/esm/operation-node/create-type-node.js +25 -0
  74. package/dist/esm/operation-node/data-type-node.d.ts +1 -1
  75. package/dist/esm/operation-node/drop-type-node.d.ts +16 -0
  76. package/dist/esm/operation-node/drop-type-node.js +23 -0
  77. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +2 -2
  78. package/dist/esm/operation-node/insert-query-node.d.ts +2 -1
  79. package/dist/esm/operation-node/insert-query-node.js +2 -1
  80. package/dist/esm/operation-node/operation-node-transformer.d.ts +4 -0
  81. package/dist/esm/operation-node/operation-node-transformer.js +17 -0
  82. package/dist/esm/operation-node/operation-node-visitor.d.ts +4 -0
  83. package/dist/esm/operation-node/operation-node-visitor.js +2 -0
  84. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  85. package/dist/esm/operation-node/references-node.d.ts +3 -1
  86. package/dist/esm/operation-node/references-node.js +7 -0
  87. package/dist/esm/parser/on-commit-action-parse.d.ts +2 -0
  88. package/dist/esm/parser/on-commit-action-parse.js +8 -0
  89. package/dist/esm/parser/on-modify-action-parser.d.ts +2 -0
  90. package/dist/esm/parser/on-modify-action-parser.js +8 -0
  91. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +4 -0
  92. package/dist/esm/plugin/with-schema/with-schema-transformer.js +6 -0
  93. package/dist/esm/query-builder/insert-query-builder.d.ts +1 -1
  94. package/dist/esm/query-builder/select-query-builder.d.ts +27 -0
  95. package/dist/esm/query-builder/select-query-builder.js +34 -2
  96. package/dist/esm/query-compiler/default-query-compiler.d.ts +5 -0
  97. package/dist/esm/query-compiler/default-query-compiler.js +35 -2
  98. package/dist/esm/query-compiler/query-compiler.d.ts +3 -1
  99. package/dist/esm/query-creator.d.ts +27 -0
  100. package/dist/esm/query-creator.js +33 -0
  101. package/dist/esm/query-executor/query-executor-base.d.ts +6 -0
  102. package/dist/esm/query-executor/query-executor-base.js +19 -0
  103. package/dist/esm/query-executor/query-executor.d.ts +11 -0
  104. package/dist/esm/schema/column-definition-builder.js +3 -2
  105. package/dist/esm/schema/create-table-builder.d.ts +6 -6
  106. package/dist/esm/schema/create-table-builder.js +8 -7
  107. package/dist/esm/schema/create-type-builder.d.ts +28 -0
  108. package/dist/esm/schema/create-type-builder.js +35 -0
  109. package/dist/esm/schema/drop-type-builder.d.ts +19 -0
  110. package/dist/esm/schema/drop-type-builder.js +28 -0
  111. package/dist/esm/schema/foreign-key-constraint-builder.js +3 -2
  112. package/dist/esm/schema/schema.d.ts +32 -0
  113. package/dist/esm/schema/schema.js +46 -0
  114. package/dist/esm/util/deferred.d.ts +7 -0
  115. package/dist/esm/util/deferred.js +25 -0
  116. 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,7 @@
1
+ export declare class Deferred<T> {
2
+ #private;
3
+ constructor();
4
+ get promise(): Promise<T>;
5
+ resolve: (value: T | PromiseLike<T>) => void;
6
+ reject: (reason?: any) => void;
7
+ }
@@ -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
- constructor(client) {
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
  }
@@ -66,6 +66,9 @@ class SqliteConnection {
66
66
  });
67
67
  }
68
68
  }
69
+ async *streamQuery() {
70
+ throw new Error("Sqlite driver doesn't support streaming");
71
+ }
69
72
  }
70
73
  class ConnectionMutex {
71
74
  #promise;
@@ -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
  /**
@@ -64,4 +64,7 @@ class DummyConnection {
64
64
  rows: [],
65
65
  };
66
66
  }
67
+ async *streamQuery() {
68
+ // Nothing to do here.
69
+ }
67
70
  }
@@ -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
- export declare type OnCommitAction = 'preserve rows' | 'delete rows' | 'drop';
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';
@@ -1,5 +1,6 @@
1
1
  /// <reference types="./create-table-node.d.ts" />
2
2
  import { freeze } from '../util/object-utils.js';
3
+ export const ON_COMMIT_ACTIONS = ['preserve rows', 'delete rows', 'drop'];
3
4
  /**
4
5
  * @internal
5
6
  */
@@ -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?: OnModifyForeignAction | undefined;
24
- onUpdate?: OnModifyForeignAction | undefined;
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;