kysely 0.16.9 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2 -2
  3. package/dist/cjs/dialect/mysql/mysql-adapter.js +3 -4
  4. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -1
  5. package/dist/cjs/dialect/postgres/postgres-adapter.js +3 -2
  6. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +2 -1
  7. package/dist/cjs/driver/connection-provider.d.ts +1 -1
  8. package/dist/cjs/driver/default-connection-provider.d.ts +1 -1
  9. package/dist/cjs/driver/default-connection-provider.js +1 -1
  10. package/dist/cjs/driver/single-connection-provider.d.ts +1 -1
  11. package/dist/cjs/driver/single-connection-provider.js +1 -1
  12. package/dist/cjs/index-nodeless.d.ts +2 -0
  13. package/dist/cjs/index-nodeless.js +2 -0
  14. package/dist/cjs/kysely.d.ts +3 -6
  15. package/dist/cjs/kysely.js +30 -41
  16. package/dist/cjs/migration/migrator.js +4 -4
  17. package/dist/cjs/operation-node/delete-query-node.d.ts +7 -0
  18. package/dist/cjs/operation-node/delete-query-node.js +15 -0
  19. package/dist/cjs/operation-node/operation-node-transformer.js +1 -1
  20. package/dist/cjs/operation-node/raw-node.d.ts +4 -2
  21. package/dist/cjs/operation-node/raw-node.js +8 -2
  22. package/dist/cjs/parser/complex-expression-parser.d.ts +5 -5
  23. package/dist/cjs/parser/complex-expression-parser.js +5 -4
  24. package/dist/cjs/parser/filter-parser.d.ts +9 -9
  25. package/dist/cjs/parser/filter-parser.js +31 -30
  26. package/dist/cjs/parser/group-by-parser.d.ts +1 -2
  27. package/dist/cjs/parser/group-by-parser.js +2 -2
  28. package/dist/cjs/parser/insert-values-parser.d.ts +1 -2
  29. package/dist/cjs/parser/insert-values-parser.js +6 -6
  30. package/dist/cjs/parser/join-parser.d.ts +1 -2
  31. package/dist/cjs/parser/join-parser.js +8 -7
  32. package/dist/cjs/parser/order-by-parser.d.ts +1 -2
  33. package/dist/cjs/parser/order-by-parser.js +4 -4
  34. package/dist/cjs/parser/parse-utils.d.ts +10 -0
  35. package/dist/cjs/parser/parse-utils.js +38 -0
  36. package/dist/cjs/parser/reference-parser.d.ts +2 -3
  37. package/dist/cjs/parser/reference-parser.js +5 -5
  38. package/dist/cjs/parser/select-parser.d.ts +1 -2
  39. package/dist/cjs/parser/select-parser.js +5 -5
  40. package/dist/cjs/parser/table-parser.d.ts +2 -3
  41. package/dist/cjs/parser/table-parser.js +5 -5
  42. package/dist/cjs/parser/update-set-parser.d.ts +1 -2
  43. package/dist/cjs/parser/update-set-parser.js +2 -2
  44. package/dist/cjs/parser/value-parser.d.ts +3 -4
  45. package/dist/cjs/parser/value-parser.js +7 -7
  46. package/dist/cjs/parser/with-parser.d.ts +1 -2
  47. package/dist/cjs/parser/with-parser.js +3 -2
  48. package/dist/cjs/query-builder/delete-query-builder.d.ts +77 -20
  49. package/dist/cjs/query-builder/delete-query-builder.js +81 -14
  50. package/dist/cjs/query-builder/expression-builder.d.ts +4 -13
  51. package/dist/cjs/query-builder/expression-builder.js +12 -21
  52. package/dist/cjs/query-builder/function-builder.d.ts +2 -6
  53. package/dist/cjs/query-builder/function-builder.js +5 -8
  54. package/dist/cjs/query-builder/insert-query-builder.d.ts +11 -9
  55. package/dist/cjs/query-builder/insert-query-builder.js +8 -7
  56. package/dist/cjs/query-builder/join-builder.d.ts +0 -2
  57. package/dist/cjs/query-builder/join-builder.js +8 -8
  58. package/dist/cjs/query-builder/on-conflict-builder.d.ts +24 -20
  59. package/dist/cjs/query-builder/on-conflict-builder.js +17 -17
  60. package/dist/cjs/query-builder/returning-interface.d.ts +2 -2
  61. package/dist/cjs/query-builder/select-query-builder.d.ts +43 -32
  62. package/dist/cjs/query-builder/select-query-builder.js +28 -26
  63. package/dist/cjs/query-builder/update-query-builder.d.ts +29 -25
  64. package/dist/cjs/query-builder/update-query-builder.js +22 -20
  65. package/dist/cjs/query-builder/where-interface.d.ts +20 -16
  66. package/dist/cjs/query-compiler/default-query-compiler.js +16 -7
  67. package/dist/cjs/query-creator.d.ts +24 -138
  68. package/dist/cjs/query-creator.js +19 -145
  69. package/dist/cjs/query-executor/default-query-executor.d.ts +14 -3
  70. package/dist/cjs/query-executor/default-query-executor.js +15 -17
  71. package/dist/cjs/query-executor/noop-query-executor.d.ts +13 -2
  72. package/dist/cjs/query-executor/noop-query-executor.js +9 -2
  73. package/dist/cjs/query-executor/query-executor-provider.d.ts +8 -0
  74. package/dist/cjs/query-executor/query-executor-provider.js +2 -0
  75. package/dist/cjs/query-executor/query-executor.d.ts +14 -6
  76. package/dist/cjs/query-executor/query-executor.js +4 -2
  77. package/dist/cjs/raw-builder/raw-builder.d.ts +42 -11
  78. package/dist/cjs/raw-builder/raw-builder.js +55 -56
  79. package/dist/cjs/raw-builder/sql.d.ts +323 -0
  80. package/dist/cjs/raw-builder/sql.js +153 -0
  81. package/dist/cjs/schema/alter-table-builder.d.ts +20 -8
  82. package/dist/cjs/schema/alter-table-builder.js +3 -3
  83. package/dist/cjs/schema/column-definition-builder.d.ts +20 -8
  84. package/dist/cjs/schema/create-index-builder.d.ts +3 -1
  85. package/dist/cjs/schema/create-index-builder.js +3 -1
  86. package/dist/cjs/schema/create-table-builder.d.ts +6 -2
  87. package/dist/cjs/schema/create-table-builder.js +8 -4
  88. package/dist/cjs/schema/create-view-builder.d.ts +3 -3
  89. package/dist/cjs/schema/create-view-builder.js +3 -3
  90. package/dist/cjs/util/query-id.js +10 -4
  91. package/dist/cjs/util/random-string.js +65 -2
  92. package/dist/esm/dialect/mysql/mysql-adapter.js +3 -4
  93. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -1
  94. package/dist/esm/dialect/postgres/postgres-adapter.js +3 -2
  95. package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -1
  96. package/dist/esm/driver/connection-provider.d.ts +1 -1
  97. package/dist/esm/driver/default-connection-provider.d.ts +1 -1
  98. package/dist/esm/driver/default-connection-provider.js +1 -1
  99. package/dist/esm/driver/single-connection-provider.d.ts +1 -1
  100. package/dist/esm/driver/single-connection-provider.js +1 -1
  101. package/dist/esm/index-nodeless.d.ts +2 -0
  102. package/dist/esm/index-nodeless.js +2 -0
  103. package/dist/esm/kysely.d.ts +3 -6
  104. package/dist/esm/kysely.js +30 -41
  105. package/dist/esm/migration/migrator.js +4 -4
  106. package/dist/esm/operation-node/delete-query-node.d.ts +7 -0
  107. package/dist/esm/operation-node/delete-query-node.js +15 -0
  108. package/dist/esm/operation-node/operation-node-transformer.js +1 -1
  109. package/dist/esm/operation-node/raw-node.d.ts +4 -2
  110. package/dist/esm/operation-node/raw-node.js +8 -2
  111. package/dist/esm/parser/complex-expression-parser.d.ts +5 -5
  112. package/dist/esm/parser/complex-expression-parser.js +5 -4
  113. package/dist/esm/parser/filter-parser.d.ts +9 -9
  114. package/dist/esm/parser/filter-parser.js +31 -30
  115. package/dist/esm/parser/group-by-parser.d.ts +1 -2
  116. package/dist/esm/parser/group-by-parser.js +2 -2
  117. package/dist/esm/parser/insert-values-parser.d.ts +1 -2
  118. package/dist/esm/parser/insert-values-parser.js +6 -6
  119. package/dist/esm/parser/join-parser.d.ts +1 -2
  120. package/dist/esm/parser/join-parser.js +8 -7
  121. package/dist/esm/parser/order-by-parser.d.ts +1 -2
  122. package/dist/esm/parser/order-by-parser.js +4 -4
  123. package/dist/esm/parser/parse-utils.d.ts +10 -0
  124. package/dist/esm/parser/parse-utils.js +32 -0
  125. package/dist/esm/parser/reference-parser.d.ts +2 -3
  126. package/dist/esm/parser/reference-parser.js +5 -5
  127. package/dist/esm/parser/select-parser.d.ts +1 -2
  128. package/dist/esm/parser/select-parser.js +5 -5
  129. package/dist/esm/parser/table-parser.d.ts +2 -3
  130. package/dist/esm/parser/table-parser.js +5 -5
  131. package/dist/esm/parser/update-set-parser.d.ts +1 -2
  132. package/dist/esm/parser/update-set-parser.js +2 -2
  133. package/dist/esm/parser/value-parser.d.ts +3 -4
  134. package/dist/esm/parser/value-parser.js +7 -7
  135. package/dist/esm/parser/with-parser.d.ts +1 -2
  136. package/dist/esm/parser/with-parser.js +3 -2
  137. package/dist/esm/query-builder/delete-query-builder.d.ts +77 -20
  138. package/dist/esm/query-builder/delete-query-builder.js +81 -14
  139. package/dist/esm/query-builder/expression-builder.d.ts +4 -13
  140. package/dist/esm/query-builder/expression-builder.js +12 -21
  141. package/dist/esm/query-builder/function-builder.d.ts +2 -6
  142. package/dist/esm/query-builder/function-builder.js +5 -8
  143. package/dist/esm/query-builder/insert-query-builder.d.ts +11 -9
  144. package/dist/esm/query-builder/insert-query-builder.js +8 -7
  145. package/dist/esm/query-builder/join-builder.d.ts +0 -2
  146. package/dist/esm/query-builder/join-builder.js +8 -8
  147. package/dist/esm/query-builder/on-conflict-builder.d.ts +24 -20
  148. package/dist/esm/query-builder/on-conflict-builder.js +17 -17
  149. package/dist/esm/query-builder/returning-interface.d.ts +2 -2
  150. package/dist/esm/query-builder/select-query-builder.d.ts +43 -32
  151. package/dist/esm/query-builder/select-query-builder.js +28 -26
  152. package/dist/esm/query-builder/update-query-builder.d.ts +29 -25
  153. package/dist/esm/query-builder/update-query-builder.js +22 -20
  154. package/dist/esm/query-builder/where-interface.d.ts +20 -16
  155. package/dist/esm/query-compiler/default-query-compiler.js +16 -7
  156. package/dist/esm/query-creator.d.ts +24 -138
  157. package/dist/esm/query-creator.js +19 -145
  158. package/dist/esm/query-executor/default-query-executor.d.ts +14 -3
  159. package/dist/esm/query-executor/default-query-executor.js +15 -17
  160. package/dist/esm/query-executor/noop-query-executor.d.ts +13 -2
  161. package/dist/esm/query-executor/noop-query-executor.js +8 -1
  162. package/dist/esm/query-executor/query-executor-provider.d.ts +8 -0
  163. package/dist/esm/query-executor/query-executor-provider.js +2 -0
  164. package/dist/esm/query-executor/query-executor.d.ts +14 -6
  165. package/dist/esm/query-executor/query-executor.js +4 -2
  166. package/dist/esm/raw-builder/raw-builder.d.ts +42 -11
  167. package/dist/esm/raw-builder/raw-builder.js +56 -57
  168. package/dist/esm/raw-builder/sql.d.ts +323 -0
  169. package/dist/esm/raw-builder/sql.js +151 -0
  170. package/dist/esm/schema/alter-table-builder.d.ts +20 -8
  171. package/dist/esm/schema/alter-table-builder.js +3 -3
  172. package/dist/esm/schema/column-definition-builder.d.ts +20 -8
  173. package/dist/esm/schema/create-index-builder.d.ts +3 -1
  174. package/dist/esm/schema/create-index-builder.js +3 -1
  175. package/dist/esm/schema/create-table-builder.d.ts +6 -2
  176. package/dist/esm/schema/create-table-builder.js +8 -4
  177. package/dist/esm/schema/create-view-builder.d.ts +3 -3
  178. package/dist/esm/schema/create-view-builder.js +3 -3
  179. package/dist/esm/util/query-id.js +10 -4
  180. package/dist/esm/util/random-string.js +65 -2
  181. package/package.json +13 -13
  182. package/dist/cjs/parser/parse-context.d.ts +0 -55
  183. package/dist/cjs/parser/parse-context.js +0 -50
  184. package/dist/cjs/util/private-symbols.d.ts +0 -5
  185. package/dist/cjs/util/private-symbols.js +0 -8
  186. package/dist/esm/parser/parse-context.d.ts +0 -55
  187. package/dist/esm/parser/parse-context.js +0 -47
  188. package/dist/esm/util/private-symbols.d.ts +0 -5
  189. package/dist/esm/util/private-symbols.js +0 -6
