kysely 0.11.4 → 0.12.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 (192) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +1 -0
  3. package/dist/cjs/dynamic/dynamic-reference-builder.js +9 -1
  4. package/dist/cjs/dynamic/dynamic.d.ts +6 -7
  5. package/dist/cjs/dynamic/dynamic.js +6 -7
  6. package/dist/cjs/index.d.ts +13 -3
  7. package/dist/cjs/index.js +11 -1
  8. package/dist/cjs/kysely.d.ts +19 -11
  9. package/dist/cjs/kysely.js +32 -9
  10. package/dist/cjs/migration/migration.d.ts +2 -2
  11. package/dist/cjs/operation-node/create-table-node.d.ts +6 -2
  12. package/dist/cjs/operation-node/create-table-node.js +6 -6
  13. package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
  14. package/dist/cjs/operation-node/insert-query-node.d.ts +4 -4
  15. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  16. package/dist/cjs/operation-node/operation-node-transformer.js +11 -1
  17. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  18. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  19. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  20. package/dist/cjs/operation-node/query-node.d.ts +0 -2
  21. package/dist/cjs/operation-node/query-node.js +0 -10
  22. package/dist/cjs/operation-node/values-node.d.ts +15 -0
  23. package/dist/cjs/operation-node/values-node.js +18 -0
  24. package/dist/cjs/parser/complex-expression-parser.d.ts +9 -0
  25. package/dist/cjs/parser/complex-expression-parser.js +25 -0
  26. package/dist/cjs/parser/filter-parser.d.ts +13 -4
  27. package/dist/cjs/parser/filter-parser.js +21 -24
  28. package/dist/cjs/parser/insert-values-parser.d.ts +5 -9
  29. package/dist/cjs/parser/insert-values-parser.js +27 -41
  30. package/dist/cjs/parser/order-by-parser.d.ts +1 -1
  31. package/dist/cjs/parser/parse-context.d.ts +8 -8
  32. package/dist/cjs/parser/parse-context.js +10 -10
  33. package/dist/cjs/parser/reference-parser.d.ts +8 -7
  34. package/dist/cjs/parser/reference-parser.js +8 -17
  35. package/dist/cjs/parser/returning-parser.d.ts +1 -5
  36. package/dist/cjs/parser/select-parser.d.ts +12 -14
  37. package/dist/cjs/parser/select-parser.js +5 -9
  38. package/dist/cjs/parser/table-parser.d.ts +9 -11
  39. package/dist/cjs/parser/table-parser.js +2 -8
  40. package/dist/cjs/parser/union-parser.d.ts +2 -2
  41. package/dist/cjs/parser/union-parser.js +1 -6
  42. package/dist/cjs/parser/update-set-parser.d.ts +2 -8
  43. package/dist/cjs/parser/update-set-parser.js +6 -26
  44. package/dist/cjs/parser/value-parser.d.ts +9 -6
  45. package/dist/cjs/parser/value-parser.js +7 -30
  46. package/dist/cjs/parser/with-parser.d.ts +6 -3
  47. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  48. package/dist/cjs/query-builder/delete-query-builder.d.ts +102 -0
  49. package/dist/cjs/query-builder/delete-query-builder.js +185 -0
  50. package/dist/cjs/query-builder/expression-builder.d.ts +8 -6
  51. package/dist/cjs/query-builder/expression-builder.js +3 -3
  52. package/dist/cjs/query-builder/function-builder.d.ts +2 -1
  53. package/dist/cjs/query-builder/function-builder.js +2 -1
  54. package/dist/cjs/query-builder/having-interface.d.ts +49 -0
  55. package/dist/cjs/query-builder/having-interface.js +2 -0
  56. package/dist/cjs/query-builder/insert-query-builder.d.ts +439 -0
  57. package/dist/cjs/query-builder/insert-query-builder.js +256 -0
  58. package/dist/cjs/query-builder/insert-result.d.ts +3 -2
  59. package/dist/cjs/query-builder/insert-result.js +3 -2
  60. package/dist/cjs/query-builder/join-builder.d.ts +19 -20
  61. package/dist/cjs/query-builder/join-builder.js +12 -12
  62. package/dist/cjs/query-builder/join-interface.d.ts +133 -0
  63. package/dist/cjs/query-builder/join-interface.js +2 -0
  64. package/dist/cjs/query-builder/no-result-error.d.ts +9 -0
  65. package/dist/cjs/query-builder/no-result-error.js +14 -0
  66. package/dist/cjs/query-builder/returning-interface.d.ts +73 -0
  67. package/dist/cjs/query-builder/returning-interface.js +2 -0
  68. package/dist/cjs/query-builder/select-query-builder.d.ts +711 -0
  69. package/dist/cjs/query-builder/select-query-builder.js +571 -0
  70. package/dist/cjs/query-builder/update-query-builder.d.ts +190 -0
  71. package/dist/cjs/query-builder/update-query-builder.js +279 -0
  72. package/dist/cjs/query-builder/where-interface.d.ts +381 -0
  73. package/dist/cjs/query-builder/where-interface.js +2 -0
  74. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
  75. package/dist/cjs/query-compiler/default-query-compiler.js +22 -5
  76. package/dist/cjs/query-creator.d.ts +42 -40
  77. package/dist/cjs/query-creator.js +33 -28
  78. package/dist/cjs/query-executor/query-executor.d.ts +1 -1
  79. package/dist/cjs/query-executor/query-executor.js +1 -1
  80. package/dist/cjs/raw-builder/raw-builder.d.ts +2 -0
  81. package/dist/cjs/raw-builder/raw-builder.js +6 -0
  82. package/dist/cjs/schema/alter-table-builder.d.ts +2 -2
  83. package/dist/cjs/schema/column-definition-builder.d.ts +27 -20
  84. package/dist/cjs/schema/create-index-builder.d.ts +2 -1
  85. package/dist/cjs/schema/create-index-builder.js +2 -1
  86. package/dist/cjs/schema/create-table-builder.d.ts +26 -9
  87. package/dist/cjs/schema/create-table-builder.js +42 -9
  88. package/dist/cjs/schema/create-view-builder.d.ts +17 -3
  89. package/dist/cjs/schema/create-view-builder.js +25 -16
  90. package/dist/cjs/schema/schema.d.ts +18 -11
  91. package/dist/cjs/schema/schema.js +18 -11
  92. package/dist/cjs/util/log.d.ts +3 -2
  93. package/dist/cjs/util/log.js +8 -15
  94. package/dist/cjs/util/type-utils.d.ts +7 -7
  95. package/dist/esm/dynamic/dynamic-reference-builder.d.ts +1 -0
  96. package/dist/esm/dynamic/dynamic-reference-builder.js +7 -0
  97. package/dist/esm/dynamic/dynamic.d.ts +6 -7
  98. package/dist/esm/dynamic/dynamic.js +6 -7
  99. package/dist/esm/index.d.ts +13 -3
  100. package/dist/esm/index.js +11 -1
  101. package/dist/esm/kysely.d.ts +19 -11
  102. package/dist/esm/kysely.js +32 -9
  103. package/dist/esm/migration/migration.d.ts +2 -2
  104. package/dist/esm/operation-node/create-table-node.d.ts +6 -2
  105. package/dist/esm/operation-node/create-table-node.js +6 -6
  106. package/dist/esm/operation-node/create-view-node.d.ts +1 -0
  107. package/dist/esm/operation-node/insert-query-node.d.ts +4 -4
  108. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  109. package/dist/esm/operation-node/operation-node-transformer.js +11 -1
  110. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  111. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  112. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  113. package/dist/esm/operation-node/query-node.d.ts +0 -2
  114. package/dist/esm/operation-node/query-node.js +0 -10
  115. package/dist/esm/operation-node/values-node.d.ts +15 -0
  116. package/dist/esm/operation-node/values-node.js +15 -0
  117. package/dist/esm/parser/complex-expression-parser.d.ts +9 -0
  118. package/dist/esm/parser/complex-expression-parser.js +20 -0
  119. package/dist/esm/parser/filter-parser.d.ts +13 -4
  120. package/dist/esm/parser/filter-parser.js +21 -24
  121. package/dist/esm/parser/insert-values-parser.d.ts +5 -9
  122. package/dist/esm/parser/insert-values-parser.js +27 -40
  123. package/dist/esm/parser/order-by-parser.d.ts +1 -1
  124. package/dist/esm/parser/parse-context.d.ts +8 -8
  125. package/dist/esm/parser/parse-context.js +10 -10
  126. package/dist/esm/parser/reference-parser.d.ts +8 -7
  127. package/dist/esm/parser/reference-parser.js +9 -18
  128. package/dist/esm/parser/returning-parser.d.ts +1 -5
  129. package/dist/esm/parser/select-parser.d.ts +12 -14
  130. package/dist/esm/parser/select-parser.js +6 -10
  131. package/dist/esm/parser/table-parser.d.ts +9 -11
  132. package/dist/esm/parser/table-parser.js +3 -9
  133. package/dist/esm/parser/union-parser.d.ts +2 -2
  134. package/dist/esm/parser/union-parser.js +1 -6
  135. package/dist/esm/parser/update-set-parser.d.ts +2 -8
  136. package/dist/esm/parser/update-set-parser.js +5 -24
  137. package/dist/esm/parser/value-parser.d.ts +9 -6
  138. package/dist/esm/parser/value-parser.js +8 -31
  139. package/dist/esm/parser/with-parser.d.ts +6 -3
  140. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  141. package/dist/esm/query-builder/delete-query-builder.d.ts +102 -0
  142. package/dist/esm/query-builder/delete-query-builder.js +181 -0
  143. package/dist/esm/query-builder/expression-builder.d.ts +8 -6
  144. package/dist/esm/query-builder/expression-builder.js +3 -3
  145. package/dist/esm/query-builder/function-builder.d.ts +2 -1
  146. package/dist/esm/query-builder/function-builder.js +2 -1
  147. package/dist/esm/query-builder/having-interface.d.ts +49 -0
  148. package/dist/esm/query-builder/having-interface.js +1 -0
  149. package/dist/esm/query-builder/insert-query-builder.d.ts +439 -0
  150. package/dist/esm/query-builder/insert-query-builder.js +252 -0
  151. package/dist/esm/query-builder/insert-result.d.ts +3 -2
  152. package/dist/esm/query-builder/insert-result.js +3 -2
  153. package/dist/esm/query-builder/join-builder.d.ts +19 -20
  154. package/dist/esm/query-builder/join-builder.js +12 -12
  155. package/dist/esm/query-builder/join-interface.d.ts +133 -0
  156. package/dist/esm/query-builder/join-interface.js +1 -0
  157. package/dist/esm/query-builder/no-result-error.d.ts +9 -0
  158. package/dist/esm/query-builder/no-result-error.js +10 -0
  159. package/dist/esm/query-builder/returning-interface.d.ts +73 -0
  160. package/dist/esm/query-builder/returning-interface.js +1 -0
  161. package/dist/esm/query-builder/select-query-builder.d.ts +711 -0
  162. package/dist/esm/query-builder/select-query-builder.js +566 -0
  163. package/dist/esm/query-builder/update-query-builder.d.ts +190 -0
  164. package/dist/esm/query-builder/update-query-builder.js +275 -0
  165. package/dist/esm/query-builder/where-interface.d.ts +381 -0
  166. package/dist/esm/query-builder/where-interface.js +1 -0
  167. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
  168. package/dist/esm/query-compiler/default-query-compiler.js +22 -5
  169. package/dist/esm/query-creator.d.ts +42 -40
  170. package/dist/esm/query-creator.js +33 -28
  171. package/dist/esm/query-executor/query-executor.d.ts +1 -1
  172. package/dist/esm/query-executor/query-executor.js +1 -1
  173. package/dist/esm/raw-builder/raw-builder.d.ts +2 -0
  174. package/dist/esm/raw-builder/raw-builder.js +6 -0
  175. package/dist/esm/schema/alter-table-builder.d.ts +2 -2
  176. package/dist/esm/schema/column-definition-builder.d.ts +27 -20
  177. package/dist/esm/schema/create-index-builder.d.ts +2 -1
  178. package/dist/esm/schema/create-index-builder.js +2 -1
  179. package/dist/esm/schema/create-table-builder.d.ts +26 -9
  180. package/dist/esm/schema/create-table-builder.js +43 -10
  181. package/dist/esm/schema/create-view-builder.d.ts +17 -3
  182. package/dist/esm/schema/create-view-builder.js +25 -16
  183. package/dist/esm/schema/schema.d.ts +18 -11
  184. package/dist/esm/schema/schema.js +18 -11
  185. package/dist/esm/util/log.d.ts +3 -2
  186. package/dist/esm/util/log.js +7 -14
  187. package/dist/esm/util/type-utils.d.ts +7 -7
  188. package/package.json +3 -3
  189. package/dist/cjs/query-builder/query-builder.d.ts +0 -1728
  190. package/dist/cjs/query-builder/query-builder.js +0 -1067
  191. package/dist/esm/query-builder/query-builder.d.ts +0 -1728
  192. package/dist/esm/query-builder/query-builder.js +0 -1061
