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
@@ -4,7 +4,7 @@ exports.parseTable = exports.parseAliasedTable = exports.parseTableExpression =
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
5
  const alias_node_js_1 = require("../operation-node/alias-node.js");
6
6
  const table_node_js_1 = require("../operation-node/table-node.js");
7
- const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
7
+ const complex_expression_parser_js_1 = require("./complex-expression-parser.js");
8
8
  function parseTableExpressionOrList(ctx, table) {
9
9
  if ((0, object_utils_js_1.isReadonlyArray)(table)) {
10
10
  return table.map((it) => parseTableExpression(ctx, it));
@@ -18,14 +18,8 @@ function parseTableExpression(ctx, table) {
18
18
  if ((0, object_utils_js_1.isString)(table)) {
19
19
  return parseAliasedTable(table);
20
20
  }
21
- else if ((0, operation_node_source_js_1.isOperationNodeSource)(table)) {
22
- return table.toOperationNode();
23
- }
24
- else if ((0, object_utils_js_1.isFunction)(table)) {
25
- return table(ctx.createExpressionBuilder()).toOperationNode();
26
- }
27
21
  else {
28
- throw new Error(`invalid table expression ${JSON.stringify(table)}`);
22
+ return (0, complex_expression_parser_js_1.parseAliasedComplexExpression)(ctx, table);
29
23
  }
30
24
  }
31
25
  exports.parseTableExpression = parseTableExpression;
@@ -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,13 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseUnion = void 0;
4
- const query_node_js_1 = require("../operation-node/query-node.js");
5
4
  const union_node_js_1 = require("../operation-node/union-node.js");
6
5
  function parseUnion(union, all) {
7
- const node = union.toOperationNode();
8
- if (query_node_js_1.QueryNode.isMutating(node)) {
9
- throw new Error("can't combine insert, update or delete queries using union");
10
- }
11
- return union_node_js_1.UnionNode.create(node, all);
6
+ return union_node_js_1.UnionNode.create(union.toOperationNode(), all);
12
7
  }
13
8
  exports.parseUnion = parseUnion;
@@ -1,13 +1,7 @@
1
1
  import { ColumnUpdateNode } from '../operation-node/column-update-node.js';
2
- import { RawNode } from '../operation-node/raw-node.js';
3
- import { SelectQueryNode } from '../operation-node/select-query-node.js';
4
- import { ValueNode } from '../operation-node/value-node.js';
5
- import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
6
- import { PrimitiveValue } from '../util/object-utils.js';
7
2
  import { ParseContext } from './parse-context.js';
3
+ import { ValueExpression } from './value-parser.js';
8
4
  export declare type MutationObject<DB, TB extends keyof DB> = {
9
- [C in keyof DB[TB]]?: MutationValueExpression<DB, TB, DB[TB][C]>;
5
+ [C in keyof DB[TB]]?: ValueExpression<DB, TB, DB[TB][C]>;
10
6
  };
11
- export declare type MutationValueExpression<DB, TB extends keyof DB, T> = T | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB>;
12
7
  export declare function parseUpdateObject(ctx: ParseContext, row: MutationObject<any, any>): ReadonlyArray<ColumnUpdateNode>;
13
- export declare function parseMutationValueExpression(ctx: ParseContext, value: MutationValueExpression<any, any, PrimitiveValue>): ValueNode | RawNode | SelectQueryNode;
@@ -1,34 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseMutationValueExpression = exports.parseUpdateObject = void 0;
3
+ exports.parseUpdateObject = void 0;
4
4
  const column_node_js_1 = require("../operation-node/column-node.js");
5
5
  const column_update_node_js_1 = require("../operation-node/column-update-node.js");
6
- const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
7
- const query_node_js_1 = require("../operation-node/query-node.js");
8
- const value_node_js_1 = require("../operation-node/value-node.js");
9
- const object_utils_js_1 = require("../util/object-utils.js");
6
+ const value_parser_js_1 = require("./value-parser.js");
10
7
  function parseUpdateObject(ctx, row) {
11
- return Object.entries(row).map(([key, value]) => {
12
- return column_update_node_js_1.ColumnUpdateNode.create(column_node_js_1.ColumnNode.create(key), parseMutationValueExpression(ctx, value));
8
+ return Object.entries(row)
9
+ .filter(([_, value]) => value !== undefined)
10
+ .map(([key, value]) => {
11
+ return column_update_node_js_1.ColumnUpdateNode.create(column_node_js_1.ColumnNode.create(key), (0, value_parser_js_1.parseValueExpression)(ctx, value));
13
12
  });
14
13
  }
15
14
  exports.parseUpdateObject = parseUpdateObject;
16
- function parseMutationValueExpression(ctx, value) {
17
- if ((0, object_utils_js_1.isPrimitive)(value)) {
18
- return value_node_js_1.ValueNode.create(value);
19
- }
20
- else if ((0, operation_node_source_js_1.isOperationNodeSource)(value)) {
21
- const node = value.toOperationNode();
22
- if (!query_node_js_1.QueryNode.isMutating(node)) {
23
- return node;
24
- }
25
- }
26
- else if ((0, object_utils_js_1.isFunction)(value)) {
27
- const node = value(ctx.createExpressionBuilder()).toOperationNode();
28
- if (!query_node_js_1.QueryNode.isMutating(node)) {
29
- return node;
30
- }
31
- }
32
- throw new Error(`unsupported value for mutation object ${JSON.stringify(value)}`);
33
- }
34
- exports.parseMutationValueExpression = parseMutationValueExpression;
@@ -1,8 +1,11 @@
1
1
  import { ValueExpressionNode } from '../operation-node/operation-node-utils.js';
2
- import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
3
- import { ExtractTypeFromReferenceExpression } from './reference-parser.js';
2
+ import { ValueNode } from '../operation-node/value-node.js';
3
+ import { PrimitiveValue } from '../util/object-utils.js';
4
4
  import { ParseContext } from './parse-context.js';
5
- export declare type ValueExpression<DB, TB extends keyof DB, RE> = ExtractTypeFromReferenceExpression<DB, TB, RE> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB>;
6
- export declare type ValueExpressionOrList<DB, TB extends keyof DB, RE> = ValueExpression<DB, TB, RE> | ReadonlyArray<ValueExpression<DB, TB, RE>>;
7
- export declare function parseValueExpressionOrList(ctx: ParseContext, arg: ValueExpressionOrList<any, any, any>): ValueExpressionNode;
8
- export declare function parseValueExpression(ctx: ParseContext, arg: ValueExpression<any, any, any>): ValueExpressionNode;
5
+ import { SelectQueryNode } from '../operation-node/select-query-node.js';
6
+ import { RawNode } from '../operation-node/raw-node.js';
7
+ import { ComplexExpression } from './complex-expression-parser.js';
8
+ export declare type ValueExpression<DB, TB extends keyof DB, V> = V | ComplexExpression<DB, TB>;
9
+ export declare type ValueExpressionOrList<DB, TB extends keyof DB, V> = ValueExpression<DB, TB, V> | ReadonlyArray<ValueExpression<DB, TB, V>>;
10
+ export declare function parseValueExpressionOrList(ctx: ParseContext, arg: ValueExpressionOrList<any, any, PrimitiveValue>): ValueExpressionNode;
11
+ export declare function parseValueExpression(ctx: ParseContext, exp: ValueExpression<any, any, PrimitiveValue>): ValueNode | SelectQueryNode | RawNode;
@@ -1,15 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseValueExpression = exports.parseValueExpressionOrList = void 0;
4
- const column_node_js_1 = require("../operation-node/column-node.js");
5
- const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
6
4
  const primitive_value_list_node_js_1 = require("../operation-node/primitive-value-list-node.js");
7
5
  const value_list_node_js_1 = require("../operation-node/value-list-node.js");
8
6
  const value_node_js_1 = require("../operation-node/value-node.js");
9
7
  const object_utils_js_1 = require("../util/object-utils.js");
10
- const query_node_js_1 = require("../operation-node/query-node.js");
8
+ const complex_expression_parser_js_1 = require("./complex-expression-parser.js");
11
9
  function parseValueExpressionOrList(ctx, arg) {
12
- if (Array.isArray(arg)) {
10
+ if ((0, object_utils_js_1.isReadonlyArray)(arg)) {
13
11
  return parseValueExpressionList(ctx, arg);
14
12
  }
15
13
  else {
@@ -17,23 +15,11 @@ function parseValueExpressionOrList(ctx, arg) {
17
15
  }
18
16
  }
19
17
  exports.parseValueExpressionOrList = parseValueExpressionOrList;
20
- function parseValueExpression(ctx, arg) {
21
- if ((0, object_utils_js_1.isPrimitive)(arg)) {
22
- return value_node_js_1.ValueNode.create(arg);
18
+ function parseValueExpression(ctx, exp) {
19
+ if ((0, object_utils_js_1.isPrimitive)(exp)) {
20
+ return value_node_js_1.ValueNode.create(exp);
23
21
  }
24
- else if ((0, operation_node_source_js_1.isOperationNodeSource)(arg)) {
25
- const node = arg.toOperationNode();
26
- if (!query_node_js_1.QueryNode.isMutating(node)) {
27
- return node;
28
- }
29
- }
30
- else if ((0, object_utils_js_1.isFunction)(arg)) {
31
- const node = arg(ctx.createExpressionBuilder()).toOperationNode();
32
- if (!query_node_js_1.QueryNode.isMutating(node)) {
33
- return node;
34
- }
35
- }
36
- throw new Error(`invalid value expression ${JSON.stringify(arg)}`);
22
+ return (0, complex_expression_parser_js_1.parseComplexExpression)(ctx, exp);
37
23
  }
38
24
  exports.parseValueExpression = parseValueExpression;
39
25
  function parseValueExpressionList(ctx, arg) {
@@ -41,14 +27,5 @@ function parseValueExpressionList(ctx, arg) {
41
27
  // Optimization for large lists of primitive values.
42
28
  return primitive_value_list_node_js_1.PrimitiveValueListNode.create(arg);
43
29
  }
44
- return value_list_node_js_1.ValueListNode.create(arg.map((it) => {
45
- const node = parseValueExpression(ctx, it);
46
- if (column_node_js_1.ColumnNode.is(node)) {
47
- throw new Error('value lists cannot have column references');
48
- }
49
- if (value_list_node_js_1.ValueListNode.is(node) || primitive_value_list_node_js_1.PrimitiveValueListNode.is(node)) {
50
- throw new Error('value lists cannot have nested lists');
51
- }
52
- return node;
53
- }));
30
+ return value_list_node_js_1.ValueListNode.create(arg.map((it) => parseValueExpression(ctx, it)));
54
31
  }
@@ -1,11 +1,14 @@
1
+ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
2
+ import { UpdateQueryBuilder } from '../query-builder/update-query-builder.js';
3
+ import { DeleteQueryBuilder } from '../query-builder/delete-query-builder.js';
4
+ import { InsertQueryBuilder } from '../query-builder/insert-query-builder.js';
1
5
  import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
2
- import { QueryBuilder } from '../query-builder/query-builder.js';
3
6
  import { QueryCreator } from '../query-creator.js';
4
7
  import { RawBuilder } from '../raw-builder/raw-builder.js';
5
8
  import { AnyRawBuilder } from '../util/type-utils.js';
6
9
  import { ParseContext } from './parse-context.js';
7
- export declare type CommonTableExpression<DB> = (creator: QueryCreator<DB>) => QueryBuilder<DB, any> | AnyRawBuilder;
10
+ export declare type CommonTableExpression<DB> = (creator: QueryCreator<DB>) => SelectQueryBuilder<DB, any, any> | InsertQueryBuilder<DB, any, any> | UpdateQueryBuilder<DB, any, any> | DeleteQueryBuilder<DB, any, any> | AnyRawBuilder;
8
11
  export declare type QueryCreatorWithCommonTableExpression<DB, N extends string, E extends CommonTableExpression<DB>> = QueryCreator<DB & Record<N, ExtractRowTypeFromCommonTableExpression<E>>>;
9
- declare type ExtractRowTypeFromCommonTableExpression<E> = E extends (creator: QueryCreator<any>) => infer Q ? Q extends QueryBuilder<any, any, infer QO> ? QO : Q extends RawBuilder<infer RO> ? RO : never : never;
12
+ declare type ExtractRowTypeFromCommonTableExpression<E> = E extends (creator: QueryCreator<any>) => infer Q ? Q extends SelectQueryBuilder<any, any, infer QO> ? QO : Q extends InsertQueryBuilder<any, any, infer QO> ? QO : Q extends UpdateQueryBuilder<any, any, infer QO> ? QO : Q extends DeleteQueryBuilder<any, any, infer QO> ? QO : Q extends RawBuilder<infer RO> ? RO : never : never;
10
13
  export declare function parseCommonTableExpression(ctx: ParseContext, name: string, expression: CommonTableExpression<any>): CommonTableExpressionNode;
11
14
  export {};
@@ -15,8 +15,8 @@ class ImmediateValuePlugin {
15
15
  transformQuery(args) {
16
16
  return this.#transformer.transformNode(args.node);
17
17
  }
18
- async transformResult(args) {
19
- return args.result;
18
+ transformResult(args) {
19
+ return Promise.resolve(args.result);
20
20
  }
21
21
  }
22
22
  exports.ImmediateValuePlugin = ImmediateValuePlugin;
@@ -0,0 +1,102 @@
1
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
2
+ import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
+ import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
4
+ import { TableExpression, TableExpressionDatabase, TableExpressionTables, LeftJoinTableExpressionDatabase, RightJoinTableExpressionDatabase, FullJoinTableExpressionDatabase } from '../parser/table-parser.js';
5
+ import { SelectExpression } from '../parser/select-parser.js';
6
+ import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper } from '../parser/filter-parser.js';
7
+ import { ReturningRow } from '../parser/returning-parser.js';
8
+ import { ReferenceExpression } from '../parser/reference-parser.js';
9
+ import { AnyRawBuilder, SingleResultType } from '../util/type-utils.js';
10
+ import { Compilable } from '../util/compilable.js';
11
+ import { QueryExecutor } from '../query-executor/query-executor.js';
12
+ import { QueryId } from '../util/query-id.js';
13
+ import { ParseContext } from '../parser/parse-context.js';
14
+ import { KyselyPlugin } from '../plugin/kysely-plugin.js';
15
+ import { WhereInterface } from './where-interface.js';
16
+ import { JoinInterface } from './join-interface.js';
17
+ import { ReturningInterface } from './returning-interface.js';
18
+ import { NoResultErrorConstructor } from './no-result-error.js';
19
+ import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
20
+ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, JoinInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
21
+ #private;
22
+ constructor(props: DeleteQueryBuilderProps);
23
+ where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): DeleteQueryBuilder<DB, TB, O>;
24
+ where(grouper: WhereGrouper<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
25
+ where(raw: AnyRawBuilder): DeleteQueryBuilder<DB, TB, O>;
26
+ whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
27
+ orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): DeleteQueryBuilder<DB, TB, O>;
28
+ orWhere(grouper: WhereGrouper<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
29
+ orWhere(raw: AnyRawBuilder): DeleteQueryBuilder<DB, TB, O>;
30
+ orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
31
+ whereExists(arg: ExistsExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
32
+ whereNotExists(arg: ExistsExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
33
+ orWhereExists(arg: ExistsExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
34
+ orWhereNotExists(arg: ExistsExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
35
+ innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): DeleteQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
36
+ innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): DeleteQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
37
+ leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): DeleteQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
38
+ leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): DeleteQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
39
+ rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): DeleteQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
40
+ rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): DeleteQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
41
+ fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): DeleteQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
42
+ fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): DeleteQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
43
+ returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
44
+ returning<SE extends SelectExpression<DB, TB>>(selection: SE): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
45
+ returningAll(): DeleteQueryBuilder<DB, TB, DB[TB]>;
46
+ /**
47
+ * Simply calls the given function passing `this` as the only argument.
48
+ *
49
+ * This method can be useful when adding optional method calls:
50
+ *
51
+ * ### Examples
52
+ *
53
+ * ```ts
54
+ * db.deleteFrom('person')
55
+ * .call((qb) => {
56
+ * if (something) {
57
+ * return qb.where('something', '=', something)
58
+ * } else {
59
+ * return qb.where('somethingElse', '=', somethingElse)
60
+ * }
61
+ * })
62
+ * .execute()
63
+ * ```
64
+ */
65
+ call<T>(func: (qb: this) => T): T;
66
+ /**
67
+ * Change the output type of the query.
68
+ *
69
+ * You should only use this method as the last resort if the types
70
+ * don't support your use case.
71
+ */
72
+ castTo<T>(): DeleteQueryBuilder<DB, TB, T>;
73
+ withPlugin(plugin: KyselyPlugin): DeleteQueryBuilder<DB, TB, O>;
74
+ toOperationNode(): DeleteQueryNode;
75
+ compile(): CompiledQuery;
76
+ /**
77
+ * Executes the query and returns an array of rows.
78
+ *
79
+ * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
80
+ */
81
+ execute(): Promise<O[]>;
82
+ /**
83
+ * Executes the query and returns the first result or undefined if
84
+ * the query returned no result.
85
+ */
86
+ executeTakeFirst(): Promise<SingleResultType<O>>;
87
+ /**
88
+ * Executes the query and returns the first result or throws if
89
+ * the query returned no result.
90
+ *
91
+ * By default an instance of {@link NoResultError} is thrown, but you can
92
+ * provide a custom error class as the only argument to throw a different
93
+ * error.
94
+ */
95
+ executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor): Promise<O>;
96
+ }
97
+ export interface DeleteQueryBuilderProps {
98
+ readonly queryId: QueryId;
99
+ readonly queryNode: DeleteQueryNode;
100
+ readonly executor: QueryExecutor;
101
+ readonly parseContext: ParseContext;
102
+ }
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeleteQueryBuilder = void 0;
4
+ const join_parser_js_1 = require("../parser/join-parser.js");
5
+ const select_parser_js_1 = require("../parser/select-parser.js");
6
+ const filter_parser_js_1 = require("../parser/filter-parser.js");
7
+ const query_node_js_1 = require("../operation-node/query-node.js");
8
+ const prevent_await_js_1 = require("../util/prevent-await.js");
9
+ const object_utils_js_1 = require("../util/object-utils.js");
10
+ const no_result_error_js_1 = require("./no-result-error.js");
11
+ const delete_result_js_1 = require("./delete-result.js");
12
+ class DeleteQueryBuilder {
13
+ #props;
14
+ constructor(props) {
15
+ this.#props = (0, object_utils_js_1.freeze)(props);
16
+ }
17
+ where(...args) {
18
+ return new DeleteQueryBuilder({
19
+ ...this.#props,
20
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
21
+ });
22
+ }
23
+ whereRef(lhs, op, rhs) {
24
+ return new DeleteQueryBuilder({
25
+ ...this.#props,
26
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
27
+ });
28
+ }
29
+ orWhere(...args) {
30
+ return new DeleteQueryBuilder({
31
+ ...this.#props,
32
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
33
+ });
34
+ }
35
+ orWhereRef(lhs, op, rhs) {
36
+ return new DeleteQueryBuilder({
37
+ ...this.#props,
38
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
39
+ });
40
+ }
41
+ whereExists(arg) {
42
+ return new DeleteQueryBuilder({
43
+ ...this.#props,
44
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
45
+ });
46
+ }
47
+ whereNotExists(arg) {
48
+ return new DeleteQueryBuilder({
49
+ ...this.#props,
50
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
51
+ });
52
+ }
53
+ orWhereExists(arg) {
54
+ return new DeleteQueryBuilder({
55
+ ...this.#props,
56
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
57
+ });
58
+ }
59
+ orWhereNotExists(arg) {
60
+ return new DeleteQueryBuilder({
61
+ ...this.#props,
62
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
63
+ });
64
+ }
65
+ innerJoin(...args) {
66
+ return new DeleteQueryBuilder({
67
+ ...this.#props,
68
+ queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'InnerJoin', args)),
69
+ });
70
+ }
71
+ leftJoin(...args) {
72
+ return new DeleteQueryBuilder({
73
+ ...this.#props,
74
+ queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'LeftJoin', args)),
75
+ });
76
+ }
77
+ rightJoin(...args) {
78
+ return new DeleteQueryBuilder({
79
+ ...this.#props,
80
+ queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'RightJoin', args)),
81
+ });
82
+ }
83
+ fullJoin(...args) {
84
+ return new DeleteQueryBuilder({
85
+ ...this.#props,
86
+ queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'FullJoin', args)),
87
+ });
88
+ }
89
+ returning(selection) {
90
+ return new DeleteQueryBuilder({
91
+ ...this.#props,
92
+ queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(this.#props.parseContext, selection)),
93
+ });
94
+ }
95
+ returningAll() {
96
+ return new DeleteQueryBuilder({
97
+ ...this.#props,
98
+ queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)()),
99
+ });
100
+ }
101
+ /**
102
+ * Simply calls the given function passing `this` as the only argument.
103
+ *
104
+ * This method can be useful when adding optional method calls:
105
+ *
106
+ * ### Examples
107
+ *
108
+ * ```ts
109
+ * db.deleteFrom('person')
110
+ * .call((qb) => {
111
+ * if (something) {
112
+ * return qb.where('something', '=', something)
113
+ * } else {
114
+ * return qb.where('somethingElse', '=', somethingElse)
115
+ * }
116
+ * })
117
+ * .execute()
118
+ * ```
119
+ */
120
+ call(func) {
121
+ return func(this);
122
+ }
123
+ /**
124
+ * Change the output type of the query.
125
+ *
126
+ * You should only use this method as the last resort if the types
127
+ * don't support your use case.
128
+ */
129
+ castTo() {
130
+ return new DeleteQueryBuilder(this.#props);
131
+ }
132
+ withPlugin(plugin) {
133
+ return new DeleteQueryBuilder({
134
+ ...this.#props,
135
+ executor: this.#props.executor.withPlugin(plugin),
136
+ });
137
+ }
138
+ toOperationNode() {
139
+ return this.#props.executor.transformQuery(this.#props.queryNode, this.#props.queryId);
140
+ }
141
+ compile() {
142
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
143
+ }
144
+ /**
145
+ * Executes the query and returns an array of rows.
146
+ *
147
+ * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
148
+ */
149
+ async execute() {
150
+ const compildQuery = this.compile();
151
+ const query = compildQuery.query;
152
+ const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
153
+ if (this.#props.parseContext.adapter.supportsReturning && query.returning) {
154
+ return result.rows;
155
+ }
156
+ else {
157
+ return [new delete_result_js_1.DeleteResult(result.numUpdatedOrDeletedRows)];
158
+ }
159
+ }
160
+ /**
161
+ * Executes the query and returns the first result or undefined if
162
+ * the query returned no result.
163
+ */
164
+ async executeTakeFirst() {
165
+ const [result] = await this.execute();
166
+ return result;
167
+ }
168
+ /**
169
+ * Executes the query and returns the first result or throws if
170
+ * the query returned no result.
171
+ *
172
+ * By default an instance of {@link NoResultError} is thrown, but you can
173
+ * provide a custom error class as the only argument to throw a different
174
+ * error.
175
+ */
176
+ async executeTakeFirstOrThrow(errorConstructor = no_result_error_js_1.NoResultError) {
177
+ const result = await this.executeTakeFirst();
178
+ if (result === undefined) {
179
+ throw new errorConstructor(this.toOperationNode());
180
+ }
181
+ return result;
182
+ }
183
+ }
184
+ exports.DeleteQueryBuilder = DeleteQueryBuilder;
185
+ (0, prevent_await_js_1.preventAwait)(DeleteQueryBuilder, "don't await DeleteQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");
@@ -1,4 +1,5 @@
1
- import { TableExpression, QueryBuilderWithTable } from '../parser/table-parser.js';
1
+ import { SelectQueryBuilder } from './select-query-builder.js';
2
+ import { TableExpression, TableExpressionDatabase, TableExpressionTables } from '../parser/table-parser.js';
2
3
  import { NoopQueryExecutor } from '../query-executor/noop-query-executor.js';
