kysely 0.21.5 → 0.22.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 (133) hide show
  1. package/README.md +3 -2
  2. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  3. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +4 -0
  4. package/dist/cjs/index.d.ts +10 -4
  5. package/dist/cjs/index.js +8 -2
  6. package/dist/cjs/kysely.d.ts +3 -3
  7. package/dist/cjs/kysely.js +3 -3
  8. package/dist/cjs/migration/file-migration-provider.js +7 -2
  9. package/dist/cjs/operation-node/aggregate-function-node.d.ts +22 -0
  10. package/dist/cjs/operation-node/aggregate-function-node.js +31 -0
  11. package/dist/cjs/operation-node/alias-node.d.ts +2 -1
  12. package/dist/cjs/operation-node/default-insert-value-node.d.ts +11 -0
  13. package/dist/cjs/operation-node/{union-node.js → default-insert-value-node.js} +5 -7
  14. package/dist/cjs/operation-node/group-by-node.d.ts +1 -1
  15. package/dist/cjs/operation-node/group-by-node.js +3 -3
  16. package/dist/cjs/operation-node/insert-query-node.d.ts +2 -1
  17. package/dist/cjs/operation-node/operation-node-transformer.d.ts +12 -2
  18. package/dist/cjs/operation-node/operation-node-transformer.js +43 -5
  19. package/dist/cjs/operation-node/operation-node-utils.d.ts +2 -1
  20. package/dist/cjs/operation-node/operation-node-visitor.d.ts +12 -2
  21. package/dist/cjs/operation-node/operation-node-visitor.js +6 -1
  22. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  23. package/dist/cjs/operation-node/over-node.d.ts +19 -0
  24. package/dist/cjs/operation-node/over-node.js +35 -0
  25. package/dist/cjs/operation-node/partition-by-item-node.d.ts +14 -0
  26. package/dist/cjs/operation-node/partition-by-item-node.js +18 -0
  27. package/dist/cjs/operation-node/partition-by-node.d.ts +14 -0
  28. package/dist/cjs/operation-node/partition-by-node.js +24 -0
  29. package/dist/cjs/operation-node/select-query-node.d.ts +3 -3
  30. package/dist/cjs/operation-node/select-query-node.js +4 -4
  31. package/dist/cjs/operation-node/set-operation-node.d.ts +18 -0
  32. package/dist/cjs/operation-node/set-operation-node.js +20 -0
  33. package/dist/cjs/operation-node/value-list-node.d.ts +3 -1
  34. package/dist/cjs/parser/complex-expression-parser.d.ts +6 -4
  35. package/dist/cjs/parser/group-by-parser.d.ts +1 -1
  36. package/dist/cjs/parser/group-by-parser.js +2 -2
  37. package/dist/cjs/parser/insert-values-parser.js +13 -4
  38. package/dist/cjs/parser/parse-utils.d.ts +2 -0
  39. package/dist/cjs/parser/parse-utils.js +9 -1
  40. package/dist/cjs/parser/partition-by-parser.d.ts +6 -0
  41. package/dist/cjs/parser/partition-by-parser.js +9 -0
  42. package/dist/cjs/parser/reference-parser.d.ts +2 -1
  43. package/dist/cjs/parser/select-parser.d.ts +4 -3
  44. package/dist/cjs/parser/set-operation-parser.d.ts +5 -0
  45. package/dist/cjs/parser/set-operation-parser.js +8 -0
  46. package/dist/cjs/parser/value-parser.d.ts +2 -1
  47. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +117 -0
  48. package/dist/cjs/query-builder/aggregate-function-builder.js +146 -0
  49. package/dist/cjs/query-builder/expression-builder.d.ts +3 -3
  50. package/dist/cjs/query-builder/expression-builder.js +3 -3
  51. package/dist/cjs/query-builder/{function-builder.d.ts → function-module.d.ts} +49 -42
  52. package/dist/cjs/query-builder/{function-builder.js → function-module.js} +70 -59
  53. package/dist/cjs/query-builder/over-builder.d.ts +59 -0
  54. package/dist/cjs/query-builder/over-builder.js +50 -0
  55. package/dist/cjs/query-builder/select-query-builder.d.ts +63 -3
  56. package/dist/cjs/query-builder/select-query-builder.js +83 -3
  57. package/dist/cjs/query-compiler/default-query-compiler.d.ts +12 -2
  58. package/dist/cjs/query-compiler/default-query-compiler.js +44 -14
  59. package/dist/cjs/raw-builder/sql.d.ts +13 -5
  60. package/dist/cjs/raw-builder/sql.js +6 -0
  61. package/dist/cjs/util/object-utils.d.ts +1 -0
  62. package/dist/cjs/util/object-utils.js +5 -1
  63. package/dist/cjs/util/type-utils.d.ts +5 -1
  64. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  65. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +4 -0
  66. package/dist/esm/index.d.ts +10 -4
  67. package/dist/esm/index.js +8 -2
  68. package/dist/esm/kysely.d.ts +3 -3
  69. package/dist/esm/kysely.js +3 -3
  70. package/dist/esm/migration/file-migration-provider.js +7 -2
  71. package/dist/esm/operation-node/aggregate-function-node.d.ts +22 -0
  72. package/dist/esm/operation-node/aggregate-function-node.js +29 -0
  73. package/dist/esm/operation-node/alias-node.d.ts +2 -1
  74. package/dist/esm/operation-node/default-insert-value-node.d.ts +11 -0
  75. package/dist/esm/operation-node/default-insert-value-node.js +15 -0
  76. package/dist/esm/operation-node/group-by-node.d.ts +1 -1
  77. package/dist/esm/operation-node/group-by-node.js +3 -3
  78. package/dist/esm/operation-node/insert-query-node.d.ts +2 -1
  79. package/dist/esm/operation-node/operation-node-transformer.d.ts +12 -2
  80. package/dist/esm/operation-node/operation-node-transformer.js +43 -5
  81. package/dist/esm/operation-node/operation-node-utils.d.ts +2 -1
  82. package/dist/esm/operation-node/operation-node-visitor.d.ts +12 -2
  83. package/dist/esm/operation-node/operation-node-visitor.js +6 -1
  84. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  85. package/dist/esm/operation-node/over-node.d.ts +19 -0
  86. package/dist/esm/operation-node/over-node.js +33 -0
  87. package/dist/esm/operation-node/partition-by-item-node.d.ts +14 -0
  88. package/dist/esm/operation-node/partition-by-item-node.js +16 -0
  89. package/dist/esm/operation-node/partition-by-node.d.ts +14 -0
  90. package/dist/esm/operation-node/partition-by-node.js +22 -0
  91. package/dist/esm/operation-node/select-query-node.d.ts +3 -3
  92. package/dist/esm/operation-node/select-query-node.js +4 -4
  93. package/dist/esm/operation-node/set-operation-node.d.ts +18 -0
  94. package/dist/esm/operation-node/set-operation-node.js +18 -0
  95. package/dist/esm/operation-node/value-list-node.d.ts +3 -1
  96. package/dist/esm/parser/complex-expression-parser.d.ts +6 -4
  97. package/dist/esm/parser/group-by-parser.d.ts +1 -1
  98. package/dist/esm/parser/group-by-parser.js +2 -2
  99. package/dist/esm/parser/insert-values-parser.js +14 -5
  100. package/dist/esm/parser/parse-utils.d.ts +2 -0
  101. package/dist/esm/parser/parse-utils.js +7 -0
  102. package/dist/esm/parser/partition-by-parser.d.ts +6 -0
  103. package/dist/esm/parser/partition-by-parser.js +6 -0
  104. package/dist/esm/parser/reference-parser.d.ts +2 -1
  105. package/dist/esm/parser/select-parser.d.ts +4 -3
  106. package/dist/esm/parser/set-operation-parser.d.ts +5 -0
  107. package/dist/esm/parser/set-operation-parser.js +5 -0
  108. package/dist/esm/parser/value-parser.d.ts +2 -1
  109. package/dist/esm/query-builder/aggregate-function-builder.d.ts +117 -0
  110. package/dist/esm/query-builder/aggregate-function-builder.js +142 -0
  111. package/dist/esm/query-builder/expression-builder.d.ts +3 -3
  112. package/dist/esm/query-builder/expression-builder.js +3 -3
  113. package/dist/esm/query-builder/{function-builder.d.ts → function-module.d.ts} +49 -42
  114. package/dist/esm/query-builder/{function-builder.js → function-module.js} +69 -58
  115. package/dist/esm/query-builder/over-builder.d.ts +59 -0
  116. package/dist/esm/query-builder/over-builder.js +47 -0
  117. package/dist/esm/query-builder/select-query-builder.d.ts +63 -3
  118. package/dist/esm/query-builder/select-query-builder.js +83 -3
  119. package/dist/esm/query-compiler/default-query-compiler.d.ts +12 -2
  120. package/dist/esm/query-compiler/default-query-compiler.js +44 -14
  121. package/dist/esm/raw-builder/sql.d.ts +13 -5
  122. package/dist/esm/raw-builder/sql.js +6 -0
  123. package/dist/esm/util/object-utils.d.ts +1 -0
  124. package/dist/esm/util/object-utils.js +3 -0
  125. package/dist/esm/util/type-utils.d.ts +5 -1
  126. package/package.json +4 -1
  127. package/dist/cjs/operation-node/union-node.d.ts +0 -16
  128. package/dist/cjs/parser/union-parser.d.ts +0 -5
  129. package/dist/cjs/parser/union-parser.js +0 -8
  130. package/dist/esm/operation-node/union-node.d.ts +0 -16
  131. package/dist/esm/operation-node/union-node.js +0 -17
  132. package/dist/esm/parser/union-parser.d.ts +0 -5
  133. package/dist/esm/parser/union-parser.js +0 -5