@@ -0,0 +1,20 @@
1
+ import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
2
+ import { isFunction } from '../util/object-utils.js';
3
+ export function parseComplexExpression(ctx, exp) {
4
+ if (isOperationNodeSource(exp)) {
5
+ return exp.toOperationNode();
6
+ }
7
+ else if (isFunction(exp)) {
8
+ return exp(ctx.createExpressionBuilder()).toOperationNode();
9
+ }
10
+ throw new Error(`invalid expression: ${JSON.stringify(exp)}`);
11
+ }
12
+ export function parseAliasedComplexExpression(ctx, exp) {
13
+ if (isOperationNodeSource(exp)) {
14
+ return exp.toOperationNode();
15
+ }
16
+ else if (isFunction(exp)) {
17
+ return exp(ctx.createExpressionBuilder()).toOperationNode();
18
+ }
19
+ throw new Error(`invalid aliased expression: ${JSON.stringify(exp)}`);
20
+ }
@@ -1,15 +1,24 @@
1
1
  import { FilterNode } from '../operation-node/filter-node.js';
2
- import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
2
+ import { AnyRawBuilder } from '../util/type-utils.js';
3
3
  import { Operator } from '../operation-node/operator-node.js';
4
- import { ReferenceExpression } from './reference-parser.js';
4
+ import { ExtractTypeFromReferenceExpression, ReferenceExpression } from './reference-parser.js';
5
+ import { ValueExpression, ValueExpressionOrList } from './value-parser.js';
5
6
  import { FilterExpressionNode } from '../operation-node/operation-node-utils.js';