3
4
  import { ParseContext } from '../parser/parse-context.js';
4
5
  import { FunctionBuilder } from './function-builder.js';
@@ -43,7 +44,8 @@ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
43
44
  * The query builder returned by this method is typed in a way that you can refer to
44
45
  * all tables of the parent query in addition to the subquery's tables.
45
46
  *
46
- * @example
47
+ * ### Examples
48
+ *
47
49
  * This example shows that you can refer to both `pet.owner_id` and `person.id`
48
50
  * columns from the subquery. This is needed to be able to create correlated
49
51
  * subqueries:
@@ -52,7 +54,7 @@ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
52
54
  * const result = await db.selectFrom('pet')
53
55
  * .select([
54
56
  * 'pet.name',
55
- * (qb) => qb.subQuery('person')
57
+ * (qb) => qb.selectFrom('person')
56
58
  * .whereRef('person.id', '=', 'pet.owner_id')
57
59
  * .select('person.first_name')
58
60
  * .as('owner_name')
@@ -74,12 +76,12 @@ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
74
76
  * from "pet"
75
77
  * ```
76
78
  *
77
- * You can use a normal query in place of `(qb) => qb.subQuery(...)` but in
79
+ * You can use a normal query in place of `(qb) => qb.selectFrom(...)` but in
78
80
  * that case Kysely typings wouldn't allow you to reference `pet.owner_id`
79
81
  * because `pet` is not joined to that query.
80
82
  */
81
- subQuery<F extends TableExpression<DB, TB>>(from: F[]): QueryBuilderWithTable<DB, TB, {}, F>;
82
- subQuery<F extends TableExpression<DB, TB>>(from: F): QueryBuilderWithTable<DB, TB, {}, F>;
83
+ selectFrom<TE extends TableExpression<DB, TB>>(from: TE[]): SelectQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, {}>;
84
+ selectFrom<TE extends TableExpression<DB, TB>>(from: TE): SelectQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, {}>;
83
85
  /**
84
86
  * See {@link QueryCreator.withSchema}
85
87
  */
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ExpressionBuilder = void 0;
4
- const query_builder_js_1 = require("./query-builder.js");
4
+ const select_query_builder_js_1 = require("./select-query-builder.js");
5
5
  const select_query_node_js_1 = require("../operation-node/select-query-node.js");
6
6
  const table_parser_js_1 = require("../parser/table-parser.js");
7
7
  const with_schema_plugin_js_1 = require("../plugin/with-schema/with-schema-plugin.js");
@@ -47,8 +47,8 @@ class ExpressionBuilder {
47
47
  get fn() {
48
48
  return new function_builder_js_1.FunctionBuilder({ executor: this.#props.executor });
49
49
  }
50
- subQuery(table) {
51
- return new query_builder_js_1.QueryBuilder({
50
+ selectFrom(table) {
51
+ return new select_query_builder_js_1.SelectQueryBuilder({
52
52
  queryId: (0, query_id_js_1.createQueryId)(),
53
53
  executor: this.#props.executor,
54
54
  parseContext: this.#props.parseContext,
@@ -4,7 +4,8 @@ import { RawBuilder } from '../raw-builder/raw-builder.js';
4
4
  /**
5
5
  * Helpers for type safe SQL function calls.
6
6
  *
7
- * @example
7
+ * ### Examples
8
+ *
8
9
  * ```ts
9
10
  * const { count } = db.fn
10
11
  *
@@ -7,7 +7,8 @@ const query_id_js_1 = require("../util/query-id.js");
7
7
  /**
8
8
  * Helpers for type safe SQL function calls.
9
9
  *
10
- * @example
10
+ * ### Examples
11
+ *
11
12
  * ```ts
12
13
  * const { count } = db.fn
13
14
  *
@@ -0,0 +1,49 @@
1
+ import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, HavingGrouper } from '../parser/filter-parser.js';
2
+ import { ReferenceExpression } from '../parser/reference-parser.js';
3
+ import { AnyRawBuilder } from '../util/type-utils.js';
4
+ export interface HavingInterface<DB, TB extends keyof DB> {
5
+ /**
6
+ * Just like {@link WhereInterface.where | where} but adds a `having` statement
7
+ * instead of a `where` statement.
8
+ */
9
+ having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): HavingInterface<DB, TB>;
10
+ having(grouper: HavingGrouper<DB, TB>): HavingInterface<DB, TB>;
11
+ having(raw: AnyRawBuilder): HavingInterface<DB, TB>;
12
+ /**
13
+ * Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
14
+ * instead of a `where` statement.
15
+ */
16
+ havingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): HavingInterface<DB, TB>;
17
+ /**
18
+ * Just like {@link WhereInterface.orWhere | orWhere} but adds a `having` statement
19
+ * instead of a `where` statement.
20
+ */
21
+ orHaving<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): HavingInterface<DB, TB>;
22
+ orHaving(grouper: HavingGrouper<DB, TB>): HavingInterface<DB, TB>;
23
+ orHaving(raw: AnyRawBuilder): HavingInterface<DB, TB>;
24
+ /**
25
+ * Just like {@link WhereInterface.orWhereRef | orWhereRef} but adds a `having` statement
26
+ * instead of a `where` statement.
27
+ */
28
+ orHavingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): HavingInterface<DB, TB>;
29
+ /**
30
+ * Just like {@link WhereInterface.whereExists | whereExists} but adds a `having` statement
31
+ * instead of a `where` statement.
32
+ */
33
+ havingExists(arg: ExistsExpression<DB, TB>): HavingInterface<DB, TB>;
34
+ /**
35
+ * Just like {@link WhereInterface.whereNotExists | whereNotExists} but adds a `having` statement
36
+ * instead of a `where` statement.
37
+ */
38
+ havingNotExist(arg: ExistsExpression<DB, TB>): HavingInterface<DB, TB>;
39
+ /**
40
+ * Just like {@link WhereInterface.orWhereExists | orWhereExists} but adds a `having` statement
41
+ * instead of a `where` statement.
42
+ */
43
+ orHavingExists(arg: ExistsExpression<DB, TB>): HavingInterface<DB, TB>;
44
+ /**
45
+ * Just like {@link WhereInterface.orWhereNotExists | orWhereNotExists} but adds a `having` statement
46
+ * instead of a `where` statement.
47
+ */
48
+ orHavingNotExists(arg: ExistsExpression<DB, TB>): HavingInterface<DB, TB>;
49
+ }