@@ -13,13 +13,13 @@ import { Compilable } from '../util/compilable.js';
13
13
  import { QueryExecutor } from '../query-executor/query-executor.js';
14
14
  import { QueryId } from '../util/query-id.js';
15
15
  import { GroupByExpression } from '../parser/group-by-parser.js';
16
- import { UnionExpression } from '../parser/union-parser.js';
17
16
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
18
17
  import { WhereInterface } from './where-interface.js';
19
18
  import { NoResultErrorConstructor } from './no-result-error.js';
20
19
  import { HavingInterface } from './having-interface.js';
21
20
  import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
22
21
  import { Explainable, ExplainFormat } from '../util/explainable.js';
22
+ import { SetOperationExpression } from '../parser/set-operation-parser.js';
23
23
  export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, HavingInterface<DB, TB>, OperationNodeSource, Compilable, Explainable {
24
24
  #private;
25
25
  constructor(props: SelectQueryBuilderProps);
@@ -1202,7 +1202,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1202
1202
  * .orderBy('name')
1203
1203
  * ```
1204
1204
  */
1205
- union(expression: UnionExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1205
+ union(expression: SetOperationExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1206
1206
  /**
1207
1207
  * Combines another select query or raw expression to this query using `union all`.
1208
1208
  *
@@ -1217,7 +1217,67 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1217
1217
  * .orderBy('name')
1218
1218
  * ```
1219
1219
  */
1220
- unionAll(expression: UnionExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1220
+ unionAll(expression: SetOperationExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1221
+ /**
1222
+ * Combines another select query or raw expression to this query using `intersect`.
1223
+ *
1224
+ * The output row type of the combined query must match `this` query.
1225
+ *
1226
+ * ### Examples
1227
+ *
1228
+ * ```ts
1229
+ * db.selectFrom('person')
1230
+ * .select(['id', 'first_name as name'])
1231
+ * .intersect(db.selectFrom('pet').select(['id', 'name']))
1232
+ * .orderBy('name')
1233
+ * ```
1234
+ */
1235
+ intersect(expression: SetOperationExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1236
+ /**
1237
+ * Combines another select query or raw expression to this query using `intersect all`.
1238
+ *
1239
+ * The output row type of the combined query must match `this` query.
1240
+ *
1241
+ * ### Examples
1242
+ *
1243
+ * ```ts
1244
+ * db.selectFrom('person')
1245
+ * .select(['id', 'first_name as name'])
1246
+ * .intersectAll(db.selectFrom('pet').select(['id', 'name']))
1247
+ * .orderBy('name')
1248
+ * ```
1249
+ */
1250
+ intersectAll(expression: SetOperationExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1251
+ /**
1252
+ * Combines another select query or raw expression to this query using `except`.
1253
+ *
1254
+ * The output row type of the combined query must match `this` query.
1255
+ *
1256
+ * ### Examples
1257
+ *
1258
+ * ```ts
1259
+ * db.selectFrom('person')
1260
+ * .select(['id', 'first_name as name'])
1261
+ * .except(db.selectFrom('pet').select(['id', 'name']))
1262
+ * .orderBy('name')
1263
+ * ```
1264
+ */
1265
+ except(expression: SetOperationExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1266
+ /**
1267
+ * Combines another select query or raw expression to this query using `except all`.
1268
+ *
1269
+ * The output row type of the combined query must match `this` query.
1270
+ *
1271
+ * ### Examples
1272
+ *
1273
+ * ```ts
1274
+ * db.selectFrom('person')
1275
+ * .select(['id', 'first_name as name'])
1276
+ * .exceptAll(db.selectFrom('pet').select(['id', 'name']))
1277
+ * .orderBy('name')
1278
+ * ```
1279
+ */
1280
+ exceptAll(expression: SetOperationExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1221
1281
  /**
1222
1282
  * Simply calls the given function passing `this` as the only argument.
1223
1283
  *
@@ -14,10 +14,10 @@ const limit_node_js_1 = require("../operation-node/limit-node.js");
14
14
  const offset_node_js_1 = require("../operation-node/offset-node.js");
15
15
  const object_utils_js_1 = require("../util/object-utils.js");
16
16
  const group_by_parser_js_1 = require("../parser/group-by-parser.js");
17
- const union_parser_js_1 = require("../parser/union-parser.js");
18
17
  const no_result_error_js_1 = require("./no-result-error.js");
19
18
  const identifier_node_js_1 = require("../operation-node/identifier-node.js");
20
19
  const explain_node_js_1 = require("../operation-node/explain-node.js");
20
+ const set_operation_parser_js_1 = require("../parser/set-operation-parser.js");
21
21
  class SelectQueryBuilder {
22
22
  #props;
23
23
  constructor(props) {
@@ -472,7 +472,7 @@ class SelectQueryBuilder {
472
472
  union(expression) {
473
473
  return new SelectQueryBuilder({
474
474
  ...this.#props,
475
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithUnion(this.#props.queryNode, (0, union_parser_js_1.parseUnion)(expression, false)),
475
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSetOperation(this.#props.queryNode, (0, set_operation_parser_js_1.parseSetOperation)('union', expression, false)),
476
476
  });
477
477
  }
478
478
  /**
@@ -492,7 +492,87 @@ class SelectQueryBuilder {
492
492
  unionAll(expression) {
493
493
  return new SelectQueryBuilder({
494
494
  ...this.#props,
495
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithUnion(this.#props.queryNode, (0, union_parser_js_1.parseUnion)(expression, true)),
495
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSetOperation(this.#props.queryNode, (0, set_operation_parser_js_1.parseSetOperation)('union', expression, true)),
496
+ });
497
+ }
498
+ /**
499
+ * Combines another select query or raw expression to this query using `intersect`.
500
+ *
501
+ * The output row type of the combined query must match `this` query.
502
+ *
503
+ * ### Examples
504
+ *
505
+ * ```ts
506
+ * db.selectFrom('person')
507
+ * .select(['id', 'first_name as name'])
508
+ * .intersect(db.selectFrom('pet').select(['id', 'name']))
509
+ * .orderBy('name')
510
+ * ```
511
+ */
512
+ intersect(expression) {
513
+ return new SelectQueryBuilder({
514
+ ...this.#props,
515
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSetOperation(this.#props.queryNode, (0, set_operation_parser_js_1.parseSetOperation)('intersect', expression, false)),
516
+ });
517
+ }
518
+ /**
519
+ * Combines another select query or raw expression to this query using `intersect all`.
520
+ *
521
+ * The output row type of the combined query must match `this` query.
522
+ *
523
+ * ### Examples
524
+ *
525
+ * ```ts
526
+ * db.selectFrom('person')
527
+ * .select(['id', 'first_name as name'])
528
+ * .intersectAll(db.selectFrom('pet').select(['id', 'name']))
529
+ * .orderBy('name')
530
+ * ```
531
+ */
532
+ intersectAll(expression) {
533
+ return new SelectQueryBuilder({
534
+ ...this.#props,
535
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSetOperation(this.#props.queryNode, (0, set_operation_parser_js_1.parseSetOperation)('intersect', expression, true)),
536
+ });
537
+ }
538
+ /**
539
+ * Combines another select query or raw expression to this query using `except`.
540
+ *
541
+ * The output row type of the combined query must match `this` query.
542
+ *
543
+ * ### Examples
544
+ *
545
+ * ```ts
546
+ * db.selectFrom('person')
547
+ * .select(['id', 'first_name as name'])
548
+ * .except(db.selectFrom('pet').select(['id', 'name']))
549
+ * .orderBy('name')
550
+ * ```
551
+ */
552
+ except(expression) {
553
+ return new SelectQueryBuilder({
554
+ ...this.#props,
555
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSetOperation(this.#props.queryNode, (0, set_operation_parser_js_1.parseSetOperation)('except', expression, false)),
556
+ });
557
+ }
558
+ /**
559
+ * Combines another select query or raw expression to this query using `except all`.
560
+ *
561
+ * The output row type of the combined query must match `this` query.
562
+ *
563
+ * ### Examples
564
+ *
565
+ * ```ts
566
+ * db.selectFrom('person')
567
+ * .select(['id', 'first_name as name'])
568
+ * .exceptAll(db.selectFrom('pet').select(['id', 'name']))
569
+ * .orderBy('name')
570
+ * ```
571
+ */
572
+ exceptAll(expression) {
573
+ return new SelectQueryBuilder({
574
+ ...this.#props,
575
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSetOperation(this.#props.queryNode, (0, set_operation_parser_js_1.parseSetOperation)('except', expression, true)),
496
576
  });
497
577
  }
498
578
  /**
@@ -60,7 +60,6 @@ import { ColumnDefinitionNode } from '../operation-node/column-definition-node.j
60
60
  import { ModifyColumnNode } from '../operation-node/modify-column-node.js';
61
61
  import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
62
62
  import { ColumnNode } from '../operation-node/column-node.js';
63
- import { UnionNode } from '../operation-node/union-node.js';
64
63
  import { CreateViewNode } from '../operation-node/create-view-node.js';
65
64
  import { DropViewNode } from '../operation-node/drop-view-node.js';
66
65
  import { GeneratedNode } from '../operation-node/generated-node.js';
@@ -73,6 +72,12 @@ import { CreateTypeNode } from '../operation-node/create-type-node.js';
73
72
  import { DropTypeNode } from '../operation-node/drop-type-node.js';
74
73
  import { ExplainNode } from '../operation-node/explain-node.js';
75
74
  import { SchemableIdentifierNode } from '../operation-node/schemable-identifier-node.js';
75
+ import { DefaultInsertValueNode } from '../operation-node/default-insert-value-node.js';
76
+ import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
77
+ import { OverNode } from '../operation-node/over-node.js';
78
+ import { PartitionByNode } from '../operation-node/partition-by-node.js';
79
+ import { PartitionByItemNode } from '../operation-node/partition-by-item-node.js';
80
+ import { SetOperationNode } from '../operation-node/set-operation-node.js';
76
81
  export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
77
82
  #private;
78
83
  protected get numParameters(): number;
@@ -144,7 +149,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
144
149
  protected visitModifyColumn(node: ModifyColumnNode): void;
145
150
  protected visitAddConstraint(node: AddConstraintNode): void;
146
151
  protected visitDropConstraint(node: DropConstraintNode): void;
147
- protected visitUnion(node: UnionNode): void;
152
+ protected visitSetOperation(node: SetOperationNode): void;
148
153
  protected visitCreateView(node: CreateViewNode): void;
149
154
  protected visitDropView(node: DropViewNode): void;
150
155
  protected visitGenerated(node: GeneratedNode): void;
@@ -153,6 +158,11 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
153
158
  protected visitCreateType(node: CreateTypeNode): void;
154
159
  protected visitDropType(node: DropTypeNode): void;
155
160
  protected visitExplain(node: ExplainNode): void;
161
+ protected visitDefaultInsertValue(_: DefaultInsertValueNode): void;
162
+ protected visitAggregateFunction(node: AggregateFunctionNode): void;
163
+ protected visitOver(node: OverNode): void;
164
+ protected visitPartitionBy(node: PartitionByNode): void;
165
+ protected visitPartitionByItem(node: PartitionByItemNode): void;
156
166
  protected append(str: string): void;
157
167
  protected appendValue(parameter: unknown): void;
158
168
  protected getLeftIdentifierWrapper(): string;
@@ -4,10 +4,9 @@ exports.DefaultQueryCompiler = void 0;
4
4
  const insert_query_node_js_1 = require("../operation-node/insert-query-node.js");
5
5
  const operation_node_visitor_js_1 = require("../operation-node/operation-node-visitor.js");
6
6
  const query_node_js_1 = require("../operation-node/query-node.js");
7
- const raw_node_js_1 = require("../operation-node/raw-node.js");
8
7
  const object_utils_js_1 = require("../util/object-utils.js");
9
- const union_node_js_1 = require("../operation-node/union-node.js");
10
8
  const create_view_node_js_1 = require("../operation-node/create-view-node.js");
9
+ const set_operation_node_js_1 = require("../operation-node/set-operation-node.js");
11
10
  class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisitor {
12
11
  #sql = '';
13
12
  #parameters = [];
@@ -31,7 +30,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
31
30
  const wrapInParens = this.parentNode !== undefined &&
32
31
  !insert_query_node_js_1.InsertQueryNode.is(this.parentNode) &&
33
32
  !create_view_node_js_1.CreateViewNode.is(this.parentNode) &&
34
- !union_node_js_1.UnionNode.is(this.parentNode);
33
+ !set_operation_node_js_1.SetOperationNode.is(this.parentNode);
35
34
  if (this.parentNode === undefined && node.explain) {
36
35
  this.visitNode(node.explain);
37
36
  this.append(' ');
@@ -73,9 +72,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
73
72
  this.append(' ');
74
73
  this.visitNode(node.having);
75
74
  }
76
- if (node.union) {
75
+ if (node.setOperations) {
77
76
  this.append(' ');
78
- this.compileList(node.union, ' ');
77
+ this.compileList(node.setOperations, ' ');
79
78
  }
80
79
  if (node.orderBy) {
81
80
  this.append(' ');
@@ -544,13 +543,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
544
543
  }
545
544
  if (node.expression) {
546
545
  this.append(' (');
547
- if (raw_node_js_1.RawNode.is(node.expression)) {
548
- this.append('(');
549
- }
550
546
  this.visitNode(node.expression);
551
- if (raw_node_js_1.RawNode.is(node.expression)) {
552
- this.append(')');
553
- }
554
547
  this.append(')');
555
548
  }
556
549
  }
@@ -752,12 +745,13 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
752
745
  this.append(' restrict');
753
746
  }
754
747
  }
755
- visitUnion(node) {
756
- this.append('union ');
748
+ visitSetOperation(node) {
749
+ this.append(node.operator);
750
+ this.append(' ');
757
751
  if (node.all) {
758
752
  this.append('all ');
759
753
  }
760
- this.visitNode(node.union);
754
+ this.visitNode(node.expression);
761
755
  }
762
756
  visitCreateView(node) {
763
757
  this.append('create ');
@@ -867,6 +861,42 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
867
861
  this.append(this.getRightExplainOptionsWrapper());
868
862
  }
869
863
  }
864
+ visitDefaultInsertValue(_) {
865
+ this.append('default');
866
+ }
867
+ visitAggregateFunction(node) {
868
+ this.append(node.func);
869
+ this.append('(');
870
+ if (node.distinct) {
871
+ this.append('distinct ');
872
+ }
873
+ this.visitNode(node.column);
874
+ this.append(')');
875
+ if (node.over) {
876
+ this.append(' ');
877
+ this.visitNode(node.over);
878
+ }
879
+ }
880
+ visitOver(node) {
881
+ this.append('over(');
882
+ if (node.partitionBy) {
883
+ this.visitNode(node.partitionBy);
884
+ if (node.orderBy) {
885
+ this.append(' ');
886
+ }
887
+ }
888
+ if (node.orderBy) {
889
+ this.visitNode(node.orderBy);
890
+ }
891
+ this.append(')');
892
+ }
893
+ visitPartitionBy(node) {
894
+ this.append('partition by ');
895
+ this.compileList(node.items);
896
+ }
897
+ visitPartitionByItem(node) {
898
+ this.visitNode(node.partitionBy);
899
+ }
870
900
  append(str) {
871
901
  this.#sql += str;
872
902
  }
@@ -7,13 +7,14 @@ export interface Sql {
7
7
  * import { sql } from 'kysely'
8
8
  *
9
9
  * const id = 123
10
- *
11
10
  * const snippet = sql<Person[]>`select * from person where id = ${id}`
12
11
  * ```
13
12
  *
14
13
  * Substitutions (the things inside `${}`) are automatically passed to the database
15
- * as parameters and are NOT interpolated to the SQL string. There's no need to worry
16
- * about SQL injection vulnerabilities.
14
+ * as parameters and are never interpolated to the SQL string. There's no need to worry
15
+ * about SQL injection vulnerabilities. Substitutions can be values, other `sql`
16
+ * expressions, queries and almost anything else Kysely can produce and they get
17
+ * handled correctly. See the examples below.
17
18
  *
18
19
  * If you need your substitutions to be interpreted as identifiers, value literals or
19
20
  * lists of things, see the {@link Sql.ref}, {@link Sql.table}, {@link Sql.id},
@@ -29,8 +30,7 @@ export interface Sql {
29
30
  * .selectFrom('person')
30
31
  * .select(
31
32
  * // If you use `sql` in a select statement, remember to call the `as`
32
- * // method to give it an alias. Otherwise Kysely is not able to add
33
- * // the column to the result type.
33
+ * // method to give it an alias.
34
34
  * sql<string>`concat(first_name, ' ', last_name)`.as('full_name')
35
35
  * )
36
36
  * .where(sql`birthdate between ${date1} and ${date2}`)
@@ -97,6 +97,14 @@ export interface Sql {
97
97
  * type-safety though... But it's possible.
98
98
  */
99
99
  <T = unknown>(sqlFragments: TemplateStringsArray, ...parameters: unknown[]): RawBuilder<T>;
100
+ /**
101
+ * `sql.value(value)` is a shortcut for:
102
+ *
103
+ * ```ts
104
+ * sql`${value}`
105
+ * ```
106
+ */
107
+ value(value: unknown): RawBuilder<unknown>;
100
108
  /**
101
109
  * This can be used to add runtime column references to SQL snippets.
102
110
  *
@@ -21,6 +21,12 @@ exports.sql = Object.assign((sqlFragments, ...parameters) => {
21
21
  rawNode: raw_node_js_1.RawNode.createWithChild((0, reference_parser_js_1.parseStringReference)(columnReference)),
22
22
  });
23
23
  },
24
+ value(value) {
25
+ return new raw_builder_js_1.RawBuilder({
26
+ queryId: (0, query_id_js_1.createQueryId)(),
27
+ rawNode: raw_node_js_1.RawNode.createWithChild((0, value_parser_js_1.parseValueExpression)(value)),
28
+ });
29
+ },
24
30
  table(tableReference) {
25
31
  return new raw_builder_js_1.RawBuilder({
26
32
  queryId: (0, query_id_js_1.createQueryId)(),
@@ -1,4 +1,5 @@
1
1
  export declare function isEmpty(obj: ArrayLike<unknown> | string | object): boolean;
2
+ export declare function isUndefined(obj: unknown): obj is undefined;
2
3
  export declare function isString(obj: unknown): obj is string;
3
4
  export declare function isNumber(obj: unknown): obj is number;
4
5
  export declare function isBoolean(obj: unknown): obj is boolean;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.compare = exports.noop = exports.isReadonlyArray = exports.asReadonlyArray = exports.asArray = exports.freeze = exports.getLast = exports.isObject = exports.isFunction = exports.isBuffer = exports.isBigInt = exports.isDate = exports.isNull = exports.isBoolean = exports.isNumber = exports.isString = exports.isEmpty = void 0;
3
+ exports.compare = exports.noop = exports.isReadonlyArray = exports.asReadonlyArray = exports.asArray = exports.freeze = exports.getLast = exports.isObject = exports.isFunction = exports.isBuffer = exports.isBigInt = exports.isDate = exports.isNull = exports.isBoolean = exports.isNumber = exports.isString = exports.isUndefined = exports.isEmpty = void 0;
4
4
  function isEmpty(obj) {
5
5
  if (Array.isArray(obj) || isString(obj) || isBuffer(obj)) {
6
6
  return obj.length === 0;
@@ -11,6 +11,10 @@ function isEmpty(obj) {
11
11
  return false;
12
12
  }
13
13
  exports.isEmpty = isEmpty;
14
+ function isUndefined(obj) {
15
+ return obj === undefined;
16
+ }
17
+ exports.isUndefined = isUndefined;
14
18
  function isString(obj) {
15
19
  return typeof obj === 'string';
16
20
  }
@@ -4,6 +4,7 @@ import { ExpressionBuilder } from '../query-builder/expression-builder.js';
4
4
  import { InsertResult } from '../query-builder/insert-result.js';
5
5
  import { DeleteResult } from '../query-builder/delete-result.js';
6
6
  import { UpdateResult } from '../query-builder/update-result.js';
7
+ import { AggregateFunctionBuilder, AliasedAggregateFunctionBuilder } from '../query-builder/aggregate-function-builder.js';
7
8
  /**
8
9
  * Given an object type, extracts the union of all value types.
9
10
  */
@@ -102,10 +103,13 @@ export declare type AnySelectQueryBuilder = SelectQueryBuilder<any, any, any>;
102
103
  export declare type AnyAliasedQueryBuilder = AliasedQueryBuilder<any, any, any, any>;
103
104
  export declare type AnyRawBuilder = RawBuilder<any>;
104
105
  export declare type AnyAliasedRawBuilder = AliasedRawBuilder<any, any>;
106
+ export declare type AnyAliasedAggregateFunctionBuilder = AliasedAggregateFunctionBuilder<any, any, any, any>;
105
107
  export declare type SelectQueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnySelectQueryBuilder;
106
108
  export declare type AliasedQueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedQueryBuilder;
107
- export declare type RawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyRawBuilder;
109
+ export declare type RawBuilderFactory<DB, TB extends keyof DB, O = any> = (qb: ExpressionBuilder<DB, TB>) => RawBuilder<O>;
108
110
  export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedRawBuilder;
111
+ export declare type AggregateFunctionBuilderFactory<DB, TB extends keyof DB, O = unknown> = (qb: ExpressionBuilder<DB, TB>) => AggregateFunctionBuilder<DB, TB, O>;
112
+ export declare type AliasedAggregateFunctionBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedAggregateFunctionBuilder;
109
113
  export declare type SingleResultType<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : O | undefined;
110
114
  export declare type UnknownRow = Record<string, unknown>;
111
115
  export declare type Nullable<T> = {
@@ -1,3 +1,4 @@
1
+ import { DefaultInsertValueNode } from '../../operation-node/default-insert-value-node.js';
1
2
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
2
3
  export declare class SqliteQueryCompiler extends DefaultQueryCompiler {
3
4
  protected getCurrentParameterPlaceholder(): string;
@@ -7,4 +8,5 @@ export declare class SqliteQueryCompiler extends DefaultQueryCompiler {
7
8
  protected getRightIdentifierWrapper(): string;
8
9
  protected getAutoIncrement(): string;
9
10
  protected sanitizeIdentifier(identifier: string): string;
11
+ protected visitDefaultInsertValue(_: DefaultInsertValueNode): void;
10
12
  }
@@ -23,4 +23,8 @@ export class SqliteQueryCompiler extends DefaultQueryCompiler {
23
23
  sanitizeIdentifier(identifier) {
24
24
  return identifier.replace(ID_WRAP_REGEX, '""');
25
25
  }
26
+ visitDefaultInsertValue(_) {
27
+ // sqlite doesn't support the `default` keyword in inserts.
28
+ this.append('null');
29
+ }
26
30
  }
@@ -10,11 +10,12 @@ export * from './query-builder/delete-query-builder.js';
10
10
  export * from './query-builder/no-result-error.js';
11
11
  export * from './query-builder/join-builder.js';
12
12
  export * from './query-builder/expression-builder.js';
13
- export * from './query-builder/function-builder.js';
13
+ export * from './query-builder/function-module.js';
14
14
  export * from './query-builder/insert-result.js';
15
15
  export * from './query-builder/delete-result.js';
16
16
  export * from './query-builder/update-result.js';
17
17
  export * from './query-builder/on-conflict-builder.js';
18
+ export * from './query-builder/aggregate-function-builder.js';
18
19
  export * from './raw-builder/raw-builder.js';
19
20
  export * from './raw-builder/sql.js';
20
21
  export * from './query-executor/query-executor.js';
@@ -142,7 +143,6 @@ export * from './operation-node/select-query-node.js';
142
143
  export * from './operation-node/select-query-node.js';
143
144
  export * from './operation-node/selection-node.js';
144
145
  export * from './operation-node/table-node.js';
145
- export * from './operation-node/union-node.js';
146
146
  export * from './operation-node/unique-constraint-node.js';
147
147
  export * from './operation-node/update-query-node.js';
148
148
  export * from './operation-node/value-list-node.js';
@@ -151,13 +151,19 @@ export * from './operation-node/values-node.js';
151
151
  export * from './operation-node/where-node.js';
152
152
  export * from './operation-node/with-node.js';
153
153
  export * from './operation-node/explain-node.js';
154
+ export * from './operation-node/default-insert-value-node.js';
155
+ export * from './operation-node/aggregate-function-node.js';
156
+ export * from './operation-node/over-node.js';
157
+ export * from './operation-node/partition-by-node.js';
158
+ export * from './operation-node/partition-by-item-node.js';
159
+ export * from './operation-node/set-operation-node.js';
154
160
  export * from './util/column-type.js';
155
161
  export * from './util/compilable.js';
156
162
  export * from './util/explainable.js';
157
163
  export * from './util/log.js';
158
164
  export { AnyColumn, UnknownRow, AnySelectQueryBuilder, } from './util/type-utils.js';
159
165
  export { SelectExpression, SelectExpressionOrList, Selection, } from './parser/select-parser.js';
160
- export { ReferenceExpression, ReferenceExpressionOrList, } from './parser/reference-parser.js';
166
+ export { ReferenceExpression, ReferenceExpressionOrList, StringReference, } from './parser/reference-parser.js';
161
167
  export { ValueExpression, ValueExpressionOrList, } from './parser/value-parser.js';
162
168
  export { FilterValueExpression, FilterValueExpressionOrList, ExistsExpression, FilterOperator, } from './parser/filter-parser.js';
163
169
  export { TableExpression, TableExpressionOrList, } from './parser/table-parser.js';
@@ -165,4 +171,4 @@ export { JoinReferenceExpression, JoinCallbackExpression, } from './parser/join-
165
171
  export { InsertObject } from './parser/insert-values-parser.js';
166
172
  export { MutationObject } from './parser/update-set-parser.js';
167
173
  export { OrderByExpression, OrderByDirectionExpression, } from './parser/order-by-parser.js';
168
- export { UnionExpression } from './parser/union-parser.js';
174
+ export { SetOperationExpression } from './parser/set-operation-parser.js';
package/dist/esm/index.js CHANGED
@@ -11,11 +11,12 @@ export * from './query-builder/delete-query-builder.js';
11
11
  export * from './query-builder/no-result-error.js';
12
12
  export * from './query-builder/join-builder.js';
13
13
  export * from './query-builder/expression-builder.js';
14
- export * from './query-builder/function-builder.js';
14
+ export * from './query-builder/function-module.js';
15
15
  export * from './query-builder/insert-result.js';
16
16
  export * from './query-builder/delete-result.js';
17
17
  export * from './query-builder/update-result.js';
18
18
  export * from './query-builder/on-conflict-builder.js';
19
+ export * from './query-builder/aggregate-function-builder.js';
19
20
  export * from './raw-builder/raw-builder.js';
20
21
  export * from './raw-builder/sql.js';
21
22
  export * from './query-executor/query-executor.js';
@@ -143,7 +144,6 @@ export * from './operation-node/select-query-node.js';
143
144
  export * from './operation-node/select-query-node.js';
144
145
  export * from './operation-node/selection-node.js';
145
146
  export * from './operation-node/table-node.js';
146
- export * from './operation-node/union-node.js';
147
147
  export * from './operation-node/unique-constraint-node.js';
148
148
  export * from './operation-node/update-query-node.js';
149
149
  export * from './operation-node/value-list-node.js';
@@ -152,6 +152,12 @@ export * from './operation-node/values-node.js';
152
152
  export * from './operation-node/where-node.js';
153
153
  export * from './operation-node/with-node.js';
154
154
  export * from './operation-node/explain-node.js';
155
+ export * from './operation-node/default-insert-value-node.js';
156
+ export * from './operation-node/aggregate-function-node.js';
157
+ export * from './operation-node/over-node.js';
158
+ export * from './operation-node/partition-by-node.js';
159
+ export * from './operation-node/partition-by-item-node.js';
160
+ export * from './operation-node/set-operation-node.js';
155
161
  export * from './util/column-type.js';
156
162
  export * from './util/compilable.js';
157
163
  export * from './util/explainable.js';
@@ -6,7 +6,7 @@ import { QueryCreator } from './query-creator.js';
6
6
  import { KyselyPlugin } from './plugin/kysely-plugin.js';
7
7
  import { DatabaseIntrospector } from './dialect/database-introspector.js';
8
8
  import { Driver, IsolationLevel } from './driver/driver.js';
9
- import { FunctionBuilder } from './query-builder/function-builder.js';
9
+ import { FunctionModule } from './query-builder/function-module.js';
10
10
  import { LogConfig } from './util/log.js';
11
11
  import { QueryExecutorProvider } from './query-executor/query-executor-provider.js';
12
12
  /**
@@ -72,7 +72,7 @@ export declare class Kysely<DB> extends QueryCreator<DB> implements QueryExecuto
72
72
  */
73
73
  get introspection(): DatabaseIntrospector;
74
74
  /**
75
- * Returns a {@link FunctionBuilder} that can be used to write type safe function
75
+ * Returns a {@link FunctionModule} that can be used to write type safe function
76
76
  * calls.
77
77
  *
78
78
  * ```ts
@@ -99,7 +99,7 @@ export declare class Kysely<DB> extends QueryCreator<DB> implements QueryExecuto
99
99
  * having count("pet"."id") > $1
100
100
  * ```
101
101
  */
102
- get fn(): FunctionBuilder<DB, keyof DB>;
102
+ get fn(): FunctionModule<DB, keyof DB>;
103
103
  /**
104
104
  * Creates a {@link TransactionBuilder} that can be used to run queries inside a transaction.
105
105
  *
@@ -9,7 +9,7 @@ import { RuntimeDriver } from './driver/runtime-driver.js';
9
9
  import { SingleConnectionProvider } from './driver/single-connection-provider.js';
10
10
  import { TRANSACTION_ISOLATION_LEVELS, } from './driver/driver.js';
11
11
  import { preventAwait } from './util/prevent-await.js';
12
- import { FunctionBuilder } from './query-builder/function-builder.js';
12
+ import { FunctionModule } from './query-builder/function-module.js';
13
13
  import { Log } from './util/log.js';
14
14
  /**
15
15
  * The main Kysely class.
@@ -105,7 +105,7 @@ export class Kysely extends QueryCreator {
105
105
  return this.#props.dialect.createIntrospector(this.withoutPlugins());
106
106
  }
107
107
  /**
108
- * Returns a {@link FunctionBuilder} that can be used to write type safe function
108
+ * Returns a {@link FunctionModule} that can be used to write type safe function
109
109
  * calls.
110
110
  *
111
111
  * ```ts
@@ -133,7 +133,7 @@ export class Kysely extends QueryCreator {
133
133
  * ```
134
134
  */
135
135
  get fn() {
136
- return new FunctionBuilder();
136
+ return new FunctionModule();
137
137
  }
138
138
  /**
139
139
  * Creates a {@link TransactionBuilder} that can be used to run queries inside a transaction.
@@ -29,8 +29,13 @@ export class FileMigrationProvider {
29
29
  !fileName.endsWith('.d.ts')) {
30
30
  const migration = await import(
31
31
  /* webpackIgnore: true */ this.#props.path.join(this.#props.migrationFolder, fileName));
32
- if (isMigration(migration)) {
33
- migrations[fileName.substring(0, fileName.length - 3)] = migration;
32
+ const migrationKey = fileName.substring(0, fileName.length - 3);
33
+ // Handle esModuleInterop export's `default` prop...
34
+ if (isMigration(migration?.default)) {
35
+ migrations[migrationKey] = migration.default;
36
+ }
37
+ else if (isMigration(migration)) {
38
+ migrations[migrationKey] = migration;
34
39
  }
35
40
  }
36
41
  }