kysely 0.16.11 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/dialect/mysql/mysql-adapter.js +3 -4
  3. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -1
  4. package/dist/cjs/dialect/postgres/postgres-adapter.js +3 -2
  5. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +2 -1
  6. package/dist/cjs/index-nodeless.d.ts +2 -0
  7. package/dist/cjs/index-nodeless.js +2 -0
  8. package/dist/cjs/kysely.d.ts +3 -6
  9. package/dist/cjs/kysely.js +7 -12
  10. package/dist/cjs/migration/migrator.js +4 -4
  11. package/dist/cjs/operation-node/operation-node-transformer.js +1 -1
  12. package/dist/cjs/operation-node/raw-node.d.ts +4 -2
  13. package/dist/cjs/operation-node/raw-node.js +8 -2
  14. package/dist/cjs/parser/complex-expression-parser.d.ts +5 -5
  15. package/dist/cjs/parser/complex-expression-parser.js +5 -4
  16. package/dist/cjs/parser/filter-parser.d.ts +9 -9
  17. package/dist/cjs/parser/filter-parser.js +31 -30
  18. package/dist/cjs/parser/group-by-parser.d.ts +1 -2
  19. package/dist/cjs/parser/group-by-parser.js +2 -2
  20. package/dist/cjs/parser/insert-values-parser.d.ts +1 -2
  21. package/dist/cjs/parser/insert-values-parser.js +6 -6
  22. package/dist/cjs/parser/join-parser.d.ts +1 -2
  23. package/dist/cjs/parser/join-parser.js +8 -7
  24. package/dist/cjs/parser/order-by-parser.d.ts +1 -2
  25. package/dist/cjs/parser/order-by-parser.js +4 -4
  26. package/dist/cjs/parser/parse-utils.d.ts +10 -0
  27. package/dist/cjs/parser/parse-utils.js +38 -0
  28. package/dist/cjs/parser/reference-parser.d.ts +2 -3
  29. package/dist/cjs/parser/reference-parser.js +5 -5
  30. package/dist/cjs/parser/select-parser.d.ts +1 -2
  31. package/dist/cjs/parser/select-parser.js +5 -5
  32. package/dist/cjs/parser/table-parser.d.ts +2 -3
  33. package/dist/cjs/parser/table-parser.js +5 -5
  34. package/dist/cjs/parser/update-set-parser.d.ts +1 -2
  35. package/dist/cjs/parser/update-set-parser.js +2 -2
  36. package/dist/cjs/parser/value-parser.d.ts +3 -4
  37. package/dist/cjs/parser/value-parser.js +7 -7
  38. package/dist/cjs/parser/with-parser.d.ts +1 -2
  39. package/dist/cjs/parser/with-parser.js +3 -2
  40. package/dist/cjs/query-builder/delete-query-builder.d.ts +23 -19
  41. package/dist/cjs/query-builder/delete-query-builder.js +15 -15
  42. package/dist/cjs/query-builder/expression-builder.d.ts +4 -13
  43. package/dist/cjs/query-builder/expression-builder.js +12 -21
  44. package/dist/cjs/query-builder/function-builder.d.ts +2 -6
  45. package/dist/cjs/query-builder/function-builder.js +5 -8
  46. package/dist/cjs/query-builder/insert-query-builder.d.ts +12 -8
  47. package/dist/cjs/query-builder/insert-query-builder.js +8 -7
  48. package/dist/cjs/query-builder/join-builder.d.ts +0 -2
  49. package/dist/cjs/query-builder/join-builder.js +8 -8
  50. package/dist/cjs/query-builder/on-conflict-builder.d.ts +24 -20
  51. package/dist/cjs/query-builder/on-conflict-builder.js +17 -17
  52. package/dist/cjs/query-builder/returning-interface.d.ts +3 -1
  53. package/dist/cjs/query-builder/select-query-builder.d.ts +41 -29
  54. package/dist/cjs/query-builder/select-query-builder.js +28 -26
  55. package/dist/cjs/query-builder/update-query-builder.d.ts +30 -24
  56. package/dist/cjs/query-builder/update-query-builder.js +22 -20
  57. package/dist/cjs/query-builder/where-interface.d.ts +20 -16
  58. package/dist/cjs/query-compiler/default-query-compiler.js +1 -1
  59. package/dist/cjs/query-creator.d.ts +10 -129
  60. package/dist/cjs/query-creator.js +5 -136
  61. package/dist/cjs/query-executor/default-query-executor.d.ts +8 -1
  62. package/dist/cjs/query-executor/default-query-executor.js +13 -13
  63. package/dist/cjs/query-executor/noop-query-executor.d.ts +8 -0
  64. package/dist/cjs/query-executor/noop-query-executor.js +8 -1
  65. package/dist/cjs/query-executor/query-executor-provider.d.ts +8 -0
  66. package/dist/cjs/query-executor/query-executor-provider.js +2 -0
  67. package/dist/cjs/query-executor/query-executor.d.ts +7 -0
  68. package/dist/cjs/raw-builder/raw-builder.d.ts +42 -11
  69. package/dist/cjs/raw-builder/raw-builder.js +55 -56
  70. package/dist/cjs/raw-builder/sql.d.ts +323 -0
  71. package/dist/cjs/raw-builder/sql.js +153 -0
  72. package/dist/cjs/schema/alter-table-builder.d.ts +20 -8
  73. package/dist/cjs/schema/column-definition-builder.d.ts +20 -8
  74. package/dist/cjs/schema/create-index-builder.d.ts +3 -1
  75. package/dist/cjs/schema/create-index-builder.js +3 -1
  76. package/dist/cjs/schema/create-table-builder.d.ts +6 -2
  77. package/dist/cjs/schema/create-table-builder.js +6 -2
  78. package/dist/cjs/schema/create-view-builder.d.ts +3 -3
  79. package/dist/cjs/schema/create-view-builder.js +3 -3
  80. package/dist/cjs/util/query-id.js +10 -4
  81. package/dist/cjs/util/random-string.js +65 -2
  82. package/dist/esm/dialect/mysql/mysql-adapter.js +3 -4
  83. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -1
  84. package/dist/esm/dialect/postgres/postgres-adapter.js +3 -2
  85. package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -1
  86. package/dist/esm/index-nodeless.d.ts +2 -0
  87. package/dist/esm/index-nodeless.js +2 -0
  88. package/dist/esm/kysely.d.ts +3 -6
  89. package/dist/esm/kysely.js +7 -12
  90. package/dist/esm/migration/migrator.js +4 -4
  91. package/dist/esm/operation-node/operation-node-transformer.js +1 -1
  92. package/dist/esm/operation-node/raw-node.d.ts +4 -2
  93. package/dist/esm/operation-node/raw-node.js +8 -2
  94. package/dist/esm/parser/complex-expression-parser.d.ts +5 -5
  95. package/dist/esm/parser/complex-expression-parser.js +5 -4
  96. package/dist/esm/parser/filter-parser.d.ts +9 -9
  97. package/dist/esm/parser/filter-parser.js +31 -30
  98. package/dist/esm/parser/group-by-parser.d.ts +1 -2
  99. package/dist/esm/parser/group-by-parser.js +2 -2
  100. package/dist/esm/parser/insert-values-parser.d.ts +1 -2
  101. package/dist/esm/parser/insert-values-parser.js +6 -6
  102. package/dist/esm/parser/join-parser.d.ts +1 -2
  103. package/dist/esm/parser/join-parser.js +8 -7
  104. package/dist/esm/parser/order-by-parser.d.ts +1 -2
  105. package/dist/esm/parser/order-by-parser.js +4 -4
  106. package/dist/esm/parser/parse-utils.d.ts +10 -0
  107. package/dist/esm/parser/parse-utils.js +32 -0
  108. package/dist/esm/parser/reference-parser.d.ts +2 -3
  109. package/dist/esm/parser/reference-parser.js +5 -5
  110. package/dist/esm/parser/select-parser.d.ts +1 -2
  111. package/dist/esm/parser/select-parser.js +5 -5
  112. package/dist/esm/parser/table-parser.d.ts +2 -3
  113. package/dist/esm/parser/table-parser.js +5 -5
  114. package/dist/esm/parser/update-set-parser.d.ts +1 -2
  115. package/dist/esm/parser/update-set-parser.js +2 -2
  116. package/dist/esm/parser/value-parser.d.ts +3 -4
  117. package/dist/esm/parser/value-parser.js +7 -7
  118. package/dist/esm/parser/with-parser.d.ts +1 -2
  119. package/dist/esm/parser/with-parser.js +3 -2
  120. package/dist/esm/query-builder/delete-query-builder.d.ts +23 -19
  121. package/dist/esm/query-builder/delete-query-builder.js +15 -15
  122. package/dist/esm/query-builder/expression-builder.d.ts +4 -13
  123. package/dist/esm/query-builder/expression-builder.js +12 -21
  124. package/dist/esm/query-builder/function-builder.d.ts +2 -6
  125. package/dist/esm/query-builder/function-builder.js +5 -8
  126. package/dist/esm/query-builder/insert-query-builder.d.ts +12 -8
  127. package/dist/esm/query-builder/insert-query-builder.js +8 -7
  128. package/dist/esm/query-builder/join-builder.d.ts +0 -2
  129. package/dist/esm/query-builder/join-builder.js +8 -8
  130. package/dist/esm/query-builder/on-conflict-builder.d.ts +24 -20
  131. package/dist/esm/query-builder/on-conflict-builder.js +17 -17
  132. package/dist/esm/query-builder/returning-interface.d.ts +3 -1
  133. package/dist/esm/query-builder/select-query-builder.d.ts +41 -29
  134. package/dist/esm/query-builder/select-query-builder.js +28 -26
  135. package/dist/esm/query-builder/update-query-builder.d.ts +30 -24
  136. package/dist/esm/query-builder/update-query-builder.js +22 -20
  137. package/dist/esm/query-builder/where-interface.d.ts +20 -16
  138. package/dist/esm/query-compiler/default-query-compiler.js +1 -1
  139. package/dist/esm/query-creator.d.ts +10 -129
  140. package/dist/esm/query-creator.js +5 -136
  141. package/dist/esm/query-executor/default-query-executor.d.ts +8 -1
  142. package/dist/esm/query-executor/default-query-executor.js +13 -13
  143. package/dist/esm/query-executor/noop-query-executor.d.ts +8 -0
  144. package/dist/esm/query-executor/noop-query-executor.js +7 -0
  145. package/dist/esm/query-executor/query-executor-provider.d.ts +8 -0
  146. package/dist/esm/query-executor/query-executor-provider.js +2 -0
  147. package/dist/esm/query-executor/query-executor.d.ts +7 -0
  148. package/dist/esm/raw-builder/raw-builder.d.ts +42 -11
  149. package/dist/esm/raw-builder/raw-builder.js +56 -57
  150. package/dist/esm/raw-builder/sql.d.ts +323 -0
  151. package/dist/esm/raw-builder/sql.js +151 -0
  152. package/dist/esm/schema/alter-table-builder.d.ts +20 -8
  153. package/dist/esm/schema/column-definition-builder.d.ts +20 -8
  154. package/dist/esm/schema/create-index-builder.d.ts +3 -1
  155. package/dist/esm/schema/create-index-builder.js +3 -1
  156. package/dist/esm/schema/create-table-builder.d.ts +6 -2
  157. package/dist/esm/schema/create-table-builder.js +6 -2
  158. package/dist/esm/schema/create-view-builder.d.ts +3 -3
  159. package/dist/esm/schema/create-view-builder.js +3 -3
  160. package/dist/esm/util/query-id.js +10 -4
  161. package/dist/esm/util/random-string.js +65 -2
  162. package/package.json +13 -13
  163. package/dist/cjs/parser/parse-context.d.ts +0 -55
  164. package/dist/cjs/parser/parse-context.js +0 -50
  165. package/dist/cjs/util/private-symbols.d.ts +0 -5
  166. package/dist/cjs/util/private-symbols.js +0 -8
  167. package/dist/esm/parser/parse-context.d.ts +0 -55
  168. package/dist/esm/parser/parse-context.js +0 -47
  169. package/dist/esm/util/private-symbols.d.ts +0 -5
  170. package/dist/esm/util/private-symbols.js +0 -6