@@ -9,10 +9,8 @@ import { RuntimeDriver } from './driver/runtime-driver.js';
9
9
  import { SingleConnectionProvider } from './driver/single-connection-provider.js';
10
10
  import { TRANSACTION_ISOLATION_LEVELS, } from './driver/driver.js';
11
11
  import { preventAwait } from './util/prevent-await.js';
12
- import { DefaultParseContext } from './parser/parse-context.js';
13
12
  import { FunctionBuilder } from './query-builder/function-builder.js';
14
13
  import { Log } from './util/log.js';
15
- import { PRIVATE_ADAPTER } from './util/private-symbols.js';
16
14
  /**
17
15
  * The main Kysely class.
18
16
  *
@@ -62,7 +60,7 @@ export class Kysely extends QueryCreator {
62
60
  let superProps;
63
61
  let props;
64
62
  if (isKyselyProps(args)) {
65
- superProps = { executor: args.executor, parseContext: args.parseContext };
63
+ superProps = { executor: args.executor };
66
64
  props = { ...args };
67
65
  }
68
66
  else {
@@ -71,17 +69,15 @@ export class Kysely extends QueryCreator {
71
69
  const compiler = dialect.createQueryCompiler();
72
70
  const adapter = dialect.createAdapter();
73
71
  const log = new Log(args.log ?? []);
74
- const parseContext = new DefaultParseContext(adapter);
75
72
  const runtimeDriver = new RuntimeDriver(driver, log);
76
73
  const connectionProvider = new DefaultConnectionProvider(runtimeDriver);
77
- const executor = new DefaultQueryExecutor(compiler, connectionProvider, args.plugins ?? []);
78
- superProps = { executor, parseContext };
74
+ const executor = new DefaultQueryExecutor(compiler, adapter, connectionProvider, args.plugins ?? []);
75
+ superProps = { executor };
79
76
  props = {
80
77
  config: args,
81
78
  executor,
82
79
  dialect,
83
80
  driver: runtimeDriver,
84
- parseContext,
85
81
  };
86
82
  }
87
83
  super(superProps);
@@ -137,7 +133,7 @@ export class Kysely extends QueryCreator {
137
133
  * ```
138
134
  */
