kysely 0.23.1 → 0.23.3

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 (70) hide show
  1. package/README.md +5 -0
  2. package/dist/cjs/dialect/mysql/mysql-introspector.js +1 -1
  3. package/dist/cjs/dialect/postgres/postgres-introspector.js +1 -1
  4. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -1
  5. package/dist/cjs/index.d.ts +1 -1
  6. package/dist/cjs/operation-node/on-conflict-node.d.ts +2 -0
  7. package/dist/cjs/operation-node/on-conflict-node.js +12 -0
  8. package/dist/cjs/operation-node/query-node.d.ts +1 -0
  9. package/dist/cjs/operation-node/query-node.js +6 -0
  10. package/dist/cjs/operation-node/select-query-node.d.ts +4 -0
  11. package/dist/cjs/operation-node/select-query-node.js +24 -0
  12. package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
  13. package/dist/cjs/parser/update-set-parser.d.ts +3 -3
  14. package/dist/cjs/parser/update-set-parser.js +2 -2
  15. package/dist/cjs/query-builder/delete-query-builder.d.ts +63 -1
  16. package/dist/cjs/query-builder/delete-query-builder.js +51 -1
  17. package/dist/cjs/query-builder/insert-query-builder.d.ts +46 -3
  18. package/dist/cjs/query-builder/insert-query-builder.js +45 -1
  19. package/dist/cjs/query-builder/on-conflict-builder.d.ts +40 -2
  20. package/dist/cjs/query-builder/on-conflict-builder.js +12 -0
  21. package/dist/cjs/query-builder/select-query-builder.d.ts +138 -1
  22. package/dist/cjs/query-builder/select-query-builder.js +146 -1
  23. package/dist/cjs/query-builder/update-query-builder.d.ts +67 -3
  24. package/dist/cjs/query-builder/update-query-builder.js +53 -1
  25. package/dist/cjs/query-builder/where-interface.d.ts +19 -0
  26. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +23 -0
  27. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +38 -0
  28. package/dist/cjs/schema/alter-table-builder.d.ts +3 -35
  29. package/dist/cjs/schema/alter-table-builder.js +10 -102
  30. package/dist/cjs/schema/alter-table-drop-constraint-builder.d.ts +21 -0
  31. package/dist/cjs/schema/alter-table-drop-constraint-builder.js +54 -0
  32. package/dist/cjs/schema/alter-table-executor.d.ts +18 -0
  33. package/dist/cjs/schema/alter-table-executor.js +22 -0
  34. package/dist/cjs/util/type-error.d.ts +3 -0
  35. package/dist/cjs/util/type-error.js +2 -0
  36. package/dist/esm/dialect/mysql/mysql-introspector.js +1 -1
  37. package/dist/esm/dialect/postgres/postgres-introspector.js +1 -1
  38. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -1
  39. package/dist/esm/index.d.ts +1 -1
  40. package/dist/esm/operation-node/on-conflict-node.d.ts +2 -0
  41. package/dist/esm/operation-node/on-conflict-node.js +12 -0
  42. package/dist/esm/operation-node/query-node.d.ts +1 -0
  43. package/dist/esm/operation-node/query-node.js +6 -0
  44. package/dist/esm/operation-node/select-query-node.d.ts +4 -0
  45. package/dist/esm/operation-node/select-query-node.js +24 -0
  46. package/dist/esm/parser/binary-operation-parser.d.ts +1 -1
  47. package/dist/esm/parser/update-set-parser.d.ts +3 -3
  48. package/dist/esm/parser/update-set-parser.js +2 -2
  49. package/dist/esm/query-builder/delete-query-builder.d.ts +63 -1
  50. package/dist/esm/query-builder/delete-query-builder.js +51 -1
  51. package/dist/esm/query-builder/insert-query-builder.d.ts +46 -3
  52. package/dist/esm/query-builder/insert-query-builder.js +45 -1
  53. package/dist/esm/query-builder/on-conflict-builder.d.ts +40 -2
  54. package/dist/esm/query-builder/on-conflict-builder.js +12 -0
  55. package/dist/esm/query-builder/select-query-builder.d.ts +138 -1
  56. package/dist/esm/query-builder/select-query-builder.js +146 -1
  57. package/dist/esm/query-builder/update-query-builder.d.ts +67 -3
  58. package/dist/esm/query-builder/update-query-builder.js +54 -2
  59. package/dist/esm/query-builder/where-interface.d.ts +19 -0
  60. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +23 -0
  61. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +35 -0
  62. package/dist/esm/schema/alter-table-builder.d.ts +3 -35
  63. package/dist/esm/schema/alter-table-builder.js +4 -93
  64. package/dist/esm/schema/alter-table-drop-constraint-builder.d.ts +21 -0
  65. package/dist/esm/schema/alter-table-drop-constraint-builder.js +51 -0
  66. package/dist/esm/schema/alter-table-executor.d.ts +18 -0
  67. package/dist/esm/schema/alter-table-executor.js +19 -0
  68. package/dist/esm/util/type-error.d.ts +3 -0
  69. package/dist/esm/util/type-error.js +2 -0
  70. package/package.json +2 -2