@@ -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>;
@@ -0,0 +1,32 @@
1
+ /// <reference types="./parse-utils.d.ts" />
2
+ import { JoinNode } from '../operation-node/join-node.js';
3
+ import { SelectQueryNode } from '../operation-node/select-query-node.js';
4
+ import { ExpressionBuilder } from '../query-builder/expression-builder.js';
5
+ import { JoinBuilder } from '../query-builder/join-builder.js';
6
+ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
7
+ import { QueryCreator } from '../query-creator.js';
8
+ import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';
9
+ import { createQueryId } from '../util/query-id.js';
10
+ import { parseTableExpression, parseTableExpressionOrList, } from './table-parser.js';
11
+ export function createSelectQueryBuilder() {
12
+ return new SelectQueryBuilder({
13
+ queryId: createQueryId(),
14
+ executor: NOOP_QUERY_EXECUTOR,
15
+ queryNode: SelectQueryNode.create(parseTableExpressionOrList([])),
16
+ });
17
+ }
18
+ export function createExpressionBuilder() {
19
+ return new ExpressionBuilder({
20
+ executor: NOOP_QUERY_EXECUTOR,
21
+ });
22
+ }
23
+ export function createQueryCreator() {
24
+ return new QueryCreator({
25
+ executor: NOOP_QUERY_EXECUTOR,
26
+ });
27
+ }
28
+ export function createJoinBuilder(joinType, table) {
29
+ return new JoinBuilder({
30
+ joinNode: JoinNode.create(joinType, parseTableExpression(table)),
31
+ });
32
+ }
@@ -5,7 +5,6 @@ import { ReferenceNode } from '../operation-node/reference-node.js';
5
5
  import { AnyColumn, AnyColumnWithTable, ExtractColumnType, ValueType } from '../util/type-utils.js';