139
135
  get fn() {
140
- return new FunctionBuilder({ executor: this.#props.executor });
136
+ return new FunctionBuilder();
141
137
  }
142
138
  /**
143
139
  * Creates a {@link TransactionBuilder} that can be used to run queries inside a transaction.
@@ -283,8 +279,8 @@ export class Kysely extends QueryCreator {
283
279
  * @internal
284
280
  * @private
285
281
  */
286
- get [PRIVATE_ADAPTER]() {
287
- return this.#props.parseContext.adapter;
282
+ getExecutor() {
283
+ return this.#props.executor;
288
284
  }
289
285
  }
290
286
  export class Transaction extends Kysely {
@@ -329,8 +325,7 @@ export function isKyselyProps(obj) {
329
325
  isObject(obj.config) &&
330
326
  isObject(obj.driver) &&
331
327
  isObject(obj.executor) &&
332
- isObject(obj.dialect) &&
333
- isObject(obj.parseContext));
328
+ isObject(obj.dialect));
334
329
  }
335
330
  export class ConnectionBuilder {
336
331
  #props;
@@ -338,18 +333,14 @@ export class ConnectionBuilder {
338
333
  this.#props = freeze(props);
339
334
  }
340
335
  async execute(callback) {
341
- const connection = await this.#props.driver.acquireConnection();
342
- const connectionProvider = new SingleConnectionProvider(connection);
343
- const transaction = new Kysely({
344
- ...this.#props,
345
- executor: this.#props.executor.withConnectionProvider(connectionProvider),
336
+ return this.#props.executor.provideConnection(async (connection) => {
337
+ const executor = this.#props.executor.withConnectionProvider(new SingleConnectionProvider(connection));
338
+ const db = new Kysely({
339
+ ...this.#props,
340
+ executor,
341
+ });
342
+ return await callback(db);
346
343
  });
347
- try {
348
- return await callback(transaction);
349
- }
350
- finally {
351
- await this.#props.driver.releaseConnection(connection);
352
- }
353
344
  }
354
345
  }
355
346
  preventAwait(ConnectionBuilder, "don't await ConnectionBuilder instances directly. To execute the query you need to call the `execute` method");
@@ -368,25 +359,23 @@ export class TransactionBuilder {
368
359
  const { isolationLevel, ...kyselyProps } = this.#props;
369
360
  const settings = { isolationLevel };
370
361
  validateTransactionSettings(settings);
371
- const connection = await this.#props.driver.acquireConnection();
372
- const connectionProvider = new SingleConnectionProvider(connection);
373
- const transaction = new Transaction({
374
- ...kyselyProps,
375
- executor: this.#props.executor.withConnectionProvider(connectionProvider),
362
+ return this.#props.executor.provideConnection(async (connection) => {
363
+ const executor = this.#props.executor.withConnectionProvider(new SingleConnectionProvider(connection));
364
+ const transaction = new Transaction({
365
+ ...kyselyProps,
366
+ executor,
367
+ });
368
+ try {
369
+ await this.#props.driver.beginTransaction(connection, settings);
370
+ const result = await callback(transaction);
371
+ await this.#props.driver.commitTransaction(connection);
372
+ return result;
373
+ }
374
+ catch (error) {
375
+ await this.#props.driver.rollbackTransaction(connection);
376
+ throw error;
377
+ }
376
378
  });
377
- try {
378
- await this.#props.driver.beginTransaction(connection, settings);
379
- const result = await callback(transaction);
380
- await this.#props.driver.commitTransaction(connection);
381
- return result;
382
- }
383
- catch (error) {
384
- await this.#props.driver.rollbackTransaction(connection);
385
- throw error;
386
- }
387
- finally {
388
- await this.#props.driver.releaseConnection(connection);
389
- }
390
379
  }
391
380
  }