@@ -19,6 +19,7 @@ import { Explainable, ExplainFormat } from '../util/explainable.js';
19
19
  import { AliasedExpression, Expression } from '../expression/expression.js';
20
20
  import { ComparisonOperatorExpression, HavingGrouper, OperandValueExpressionOrList, WhereGrouper } from '../parser/binary-operation-parser.js';
21
21
  import { ExistsExpression } from '../parser/unary-operation-parser.js';
22
+ import { KyselyTypeError } from '../util/type-error.js';
22
23
  export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, HavingInterface<DB, TB>, Expression<O>, Compilable<O>, Explainable {
23
24
  #private;
24
25
  constructor(props: SelectQueryBuilderProps);
@@ -1291,6 +1292,102 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1291
1292
  * ```
1292
1293
  */
1293
1294
  exceptAll(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1295
+ /**
1296
+ * Clears all select clauses from the query.
1297
+ *
1298
+ * ### Examples
1299
+ *
1300
+ * ```ts
1301
+ * db.selectFrom('person')
1302
+ * .select(['id', 'first_name'])
1303
+ * .clearSelect()
1304
+ * .select(['id','gender'])
1305
+ * ```
1306
+ *
1307
+ * The generated SQL(PostgreSQL):
1308
+ *
1309
+ * ```sql
1310
+ * select "id", "gender" from "person"
1311
+ * ```
1312
+ */
1313
+ clearSelect(): SelectQueryBuilder<DB, TB, {}>;
1314
+ /**
1315
+ * Clears all where clauses from the query.
1316
+ *
1317
+ * ### Examples
1318
+ *
1319
+ * ```ts
1320
+ * db.selectFrom('person')
1321
+ * .selectAll()
1322
+ * .where('id','=',42)
1323
+ * .clearWhere()
1324
+ * ```
1325
+ *
1326
+ * The generated SQL(PostgreSQL):
1327
+ *
1328
+ * ```sql
1329
+ * select * from "person"
1330
+ * ```
1331
+ */
1332
+ clearWhere(): SelectQueryBuilder<DB, TB, O>;
1333
+ /**
1334
+ * Clears limit clause from the query.
1335
+ *
1336
+ * ### Examples
1337
+ *
1338
+ * ```ts
1339
+ * db.selectFrom('person')
1340
+ * .selectAll()
1341
+ * .limit(10)
1342
+ * .clearLimit()
1343
+ * ```
1344
+ *
1345
+ * The generated SQL(PostgreSQL):
1346
+ *
1347
+ * ```sql
1348
+ * select * from "person"
1349
+ * ```
1350
+ */
1351
+ clearLimit(): SelectQueryBuilder<DB, TB, O>;
1352
+ /**
1353
+ * Clears offset clause from the query.
1354
+ *
1355
+ * ### Examples
1356
+ *
1357
+ * ```ts
1358
+ * db.selectFrom('person')
1359
+ * .selectAll()
1360
+ * .limit(10)
1361
+ * .offset(20)
1362
+ * .clearOffset()
1363
+ * ```
1364
+ *
1365
+ * The generated SQL(PostgreSQL):
1366
+ *
1367
+ * ```sql
1368
+ * select * from "person" limit 10
1369
+ * ```
1370
+ */
1371
+ clearOffset(): SelectQueryBuilder<DB, TB, O>;
1372
+ /**
1373
+ * Clears all `order by` clauses from the query.
1374
+ *
1375
+ * ### Examples
1376
+ *
1377
+ * ```ts
1378
+ * db.selectFrom('person')
1379
+ * .selectAll()
1380
+ * .orderBy('id')
1381
+ * .clearOrderBy()
1382
+ * ```
1383
+ *
1384
+ * The generated SQL(PostgreSQL):
1385
+ *
1386
+ * ```sql
1387
+ * select * from "person"
1388
+ * ```
1389
+ */
1390
+ clearOrderBy(): SelectQueryBuilder<DB, TB, O>;
1294
1391
  /**
1295
1392
  * Simply calls the given function passing `this` as the only argument.
1296
1393
  *
@@ -1299,7 +1396,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1299
1396
  *
1300
1397
  * ### Examples
1301
1398
  *
1302
- * The next example uses a helper funtion `log` to log a query:
1399
+ * The next example uses a helper function `log` to log a query:
1303
1400
  *
1304
1401
  * ```ts
1305
1402
  * function log<T extends Compilable>(qb: T): T {
@@ -1392,6 +1489,46 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1392
1489
  * don't support your use case.
1393
1490
  */
1394
1491
  castTo<T>(): SelectQueryBuilder<DB, TB, T>;
1492
+ /**
1493
+ * Asserts that query's output row type equals the given type `T`.
1494
+ *
1495
+ * This method can be used to simplify excessively complex types to make typescript happy
1496
+ * and much faster.
1497
+ *
1498
+ * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
1499
+ * for typescript and you get errors like this:
1500
+ *
1501
+ * ```
1502
+ * error TS2589: Type instantiation is excessively deep and possibly infinite.
1503
+ * ```
1504
+ *
1505
+ * In these case you can often use this method to help typescript a little bit. When you use this
1506
+ * method to assert the output type of a query, Kysely can drop the complex output type that
1507
+ * consists of multiple nested helper types and replace it with the simple asserted type.
1508
+ *
1509
+ * Using this method doesn't reduce type safety at all. You have to pass in a type that is
1510
+ * structurally equal to the current type.
1511
+ *
1512
+ * ### Examples
1513
+ *
1514
+ * ```ts
1515
+ * const result = await db
1516
+ * .with('first_and_last', (qb) => qb
1517
+ * .selectFrom('person')
1518
+ * .select(['first_name', 'last_name'])
1519
+ * .assertType<{ first_name: string, last_name: string }>()
1520
+ * )
1521
+ * .with('age', (qb) => qb
1522
+ * .selectFrom('person')
1523
+ * .select('age')
1524
+ * .assertType<{ age: number }>()
1525
+ * )
1526
+ * .selectFrom(['first_and_last', 'age'])
1527
+ * .selectAll()
1528
+ * .executeTakeFirstOrThrow()
1529
+ * ```
1530
+ */
1531
+ assertType<T extends O>(): O extends T ? SelectQueryBuilder<DB, TB, T> : KyselyTypeError<`assertType() call failed: The type passed in is not equal to the output type of the query.`>;
1395
1532
  /**
1396
1533
  * Returns a copy of this SelectQueryBuilder instance with the given plugin installed.
1397
1534
  */
@@ -581,6 +581,109 @@ class SelectQueryBuilder {
581
581
  queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSetOperation(this.#props.queryNode, (0, set_operation_parser_js_1.parseSetOperation)('except', expression, true)),
582
582
  });
583
583
  }
584
+ /**
585
+ * Clears all select clauses from the query.
586
+ *
587
+ * ### Examples
588
+ *
589
+ * ```ts
590
+ * db.selectFrom('person')
591
+ * .select(['id', 'first_name'])
592
+ * .clearSelect()
593
+ * .select(['id','gender'])
594
+ * ```
595
+ *
596
+ * The generated SQL(PostgreSQL):
597
+ *
598
+ * ```sql
599
+ * select "id", "gender" from "person"
600
+ * ```
601
+ */
602
+ clearSelect() {
603
+ return new SelectQueryBuilder({
604
+ ...this.#props,
605
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithoutSelections(this.#props.queryNode),
606
+ });
607
+ }
608
+ clearWhere() {
609
+ return new SelectQueryBuilder({
610
+ ...this.#props,
611
+ queryNode: query_node_js_1.QueryNode.cloneWithoutWhere(this.#props.queryNode),
612
+ });
613
+ }
614
+ /**
615
+ * Clears limit clause from the query.
616
+ *
617
+ * ### Examples
618
+ *
619
+ * ```ts
620
+ * db.selectFrom('person')
621
+ * .selectAll()
622
+ * .limit(10)
623
+ * .clearLimit()
624
+ * ```
625
+ *
626
+ * The generated SQL(PostgreSQL):
627
+ *
628
+ * ```sql
629
+ * select * from "person"
630
+ * ```
631
+ */
632
+ clearLimit() {
633
+ return new SelectQueryBuilder({
634
+ ...this.#props,
635
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithoutLimit(this.#props.queryNode),
636
+ });
637
+ }
638
+ /**
639
+ * Clears offset clause from the query.
640
+ *
641
+ * ### Examples
642
+ *
643
+ * ```ts
644
+ * db.selectFrom('person')
645
+ * .selectAll()
646
+ * .limit(10)
647
+ * .offset(20)
648
+ * .clearOffset()
649
+ * ```
650
+ *
651
+ * The generated SQL(PostgreSQL):
652
+ *
653
+ * ```sql
654
+ * select * from "person" limit 10
655
+ * ```
656
+ */
657
+ clearOffset() {
658
+ return new SelectQueryBuilder({
659
+ ...this.#props,
660
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithoutOffset(this.#props.queryNode),
661
+ });
662
+ }
663
+ /**
664
+ * Clears all `order by` clauses from the query.
665
+ *
666
+ * ### Examples
667
+ *
668
+ * ```ts
669
+ * db.selectFrom('person')
670
+ * .selectAll()
671
+ * .orderBy('id')
672
+ * .clearOrderBy()
673
+ * ```
674
+ *
675
+ * The generated SQL(PostgreSQL):
676
+ *
677
+ * ```sql
678
+ * select * from "person"
679
+ * ```
680
+ */
681
+ clearOrderBy() {
682
+ return new SelectQueryBuilder({
683
+ ...this.#props,
684
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithoutOrderBy(this.#props.queryNode),
685
+ });
686
+ }
584
687
  /**
585
688
  * Simply calls the given function passing `this` as the only argument.
586
689
  *
@@ -589,7 +692,7 @@ class SelectQueryBuilder {
589
692
  *
590
693
  * ### Examples
591
694
  *
592
- * The next example uses a helper funtion `log` to log a query:
695
+ * The next example uses a helper function `log` to log a query:
593
696
  *
594
697
  * ```ts
595
698
  * function log<T extends Compilable>(qb: T): T {
@@ -695,6 +798,48 @@ class SelectQueryBuilder {
695
798
  castTo() {
696
799
  return new SelectQueryBuilder(this.#props);
697
800
  }
801
+ /**
802
+ * Asserts that query's output row type equals the given type `T`.
803
+ *
804
+ * This method can be used to simplify excessively complex types to make typescript happy
805
+ * and much faster.
806
+ *
807
+ * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
808
+ * for typescript and you get errors like this:
809
+ *
810
+ * ```
811
+ * error TS2589: Type instantiation is excessively deep and possibly infinite.
812
+ * ```
813
+ *
814
+ * In these case you can often use this method to help typescript a little bit. When you use this
815
+ * method to assert the output type of a query, Kysely can drop the complex output type that
816
+ * consists of multiple nested helper types and replace it with the simple asserted type.
817
+ *
818
+ * Using this method doesn't reduce type safety at all. You have to pass in a type that is
819
+ * structurally equal to the current type.
820
+ *
821
+ * ### Examples
822
+ *
823
+ * ```ts
824
+ * const result = await db
825
+ * .with('first_and_last', (qb) => qb
826
+ * .selectFrom('person')
827
+ * .select(['first_name', 'last_name'])
828
+ * .assertType<{ first_name: string, last_name: string }>()
829
+ * )
830
+ * .with('age', (qb) => qb
831
+ * .selectFrom('person')
832
+ * .select('age')
833
+ * .assertType<{ age: number }>()
834
+ * )
835
+ * .selectFrom(['first_and_last', 'age'])
836
+ * .selectAll()
837
+ * .executeTakeFirstOrThrow()
838
+ * ```
839
+ */
840
+ assertType() {
841
+ return new SelectQueryBuilder(this.#props);
842
+ }
698
843
  /**
699
844
  * Returns a copy of this SelectQueryBuilder instance with the given plugin installed.
700
845
  */
@@ -7,7 +7,7 @@ import { ReturningRow } from '../parser/returning-parser.js';
7
7
  import { ReferenceExpression } from '../parser/reference-parser.js';
8
8
  import { MergePartial, Nullable, SingleResultType } from '../util/type-utils.js';
9
9
  import { UpdateQueryNode } from '../operation-node/update-query-node.js';
10
- import { MutationObject } from '../parser/update-set-parser.js';
10
+ import { UpdateObject } from '../parser/update-set-parser.js';
11
11
  import { Compilable } from '../util/compilable.js';
12
12
  import { QueryExecutor } from '../query-executor/query-executor.js';
13
13
  import { QueryId } from '../util/query-id.js';
@@ -21,6 +21,7 @@ import { Explainable, ExplainFormat } from '../util/explainable.js';
21
21
  import { AliasedExpression, Expression } from '../expression/expression.js';
22
22
  import { ComparisonOperatorExpression, OperandValueExpressionOrList, WhereGrouper } from '../parser/binary-operation-parser.js';
23
23
  import { ExistsExpression } from '../parser/unary-operation-parser.js';
24
+ import { KyselyTypeError } from '../util/type-error.js';
24
25
  export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable {
25
26
  #private;
26
27
  constructor(props: UpdateQueryBuilderProps);
@@ -408,6 +409,25 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
408
409
  * Just like {@link whereExists} but creates an `or not exists` clause.
409
410
  */
410
411
  orWhereNotExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, UT, TB, O>;
412
+ /**
413
+ * Clears all where clauses from the query.
414
+ *
415
+ * ### Examples
416
+ *
417
+ * ```ts
418
+ * db.selectFrom('person')
419
+ * .selectAll()
420
+ * .where('id','=',42)
421
+ * .clearWhere()
422
+ * ```
423
+ *
424
+ * The generated SQL(PostgreSQL):
425
+ *
426
+ * ```sql
427
+ * select * from "person"
428
+ * ```
429
+ */
430
+ clearWhere(): UpdateQueryBuilder<DB, UT, TB, O>;
411
431
  /**
412
432
  * Adds a from clause to the update query.
413
433
  *
@@ -650,7 +670,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
650
670
  * where "id" = $4
651
671
  * ```
652
672
  */
653
- set(row: MutationObject<DB, TB, UT>): UpdateQueryBuilder<DB, UT, TB, O>;
673
+ set(row: UpdateObject<DB, TB, UT>): UpdateQueryBuilder<DB, UT, TB, O>;
654
674
  /**
655
675
  * Allows you to return data from modified rows.
656
676
  *
@@ -725,7 +745,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
725
745
  *
726
746
  * ### Examples
727
747
  *
728
- * The next example uses a helper funtion `log` to log a query:
748
+ * The next example uses a helper function `log` to log a query:
729
749
  *
730
750
  * ```ts
731
751
  * function log<T extends Compilable>(qb: T): T {
@@ -784,6 +804,50 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
784
804
  * don't support your use case.
785
805
  */
786
806
  castTo<T>(): UpdateQueryBuilder<DB, UT, TB, T>;
807
+ /**
808
+ * Asserts that query's output row type equals the given type `T`.
809
+ *
810
+ * This method can be used to simplify excessively complex types to make typescript happy
811
+ * and much faster.
812
+ *
813
+ * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
814
+ * for typescript and you get errors like this:
815
+ *
816
+ * ```
817
+ * error TS2589: Type instantiation is excessively deep and possibly infinite.
818
+ * ```
819
+ *
820
+ * In these case you can often use this method to help typescript a little bit. When you use this
821
+ * method to assert the output type of a query, Kysely can drop the complex output type that
822
+ * consists of multiple nested helper types and replace it with the simple asserted type.
823
+ *
824
+ * Using this method doesn't reduce type safety at all. You have to pass in a type that is
825
+ * structurally equal to the current type.
826
+ *
827
+ * ### Examples
828
+ *
829
+ * ```ts
830
+ * const result = await db
831
+ * .with('updated_person', (qb) => qb
832
+ * .updateTable('person')
833
+ * .set(person)
834
+ * .where('id', '=', person.id)
835
+ * .returning('first_name')
836
+ * .assertType<{ first_name: string }>()
837
+ * )
838
+ * .with('updated_pet', (qb) => qb
839
+ * .updateTable('pet')
840
+ * .set(pet)
841
+ * .where('owner_id', '=', person.id)
842
+ * .returning(['name as pet_name', 'species'])
843
+ * .assertType<{ pet_name: string, species: Species }>()
844
+ * )
845
+ * .selectFrom(['updated_person', 'updated_pet'])
846
+ * .selectAll()
847
+ * .executeTakeFirstOrThrow()
848
+ * ```
849
+ */
850
+ assertType<T extends O>(): O extends T ? UpdateQueryBuilder<DB, UT, TB, T> : KyselyTypeError<`assertType() call failed: The type passed in is not equal to the output type of the query.`>;
787
851
  /**
788
852
  * Returns a copy of this UpdateQueryBuilder instance with the given plugin installed.
789
853
  */
@@ -67,6 +67,12 @@ class UpdateQueryBuilder {
67
67
  queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, unary_operation_parser_js_1.parseNotExists)(arg)),
68
68
  });
69
69
  }
70
+ clearWhere() {
71
+ return new UpdateQueryBuilder({
72
+ ...this.#props,
73
+ queryNode: query_node_js_1.QueryNode.cloneWithoutWhere(this.#props.queryNode),
74
+ });
75
+ }
70
76
  from(from) {
71
77
  return new UpdateQueryBuilder({
72
78
  ...this.#props,
@@ -210,7 +216,7 @@ class UpdateQueryBuilder {
210
216
  *
211
217
  * ### Examples
212
218
  *
213
- * The next example uses a helper funtion `log` to log a query:
219
+ * The next example uses a helper function `log` to log a query:
214
220
  *
215
221
  * ```ts
216
222
  * function log<T extends Compilable>(qb: T): T {
@@ -280,6 +286,52 @@ class UpdateQueryBuilder {
280
286
  castTo() {
281
287
  return new UpdateQueryBuilder(this.#props);
282
288
  }
289
+ /**
290
+ * Asserts that query's output row type equals the given type `T`.
291
+ *
292
+ * This method can be used to simplify excessively complex types to make typescript happy
293
+ * and much faster.
294
+ *
295
+ * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
296
+ * for typescript and you get errors like this:
297
+ *
298
+ * ```
299
+ * error TS2589: Type instantiation is excessively deep and possibly infinite.
300
+ * ```
301
+ *
302
+ * In these case you can often use this method to help typescript a little bit. When you use this
303
+ * method to assert the output type of a query, Kysely can drop the complex output type that
304
+ * consists of multiple nested helper types and replace it with the simple asserted type.
305
+ *
306
+ * Using this method doesn't reduce type safety at all. You have to pass in a type that is
307
+ * structurally equal to the current type.
308
+ *
309
+ * ### Examples
310
+ *
311
+ * ```ts
312
+ * const result = await db
313
+ * .with('updated_person', (qb) => qb
314
+ * .updateTable('person')
315
+ * .set(person)
316
+ * .where('id', '=', person.id)
317
+ * .returning('first_name')
318
+ * .assertType<{ first_name: string }>()
319
+ * )
320
+ * .with('updated_pet', (qb) => qb
321
+ * .updateTable('pet')
322
+ * .set(pet)
323
+ * .where('owner_id', '=', person.id)
324
+ * .returning(['name as pet_name', 'species'])
325
+ * .assertType<{ pet_name: string, species: Species }>()
326
+ * )
327
+ * .selectFrom(['updated_person', 'updated_pet'])
328
+ * .selectAll()
329
+ * .executeTakeFirstOrThrow()
330
+ * ```
331
+ */
332
+ assertType() {
333
+ return new UpdateQueryBuilder(this.#props);
334
+ }
283
335
  /**
284
336
  * Returns a copy of this UpdateQueryBuilder instance with the given plugin installed.
285
337
  */
@@ -387,4 +387,23 @@ export interface WhereInterface<DB, TB extends keyof DB> {
387
387
  * Just like {@link whereExists} but creates an `or not exists` clause.
388
388
  */
389
389
  orWhereNotExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
390
+ /**
391
+ * Clears all where clauses from the query.
392
+ *
393
+ * ### Examples
394
+ *
395
+ * ```ts
396
+ * db.selectFrom('person')
397
+ * .selectAll()
398
+ * .where('id','=',42)
399
+ * .clearWhere()
400
+ * ```
401
+ *
402
+ * The generated SQL(PostgreSQL):
403
+ *
404
+ * ```sql
405
+ * select * from "person"
406
+ * ```
407
+ */
408
+ clearWhere(): WhereInterface<DB, TB>;
390
409
  }
@@ -0,0 +1,23 @@
1
+ import { AlterTableNode } from '../operation-node/alter-table-node.js';
2
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
+ import { OnModifyForeignAction } from '../operation-node/references-node.js';
4
+ import { CompiledQuery } from '../query-compiler/compiled-query.js';
5
+ import { QueryExecutor } from '../query-executor/query-executor.js';
6
+ import { Compilable } from '../util/compilable.js';
7
+ import { QueryId } from '../util/query-id.js';
8
+ import { ForeignKeyConstraintBuilder, ForeignKeyConstraintBuilderInterface } from './foreign-key-constraint-builder.js';
9
+ export declare class AlterTableAddForeignKeyConstraintBuilder implements ForeignKeyConstraintBuilderInterface<AlterTableAddForeignKeyConstraintBuilder>, OperationNodeSource, Compilable {
10
+ #private;
11
+ constructor(props: AlterTableAddForeignKeyConstraintBuilderProps);
12
+ onDelete(onDelete: OnModifyForeignAction): AlterTableAddForeignKeyConstraintBuilder;
13
+ onUpdate(onUpdate: OnModifyForeignAction): AlterTableAddForeignKeyConstraintBuilder;
14
+ toOperationNode(): AlterTableNode;
15
+ compile(): CompiledQuery;
16
+ execute(): Promise<void>;
17
+ }
18
+ export interface AlterTableAddForeignKeyConstraintBuilderProps {
19
+ readonly queryId: QueryId;
20
+ readonly executor: QueryExecutor;
21
+ readonly node: AlterTableNode;
22
+ readonly constraintBuilder: ForeignKeyConstraintBuilder;
23
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AlterTableAddForeignKeyConstraintBuilder = void 0;
4
+ const add_constraint_node_js_1 = require("../operation-node/add-constraint-node.js");
5
+ const alter_table_node_js_1 = require("../operation-node/alter-table-node.js");
6
+ const object_utils_js_1 = require("../util/object-utils.js");
7
+ const prevent_await_js_1 = require("../util/prevent-await.js");
8
+ class AlterTableAddForeignKeyConstraintBuilder {
9
+ #props;
10
+ constructor(props) {
11
+ this.#props = (0, object_utils_js_1.freeze)(props);
12
+ }
13
+ onDelete(onDelete) {
14
+ return new AlterTableAddForeignKeyConstraintBuilder({
15
+ ...this.#props,
16
+ constraintBuilder: this.#props.constraintBuilder.onDelete(onDelete),
17
+ });
18
+ }
19
+ onUpdate(onUpdate) {
20
+ return new AlterTableAddForeignKeyConstraintBuilder({
21
+ ...this.#props,
22
+ constraintBuilder: this.#props.constraintBuilder.onUpdate(onUpdate),
23
+ });
24
+ }
25
+ toOperationNode() {
26
+ return this.#props.executor.transformQuery(alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, {
27
+ addConstraint: add_constraint_node_js_1.AddConstraintNode.create(this.#props.constraintBuilder.toOperationNode()),
28
+ }), this.#props.queryId);
29
+ }
30
+ compile() {
31
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
32
+ }
33
+ async execute() {
34
+ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
35
+ }
36
+ }
37
+ exports.AlterTableAddForeignKeyConstraintBuilder = AlterTableAddForeignKeyConstraintBuilder;
38
+ (0, prevent_await_js_1.preventAwait)(AlterTableAddForeignKeyConstraintBuilder, "don't await AlterTableAddForeignKeyConstraintBuilder instances directly. To execute the query you need to call `execute`");
@@ -1,15 +1,16 @@
1
1
  import { AlterTableNode } from '../operation-node/alter-table-node.js';
2
2
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
- import { OnModifyForeignAction } from '../operation-node/references-node.js';
4
3
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
5
4
  import { Compilable } from '../util/compilable.js';
6
5
  import { ColumnDefinitionBuilderCallback } from './column-definition-builder.js';
7
6
  import { QueryId } from '../util/query-id.js';
8
7
  import { QueryExecutor } from '../query-executor/query-executor.js';
9
8
  import { DataTypeExpression } from '../parser/data-type-parser.js';
10
- import { ForeignKeyConstraintBuilder, ForeignKeyConstraintBuilderInterface } from './foreign-key-constraint-builder.js';
11
9
  import { Expression } from '../expression/expression.js';
12
10
  import { AlterColumnBuilderCallback } from './alter-column-builder.js';
11
+ import { AlterTableExecutor } from './alter-table-executor.js';
12
+ import { AlterTableAddForeignKeyConstraintBuilder } from './alter-table-add-foreign-key-constraint-builder.js';
13
+ import { AlterTableDropConstraintBuilder } from './alter-table-drop-constraint-builder.js';
13
14
  /**
14
15
  * This builder can be used to create a `alter table` query.
15
16
  */
@@ -60,15 +61,6 @@ export interface AlterTableBuilderProps {
60
61
  readonly executor: QueryExecutor;
61
62
  readonly node: AlterTableNode;
62
63
  }
63
- export declare class AlterTableExecutor implements OperationNodeSource, Compilable {
64
- #private;
65
- constructor(props: AlterTableExecutorProps);
66
- toOperationNode(): AlterTableNode;
67
- compile(): CompiledQuery;
68
- execute(): Promise<void>;
69
- }
70
- export interface AlterTableExecutorProps extends AlterTableBuilderProps {
71
- }
72
64
  export interface ColumnAlteringInterface {
73
65
  alterColumn(column: string, alteration: AlterColumnBuilderCallback): ColumnAlteringInterface;
74
66
  dropColumn(column: string): ColumnAlteringInterface;
@@ -106,27 +98,3 @@ export declare class AlterTableColumnAlteringBuilder implements ColumnAlteringIn
106
98
  }
107
99
  export interface AlterTableColumnAlteringBuilderProps extends AlterTableBuilderProps {
108
100
  }
109
- export declare class AlterTableAddForeignKeyConstraintBuilder implements ForeignKeyConstraintBuilderInterface<AlterTableAddForeignKeyConstraintBuilder>, OperationNodeSource, Compilable {
110
- #private;
111
- constructor(props: AlterTableAddForeignKeyConstraintBuilderProps);
112
- onDelete(onDelete: OnModifyForeignAction): AlterTableAddForeignKeyConstraintBuilder;
113
- onUpdate(onUpdate: OnModifyForeignAction): AlterTableAddForeignKeyConstraintBuilder;
114
- toOperationNode(): AlterTableNode;
115
- compile(): CompiledQuery;
116
- execute(): Promise<void>;
117
- }
118
- export interface AlterTableAddForeignKeyConstraintBuilderProps extends AlterTableBuilderProps {
119
- readonly constraintBuilder: ForeignKeyConstraintBuilder;
120
- }
121
- export declare class AlterTableDropConstraintBuilder implements OperationNodeSource, Compilable {
122
- #private;
123
- constructor(props: AlterTableDropConstraintBuilderProps);
124
- ifExists(): AlterTableDropConstraintBuilder;
125
- cascade(): AlterTableDropConstraintBuilder;
126
- restrict(): AlterTableDropConstraintBuilder;
127
- toOperationNode(): AlterTableNode;
128
- compile(): CompiledQuery;
129
- execute(): Promise<void>;
130
- }
131
- export interface AlterTableDropConstraintBuilderProps extends AlterTableBuilderProps {
132
- }