6
7
  import { ParseContext } from './parse-context.js';
7
- export declare type ExistsExpression<DB, TB extends keyof DB> = AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB>;
8
+ import { WhereInterface } from '../query-builder/where-interface.js';
9
+ import { HavingInterface } from '../query-builder/having-interface.js';
10
+ export declare type FilterValueExpression<DB, TB extends keyof DB, RE> = ValueExpression<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
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>;
13
+ export declare type WhereGrouper<DB, TB extends keyof DB> = (qb: WhereInterface<DB, TB>) => WhereInterface<DB, TB>;
14
+ export declare type HavingGrouper<DB, TB extends keyof DB> = (qb: HavingInterface<DB, TB>) => HavingInterface<DB, TB>;
8
15
  export declare type FilterOperator = Operator | AnyRawBuilder;
16
+ declare type FilterType = 'where' | 'having' | 'on';
9
17
  export declare function parseWhereFilter(ctx: ParseContext, args: any[]): FilterExpressionNode;
10
18
  export declare function parseHavingFilter(ctx: ParseContext, args: any[]): FilterExpressionNode;
11
19
  export declare function parseOnFilter(ctx: ParseContext, args: any[]): FilterExpressionNode;
12
20
  export declare function parseReferenceFilter(ctx: ParseContext, lhs: ReferenceExpression<any, any>, op: FilterOperator, rhs: ReferenceExpression<any, any>): FilterNode;
13
21
  export declare function parseExistFilter(ctx: ParseContext, arg: ExistsExpression<any, any>): FilterNode;
14
22
  export declare function parseNotExistFilter(ctx: ParseContext, arg: ExistsExpression<any, any>): FilterNode;
15
- export declare function parseFilter(ctx: ParseContext, type: 'where' | 'having' | 'on', args: any[]): FilterExpressionNode;
23
+ export declare function parseFilter(ctx: ParseContext, type: FilterType, args: any[]): FilterExpressionNode;
24
+ export {};
@@ -6,7 +6,6 @@ import { OperatorNode, OPERATORS, } from '../operation-node/operator-node.js';
6
6
  import { ParensNode } from '../operation-node/parens-node.js';
7
7
  import { parseReferenceExpression, } from './reference-parser.js';
8
8
  import { parseValueExpressionOrList, } from './value-parser.js';
9
- import { SelectQueryNode } from '../operation-node/select-query-node.js';
10
9
  import { ValueNode } from '../operation-node/value-node.js';
11
10
  export function parseWhereFilter(ctx, args) {
12
11
  return parseFilter(ctx, 'where', args);
@@ -31,18 +30,9 @@ export function parseFilter(ctx, type, args) {
31
30
  return parseThreeArgFilter(ctx, args[0], args[1], args[2]);
32
31
  }
33
32
  else if (args.length === 1) {
34
- const arg = args[0];
35
- if (isFunction(arg)) {
36
- return GROUP_PARSERS[type](ctx, arg);
37
- }
38
- else if (isOperationNodeSource(arg)) {
39
- const node = arg.toOperationNode();
40
- if (RawNode.is(node)) {
41
- return node;
42
- }
43
- }
33
+ return parseOneArgFilter(ctx, type, args[0]);
44
34
  }
45
- throw new Error(`invalid arguments passed to a '${type}' method: ${JSON.stringify(args)}`);
35
+ throw createFilterError(type, args);
46
36
  }