6
6
  import { RawBuilder } from '../raw-builder/raw-builder.js';
7
7
  import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
8
- import { ParseContext } from './parse-context.js';
9
8
  import { ComplexExpression } from './complex-expression-parser.js';
10
9
  import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
11
10
  import { SelectType } from '../util/column-type.js';
@@ -14,8 +13,8 @@ export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = Referen
14
13
  export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
15
14
  export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? SelectType<ExtractTypeFromStringReference<DB, TB, RE>> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => SelectQueryBuilder<any, any, infer O> ? ValueType<O> : unknown;
16
15
  declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, RE> : unknown;
17
- export declare function parseReferenceExpressionOrList(ctx: ParseContext, arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
18
- export declare function parseReferenceExpression(ctx: ParseContext, exp: ReferenceExpression<any, any>): ReferenceExpressionNode;
16
+ export declare function parseReferenceExpressionOrList(arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
17
+ export declare function parseReferenceExpression(exp: ReferenceExpression<any, any>): ReferenceExpressionNode;
19
18
  export declare function parseStringReference(ref: string): ColumnNode | ReferenceNode;
20
19
  export declare function parseAliasedStringReference(ref: string): ColumnNode | ReferenceNode | AliasNode;
21
20
  export declare function parseColumnName(column: AnyColumn<any, any>): ColumnNode;
@@ -6,22 +6,22 @@ import { TableNode } from '../operation-node/table-node.js';
6
6
  import { isReadonlyArray, isString } from '../util/object-utils.js';
7
7
  import { parseComplexExpression, } from './complex-expression-parser.js';
8
8
  import { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';
9
- export function parseReferenceExpressionOrList(ctx, arg) {
9
+ export function parseReferenceExpressionOrList(arg) {
10
10
  if (isReadonlyArray(arg)) {
11
- return arg.map((it) => parseReferenceExpression(ctx, it));
11
+ return arg.map((it) => parseReferenceExpression(it));
12
12
  }
13
13
  else {
14
- return [parseReferenceExpression(ctx, arg)];
14
+ return [parseReferenceExpression(arg)];
15
15
  }
16
16
  }
17
- export function parseReferenceExpression(ctx, exp) {
17
+ export function parseReferenceExpression(exp) {
18
18
  if (isString(exp)) {
19
19
  return parseStringReference(exp);
20
20
  }
21
21
  else if (isDynamicReferenceBuilder(exp)) {
22
22
  return exp.toOperationNode();
23
23
  }
24
- return parseComplexExpression(ctx, exp);
24
+ return parseComplexExpression(exp);
25
25
  }
26
26
  export function parseStringReference(ref) {
27
27
  const COLUMN_SEPARATOR = '.';
@@ -3,7 +3,6 @@ import { AliasedQueryBuilder, SelectQueryBuilder } from '../query-builder/select
3
3
  import { SelectionNode } from '../operation-node/selection-node.js';
4
4
  import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, ExtractColumnType, ValueType } from '../util/type-utils.js';
5
5
  import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
6
- import { ParseContext } from './parse-context.js';
7
6
  import { AliasedComplexExpression } from './complex-expression-parser.js';
8
7
  import { Selectable, SelectType } from '../util/column-type.js';
9
8
  export declare type SelectExpression<DB, TB extends keyof DB> = AnyAliasedColumnWithTable<DB, TB> | AnyAliasedColumn<DB, TB> | AnyColumnWithTable<DB, TB> | AnyColumn<DB, TB> | DynamicReferenceBuilder<any> | AliasedComplexExpression<DB, TB>;
@@ -29,6 +28,6 @@ declare type AllSelection<DB, TB extends keyof DB> = Selectable<{
29
28
  [T in TB]: C extends keyof DB[T] ? DB[T][C] : never;
30
29
  }[TB];
31
30
  }>;
32
- export declare function parseSelectExpressionOrList(ctx: ParseContext, selection: SelectExpressionOrList<any, any>): SelectionNode[];
31
+ export declare function parseSelectExpressionOrList(selection: SelectExpressionOrList<any, any>): SelectionNode[];
33
32
  export declare function parseSelectAll(table?: string | string[]): SelectionNode[];
34
33
  export {};
@@ -4,15 +4,15 @@ import { SelectionNode } from '../operation-node/selection-node.js';
4
4
  import { parseAliasedStringReference } from './reference-parser.js';
5
5
  import { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';
6
6
  import { parseAliasedComplexExpression, } from './complex-expression-parser.js';
7
- export function parseSelectExpressionOrList(ctx, selection) {
7
+ export function parseSelectExpressionOrList(selection) {
8
8
  if (isReadonlyArray(selection)) {
9
- return selection.map((it) => parseSelectExpression(ctx, it));
9
+ return selection.map((it) => parseSelectExpression(it));
10
10
  }
11
11
  else {
12
- return [parseSelectExpression(ctx, selection)];
12
+ return [parseSelectExpression(selection)];
13
13
  }
14
14
  }
15
- function parseSelectExpression(ctx, selection) {
15
+ function parseSelectExpression(selection) {
16
16
  if (isString(selection)) {
17
17
  return SelectionNode.create(parseAliasedStringReference(selection));
18
18
  }
@@ -20,7 +20,7 @@ function parseSelectExpression(ctx, selection) {
20
20
  return SelectionNode.create(selection.toOperationNode());
21
21
  }
22
22
  else {
23
- return SelectionNode.create(parseAliasedComplexExpression(ctx, selection));
23
+ return SelectionNode.create(parseAliasedComplexExpression(selection));
24
24
  }
25
25
  }
26
26
  export function parseSelectAll(table) {
@@ -3,7 +3,6 @@ import { TableNode } from '../operation-node/table-node.js';
3
3
  import { AnyAliasedRawBuilder, Nullable } from '../util/type-utils.js';
4
4
  import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
5
5
  import { TableExpressionNode } from '../operation-node/operation-node-utils.js';
6
- import { ParseContext } from './parse-context.js';
7
6
  import { AliasedComplexExpression } from './complex-expression-parser.js';
8
7
  export declare type TableExpression<DB, TB extends keyof DB> = TableReference<DB> | AliasedComplexExpression<DB, TB>;
9
8
  export declare type TableExpressionOrList<DB, TB extends keyof DB> = TableExpression<DB, TB> | ReadonlyArray<TableExpression<DB, TB>>;
@@ -25,8 +24,8 @@ export declare type TableExpressionTables<DB, TB extends keyof DB, TE> = TB | Ex
25
24
  declare type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O : never : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O : never : TE extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : TE extends (qb: any) => AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : never;
26
25
  declare type AnyAliasedTable<DB> = `${AnyTable<DB>} as ${string}`;
27
26
  declare type AnyTable<DB> = keyof DB & string;
28
- export declare function parseTableExpressionOrList(ctx: ParseContext, table: TableExpressionOrList<any, any>): TableExpressionNode[];
29
- export declare function parseTableExpression(ctx: ParseContext, table: TableExpression<any, any>): TableExpressionNode;
27
+ export declare function parseTableExpressionOrList(table: TableExpressionOrList<any, any>): TableExpressionNode[];
28
+ export declare function parseTableExpression(table: TableExpression<any, any>): TableExpressionNode;
30
29
  export declare function parseAliasedTable(from: string): TableExpressionNode;
31
30
  export declare function parseTable(from: string): TableNode;
32
31
  export {};
@@ -3,20 +3,20 @@ import { isReadonlyArray, isString } from '../util/object-utils.js';
3
3
  import { AliasNode } from '../operation-node/alias-node.js';
4
4
  import { TableNode } from '../operation-node/table-node.js';
5
5
  import { parseAliasedComplexExpression, } from './complex-expression-parser.js';
6
- export function parseTableExpressionOrList(ctx, table) {
6
+ export function parseTableExpressionOrList(table) {
7
7
  if (isReadonlyArray(table)) {
8
- return table.map((it) => parseTableExpression(ctx, it));
8
+ return table.map((it) => parseTableExpression(it));
9
9
  }
10
10
  else {
11
- return [parseTableExpression(ctx, table)];
11
+ return [parseTableExpression(table)];
12
12
  }
13
13
  }
14
- export function parseTableExpression(ctx, table) {
14
+ export function parseTableExpression(table) {
15
15
  if (isString(table)) {
16
16
  return parseAliasedTable(table);
17
17
  }
18
18
  else {
19
- return parseAliasedComplexExpression(ctx, table);
19
+ return parseAliasedComplexExpression(table);
20
20
  }
21
21
  }
22
22
  export function parseAliasedTable(from) {
@@ -1,8 +1,7 @@
1
1
  import { ColumnUpdateNode } from '../operation-node/column-update-node.js';
2
2
  import { UpdateKeys, UpdateType } from '../util/column-type.js';
3
- import { ParseContext } from './parse-context.js';
4
3
  import { ValueExpression } from './value-parser.js';
5
4
  export declare type MutationObject<DB, TB extends keyof DB> = {
6
5
  [C in UpdateKeys<DB[TB]>]?: ValueExpression<DB, TB, UpdateType<DB[TB][C]>>;
7
6
  };
8
- export declare function parseUpdateObject(ctx: ParseContext, row: MutationObject<any, any>): ReadonlyArray<ColumnUpdateNode>;
7
+ export declare function parseUpdateObject(row: MutationObject<any, any>): ReadonlyArray<ColumnUpdateNode>;
@@ -2,10 +2,10 @@
2
2
  import { ColumnNode } from '../operation-node/column-node.js';
3
3
  import { ColumnUpdateNode } from '../operation-node/column-update-node.js';
4
4
  import { parseValueExpression } from './value-parser.js';
5
- export function parseUpdateObject(ctx, row) {
5
+ export function parseUpdateObject(row) {
6
6
  return Object.entries(row)
7
7
  .filter(([_, value]) => value !== undefined)
8
8
  .map(([key, value]) => {
9
- return ColumnUpdateNode.create(ColumnNode.create(key), parseValueExpression(ctx, value));
9
+ return ColumnUpdateNode.create(ColumnNode.create(key), parseValueExpression(value));
10
10
  });
11
11
  }
@@ -1,10 +1,9 @@
1
1
  import { ValueExpressionNode } from '../operation-node/operation-node-utils.js';
2
2
  import { ValueNode } from '../operation-node/value-node.js';
3
- import { ParseContext } from './parse-context.js';
4
3
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
5
4
  import { RawNode } from '../operation-node/raw-node.js';
6
5
  import { ComplexExpression } from './complex-expression-parser.js';
7
- export declare type ValueExpression<DB, TB extends keyof DB, V> = V | ComplexExpression<DB, TB>;
6
+ export declare type ValueExpression<DB, TB extends keyof DB, V> = V | ComplexExpression<DB, TB, V>;
8
7
  export declare type ValueExpressionOrList<DB, TB extends keyof DB, V> = ValueExpression<DB, TB, V> | ReadonlyArray<ValueExpression<DB, TB, V>>;
9
- export declare function parseValueExpressionOrList(ctx: ParseContext, arg: ValueExpressionOrList<any, any, unknown>): ValueExpressionNode;
10
- export declare function parseValueExpression(ctx: ParseContext, exp: ValueExpression<any, any, unknown>): ValueNode | SelectQueryNode | RawNode;
8
+ export declare function parseValueExpressionOrList(arg: ValueExpressionOrList<any, any, unknown>): ValueExpressionNode;
9
+ export declare function parseValueExpression(exp: ValueExpression<any, any, unknown>): ValueNode | SelectQueryNode | RawNode;
@@ -4,23 +4,23 @@ import { ValueListNode } from '../operation-node/value-list-node.js';
4
4
  import { ValueNode } from '../operation-node/value-node.js';
5
5
  import { isReadonlyArray } from '../util/object-utils.js';
6
6
  import { parseComplexExpression, isComplexExpression, } from './complex-expression-parser.js';
7
- export function parseValueExpressionOrList(ctx, arg) {
7
+ export function parseValueExpressionOrList(arg) {
8
8
  if (isReadonlyArray(arg)) {
9
- return parseValueExpressionList(ctx, arg);
9
+ return parseValueExpressionList(arg);
10
10
  }
11
11
  else {
12
- return parseValueExpression(ctx, arg);
12
+ return parseValueExpression(arg);
13
13
  }
14
14
  }
15
- export function parseValueExpression(ctx, exp) {
15
+ export function parseValueExpression(exp) {
16
16
  if (isComplexExpression(exp)) {
17
- return parseComplexExpression(ctx, exp);
17
+ return parseComplexExpression(exp);
18
18
  }
19
19
  return ValueNode.create(exp);
20
20
  }
21
- function parseValueExpressionList(ctx, arg) {
21
+ function parseValueExpressionList(arg) {
22
22
  if (arg.some(isComplexExpression)) {
23
- return ValueListNode.create(arg.map((it) => parseValueExpression(ctx, it)));
23
+ return ValueListNode.create(arg.map((it) => parseValueExpression(it)));
24
24
  }
25
25
  return PrimitiveValueListNode.create(arg);
26
26
  }
@@ -5,7 +5,6 @@ import { InsertQueryBuilder } from '../query-builder/insert-query-builder.js';
5
5
  import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
6
6
  import { QueryCreator } from '../query-creator.js';
7
7
  import { RawBuilder } from '../raw-builder/raw-builder.js';
8
- import { ParseContext } from './parse-context.js';
9
8
  export declare type CommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB>) => CommonTableExpressionOutput<DB, CN>;
10
9
  export declare type RecursiveCommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpressionName<CN>>>) => CommonTableExpressionOutput<DB, CN>;
11
10
  export declare type QueryCreatorWithCommonTableExpression<DB, CN extends string, CTE> = QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpression<CTE>>>;
@@ -37,5 +36,5 @@ declare type ExtractRowFromCommonTableExpressionName<CN extends string> = CN ext
37
36
  * Parses a string like 'id, first_name' into a type 'id' | 'first_name'
38
37
  */
39
38
  declare type ExtractColumnNamesFromColumnList<R extends string> = R extends `${infer C}, ${infer RS}` ? C | ExtractColumnNamesFromColumnList<RS> : R;
40
- export declare function parseCommonTableExpression(ctx: ParseContext, name: string, expression: CommonTableExpression<any, any>): CommonTableExpressionNode;
39
+ export declare function parseCommonTableExpression(name: string, expression: CommonTableExpression<any, any>): CommonTableExpressionNode;
41
40
  export {};
@@ -1,8 +1,9 @@
1
1
  /// <reference types="./with-parser.d.ts" />
2
2
  import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
3
3
  import { CommonTableExpressionNameNode } from '../operation-node/common-table-expression-name-node.js';
4
- export function parseCommonTableExpression(ctx, name, expression) {
5
- const builder = expression(ctx.createQueryCreator());
4
+ import { createQueryCreator } from './parse-utils.js';
5
+ export function parseCommonTableExpression(name, expression) {
6
+ const builder = expression(createQueryCreator());
6
7
  return CommonTableExpressionNode.create(parseCommonTableExpressionName(name), builder.toOperationNode());
7
8
  }
8
9
  function parseCommonTableExpressionName(name) {