392
381
  preventAwait(TransactionBuilder, "don't await TransactionBuilder instances directly. To execute the transaction you need to call the `execute` method");
@@ -1,6 +1,5 @@
1
1
  /// <reference types="./migrator.d.ts" />
2
2
  import { freeze, getLast } from '../util/object-utils.js';
3
- import { PRIVATE_ADAPTER } from '../util/private-symbols.js';
4
3
  export const MIGRATION_TABLE = 'kysely_migration';
5
4
  export const MIGRATION_LOCK_TABLE = 'kysely_migration_lock';
6
5
  export const MIGRATION_LOCK_ID = 'migration_lock';
@@ -260,9 +259,10 @@ export class Migrator {
260
259
  return !!lockRow;
261
260
  }
262
261
  async #runMigrations(getTargetMigrationIndex) {
262
+ const adapter = this.#props.db.getExecutor().adapter;
263
263
  const run = async (db) => {
264
264
  try {
265
- await this.#props.db[PRIVATE_ADAPTER].acquireMigrationLock(db);
265
+ await adapter.acquireMigrationLock(db);
266
266
  const state = await this.#getState(db);
267
267
  if (state.migrations.length === 0) {
268
268
  return { results: [] };
@@ -280,10 +280,10 @@ export class Migrator {
280
280
  return { results: [] };
281
281
  }
282
282
  finally {
283
- await this.#props.db[PRIVATE_ADAPTER].releaseMigrationLock(db);
283
+ await adapter.releaseMigrationLock(db);
284
284
  }
285
285
  };
286
- if (this.#props.db[PRIVATE_ADAPTER].supportsTransactionalDdl) {
286
+ if (adapter.supportsTransactionalDdl) {
287
287
  return this.#props.db.transaction().execute(run);
288
288
  }
289
289
  else {
@@ -5,6 +5,9 @@ import { TableExpressionNode } from './operation-node-utils.js';
5
5
  import { ReturningNode } from './returning-node.js';
6
6
  import { WhereNode } from './where-node.js';
7
7
  import { WithNode } from './with-node.js';
8
+ import { LimitNode } from './limit-node.js';
9
+ import { OrderByNode } from './order-by-node.js';
10
+ import { OrderByItemNode } from './order-by-item-node.js';
8
11
  export interface DeleteQueryNode extends OperationNode {
9
12
  readonly kind: 'DeleteQueryNode';
10
13
  readonly from: FromNode;
@@ -12,6 +15,8 @@ export interface DeleteQueryNode extends OperationNode {
12
15
  readonly where?: WhereNode;
13
16
  readonly returning?: ReturningNode;
14
17
  readonly with?: WithNode;
18
+ readonly orderBy?: OrderByNode;
19
+ readonly limit?: LimitNode;
15
20
  }
16
21
  /**
17
22
  * @internal
@@ -19,4 +24,6 @@ export interface DeleteQueryNode extends OperationNode {
19
24
  export declare const DeleteQueryNode: Readonly<{
20
25
  is(node: OperationNode): node is DeleteQueryNode;
21
26
  create(fromItem: TableExpressionNode, withNode?: WithNode | undefined): DeleteQueryNode;
27
+ cloneWithOrderByItem(deleteNode: DeleteQueryNode, item: OrderByItemNode): DeleteQueryNode;
28
+ cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
22
29
  }>;
@@ -1,6 +1,7 @@
1
1
  /// <reference types="./delete-query-node.d.ts" />
2
2
  import { freeze } from '../util/object-utils.js';
3
3
  import { FromNode } from './from-node.js';
4
+ import { OrderByNode } from './order-by-node.js';
4
5
  /**
5
6
  * @internal
6
7
  */
@@ -15,4 +16,18 @@ export const DeleteQueryNode = freeze({
15
16
  ...(withNode && { with: withNode }),
16
17
  });
17
18
  },
19
+ cloneWithOrderByItem(deleteNode, item) {
20
+ return freeze({
21
+ ...deleteNode,
22
+ orderBy: deleteNode.orderBy
23
+ ? OrderByNode.cloneWithItem(deleteNode.orderBy, item)
24
+ : OrderByNode.create(item),
25
+ });
26
+ },
27
+ cloneWithLimit(deleteNode, limit) {
28
+ return freeze({
29
+ ...deleteNode,
30
+ limit,
31
+ });
32
+ },
18
33
  });
@@ -218,7 +218,7 @@ export class OperationNodeTransformer {
218
218
  return {
219
219
  kind: 'RawNode',
220
220
  sqlFragments: freeze([...node.sqlFragments]),
221
- params: this.transformNodeList(node.params),
221
+ parameters: this.transformNodeList(node.parameters),
222
222
  };
223
223
  }
224
224
  transformWhere(node) {
@@ -2,13 +2,15 @@ import { OperationNode } from './operation-node.js';
2
2
  export interface RawNode extends OperationNode {
3
3
  readonly kind: 'RawNode';
4
4
  readonly sqlFragments: ReadonlyArray<string>;
5
- readonly params: ReadonlyArray<OperationNode>;
5
+ readonly parameters: ReadonlyArray<OperationNode>;
6
6
  }
7
7
  /**
8
8
  * @internal
9
9
  */
10
10
  export declare const RawNode: Readonly<{
11
11
  is(node: OperationNode): node is RawNode;
12
- create(sqlFragments: ReadonlyArray<string>, params: ReadonlyArray<OperationNode>): RawNode;
12
+ create(sqlFragments: ReadonlyArray<string>, parameters: ReadonlyArray<OperationNode>): RawNode;
13
13
  createWithSql(sql: string): RawNode;
14
+ createWithChild(child: OperationNode): RawNode;
15
+ createWithChildren(children: ReadonlyArray<OperationNode>): RawNode;
14
16
  }>;
@@ -7,14 +7,20 @@ export const RawNode = freeze({
7
7
  is(node) {
8
8
  return node.kind === 'RawNode';
9
9
  },
10
- create(sqlFragments, params) {
10
+ create(sqlFragments, parameters) {
11
11
  return freeze({
12
12
  kind: 'RawNode',
13
13
  sqlFragments: freeze(sqlFragments),
14
- params: freeze(params),
14
+ parameters: freeze(parameters),
15
15
  });
16
16
  },
17
17
  createWithSql(sql) {
18
18
  return RawNode.create([sql], []);
19
19
  },
20
+ createWithChild(child) {
21
+ return RawNode.create(['', ''], [child]);
22
+ },
23
+ createWithChildren(children) {
24
+ return RawNode.create(new Array(children.length + 1).fill(''), children);
25
+ },
20
26
  });
@@ -1,10 +1,10 @@
1
+ import { RawBuilder } from '../index-nodeless.js';
1
2
  import { AliasNode } from '../operation-node/alias-node.js';
2
3
  import { RawNode } from '../operation-node/raw-node.js';
3
4
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
4
- import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, AnySelectQueryBuilder, AnyRawBuilder, SelectQueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
5
- import { ParseContext } from './parse-context.js';
6
- export declare type ComplexExpression<DB, TB extends keyof DB> = AnySelectQueryBuilder | SelectQueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB>;
5
+ import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, AnySelectQueryBuilder, SelectQueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
6
+ export declare type ComplexExpression<DB, TB extends keyof DB, V = any> = AnySelectQueryBuilder | SelectQueryBuilderFactory<DB, TB> | RawBuilder<V> | RawBuilderFactory<DB, TB>;
7
7
  export declare type AliasedComplexExpression<DB, TB extends keyof DB> = AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB> | AnyAliasedRawBuilder | AliasedRawBuilderFactory<DB, TB>;
8
- export declare function parseComplexExpression(ctx: ParseContext, exp: ComplexExpression<any, any>): SelectQueryNode | RawNode;
9
- export declare function parseAliasedComplexExpression(ctx: ParseContext, exp: AliasedComplexExpression<any, any>): AliasNode;
8
+ export declare function parseComplexExpression(exp: ComplexExpression<any, any>): SelectQueryNode | RawNode;
9
+ export declare function parseAliasedComplexExpression(exp: AliasedComplexExpression<any, any>): AliasNode;
10
10
  export declare function isComplexExpression(obj: unknown): obj is ComplexExpression<any, any>;
@@ -1,21 +1,22 @@
1
1
  /// <reference types="./complex-expression-parser.d.ts" />
2
2
  import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
3
3
  import { isFunction } from '../util/object-utils.js';
4
- export function parseComplexExpression(ctx, exp) {
4
+ import { createExpressionBuilder } from './parse-utils.js';
5
+ export function parseComplexExpression(exp) {
5
6
  if (isOperationNodeSource(exp)) {
6
7
  return exp.toOperationNode();
7
8
  }
8
9
  else if (isFunction(exp)) {
9
- return exp(ctx.createExpressionBuilder()).toOperationNode();
10
+ return exp(createExpressionBuilder()).toOperationNode();
10
11
  }
11
12
  throw new Error(`invalid expression: ${JSON.stringify(exp)}`);
12
13
  }
13
- export function parseAliasedComplexExpression(ctx, exp) {
14
+ export function parseAliasedComplexExpression(exp) {
14
15
  if (isOperationNodeSource(exp)) {
15
16
  return exp.toOperationNode();
16
17
  }
17
18
  else if (isFunction(exp)) {
18
- return exp(ctx.createExpressionBuilder()).toOperationNode();
19
+ return exp(createExpressionBuilder()).toOperationNode();
19
20
  }
20
21
  throw new Error(`invalid aliased expression: ${JSON.stringify(exp)}`);
21
22
  }
@@ -4,21 +4,21 @@ import { Operator } from '../operation-node/operator-node.js';
4
4
  import { ExtractTypeFromReferenceExpression, ReferenceExpression } from './reference-parser.js';
5
5
  import { ValueExpression, ValueExpressionOrList } from './value-parser.js';
6
6
  import { FilterExpressionNode } from '../operation-node/operation-node-utils.js';
7
- import { ParseContext } from './parse-context.js';
8
7
  import { WhereInterface } from '../query-builder/where-interface.js';
9
8
  import { HavingInterface } from '../query-builder/having-interface.js';
9
+ import { ComplexExpression } from './complex-expression-parser.js';
10
10
  export declare type FilterValueExpression<DB, TB extends keyof DB, RE> = ValueExpression<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
11
11
  export declare type FilterValueExpressionOrList<DB, TB extends keyof DB, RE> = ValueExpressionOrList<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
12
- export declare type ExistsExpression<DB, TB extends keyof DB> = ValueExpression<DB, TB, never>;
12
+ export declare type ExistsExpression<DB, TB extends keyof DB> = ComplexExpression<DB, TB, any>;
13
13
  export declare type WhereGrouper<DB, TB extends keyof DB> = (qb: WhereInterface<DB, TB>) => WhereInterface<DB, TB>;
14
14
  export declare type HavingGrouper<DB, TB extends keyof DB> = (qb: HavingInterface<DB, TB>) => HavingInterface<DB, TB>;
15
15
  export declare type FilterOperator = Operator | AnyRawBuilder;
16
16
  declare type FilterType = 'where' | 'having' | 'on';
17
- export declare function parseWhereFilter(ctx: ParseContext, args: any[]): FilterExpressionNode;
18
- export declare function parseHavingFilter(ctx: ParseContext, args: any[]): FilterExpressionNode;
19
- export declare function parseOnFilter(ctx: ParseContext, args: any[]): FilterExpressionNode;
20
- export declare function parseReferenceFilter(ctx: ParseContext, lhs: ReferenceExpression<any, any>, op: FilterOperator, rhs: ReferenceExpression<any, any>): FilterNode;
21
- export declare function parseExistFilter(ctx: ParseContext, arg: ExistsExpression<any, any>): FilterNode;
22
- export declare function parseNotExistFilter(ctx: ParseContext, arg: ExistsExpression<any, any>): FilterNode;
23
- export declare function parseFilter(ctx: ParseContext, type: FilterType, args: any[]): FilterExpressionNode;
17
+ export declare function parseWhereFilter(args: any[]): FilterExpressionNode;
18
+ export declare function parseHavingFilter(args: any[]): FilterExpressionNode;
19
+ export declare function parseOnFilter(args: any[]): FilterExpressionNode;
20
+ export declare function parseReferenceFilter(lhs: ReferenceExpression<any, any>, op: FilterOperator, rhs: ReferenceExpression<any, any>): FilterNode;
21
+ export declare function parseExistFilter(arg: ExistsExpression<any, any>): FilterNode;
22
+ export declare function parseNotExistFilter(arg: ExistsExpression<any, any>): FilterNode;
23
+ export declare function parseFilter(type: FilterType, args: any[]): FilterExpressionNode;
24
24
  export {};
@@ -8,41 +8,42 @@ import { ParensNode } from '../operation-node/parens-node.js';
8
8
  import { parseReferenceExpression, } from './reference-parser.js';
9
9
  import { parseValueExpressionOrList, } from './value-parser.js';
10
10
  import { ValueNode } from '../operation-node/value-node.js';
11
- export function parseWhereFilter(ctx, args) {
12
- return parseFilter(ctx, 'where', args);
11
+ import { createJoinBuilder, createSelectQueryBuilder } from './parse-utils.js';
12
+ export function parseWhereFilter(args) {
13
+ return parseFilter('where', args);
13
14
  }
14
- export function parseHavingFilter(ctx, args) {
15
- return parseFilter(ctx, 'having', args);
15
+ export function parseHavingFilter(args) {
16
+ return parseFilter('having', args);
16
17
  }
17
- export function parseOnFilter(ctx, args) {
18
- return parseFilter(ctx, 'on', args);
18
+ export function parseOnFilter(args) {
19
+ return parseFilter('on', args);
19
20
  }
20
- export function parseReferenceFilter(ctx, lhs, op, rhs) {
21
- return FilterNode.create(parseReferenceExpression(ctx, lhs), parseFilterOperator(op), parseReferenceExpression(ctx, rhs));
21
+ export function parseReferenceFilter(lhs, op, rhs) {
22
+ return FilterNode.create(parseReferenceExpression(lhs), parseFilterOperator(op), parseReferenceExpression(rhs));
22
23
  }
23
- export function parseExistFilter(ctx, arg) {
24
- return parseExistExpression(ctx, 'exists', arg);
24
+ export function parseExistFilter(arg) {
25
+ return parseExistExpression('exists', arg);
25
26
  }
26
- export function parseNotExistFilter(ctx, arg) {
27
- return parseExistExpression(ctx, 'not exists', arg);
27
+ export function parseNotExistFilter(arg) {
28
+ return parseExistExpression('not exists', arg);
28
29
  }
29
- export function parseFilter(ctx, type, args) {
30
+ export function parseFilter(type, args) {
30
31
  if (args.length === 3) {
31
- return parseThreeArgFilter(ctx, args[0], args[1], args[2]);
32
+ return parseThreeArgFilter(args[0], args[1], args[2]);
32
33
  }
33
34
  else if (args.length === 1) {
34
- return parseOneArgFilter(ctx, type, args[0]);
35
+ return parseOneArgFilter(type, args[0]);
35
36
  }
36
37
  throw createFilterError(type, args);
37
38
  }
38
- function parseThreeArgFilter(ctx, left, op, right) {
39
+ function parseThreeArgFilter(left, op, right) {
39
40
  if ((op === 'is' || op === 'is not') && (isNull(right) || isBoolean(right))) {
40
- return parseIsFilter(ctx, left, op, right);
41
+ return parseIsFilter(left, op, right);
41
42
  }
42
- return FilterNode.create(parseReferenceExpression(ctx, left), parseFilterOperator(op), parseValueExpressionOrList(ctx, right));
43
+ return FilterNode.create(parseReferenceExpression(left), parseFilterOperator(op), parseValueExpressionOrList(right));
43
44
  }
44
- function parseIsFilter(ctx, left, op, right) {
45
- return FilterNode.create(parseReferenceExpression(ctx, left), parseFilterOperator(op), ValueNode.createImmediate(right));
45
+ function parseIsFilter(left, op, right) {
46
+ return FilterNode.create(parseReferenceExpression(left), parseFilterOperator(op), ValueNode.createImmediate(right));
46
47
  }
47
48
  function parseFilterOperator(op) {
48
49
  if (isString(op) && OPERATORS.includes(op)) {
@@ -53,12 +54,12 @@ function parseFilterOperator(op) {
53
54
  }
54
55
  throw new Error(`invalid comparison operator ${JSON.stringify(op)} passed to a filter method`);
55
56
  }
56
- function parseExistExpression(ctx, type, arg) {
57
- return FilterNode.create(undefined, OperatorNode.create(type), parseValueExpressionOrList(ctx, arg));
57
+ function parseExistExpression(type, arg) {
58
+ return FilterNode.create(undefined, OperatorNode.create(type), parseValueExpressionOrList(arg));
58
59
  }
59
- function parseOneArgFilter(ctx, type, arg) {
60
+ function parseOneArgFilter(type, arg) {
60
61
  if (isFunction(arg)) {
61
- return GROUP_PARSERS[type](ctx, arg);
62
+ return GROUP_PARSERS[type](arg);
62
63
  }
63
64
  else if (isOperationNodeSource(arg)) {
64
65
  const node = arg.toOperationNode();
@@ -72,24 +73,24 @@ function createFilterError(type, args) {
72
73
  return new Error(`invalid arguments passed to a '${type}' method: ${JSON.stringify(args)}`);
73
74
  }
74
75
  const GROUP_PARSERS = freeze({
75
- where(ctx, callback) {
76
- const query = callback(ctx.createSelectQueryBuilder());
76
+ where(callback) {
77
+ const query = callback(createSelectQueryBuilder());
77
78
  const queryNode = query.toOperationNode();
78
79
  if (!queryNode.where) {
79
80
  throw new Error('no `where` methods called insided a group callback');
80
81
  }
81
82
  return ParensNode.create(queryNode.where.where);
82
83
  },
83
- having(ctx, callback) {
84
- const query = callback(ctx.createSelectQueryBuilder());
84
+ having(callback) {
85
+ const query = callback(createSelectQueryBuilder());
85
86
  const queryNode = query.toOperationNode();
86
87
  if (!queryNode.having) {
87
88
  throw new Error('no `having` methods called insided a group callback');
88
89
  }
89
90
  return ParensNode.create(queryNode.having.having);
90
91
  },
91
- on(ctx, callback) {
92
- const joinBuilder = callback(ctx.createJoinBuilder('InnerJoin', 'table'));
92
+ on(callback) {
93
+ const joinBuilder = callback(createJoinBuilder('InnerJoin', 'table'));
93
94
  const joinNode = joinBuilder.toOperationNode();
94
95
  if (!joinNode.on) {
95
96
  throw new Error('no `on` methods called insided a group callback');
@@ -1,4 +1,3 @@
1
1
  import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
2
- import { ParseContext } from './parse-context.js';
3
2
  import { ReferenceExpressionOrList } from './reference-parser.js';
4
- export declare function parseGroupBy(ctx: ParseContext, orderBy: ReferenceExpressionOrList<any, any>): GroupByItemNode[];
3
+ export declare function parseGroupBy(orderBy: ReferenceExpressionOrList<any, any>): GroupByItemNode[];
@@ -1,6 +1,6 @@
1
1
  /// <reference types="./group-by-parser.d.ts" />
2
2
  import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
3
3
  import { parseReferenceExpressionOrList, } from './reference-parser.js';
4
- export function parseGroupBy(ctx, orderBy) {
5
- return parseReferenceExpressionOrList(ctx, orderBy).map(GroupByItemNode.create);
4
+ export function parseGroupBy(orderBy) {
5
+ return parseReferenceExpressionOrList(orderBy).map(GroupByItemNode.create);
6
6
  }
@@ -1,5 +1,4 @@
1
1
  import { ColumnNode } from '../operation-node/column-node.js';
2
- import { ParseContext } from './parse-context.js';
3
2
  import { ValueExpression } from './value-parser.js';
4
3
  import { ValuesNode } from '../operation-node/values-node.js';
5
4
  import { NonNullableInsertKeys, NullableInsertKeys, InsertType } from '../util/column-type.js';
@@ -9,4 +8,4 @@ export declare type InsertObject<DB, TB extends keyof DB> = {
9
8
  [C in NullableInsertKeys<DB[TB]>]?: ValueExpression<DB, TB, InsertType<DB[TB][C]>>;
10
9
  };
11
10
  export declare type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | ReadonlyArray<InsertObject<DB, TB>>;
12
- export declare function parseInsertObjectOrList(ctx: ParseContext, args: InsertObjectOrList<any, any>): [ReadonlyArray<ColumnNode>, ValuesNode];
11
+ export declare function parseInsertObjectOrList(args: InsertObjectOrList<any, any>): [ReadonlyArray<ColumnNode>, ValuesNode];
@@ -6,14 +6,14 @@ import { freeze } from '../util/object-utils.js';
6
6
  import { parseValueExpression } from './value-parser.js';
7
7
  import { ValuesNode } from '../operation-node/values-node.js';
8
8
  import { isComplexExpression } from './complex-expression-parser.js';
9
- export function parseInsertObjectOrList(ctx, args) {
10
- return parseInsertColumnsAndValues(ctx, Array.isArray(args) ? args : [args]);
9
+ export function parseInsertObjectOrList(args) {
10
+ return parseInsertColumnsAndValues(Array.isArray(args) ? args : [args]);
11
11
  }
12
- function parseInsertColumnsAndValues(ctx, rows) {
12
+ function parseInsertColumnsAndValues(rows) {
13
13
  const columns = parseColumnNamesAndIndexes(rows);
14
14
  return [
15
15
  freeze([...columns.keys()].map(ColumnNode.create)),
16
- ValuesNode.create(rows.map((row) => parseRowValues(ctx, row, columns))),
16
+ ValuesNode.create(rows.map((row) => parseRowValues(row, columns))),
17
17
  ];
18
18
  }
19
19
  function parseColumnNamesAndIndexes(rows) {
@@ -28,7 +28,7 @@ function parseColumnNamesAndIndexes(rows) {
28
28
  }
29
29
  return columns;
30
30
  }
31
- function parseRowValues(ctx, row, columns) {
31
+ function parseRowValues(row, columns) {
32
32
  const rowColumns = Object.keys(row);
33
33
  const rowValues = new Array(columns.size).fill(null);
34
34
  for (const col of rowColumns) {
@@ -39,7 +39,7 @@ function parseRowValues(ctx, row, columns) {
39
39
  }
40
40
  }
41
41
  if (rowValues.some(isComplexExpression)) {
42
- return ValueListNode.create(rowValues.map((it) => parseValueExpression(ctx, it)));
42
+ return ValueListNode.create(rowValues.map((it) => parseValueExpression(it)));
43
43
  }
44
44
  return PrimitiveValueListNode.create(rowValues);
45
45
  }
@@ -2,10 +2,9 @@ import { JoinNode, JoinType } from '../operation-node/join-node.js';
2
2
  import { AnyColumn, AnyColumnWithTable } from '../util/type-utils.js';
3
3
  import { TableExpressionDatabase, TableExpressionTables } from './table-parser.js';
4
4
  import { JoinBuilder } from '../query-builder/join-builder.js';
5
- import { ParseContext } from './parse-context.js';
6
5
  export declare type JoinReferenceExpression<DB, TB extends keyof DB, TE> = AnyJoinColumn<DB, TB, TE> | AnyJoinColumnWithTable<DB, TB, TE>;
7
6
  export declare type JoinCallbackExpression<DB, TB extends keyof DB, TE> = (join: JoinBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>) => JoinBuilder<any, any>;
8
7
  declare type AnyJoinColumn<DB, TB extends keyof DB, TE> = AnyColumn<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>;
9
8
  declare type AnyJoinColumnWithTable<DB, TB extends keyof DB, TE> = AnyColumnWithTable<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>;
10
- export declare function parseJoin(ctx: ParseContext, joinType: JoinType, args: any[]): JoinNode;
9
+ export declare function parseJoin(joinType: JoinType, args: any[]): JoinNode;
11
10
  export {};
@@ -2,21 +2,22 @@
2
2
  import { JoinNode } from '../operation-node/join-node.js';
3
3
  import { parseTableExpression, } from './table-parser.js';
4
4
  import { parseReferenceFilter } from './filter-parser.js';
5
- export function parseJoin(ctx, joinType, args) {
5
+ import { createJoinBuilder } from './parse-utils.js';
6
+ export function parseJoin(joinType, args) {
6
7
  if (args.length === 3) {
7
- return parseSingleOnJoin(ctx, joinType, args[0], args[1], args[2]);
8
+ return parseSingleOnJoin(joinType, args[0], args[1], args[2]);
8
9
  }
9
10
  else if (args.length === 2) {
10
- return parseCallbackJoin(ctx, joinType, args[0], args[1]);
11
+ return parseCallbackJoin(joinType, args[0], args[1]);
11
12
  }
12
13
  else {
13
14
  throw new Error('not implemented');
14
15
  }
15
16
  }
16
- function parseCallbackJoin(ctx, joinType, from, callback) {
17
- const joinBuilder = callback(ctx.createJoinBuilder(joinType, from));
17
+ function parseCallbackJoin(joinType, from, callback) {
18
+ const joinBuilder = callback(createJoinBuilder(joinType, from));
18
19
  return joinBuilder.toOperationNode();
19
20
  }
20
- function parseSingleOnJoin(ctx, joinType, from, lhsColumn, rhsColumn) {
21
- return JoinNode.createWithOn(joinType, parseTableExpression(ctx, from), parseReferenceFilter(ctx, lhsColumn, '=', rhsColumn));
21
+ function parseSingleOnJoin(joinType, from, lhsColumn, rhsColumn) {
22
+ return JoinNode.createWithOn(joinType, parseTableExpression(from), parseReferenceFilter(lhsColumn, '=', rhsColumn));
22
23
  }
@@ -1,8 +1,7 @@
1
1
  import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
2
2
  import { AnyRawBuilder } from '../util/type-utils.js';
3
- import { ParseContext } from './parse-context.js';
4
3
  import { ReferenceExpression } from './reference-parser.js';
5
4
  export declare type OrderByDirection = 'asc' | 'desc';
6
5
  export declare type OrderByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | (keyof O & string);
7
6
  export declare type OrderByDirectionExpression = OrderByDirection | AnyRawBuilder;
8
- export declare function parseOrderBy(ctx: ParseContext, orderBy: OrderByExpression<any, any, any>, direction?: OrderByDirectionExpression): OrderByItemNode;
7
+ export declare function parseOrderBy(orderBy: OrderByExpression<any, any, any>, direction?: OrderByDirectionExpression): OrderByItemNode;
@@ -2,11 +2,11 @@
2
2
  import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
3
3
  import { RawNode } from '../operation-node/raw-node.js';
4
4
  import { parseReferenceExpression, } from './reference-parser.js';
5
- export function parseOrderBy(ctx, orderBy, direction) {
6
- return OrderByItemNode.create(parseOrderByExpression(ctx, orderBy), parseOrderByDirectionExpression(direction));
5
+ export function parseOrderBy(orderBy, direction) {
6
+ return OrderByItemNode.create(parseOrderByExpression(orderBy), parseOrderByDirectionExpression(direction));
7
7
  }
8
- function parseOrderByExpression(ctx, expr) {
9
- return parseReferenceExpression(ctx, expr);
8
+ function parseOrderByExpression(expr) {
9
+ return parseReferenceExpression(expr);
10
10
  }
11
11
  function parseOrderByDirectionExpression(expr) {
12
12
  if (!expr) {
@@ -0,0 +1,10 @@
1
+ import { JoinType } from '../operation-node/join-node.js';
2
+ import { ExpressionBuilder } from '../query-builder/expression-builder.js';
3
+ import { JoinBuilder } from '../query-builder/join-builder.js';
4
+ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
5
+ import { QueryCreator } from '../query-creator.js';
6
+ import { TableExpression } from './table-parser.js';
7
+ export declare function createSelectQueryBuilder(): SelectQueryBuilder<any, any, any>;
8
+ export declare function createExpressionBuilder(): ExpressionBuilder<any, any>;
9
+ export declare function createQueryCreator(): QueryCreator<any>;
10
+ export declare function createJoinBuilder(joinType: JoinType, table: TableExpression<any, any>): JoinBuilder<any, any>;