47
37
  function parseThreeArgFilter(ctx, left, op, right) {
48
38
  if ((op === 'is' || op === 'is not') && (isNull(right) || isBoolean(right))) {
@@ -54,10 +44,8 @@ function parseIsFilter(ctx, left, op, right) {
54
44
  return FilterNode.create(parseReferenceExpression(ctx, left), parseFilterOperator(op), ValueNode.createImmediate(right));
55
45
  }
56
46
  function parseFilterOperator(op) {
57
- if (isString(op)) {
58
- if (OPERATORS.includes(op)) {
59
- return OperatorNode.create(op);
60
- }
47
+ if (isString(op) && OPERATORS.includes(op)) {
48
+ return OperatorNode.create(op);
61
49
  }
62
50
  else if (isOperationNodeSource(op)) {
63
51
  return op.toOperationNode();
@@ -65,17 +53,26 @@ function parseFilterOperator(op) {
65
53
  throw new Error(`invalid comparison operator ${JSON.stringify(op)} passed to a filter method`);
66
54
  }
67
55
  function parseExistExpression(ctx, type, arg) {
68
- const node = isFunction(arg)
69
- ? arg(ctx.createExpressionBuilder()).toOperationNode()
70
- : arg.toOperationNode();
71
- if (!SelectQueryNode.is(node) && !RawNode.is(node)) {
72
- throw new Error('invalid where exists arg');
56
+ return FilterNode.create(undefined, OperatorNode.create(type), parseValueExpressionOrList(ctx, arg));
57
+ }
58
+ function parseOneArgFilter(ctx, type, arg) {
59
+ if (isFunction(arg)) {
60
+ return GROUP_PARSERS[type](ctx, arg);
73
61
  }
74
- return FilterNode.create(undefined, OperatorNode.create(type), node);
62
+ else if (isOperationNodeSource(arg)) {
63
+ const node = arg.toOperationNode();
64
+ if (RawNode.is(node)) {
65
+ return node;
66
+ }
67
+ }
68
+ throw createFilterError(type, arg);
69
+ }
70
+ function createFilterError(type, args) {
71
+ return new Error(`invalid arguments passed to a '${type}' method: ${JSON.stringify(args)}`);
75
72
  }
76
73
  const GROUP_PARSERS = freeze({
77
74
  where(ctx, callback) {
78
- const query = callback(ctx.createSelectQueryBuilder([]));
75
+ const query = callback(ctx.createSelectQueryBuilder());
79
76
  const queryNode = query.toOperationNode();
80
77
  if (!queryNode.where) {
81
78
  throw new Error('no `where` methods called insided a group callback');
@@ -83,7 +80,7 @@ const GROUP_PARSERS = freeze({
83
80
  return ParensNode.create(queryNode.where.where);
84
81
  },
85
82
  having(ctx, callback) {
86
- const query = callback(ctx.createSelectQueryBuilder([]));
83
+ const query = callback(ctx.createSelectQueryBuilder());
87
84
  const queryNode = query.toOperationNode();
88
85
  if (!queryNode.having) {
89
86
  throw new Error('no `having` methods called insided a group callback');
@@ -1,16 +1,12 @@
1
1
  import { ColumnNode } from '../operation-node/column-node.js';
2
- import { InsertValuesNode } from '../operation-node/insert-query-node.js';
3
- import { RawNode } from '../operation-node/raw-node.js';
4
- import { SelectQueryNode } from '../operation-node/select-query-node.js';
5
- import { ValueNode } from '../operation-node/value-node.js';
6
- import { AnyQueryBuilder, AnyRawBuilder, GeneratedPlaceholder, QueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
7
- import { PrimitiveValue } from '../util/object-utils.js';
2
+ import { GeneratedPlaceholder } from '../util/type-utils.js';
8
3
  import { ParseContext } from './parse-context.js';
4
+ import { ValueExpression } from './value-parser.js';
5
+ import { ValuesNode } from '../operation-node/values-node.js';
9
6
  export declare type InsertObject<DB, TB extends keyof DB> = {
10
7
  [C in keyof DB[TB]]: InsertValueExpression<DB, TB, DB[TB][C]>;
11
8
  };
12
9
  export declare type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | ReadonlyArray<InsertObject<DB, TB>>;
13
- declare type InsertValueExpression<DB, TB extends keyof DB, T> = T | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB> | GeneratedPlaceholder;
14
- export declare function parseInsertObjectOrList(ctx: ParseContext, args: InsertObjectOrList<any, any>): [ReadonlyArray<ColumnNode>, ReadonlyArray<InsertValuesNode>];
15
- export declare function parseInsertValueExpression(ctx: ParseContext, value: InsertValueExpression<any, any, PrimitiveValue>): ValueNode | RawNode | SelectQueryNode;
10
+ declare type InsertValueExpression<DB, TB extends keyof DB, T> = ValueExpression<DB, TB, T> | GeneratedPlaceholder;
11
+ export declare function parseInsertObjectOrList(ctx: ParseContext, args: InsertObjectOrList<any, any>): [ReadonlyArray<ColumnNode>, ValuesNode];
16
12
  export {};
@@ -1,57 +1,44 @@
1
1
  import { ColumnNode } from '../operation-node/column-node.js';
2
- import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
3
2
  import { PrimitiveValueListNode } from '../operation-node/primitive-value-list-node.js';
4
- import { QueryNode } from '../operation-node/query-node.js';
5
3
  import { ValueListNode } from '../operation-node/value-list-node.js';
6
- import { ValueNode } from '../operation-node/value-node.js';
7
4
  import { isGeneratedPlaceholder } from '../util/generated-placeholder.js';
8
- import { isFunction, isPrimitive, } from '../util/object-utils.js';
5
+ import { freeze, isPrimitive } from '../util/object-utils.js';
6
+ import { parseValueExpression } from './value-parser.js';
7
+ import { ValuesNode } from '../operation-node/values-node.js';
9
8
  export function parseInsertObjectOrList(ctx, args) {
10
9
  return parseInsertColumnsAndValues(ctx, Array.isArray(args) ? args : [args]);
11
10
  }
12
11
  function parseInsertColumnsAndValues(ctx, rows) {
13
- const columns = [];
14
- const values = [];
12
+ const columns = parseColumnNamesAndIndexes(rows);
13
+ return [
14
+ freeze([...columns.keys()].map(ColumnNode.create)),
15
+ ValuesNode.create(rows.map((row) => parseRowValues(ctx, row, columns))),
16
+ ];
17
+ }
18
+ function parseColumnNamesAndIndexes(rows) {
19
+ const columns = new Map();
15
20
  for (const row of rows) {
16
- for (const column of Object.keys(row)) {
17
- const value = row[column];
18
- if (!columns.includes(column) && !isGeneratedPlaceholder(value)) {
19
- columns.push(column);
21
+ const cols = Object.keys(row);
22
+ for (const col of cols) {
23
+ if (!columns.has(col) && !isGeneratedPlaceholder(row[col])) {
24
+ columns.set(col, columns.size);
20
25
  }
21
26
  }
22
27
  }
23
- for (const row of rows) {
24
- const rowValues = columns.map(() => null);
25
- for (const column of Object.keys(row)) {
26
- const columnIdx = columns.indexOf(column);
27
- if (columnIdx !== -1) {
28
- rowValues[columnIdx] = row[column];
29
- }
30
- }
31
- if (rowValues.every(isPrimitive)) {
32
- values.push(PrimitiveValueListNode.create(rowValues));
33
- }
34
- else {
35
- values.push(ValueListNode.create(rowValues.map((it) => parseInsertValueExpression(ctx, it))));
36
- }
37
- }
38
- return [columns.map(ColumnNode.create), values];
28
+ return columns;
39
29
  }
40
- export function parseInsertValueExpression(ctx, value) {
41
- if (isPrimitive(value)) {
42
- return ValueNode.create(value);
43
- }
44
- else if (isOperationNodeSource(value)) {
45
- const node = value.toOperationNode();
46
- if (!QueryNode.isMutating(node)) {
47
- return node;
30
+ function parseRowValues(ctx, row, columns) {
31
+ const rowColumns = Object.keys(row);
32
+ const rowValues = new Array(columns.size).fill(null);
33
+ for (const col of rowColumns) {
34
+ const columnIdx = columns.get(col);
35
+ const value = row[col];
36
+ if (columnIdx !== undefined && !isGeneratedPlaceholder(value)) {
37
+ rowValues[columnIdx] = value;
48
38
  }
49
39
  }
50
- else if (isFunction(value)) {
51
- const node = value(ctx.createExpressionBuilder()).toOperationNode();
52
- if (!QueryNode.isMutating(node)) {
53
- return node;
54
- }
40
+ if (rowValues.every(isPrimitive)) {
41
+ return PrimitiveValueListNode.create(rowValues);
55
42
  }
56
- throw new Error(`unsupported value for insert object ${JSON.stringify(value)}`);
43
+ return ValueListNode.create(rowValues.map((it) => parseValueExpression(ctx, it)));
57
44
  }
@@ -3,6 +3,6 @@ import { AnyRawBuilder } from '../util/type-utils.js';
3
3
  import { ParseContext } from './parse-context.js';
4
4
  import { ReferenceExpression } from './reference-parser.js';
5
5
  export declare type OrderByDirection = 'asc' | 'desc';
6
- export declare type OrderByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | keyof O;
6
+ export declare type OrderByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | (keyof O & string);
7
7
  export declare type OrderByDirectionExpression = OrderByDirection | AnyRawBuilder;
8
8
  export declare function parseOrderBy(ctx: ParseContext, orderBy: OrderByExpression<any, any, any>, direction?: OrderByDirectionExpression): OrderByItemNode;
@@ -1,7 +1,7 @@
1
1
  import { DialectAdapter } from '../dialect/dialect-adapter.js';
2
2
  import { JoinType } from '../operation-node/join-node.js';
3
3
  import { JoinBuilder } from '../query-builder/join-builder.js';
4
- import { QueryBuilder } from '../query-builder/query-builder.js';
4
+ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
5
5
  import { ExpressionBuilder } from '../query-builder/expression-builder.js';
6
6
  import { QueryCreator } from '../query-creator.js';
7
7
  import { TableExpression } from './table-parser.js';
@@ -14,11 +14,7 @@ export interface ParseContext {
14
14
  /**
15
15
  * Creates a select query builder with a {@link NoopQueryExecutor}.
16
16
  */
17
- createSelectQueryBuilder(tables: ReadonlyArray<TableExpression<any, any>>): QueryBuilder<any, any>;
18
- /**
19
- * Creates an instance of a join builder.
20
- */
21
- createJoinBuilder(joinType: JoinType, table: TableExpression<any, any>): JoinBuilder<any, any>;
17
+ createSelectQueryBuilder(): SelectQueryBuilder<any, any, any>;
22
18
  /**
23
19
  * Creates an expression builder for building stuff like subqueries.
24
20
  * {@link NoopQueryExecutor} is used as the executor and the queries
@@ -29,13 +25,17 @@ export interface ParseContext {
29
25
  * Creates a query creator with a {@link NoopQueryExecutor}.
30
26
  */
31
27
  createQueryCreator(): QueryCreator<any>;
28
+ /**
29
+ * Creates an instance of a join builder.
30
+ */
31
+ createJoinBuilder(joinType: JoinType, table: TableExpression<any, any>): JoinBuilder<any, any>;
32
32
  }
33
33
  export declare class DefaultParseContext implements ParseContext {
34
34
  #private;
35
35
  constructor(adapter: DialectAdapter);
36
36
  get adapter(): DialectAdapter;
37
- createSelectQueryBuilder(tables: ReadonlyArray<TableExpression<any, any>>): QueryBuilder<any, any>;
38
- createJoinBuilder(joinType: JoinType, table: TableExpression<any, any>): JoinBuilder<any, any>;
37
+ createSelectQueryBuilder(): SelectQueryBuilder<any, any, any>;
39
38
  createExpressionBuilder(): ExpressionBuilder<any, any>;
40
39
  createQueryCreator(): QueryCreator<any>;
40
+ createJoinBuilder(joinType: JoinType, table: TableExpression<any, any>): JoinBuilder<any, any>;
41
41
  }
@@ -1,7 +1,7 @@
1
1
  import { JoinNode } from '../operation-node/join-node.js';
2
2
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
3
3
  import { JoinBuilder } from '../query-builder/join-builder.js';
4
- import { QueryBuilder } from '../query-builder/query-builder.js';
4
+ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
5
5
  import { ExpressionBuilder } from '../query-builder/expression-builder.js';
6
6
  import { QueryCreator } from '../query-creator.js';
7
7
  import { NoopQueryExecutor } from '../query-executor/noop-query-executor.js';
@@ -17,18 +17,12 @@ export class DefaultParseContext {
17
17
  get adapter() {
18
18
  return this.#adapter;
19
19
  }
20
- createSelectQueryBuilder(tables) {
21
- return new QueryBuilder({
20
+ createSelectQueryBuilder() {
21
+ return new SelectQueryBuilder({
22
22
  queryId: createQueryId(),
23
23
  executor: this.#noopExecutor,
24
24
  parseContext: this,
25
- queryNode: SelectQueryNode.create(parseTableExpressionOrList(this, tables)),
26
- });
27
- }
28
- createJoinBuilder(joinType, table) {
29
- return new JoinBuilder({
30
- joinNode: JoinNode.create(joinType, parseTableExpression(this, table)),
31
- parseContext: this,
25
+ queryNode: SelectQueryNode.create(parseTableExpressionOrList(this, [])),
32
26
  });
33
27
  }
34
28
  createExpressionBuilder() {
@@ -43,4 +37,10 @@ export class DefaultParseContext {
43
37
  parseContext: this,
44
38
  });
45
39
  }
40
+ createJoinBuilder(joinType, table) {
41
+ return new JoinBuilder({
42
+ joinNode: JoinNode.create(joinType, parseTableExpression(this, table)),
43
+ parseContext: this,
44
+ });
45
+ }
46
46
  }
@@ -3,18 +3,19 @@ import { ColumnNode } from '../operation-node/column-node.js';
3
3
  import { ReferenceExpressionNode } from '../operation-node/operation-node-utils.js';
4
4
  import { ReferenceNode } from '../operation-node/reference-node.js';
5
5
  import { PrimitiveValue } from '../util/object-utils.js';
6
- import { AnyColumn, AnyColumnWithTable, AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory, RowType, ValueType } from '../util/type-utils.js';
7
- import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
6
+ import { AnyColumn, AnyColumnWithTable, RowType, ValueType } from '../util/type-utils.js';
8
7
  import { RawBuilder } from '../raw-builder/raw-builder.js';
9
- import { QueryBuilder } from '../query-builder/query-builder.js';
8
+ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
10
9
  import { ParseContext } from './parse-context.js';
11
- export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB> | DynamicReferenceBuilder<any>;
10
+ import { ComplexExpression } from './complex-expression-parser.js';
11
+ import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
12
+ export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | DynamicReferenceBuilder<any> | ComplexExpression<DB, TB>;
12
13
  export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
13
14
  export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
14
- export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends QueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => QueryBuilder<any, any, infer O> ? ValueType<O> : PrimitiveValue;
15
- declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, S extends string, R = RowType<DB, TB>> = S extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : S extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : S extends keyof R ? R[S] : PrimitiveValue;
15
+ export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? 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> : PrimitiveValue;
16
+ declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string, R = RowType<DB, TB>> = 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 keyof R ? R[RE] : PrimitiveValue;
16
17
  export declare function parseReferenceExpressionOrList(ctx: ParseContext, arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
17
- export declare function parseReferenceExpression(ctx: ParseContext, arg: ReferenceExpression<any, any>): ReferenceExpressionNode;
18
+ export declare function parseReferenceExpression(ctx: ParseContext, exp: ReferenceExpression<any, any>): ReferenceExpressionNode;
18
19
  export declare function parseStringReference(ref: string): ColumnNode | ReferenceNode;
19
20
  export declare function parseAliasedStringReference(ref: string): ColumnNode | ReferenceNode | AliasNode;
20
21
  export declare function parseColumnName(column: AnyColumn<any, any>): ColumnNode;
@@ -1,10 +1,10 @@
1
1
  import { AliasNode } from '../operation-node/alias-node.js';
2
2
  import { ColumnNode } from '../operation-node/column-node.js';
3
- import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
4
3
  import { ReferenceNode } from '../operation-node/reference-node.js';
5
4
  import { TableNode } from '../operation-node/table-node.js';
6
- import { isFunction, isReadonlyArray, isString, } from '../util/object-utils.js';
7
- import { QueryNode } from '../operation-node/query-node.js';
5
+ import { isReadonlyArray, isString, } from '../util/object-utils.js';
6
+ import { parseComplexExpression, } from './complex-expression-parser.js';
7
+ import { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';
8
8
  export function parseReferenceExpressionOrList(ctx, arg) {
9
9
  if (isReadonlyArray(arg)) {
10
10
  return arg.map((it) => parseReferenceExpression(ctx, it));
@@ -13,23 +13,14 @@ export function parseReferenceExpressionOrList(ctx, arg) {
13
13
  return [parseReferenceExpression(ctx, arg)];
14
14
  }
15
15
  }
16
- export function parseReferenceExpression(ctx, arg) {
17
- if (isString(arg)) {
18
- return parseStringReference(arg);
16
+ export function parseReferenceExpression(ctx, exp) {
17
+ if (isString(exp)) {
18
+ return parseStringReference(exp);
19
19
  }
20
- else if (isOperationNodeSource(arg)) {
21
- const node = arg.toOperationNode();
22
- if (!QueryNode.isMutating(node)) {
23
- return node;
24
- }
25
- }
26
- else if (isFunction(arg)) {
27
- const node = arg(ctx.createExpressionBuilder()).toOperationNode();
28
- if (!QueryNode.isMutating(node)) {
29
- return node;
30
- }
20
+ else if (isDynamicReferenceBuilder(exp)) {
21
+ return exp.toOperationNode();
31
22
  }
32
- throw new Error(`invalid reference expression ${JSON.stringify(arg)}`);
23
+ return parseComplexExpression(ctx, exp);
33
24
  }
34
25
  export function parseStringReference(ref) {
35
26
  const COLUMN_SEPARATOR = '.';
@@ -1,9 +1,5 @@
1
1
  import { DeleteResult } from '../query-builder/delete-result.js';
2
2
  import { InsertResult } from '../query-builder/insert-result.js';
3
- import { QueryBuilder } from '../query-builder/query-builder.js';
4
3
  import { UpdateResult } from '../query-builder/update-result.js';
5
4
  import { Selection } from './select-parser.js';
6
- /**
7
- * `returning` method output query builder type
8
- */
9
- export declare type QueryBuilderWithReturning<DB, TB extends keyof DB, O, S> = QueryBuilder<DB, TB, O extends InsertResult ? Selection<DB, TB, S> : O extends DeleteResult ? Selection<DB, TB, S> : O extends UpdateResult ? Selection<DB, TB, S> : O & Selection<DB, TB, S>>;
5
+ export declare type ReturningRow<DB, TB extends keyof DB, O, SE> = O extends InsertResult ? Selection<DB, TB, SE> : O extends DeleteResult ? Selection<DB, TB, SE> : O extends UpdateResult ? Selection<DB, TB, SE> : O & Selection<DB, TB, SE>;
@@ -1,30 +1,28 @@
1
1
  import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
2
- import { AliasedQueryBuilder, QueryBuilder } from '../query-builder/query-builder.js';
2
+ import { AliasedQueryBuilder, SelectQueryBuilder } from '../query-builder/select-query-builder.js';
3
3
  import { SelectionNode } from '../operation-node/selection-node.js';
4
- import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedColumn, AnyAliasedColumnWithTable, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, AnyColumn, AnyColumnWithTable, RowType, ValueType } from '../util/type-utils.js';
4
+ import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, RowType, ValueType } from '../util/type-utils.js';
5
5
  import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
6
6
  import { ParseContext } from './parse-context.js';
7
- /**
8
- * A selection expression.
9
- */
10
- export declare type SelectExpression<DB, TB extends keyof DB> = AnyAliasedColumnWithTable<DB, TB> | AnyAliasedColumn<DB, TB> | AnyColumnWithTable<DB, TB> | AnyColumn<DB, TB> | AnyAliasedRawBuilder | AliasedRawBuilderFactory<DB, TB> | AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB> | DynamicReferenceBuilder<any>;
7
+ import { AliasedComplexExpression } from './complex-expression-parser.js';
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>;
11
9
  export declare type SelectExpressionOrList<DB, TB extends keyof DB> = SelectExpression<DB, TB> | ReadonlyArray<SelectExpression<DB, TB>>;
12
10
  /**
13
11
  * Given a selection expression returns a query builder type that
14
12
  * has the selection.
15
13
  */
16
- export declare type QueryBuilderWithSelection<DB, TB extends keyof DB, O, S> = QueryBuilder<DB, TB, O & Selection<DB, TB, S>>;
14
+ export declare type QueryBuilderWithSelection<DB, TB extends keyof DB, O, SE> = SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
17
15
  /**
18
16
  * `selectAll` output query builder type.
19
17
  */
20
- export declare type SelectAllQueryBuilder<DB, TB extends keyof DB, O, S extends keyof DB> = QueryBuilder<DB, TB, O & RowType<DB, S>>;
21
- export declare type Selection<DB, TB extends keyof DB, S> = {
22
- [A in ExtractAliasFromSelectExpression<S>]: ExtractTypeFromSelectExpression<DB, TB, S, A>;
18
+ export declare type SelectAllQueryBuilder<DB, TB extends keyof DB, O, S extends keyof DB> = SelectQueryBuilder<DB, TB, O & RowType<DB, S>>;
19
+ export declare type Selection<DB, TB extends keyof DB, SE> = {
20
+ [A in ExtractAliasFromSelectExpression<SE>]: ExtractTypeFromSelectExpression<DB, TB, SE, A>;
23
21
  };
24
- declare type ExtractAliasFromSelectExpression<S> = S extends string ? ExtractAliasFromStringSelectExpression<S> : S extends AliasedRawBuilder<any, infer RA> ? RA : S extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : S extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : S extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : S extends DynamicReferenceBuilder<infer RA> ? ExtractAliasFromStringSelectExpression<RA> : never;
25
- declare type ExtractAliasFromStringSelectExpression<S extends string> = S extends `${string}.${string}.${string} as ${infer A}` ? A : S extends `${string}.${string} as ${infer A}` ? A : S extends `${string} as ${infer A}` ? A : S extends `${string}.${string}.${infer C}` ? C : S extends `${string}.${infer C}` ? C : S;
26
- declare type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, S, A extends keyof any> = S extends string ? ExtractTypeFromStringSelectExpression<DB, TB, S, A> : S extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : S extends (qb: any) => AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : S extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : S extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : S extends DynamicReferenceBuilder<infer RA> ? A extends ExtractAliasFromStringSelectExpression<RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA, A> | undefined : never : never;
27
- declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, S extends string, A extends keyof any, R = RowType<DB, TB>> = S extends `${infer SC}.${infer T}.${infer C} as ${infer RA}` ? RA extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : S extends `${infer T}.${infer C} as ${infer RA}` ? RA extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : S extends `${infer C} as ${infer RA}` ? RA extends A ? C extends keyof R ? R[C] : never : never : S extends `${infer SC}.${infer T}.${infer C}` ? C extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : S extends `${infer T}.${infer C}` ? C extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : S extends A ? S extends keyof R ? R[S] : never : never;
22
+ declare type ExtractAliasFromSelectExpression<SE> = SE extends string ? ExtractAliasFromStringSelectExpression<SE> : SE extends AliasedRawBuilder<any, infer RA> ? RA : SE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : SE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : SE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : SE extends DynamicReferenceBuilder<infer RA> ? ExtractAliasFromStringSelectExpression<RA> : never;
23
+ declare type ExtractAliasFromStringSelectExpression<SE extends string> = SE extends `${string}.${string}.${string} as ${infer A}` ? A : SE extends `${string}.${string} as ${infer A}` ? A : SE extends `${string} as ${infer A}` ? A : SE extends `${string}.${string}.${infer C}` ? C : SE extends `${string}.${infer C}` ? C : SE;
24
+ declare type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, SE, A extends keyof any> = SE extends string ? ExtractTypeFromStringSelectExpression<DB, TB, SE, A> : SE extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : SE extends (qb: any) => AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : SE extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends DynamicReferenceBuilder<infer RA> ? A extends ExtractAliasFromStringSelectExpression<RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA, A> | undefined : never : never;
25
+ declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, SE extends string, A extends keyof any, R = RowType<DB, TB>> = SE extends `${infer SC}.${infer T}.${infer C} as ${infer RA}` ? RA extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C} as ${infer RA}` ? RA extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends `${infer C} as ${infer RA}` ? RA extends A ? C extends keyof R ? R[C] : never : never : SE extends `${infer SC}.${infer T}.${infer C}` ? C extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C}` ? C extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends A ? SE extends keyof R ? R[SE] : never : never;
28
26
  export declare function parseSelectExpressionOrList(ctx: ParseContext, selection: SelectExpressionOrList<any, any>): SelectionNode[];
29
27
  export declare function parseSelectAll(table?: string | string[]): SelectionNode[];
30
28
  export {};
@@ -1,7 +1,8 @@
1
- import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
2
- import { isFunction, isReadonlyArray, isString } from '../util/object-utils.js';
1
+ import { isReadonlyArray, isString } from '../util/object-utils.js';
3
2
  import { SelectionNode } from '../operation-node/selection-node.js';
4
3
  import { parseAliasedStringReference } from './reference-parser.js';
4
+ import { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';
5
+ import { parseAliasedComplexExpression, } from './complex-expression-parser.js';
5
6
  export function parseSelectExpressionOrList(ctx, selection) {
6
7
  if (isReadonlyArray(selection)) {
7
8
  return selection.map((it) => parseSelectExpression(ctx, it));
@@ -14,14 +15,11 @@ function parseSelectExpression(ctx, selection) {
14
15
  if (isString(selection)) {
15
16
  return SelectionNode.create(parseAliasedStringReference(selection));
16
17
  }
17
- else if (isOperationNodeSource(selection)) {
18
+ else if (isDynamicReferenceBuilder(selection)) {
18
19
  return SelectionNode.create(selection.toOperationNode());
19
20
  }
20
- else if (isFunction(selection)) {
21
- return SelectionNode.create(selection(ctx.createExpressionBuilder()).toOperationNode());
22
- }
23
21
  else {
24
- throw new Error(`invalid value passed to select method: ${JSON.stringify(selection)}`);
22
+ return SelectionNode.create(parseAliasedComplexExpression(ctx, selection));
25
23
  }
26
24
  }
27
25
  export function parseSelectAll(table) {
@@ -39,7 +37,5 @@ function parseSelectAllArg(table) {
39
37
  if (isString(table)) {
40
38
  return SelectionNode.createSelectAllFromTable(table);
41
39
  }
42
- else {
43
- throw new Error(`invalid value passed to selectAll method: ${JSON.stringify(table)}`);
44
- }
40
+ throw new Error(`invalid value selectAll expression: ${JSON.stringify(table)}`);
45
41
  }
@@ -1,32 +1,30 @@
1
- import { AliasedQueryBuilder, QueryBuilder } from '../query-builder/query-builder.js';
1
+ import { AliasedQueryBuilder } from '../query-builder/select-query-builder.js';
2
2
  import { TableNode } from '../operation-node/table-node.js';
3
- import { AliasedQueryBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, Nullable } from '../util/type-utils.js';
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
6
  import { ParseContext } from './parse-context.js';
7
- export declare type TableExpression<DB, TB extends keyof DB> = TableReference<DB> | AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB>;
7
+ import { AliasedComplexExpression } from './complex-expression-parser.js';
8
+ export declare type TableExpression<DB, TB extends keyof DB> = TableReference<DB> | AliasedComplexExpression<DB, TB>;
8
9
  export declare type TableExpressionOrList<DB, TB extends keyof DB> = TableExpression<DB, TB> | ReadonlyArray<TableExpression<DB, TB>>;
9
- export declare type TableReference<DB> = AnyAliasedTable<DB, any, any> | AnyTable<DB> | AnyAliasedRawBuilder;
10
- export declare type QueryBuilderWithTable<DB, TB extends keyof DB, O, TE> = QueryBuilder<TableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
10
+ export declare type TableReference<DB> = AnyAliasedTable<DB> | AnyTable<DB> | AnyAliasedRawBuilder;
11
11
  export declare type TableExpressionDatabase<DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
12
12
  [C in keyof DB | A]: C extends A ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? DB[C] : never;
13
13
  };
14
- export declare type QueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
15
14
  export declare type LeftJoinTableExpressionDatabase<DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
16
15
  [C in keyof DB | A]: C extends A ? Nullable<ExtractRowTypeFromTableExpression<DB, TE, C>> : C extends keyof DB ? DB[C] : never;
17
16
  };
18
- export declare type QueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
19
17
  export declare type RightJoinTableExpressionDatabase<DB, TB extends keyof DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
20
18
  [C in keyof DB | A]: C extends A ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? C extends TB ? Nullable<DB[C]> : DB[C] : never;
21
19
  };
22
- export declare type QueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
23
20
  export declare type FullJoinTableExpressionDatabase<DB, TB extends keyof DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
24
21
  [C in keyof DB | A]: C extends A ? Nullable<ExtractRowTypeFromTableExpression<DB, TE, C>> : C extends keyof DB ? C extends TB ? Nullable<DB[C]> : DB[C] : never;
25
22
  };
26
23
  export declare type ExtractAliasFromTableExpression<DB, TE> = TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : TE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends AliasedRawBuilder<any, infer RA> ? RA : TE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : never;
27
- 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 : never;
28
- declare type AnyAliasedTable<DB, TB extends keyof DB, A extends string> = TB extends string ? `${TB} as ${A}` : never;
29
- declare type AnyTable<DB> = keyof DB;
24
+ export declare type TableExpressionTables<DB, TB extends keyof DB, TE> = TB | ExtractAliasFromTableExpression<DB, TE>;
25
+ 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
+ declare type AnyAliasedTable<DB> = `${AnyTable<DB>} as ${string}`;
27
+ declare type AnyTable<DB> = keyof DB & string;
30
28
  export declare function parseTableExpressionOrList(ctx: ParseContext, table: TableExpressionOrList<any, any>): TableExpressionNode[];
31
29
  export declare function parseTableExpression(ctx: ParseContext, table: TableExpression<any, any>): TableExpressionNode;
32
30
  export declare function parseAliasedTable(from: string): TableExpressionNode;
@@ -1,7 +1,7 @@
1
- import { isFunction, isReadonlyArray, isString } from '../util/object-utils.js';
1
+ import { isReadonlyArray, isString } from '../util/object-utils.js';
2
2
  import { AliasNode } from '../operation-node/alias-node.js';
3
3
  import { TableNode } from '../operation-node/table-node.js';
4
- import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
4
+ import { parseAliasedComplexExpression, } from './complex-expression-parser.js';
5
5
  export function parseTableExpressionOrList(ctx, table) {
6
6
  if (isReadonlyArray(table)) {
7
7
  return table.map((it) => parseTableExpression(ctx, it));
@@ -14,14 +14,8 @@ export function parseTableExpression(ctx, table) {
14
14
  if (isString(table)) {
15
15
  return parseAliasedTable(table);
16
16
  }
17
- else if (isOperationNodeSource(table)) {
18
- return table.toOperationNode();
19
- }
20
- else if (isFunction(table)) {
21
- return table(ctx.createExpressionBuilder()).toOperationNode();
22
- }
23
17
  else {
24
- throw new Error(`invalid table expression ${JSON.stringify(table)}`);
18
+ return parseAliasedComplexExpression(ctx, table);
25
19
  }
26
20
  }
27
21
  export function parseAliasedTable(from) {
@@ -1,5 +1,5 @@
1
1
  import { UnionNode } from '../operation-node/union-node.js';
2
- import { QueryBuilder } from '../query-builder/query-builder.js';
2
+ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
3
3
  import { RawBuilder } from '../raw-builder/raw-builder.js';
4
- export declare type UnionExpression<DB, O> = QueryBuilder<DB, any, O> | RawBuilder<O>;
4
+ export declare type UnionExpression<DB, O> = SelectQueryBuilder<DB, any, O> | RawBuilder<O>;
5
5
  export declare function parseUnion(union: UnionExpression<any, any>, all: boolean): UnionNode;
@@ -1,9 +1,4 @@
1
- import { QueryNode } from '../operation-node/query-node.js';
2
1
  import { UnionNode } from '../operation-node/union-node.js';
3
2
  export function parseUnion(union, all) {
4
- const node = union.toOperationNode();
5
- if (QueryNode.isMutating(node)) {
6
- throw new Error("can't combine insert, update or delete queries using union");
7
- }
8
- return UnionNode.create(node, all);
3
+ return UnionNode.create(union.toOperationNode(), all);
9
4
  }