kysely 0.19.1 → 0.19.4

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 (84) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +0 -5
  3. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -6
  4. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +0 -5
  5. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +0 -5
  6. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +0 -1
  7. package/dist/cjs/driver/driver.d.ts +0 -5
  8. package/dist/cjs/driver/dummy-driver.d.ts +0 -5
  9. package/dist/cjs/driver/runtime-driver.d.ts +0 -5
  10. package/dist/cjs/index.d.ts +0 -1
  11. package/dist/cjs/index.js +0 -1
  12. package/dist/cjs/migration/file-migration-provider.js +3 -2
  13. package/dist/cjs/migration/migrator.d.ts +2 -0
  14. package/dist/cjs/operation-node/check-constraint-node.d.ts +1 -1
  15. package/dist/cjs/operation-node/common-table-expression-name-node.d.ts +1 -1
  16. package/dist/cjs/operation-node/create-schema-node.d.ts +1 -1
  17. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -1
  18. package/dist/cjs/operation-node/drop-constraint-node.d.ts +4 -0
  19. package/dist/cjs/operation-node/drop-constraint-node.js +6 -0
  20. package/dist/cjs/operation-node/drop-index-node.d.ts +1 -1
  21. package/dist/cjs/operation-node/drop-schema-node.d.ts +1 -1
  22. package/dist/cjs/operation-node/drop-table-node.d.ts +1 -1
  23. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +1 -1
  24. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -1
  25. package/dist/cjs/operation-node/operation-node-transformer.js +2 -0
  26. package/dist/cjs/operation-node/order-by-item-node.d.ts +1 -1
  27. package/dist/cjs/operation-node/primary-constraint-node.d.ts +1 -1
  28. package/dist/cjs/operation-node/select-query-node.d.ts +1 -1
  29. package/dist/cjs/operation-node/unique-constraint-node.d.ts +1 -1
  30. package/dist/cjs/operation-node/update-query-node.d.ts +1 -1
  31. package/dist/cjs/operation-node/with-node.d.ts +1 -1
  32. package/dist/cjs/package.json +1 -1
  33. package/dist/cjs/parser/table-parser.d.ts +2 -11
  34. package/dist/cjs/query-builder/delete-query-builder.d.ts +35 -13
  35. package/dist/cjs/query-builder/select-query-builder.d.ts +34 -13
  36. package/dist/cjs/query-builder/update-query-builder.d.ts +35 -13
  37. package/dist/cjs/query-compiler/default-query-compiler.js +9 -0
  38. package/dist/cjs/schema/alter-table-builder.d.ts +13 -0
  39. package/dist/cjs/schema/alter-table-builder.js +57 -1
  40. package/dist/cjs/util/type-utils.d.ts +3 -0
  41. package/dist/esm/dialect/mysql/mysql-driver.d.ts +0 -5
  42. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -6
  43. package/dist/esm/dialect/postgres/postgres-driver.d.ts +0 -5
  44. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +0 -5
  45. package/dist/esm/dialect/sqlite/sqlite-introspector.js +0 -1
  46. package/dist/esm/driver/driver.d.ts +0 -5
  47. package/dist/esm/driver/dummy-driver.d.ts +0 -5
  48. package/dist/esm/driver/runtime-driver.d.ts +0 -5
  49. package/dist/esm/index.d.ts +0 -1
  50. package/dist/esm/index.js +0 -1
  51. package/dist/esm/migration/file-migration-provider.js +3 -2
  52. package/dist/esm/migration/migrator.d.ts +2 -0
  53. package/dist/esm/operation-node/check-constraint-node.d.ts +1 -1
  54. package/dist/esm/operation-node/common-table-expression-name-node.d.ts +1 -1
  55. package/dist/esm/operation-node/create-schema-node.d.ts +1 -1
  56. package/dist/esm/operation-node/delete-query-node.d.ts +1 -1
  57. package/dist/esm/operation-node/drop-constraint-node.d.ts +4 -0
  58. package/dist/esm/operation-node/drop-constraint-node.js +6 -0
  59. package/dist/esm/operation-node/drop-index-node.d.ts +1 -1
  60. package/dist/esm/operation-node/drop-schema-node.d.ts +1 -1
  61. package/dist/esm/operation-node/drop-table-node.d.ts +1 -1
  62. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +1 -1
  63. package/dist/esm/operation-node/insert-query-node.d.ts +1 -1
  64. package/dist/esm/operation-node/operation-node-transformer.js +2 -0
  65. package/dist/esm/operation-node/order-by-item-node.d.ts +1 -1
  66. package/dist/esm/operation-node/primary-constraint-node.d.ts +1 -1
  67. package/dist/esm/operation-node/select-query-node.d.ts +1 -1
  68. package/dist/esm/operation-node/unique-constraint-node.d.ts +1 -1
  69. package/dist/esm/operation-node/update-query-node.d.ts +1 -1
  70. package/dist/esm/operation-node/with-node.d.ts +1 -1
  71. package/dist/esm/package.json +1 -1
  72. package/dist/esm/parser/table-parser.d.ts +2 -11
  73. package/dist/esm/query-builder/delete-query-builder.d.ts +35 -13
  74. package/dist/esm/query-builder/select-query-builder.d.ts +34 -13
  75. package/dist/esm/query-builder/update-query-builder.d.ts +35 -13
  76. package/dist/esm/query-compiler/default-query-compiler.js +9 -0
  77. package/dist/esm/schema/alter-table-builder.d.ts +13 -0
  78. package/dist/esm/schema/alter-table-builder.js +55 -0
  79. package/dist/esm/util/type-utils.d.ts +3 -0
  80. package/package.json +10 -10
  81. package/dist/cjs/query-builder/join-interface.d.ts +0 -130
  82. package/dist/cjs/query-builder/join-interface.js +0 -2
  83. package/dist/esm/query-builder/join-interface.d.ts +0 -130
  84. package/dist/esm/query-builder/join-interface.js +0 -2
@@ -1,25 +1,26 @@
1
1
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
2
2
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
3
  import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
4
- import { TableExpression, TableExpressionDatabase, TableExpressionTables, LeftJoinTableExpressionDatabase, RightJoinTableExpressionDatabase, FullJoinTableExpressionDatabase } from '../parser/table-parser.js';
4
+ import { TableExpression } from '../parser/table-parser.js';
5
5
  import { SelectExpression } from '../parser/select-parser.js';
6
6
  import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper } from '../parser/filter-parser.js';
7
7
  import { ReturningRow } from '../parser/returning-parser.js';
8
8
  import { ReferenceExpression } from '../parser/reference-parser.js';
9
- import { AnyRawBuilder, MergePartial, SingleResultType } from '../util/type-utils.js';
9
+ import { AnyRawBuilder, MergePartial, Nullable, SingleResultType } from '../util/type-utils.js';
10
10
  import { Compilable } from '../util/compilable.js';
11
11
  import { QueryExecutor } from '../query-executor/query-executor.js';
12
12
  import { QueryId } from '../util/query-id.js';
13
13
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
14
14
  import { WhereInterface } from './where-interface.js';
15
- import { JoinInterface } from './join-interface.js';
16
15
  import { ReturningInterface } from './returning-interface.js';
17
16
  import { NoResultErrorConstructor } from './no-result-error.js';
18
17
  import { DeleteResult } from './delete-result.js';
19
18
  import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
20
19
  import { Selectable } from '../util/column-type.js';
21
20
  import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js';
22
- export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, JoinInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
21
+ import { AliasedQueryBuilder } from './select-query-builder.js';
22
+ import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
23
+ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
23
24
  #private;
24
25
  constructor(props: DeleteQueryBuilderProps);
25
26
  /**
@@ -515,23 +516,23 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
515
516
  * on "doggos"."owner_id" = "person"."id"
516
517
  * ```
517
518
  */
518
- 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>;
519
- 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>;
519
+ innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): DeleteQueryBuilderWithInnerJoin<DB, TB, O, TE>;
520
+ innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): DeleteQueryBuilderWithInnerJoin<DB, TB, O, TE>;
520
521
  /**
521
- * Just like {@link innerJoin} but adds a left join nstead of an inner join.
522
+ * Just like {@link innerJoin} but adds a left join instead of an inner join.
522
523
  */
523
- 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>;
524
- 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>;
524
+ leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): DeleteQueryBuilderWithLeftJoin<DB, TB, O, TE>;
525
+ leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): DeleteQueryBuilderWithLeftJoin<DB, TB, O, TE>;
525
526
  /**
526
527
  * Just like {@link innerJoin} but adds a right join instead of an inner join.
527
528
  */
528
- 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>;
529
- 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>;
529
+ rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): DeleteQueryBuilderWithRightJoin<DB, TB, O, TE>;
530
+ rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): DeleteQueryBuilderWithRightJoin<DB, TB, O, TE>;
530
531
  /**
531
532
  * Just like {@link innerJoin} but adds a full join instead of an inner join.
532
533
  */
533
- 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>;
534
- 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>;
534
+ fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): DeleteQueryBuilderWithFullJoin<DB, TB, O, TE>;
535
+ fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): DeleteQueryBuilderWithFullJoin<DB, TB, O, TE>;
535
536
  /**
536
537
  * Allows you to return data from modified rows.
537
538
  *
@@ -749,3 +750,24 @@ export interface DeleteQueryBuilderProps {
749
750
  readonly queryNode: DeleteQueryNode;
750
751
  readonly executor: QueryExecutor;
751
752
  }
753
+ export declare type DeleteQueryBuilderWithInnerJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? InnerJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? DeleteQueryBuilder<DB, TB | TE, O> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? InnerJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? InnerJoinedBuilder<DB, TB, O, RA, RO> : never;
754
+ declare type InnerJoinedBuilder<DB, TB extends keyof DB, O, A extends string, R> = A extends keyof DB ? DeleteQueryBuilder<InnerJoinedDB<DB, A, R>, TB | A, O> : DeleteQueryBuilder<DB & Record<A, R>, TB | A, O>;
755
+ declare type InnerJoinedDB<DB, A extends string, R> = {
756
+ [C in keyof DB | A]: C extends A ? R : C extends keyof DB ? DB[C] : never;
757
+ };
758
+ export declare type DeleteQueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? LeftJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? LeftJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? LeftJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? LeftJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? LeftJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? LeftJoinedBuilder<DB, TB, O, RA, RO> : never;
759
+ declare type LeftJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = A extends keyof DB ? DeleteQueryBuilder<LeftJoinedDB<DB, A, R>, TB | A, O> : DeleteQueryBuilder<DB & Record<A, Nullable<R>>, TB | A, O>;
760
+ declare type LeftJoinedDB<DB, A extends keyof any, R> = {
761
+ [C in keyof DB | A]: C extends A ? Nullable<R> : C extends keyof DB ? DB[C] : never;
762
+ };
763
+ export declare type DeleteQueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? RightJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? RightJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? RightJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? RightJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? RightJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? RightJoinedBuilder<DB, TB, O, RA, RO> : never;
764
+ declare type RightJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = DeleteQueryBuilder<RightJoinedDB<DB, TB, A, R>, TB | A, O>;
765
+ declare type RightJoinedDB<DB, TB extends keyof DB, A extends keyof any, R> = {
766
+ [C in keyof DB | A]: C extends A ? R : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
767
+ };
768
+ export declare type DeleteQueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? OuterJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? OuterJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? OuterJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? OuterJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? OuterJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? OuterJoinedBuilder<DB, TB, O, RA, RO> : never;
769
+ declare type OuterJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = DeleteQueryBuilder<OuterJoinedBuilderDB<DB, TB, A, R>, TB | A, O>;
770
+ declare type OuterJoinedBuilderDB<DB, TB extends keyof DB, A extends keyof any, R> = {
771
+ [C in keyof DB | A]: C extends A ? Nullable<R> : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
772
+ };
773
+ export {};
@@ -2,12 +2,12 @@ import { AliasNode } from '../operation-node/alias-node.js';
2
2
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
3
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
4
4
  import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
5
- import { TableExpression, TableExpressionDatabase, TableExpressionTables, LeftJoinTableExpressionDatabase, RightJoinTableExpressionDatabase, FullJoinTableExpressionDatabase } from '../parser/table-parser.js';
5
+ import { TableExpression } from '../parser/table-parser.js';
6
6
  import { SelectExpression, QueryBuilderWithSelection, SelectAllQueryBuilder } from '../parser/select-parser.js';
7
7
  import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper, HavingGrouper } from '../parser/filter-parser.js';
8
8
  import { ReferenceExpression } from '../parser/reference-parser.js';
9
9
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
10
- import { AnyRawBuilder, MergePartial, SingleResultType } from '../util/type-utils.js';
10
+ import { AnyRawBuilder, MergePartial, Nullable, SingleResultType } from '../util/type-utils.js';
11
11
  import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js';
12
12
  import { Compilable } from '../util/compilable.js';
13
13
  import { QueryExecutor } from '../query-executor/query-executor.js';
@@ -15,10 +15,10 @@ import { QueryId } from '../util/query-id.js';
15
15
  import { UnionExpression } from '../parser/union-parser.js';
16
16
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
17
17
  import { WhereInterface } from './where-interface.js';
18
- import { JoinInterface } from './join-interface.js';
19
18
  import { NoResultErrorConstructor } from './no-result-error.js';
20
19
  import { HavingInterface } from './having-interface.js';
21
- export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, HavingInterface<DB, TB>, JoinInterface<DB, TB>, OperationNodeSource, Compilable {
20
+ import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
21
+ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, HavingInterface<DB, TB>, OperationNodeSource, Compilable {
22
22
  #private;
23
23
  constructor(props: SelectQueryBuilderProps);
24
24
  /**
@@ -856,23 +856,23 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
856
856
  * on "doggos"."owner_id" = "person"."id"
857
857
  * ```
858
858
  */
859
- innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
860
- innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
859
+ innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilderWithInnerJoin<DB, TB, O, TE>;
860
+ innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilderWithInnerJoin<DB, TB, O, TE>;
861
861
  /**
862
- * Just like {@link innerJoin} but adds a left join nstead of an inner join.
862
+ * Just like {@link innerJoin} but adds a left join instead of an inner join.
863
863
  */
864
- leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
865
- leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
864
+ leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilderWithLeftJoin<DB, TB, O, TE>;
865
+ leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilderWithLeftJoin<DB, TB, O, TE>;
866
866
  /**
867
867
  * Just like {@link innerJoin} but adds a right join instead of an inner join.
868
868
  */
869
- rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
870
- rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
869
+ rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilderWithRightJoin<DB, TB, O, TE>;
870
+ rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilderWithRightJoin<DB, TB, O, TE>;
871
871
  /**
872
872
  * Just like {@link innerJoin} but adds a full join instead of an inner join.
873
873
  */
874
- fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
875
- fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
874
+ fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilderWithFullJoin<DB, TB, O, TE>;
875
+ fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilderWithFullJoin<DB, TB, O, TE>;
876
876
  /**
877
877
  * Adds an `order by` clause to the query.
878
878
  *
@@ -1282,3 +1282,24 @@ export declare class AliasedQueryBuilder<DB, TB extends keyof DB, O = undefined,
1282
1282
  protected get alias(): A;
1283
1283
  toOperationNode(): AliasNode;
1284
1284
  }
1285
+ export declare type SelectQueryBuilderWithInnerJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? InnerJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? SelectQueryBuilder<DB, TB | TE, O> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? InnerJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? InnerJoinedBuilder<DB, TB, O, RA, RO> : never;
1286
+ declare type InnerJoinedBuilder<DB, TB extends keyof DB, O, A extends string, R> = A extends keyof DB ? SelectQueryBuilder<InnerJoinedDB<DB, A, R>, TB | A, O> : SelectQueryBuilder<DB & Record<A, R>, TB | A, O>;
1287
+ declare type InnerJoinedDB<DB, A extends string, R> = {
1288
+ [C in keyof DB | A]: C extends A ? R : C extends keyof DB ? DB[C] : never;
1289
+ };
1290
+ export declare type SelectQueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? LeftJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? LeftJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? LeftJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? LeftJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? LeftJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? LeftJoinedBuilder<DB, TB, O, RA, RO> : never;
1291
+ declare type LeftJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = A extends keyof DB ? SelectQueryBuilder<LeftJoinedDB<DB, A, R>, TB | A, O> : SelectQueryBuilder<DB & Record<A, Nullable<R>>, TB | A, O>;
1292
+ declare type LeftJoinedDB<DB, A extends keyof any, R> = {
1293
+ [C in keyof DB | A]: C extends A ? Nullable<R> : C extends keyof DB ? DB[C] : never;
1294
+ };
1295
+ export declare type SelectQueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? RightJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? RightJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? RightJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? RightJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? RightJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? RightJoinedBuilder<DB, TB, O, RA, RO> : never;
1296
+ declare type RightJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = SelectQueryBuilder<RightJoinedDB<DB, TB, A, R>, TB | A, O>;
1297
+ declare type RightJoinedDB<DB, TB extends keyof DB, A extends keyof any, R> = {
1298
+ [C in keyof DB | A]: C extends A ? R : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
1299
+ };
1300
+ export declare type SelectQueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? OuterJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? OuterJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? OuterJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? OuterJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? OuterJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? OuterJoinedBuilder<DB, TB, O, RA, RO> : never;
1301
+ declare type OuterJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = SelectQueryBuilder<OuterJoinedBuilderDB<DB, TB, A, R>, TB | A, O>;
1302
+ declare type OuterJoinedBuilderDB<DB, TB extends keyof DB, A extends keyof any, R> = {
1303
+ [C in keyof DB | A]: C extends A ? Nullable<R> : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
1304
+ };
1305
+ export {};
@@ -1,12 +1,12 @@
1
1
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
2
2
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
3
  import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
4
- import { TableExpression, TableExpressionDatabase, TableExpressionTables, LeftJoinTableExpressionDatabase, RightJoinTableExpressionDatabase, FullJoinTableExpressionDatabase } from '../parser/table-parser.js';
4
+ import { TableExpression, TableExpressionDatabase, TableExpressionTables } from '../parser/table-parser.js';
5
5
  import { SelectExpression } from '../parser/select-parser.js';
6
6
  import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper } from '../parser/filter-parser.js';
7
7
  import { ReturningRow } from '../parser/returning-parser.js';
8
8
  import { ReferenceExpression } from '../parser/reference-parser.js';
9
- import { AnyRawBuilder, MergePartial, SingleResultType } from '../util/type-utils.js';
9
+ import { AnyRawBuilder, MergePartial, Nullable, SingleResultType } from '../util/type-utils.js';
10
10
  import { UpdateQueryNode } from '../operation-node/update-query-node.js';
11
11
  import { MutationObject } from '../parser/update-set-parser.js';
12
12
  import { Compilable } from '../util/compilable.js';
@@ -15,11 +15,12 @@ import { QueryId } from '../util/query-id.js';
15
15
  import { UpdateResult } from './update-result.js';
16
16
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
17
17
  import { WhereInterface } from './where-interface.js';
18
- import { JoinInterface } from './join-interface.js';
19
18
  import { ReturningInterface } from './returning-interface.js';
20
19
  import { NoResultErrorConstructor } from './no-result-error.js';
21
20
  import { Selectable } from '../util/column-type.js';
22
- export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, JoinInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
21
+ import { AliasedQueryBuilder } from './select-query-builder.js';
22
+ import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
23
+ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
23
24
  #private;
24
25
  constructor(props: UpdateQueryBuilderProps);
25
26
  /**
@@ -544,23 +545,23 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
544
545
  * on "doggos"."owner_id" = "person"."id"
545
546
  * ```
546
547
  */
547
- innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<TableExpressionDatabase<DB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
548
- innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<TableExpressionDatabase<DB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
548
+ innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilderWithInnerJoin<DB, UT, TB, O, TE>;
549
+ innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilderWithInnerJoin<DB, UT, TB, O, TE>;
549
550
  /**
550
- * Just like {@link innerJoin} but adds a left join nstead of an inner join.
551
+ * Just like {@link innerJoin} but adds a left join instead of an inner join.
551
552
  */
552
- leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
553
- leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
553
+ leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilderWithLeftJoin<DB, UT, TB, O, TE>;
554
+ leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilderWithLeftJoin<DB, UT, TB, O, TE>;
554
555
  /**
555
556
  * Just like {@link innerJoin} but adds a right join instead of an inner join.
556
557
  */
557
- rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
558
- rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
558
+ rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilderWithRightJoin<DB, UT, TB, O, TE>;
559
+ rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilderWithRightJoin<DB, UT, TB, O, TE>;
559
560
  /**
560
561
  * Just like {@link innerJoin} but adds a full join instead of an inner join.
561
562
  */
562
- fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
563
- fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
563
+ fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilderWithFullJoin<DB, UT, TB, O, TE>;
564
+ fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilderWithFullJoin<DB, UT, TB, O, TE>;
564
565
  /**
565
566
  * Sets the values to update for an {@link Kysely.updateTable | update} query.
566
567
  *
@@ -814,3 +815,24 @@ export interface UpdateQueryBuilderProps {
814
815
  readonly queryNode: UpdateQueryNode;
815
816
  readonly executor: QueryExecutor;
816
817
  }
818
+ export declare type UpdateQueryBuilderWithInnerJoin<DB, UT extends keyof DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? InnerJoinedBuilder<DB, UT, TB, O, A, DB[T]> : never : TE extends keyof DB ? UpdateQueryBuilder<DB, UT, TB | TE, O> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? InnerJoinedBuilder<DB, UT, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? InnerJoinedBuilder<DB, UT, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? InnerJoinedBuilder<DB, UT, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? InnerJoinedBuilder<DB, UT, TB, O, RA, RO> : never;
819
+ declare type InnerJoinedBuilder<DB, UT extends keyof DB, TB extends keyof DB, O, A extends string, R> = A extends keyof DB ? UpdateQueryBuilder<InnerJoinedDB<DB, A, R>, UT, TB | A, O> : UpdateQueryBuilder<DB & Record<A, R>, UT, TB | A, O>;
820
+ declare type InnerJoinedDB<DB, A extends string, R> = {
821
+ [C in keyof DB | A]: C extends A ? R : C extends keyof DB ? DB[C] : never;
822
+ };
823
+ export declare type UpdateQueryBuilderWithLeftJoin<DB, UT extends keyof DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? LeftJoinedBuilder<DB, UT, TB, O, A, DB[T]> : never : TE extends keyof DB ? LeftJoinedBuilder<DB, UT, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? LeftJoinedBuilder<DB, UT, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? LeftJoinedBuilder<DB, UT, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? LeftJoinedBuilder<DB, UT, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? LeftJoinedBuilder<DB, UT, TB, O, RA, RO> : never;
824
+ declare type LeftJoinedBuilder<DB, UT extends keyof DB, TB extends keyof DB, O, A extends keyof any, R> = A extends keyof DB ? UpdateQueryBuilder<LeftJoinedDB<DB, A, R>, UT, TB | A, O> : UpdateQueryBuilder<DB & Record<A, Nullable<R>>, UT, TB | A, O>;
825
+ declare type LeftJoinedDB<DB, A extends keyof any, R> = {
826
+ [C in keyof DB | A]: C extends A ? Nullable<R> : C extends keyof DB ? DB[C] : never;
827
+ };
828
+ export declare type UpdateQueryBuilderWithRightJoin<DB, UT extends keyof DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? RightJoinedBuilder<DB, UT, TB, O, A, DB[T]> : never : TE extends keyof DB ? RightJoinedBuilder<DB, UT, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? RightJoinedBuilder<DB, UT, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? RightJoinedBuilder<DB, UT, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? RightJoinedBuilder<DB, UT, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? RightJoinedBuilder<DB, UT, TB, O, RA, RO> : never;
829
+ declare type RightJoinedBuilder<DB, UT extends keyof DB, TB extends keyof DB, O, A extends keyof any, R> = UpdateQueryBuilder<RightJoinedDB<DB, TB, A, R>, UT, TB | A, O>;
830
+ declare type RightJoinedDB<DB, TB extends keyof DB, A extends keyof any, R> = {
831
+ [C in keyof DB | A]: C extends A ? R : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
832
+ };
833
+ export declare type UpdateQueryBuilderWithFullJoin<DB, UT extends keyof DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? OuterJoinedBuilder<DB, UT, TB, O, A, DB[T]> : never : TE extends keyof DB ? OuterJoinedBuilder<DB, UT, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? OuterJoinedBuilder<DB, UT, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? OuterJoinedBuilder<DB, UT, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? OuterJoinedBuilder<DB, UT, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? OuterJoinedBuilder<DB, UT, TB, O, RA, RO> : never;
834
+ declare type OuterJoinedBuilder<DB, UT extends keyof DB, TB extends keyof DB, O, A extends keyof any, R> = UpdateQueryBuilder<OuterJoinedBuilderDB<DB, TB, A, R>, UT, TB | A, O>;
835
+ declare type OuterJoinedBuilderDB<DB, TB extends keyof DB, A extends keyof any, R> = {
836
+ [C in keyof DB | A]: C extends A ? Nullable<R> : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
837
+ };
838
+ export {};
@@ -702,7 +702,16 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
702
702
  }
703
703
  visitDropConstraint(node) {
704
704
  this.append('drop constraint ');
705
+ if (node.ifExists) {
706
+ this.append('if exists ');
707
+ }
705
708
  this.visitNode(node.constraintName);
709
+ if (node.modifier === 'cascade') {
710
+ this.append(' cascade');
711
+ }
712
+ else if (node.modifier === 'restrict') {
713
+ this.append(' restrict');
714
+ }
706
715
  }
707
716
  visitUnion(node) {
708
717
  this.append('union ');
@@ -49,6 +49,7 @@ export declare class AlterTableBuilder {
49
49
  * is because you can only add one column per `ALTER TABLE` query.
50
50
  */
51
51
  addForeignKeyConstraint(constraintName: string, columns: string[], targetTable: string, targetColumns: string[]): AlterTableAddForeignKeyConstraintBuilder;
52
+ dropConstraint(constraintName: string): AlterTableDropConstraintBuilder;
52
53
  }
53
54
  export interface AlterTableBuilderProps {
54
55
  readonly queryId: QueryId;
@@ -419,3 +420,15 @@ export declare class AlterTableAddForeignKeyConstraintBuilder implements Foreign
419
420
  export interface AlterTableAddForeignKeyConstraintBuilderProps extends AlterTableBuilderProps {
420
421
  readonly constraintBuilder: ForeignKeyConstraintBuilder;
421
422
  }
423
+ export declare class AlterTableDropConstraintBuilder implements OperationNodeSource, Compilable {
424
+ #private;
425
+ constructor(props: AlterTableDropConstraintBuilderProps);
426
+ ifExists(): AlterTableDropConstraintBuilder;
427
+ cascade(): AlterTableDropConstraintBuilder;
428
+ restrict(): AlterTableDropConstraintBuilder;
429
+ toOperationNode(): AlterTableNode;
430
+ compile(): CompiledQuery;
431
+ execute(): Promise<void>;
432
+ }
433
+ export interface AlterTableDropConstraintBuilderProps extends AlterTableBuilderProps {
434
+ }
@@ -20,6 +20,7 @@ import { ForeignKeyConstraintNode } from '../operation-node/foreign-key-constrai
20
20
  import { ColumnNode } from '../operation-node/column-node.js';
21
21
  import { parseDefaultValueExpression, } from '../parser/default-value-parser.js';
22
22
  import { parseTable } from '../parser/table-parser.js';
23
+ import { DropConstraintNode } from '../operation-node/drop-constraint-node.js';
23
24
  /**
24
25
  * This builder can be used to create a `alter table` query.
25
26
  */
@@ -121,6 +122,14 @@ export class AlterTableBuilder {
121
122
  constraintBuilder: new ForeignKeyConstraintBuilder(ForeignKeyConstraintNode.create(columns.map(ColumnNode.create), parseTable(targetTable), targetColumns.map(ColumnNode.create), constraintName)),
122
123
  });
123
124
  }
125
+ dropConstraint(constraintName) {
126
+ return new AlterTableDropConstraintBuilder({
127
+ ...this.#props,
128
+ alterTableNode: AlterTableNode.cloneWith(this.#props.alterTableNode, {
129
+ dropConstraint: DropConstraintNode.create(constraintName),
130
+ }),
131
+ });
132
+ }
124
133
  }
125
134
  export class AlterColumnBuilder {
126
135
  #props;
@@ -424,9 +433,55 @@ export class AlterTableAddForeignKeyConstraintBuilder {
424
433
  await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
425
434
  }
426
435
  }
436
+ export class AlterTableDropConstraintBuilder {
437
+ #props;
438
+ constructor(props) {
439
+ this.#props = freeze(props);
440
+ }
441
+ ifExists() {
442
+ return new AlterTableDropConstraintBuilder({
443
+ ...this.#props,
444
+ alterTableNode: AlterTableNode.cloneWith(this.#props.alterTableNode, {
445
+ dropConstraint: DropConstraintNode.cloneWith(this.#props.alterTableNode.dropConstraint, {
446
+ ifExists: true,
447
+ }),
448
+ }),
449
+ });
450
+ }
451
+ cascade() {
452
+ return new AlterTableDropConstraintBuilder({
453
+ ...this.#props,
454
+ alterTableNode: AlterTableNode.cloneWith(this.#props.alterTableNode, {
455
+ dropConstraint: DropConstraintNode.cloneWith(this.#props.alterTableNode.dropConstraint, {
456
+ modifier: 'cascade',
457
+ }),
458
+ }),
459
+ });
460
+ }
461
+ restrict() {
462
+ return new AlterTableDropConstraintBuilder({
463
+ ...this.#props,
464
+ alterTableNode: AlterTableNode.cloneWith(this.#props.alterTableNode, {
465
+ dropConstraint: DropConstraintNode.cloneWith(this.#props.alterTableNode.dropConstraint, {
466
+ modifier: 'restrict',
467
+ }),
468
+ }),
469
+ });
470
+ }
471
+ toOperationNode() {
472
+ return this.#props.executor.transformQuery(this.#props.alterTableNode, this.#props.queryId);
473
+ }
474
+ compile() {
475
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
476
+ }
477
+ async execute() {
478
+ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
479
+ }
480
+ }
427
481
  preventAwait(AlterTableBuilder, "don't await AlterTableBuilder instances");
428
482
  preventAwait(AlterColumnBuilder, "don't await AlterColumnBuilder instances");
429
483
  preventAwait(AlterTableExecutor, "don't await AlterTableExecutor instances directly. To execute the query you need to call `execute`");
430
484
  preventAwait(AlterTableAddColumnBuilder, "don't await AlterTableAddColumnBuilder instances directly. To execute the query you need to call `execute`");
431
485
  preventAwait(AlterTableModifyColumnBuilder, "don't await AlterTableModifyColumnBuilder instances directly. To execute the query you need to call `execute`");
432
486
  preventAwait(AlterTableAddForeignKeyConstraintBuilder, "don't await AlterTableAddForeignKeyConstraintBuilder instances directly. To execute the query you need to call `execute`");
487
+ preventAwait(AlterTableDropConstraintBuilder, "don't await AlterTableDropConstraintBuilder instances directly. To execute the query you need to call `execute`");
@@ -111,6 +111,9 @@ export declare type UnknownRow = Record<string, unknown>;
111
111
  export declare type Nullable<T> = {
112
112
  [P in keyof T]: T[P] | null;
113
113
  };
114
+ export declare type NullableValues<T> = {
115
+ [P in keyof T]: Nullable<T[P]>;
116
+ };
114
117
  /**
115
118
  * Takes all properties from T1 and merges all properties from T2
116
119
  * that don't exist in T1 as optional properties.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kysely",
3
- "version": "0.19.1",
3
+ "version": "0.19.4",
4
4
  "description": "Type safe SQL query builder",
5
5
  "repository": {
6
6
  "type": "git",
@@ -45,19 +45,19 @@
45
45
  "@types/better-sqlite3": "^7.5.0",
46
46
  "@types/chai": "^4.3.1",
47
47
  "@types/chai-subset": "^1.3.3",
48
- "@types/mocha": "^9.1.0",
48
+ "@types/mocha": "^9.1.1",
49
49
  "@types/pg": "^8.6.5",
50
- "better-sqlite3": "^7.5.1",
50
+ "better-sqlite3": "^7.5.3",
51
51
  "chai": "^4.3.6",
52
52
  "chai-subset": "^1.6.0",
53
- "esbuild": "^0.14.36",
54
- "mocha": "^9.2.2",
53
+ "esbuild": "^0.14.47",
54
+ "mocha": "^10.0.0",
55
55
  "mysql2": "^2.3.3",
56
56
  "pg": "^8.7.3",
57
- "playwright": "^1.21.0",
58
- "prettier": "^2.6.2",
59
- "tsd": "^0.20.0",
60
- "typedoc": "^0.22.15",
61
- "typescript": "4.6.3"
57
+ "playwright": "^1.22.2",
58
+ "prettier": "^2.7.1",
59
+ "tsd": "^0.21.0",
60
+ "typedoc": "^0.22.18",
61
+ "typescript": "4.7.4"
62
62
  }
63
63
  }
@@ -1,130 +0,0 @@
1
- import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
2
- import { FullJoinTableExpressionDatabase, LeftJoinTableExpressionDatabase, RightJoinTableExpressionDatabase, TableExpression, TableExpressionDatabase, TableExpressionTables } from '../parser/table-parser.js';
3
- export interface JoinInterface<DB, TB extends keyof DB> {
4
- /**
5
- * Joins another table to the query using an inner join.
6
- *
7
- * ### Examples
8
- *
9
- * Simple usage by providing a table name and two columns to join:
10
- *
11
- * ```ts
12
- * const result = await db
13
- * .selectFrom('person')
14
- * .innerJoin('pet', 'pet.owner_id', 'person.id')
15
- * // `select` needs to come after the call to `innerJoin` so
16
- * // that you can select from the joined table.
17
- * .select('person.id', 'pet.name')
18
- * .execute()
19
- *
20
- * result[0].id
21
- * result[0].name
22
- * ```
23
- *
24
- * The generated SQL (PostgreSQL):
25
- *
26
- * ```sql
27
- * select "person"."id", "pet"."name"
28
- * from "person"
29
- * inner join "pet"
30
- * on "pet"."owner_id" = "person"."id"
31
- * ```
32
- *
33
- * You can give an alias for the joined table like this:
34
- *
35
- * ```ts
36
- * await db.selectFrom('person')
37
- * .innerJoin('pet as p', 'p.owner_id', 'person.id')
38
- * .where('p.name', '=', 'Doggo')
39
- * .selectAll()
40
- * .execute()
41
- * ```
42
- *
43
- * The generated SQL (PostgreSQL):
44
- *
45
- * ```sql
46
- * select *
47
- * from "person"
48
- * inner join "pet" as "p"
49
- * on "p"."owner_id" = "person"."id"
50
- * where "p".name" = $1
51
- * ```
52
- *
53
- * You can provide a function as the second argument to get a join
54
- * builder for creating more complex joins. The join builder has a
55
- * bunch of `on*` methods for building the `on` clause of the join.
56
- * There's basically an equivalent for every `where` method
57
- * (`on`, `onRef`, `onExists` etc.). You can do all the same things
58
- * with the `on` method that you can with the corresponding `where`
59
- * method. See the `where` method documentation for more examples.
60
- *
61
- * ```ts
62
- * await db.selectFrom('person')
63
- * .innerJoin(
64
- * 'pet',
65
- * (join) => join
66
- * .onRef('pet.owner_id', '=', 'person.id')
67
- * .on('pet.name', '=', 'Doggo')
68
- * )
69
- * .selectAll()
70
- * .execute()
71
- * ```
72
- *
73
- * The generated SQL (PostgreSQL):
74
- *
75
- * ```sql
76
- * select *
77
- * from "person"
78
- * inner join "pet"
79
- * on "pet"."owner_id" = "person"."id"
80
- * and "pet"."name" = $1
81
- * ```
82
- *
83
- * You can join a subquery by providing a select query (or a callback)
84
- * as the first argument:
85
- *
86
- * ```ts
87
- * await db.selectFrom('person')
88
- * .innerJoin(
89
- * qb.selectFrom('pet')
90
- * .select(['owner_id', 'name'])
91
- * .where('name', '=', 'Doggo')
92
- * .as('doggos'),
93
- * 'doggos.owner_id',
94
- * 'person.id',
95
- * )
96
- * .selectAll()
97
- * .execute()
98
- * ```
99
- *
100
- * The generated SQL (PostgreSQL):
101
- *
102
- * ```sql
103
- * select *
104
- * from "person"
105
- * inner join (
106
- * select "owner_id", "name"
107
- * from "pet"
108
- * where "name" = $1
109
- * ) as "doggos"
110
- * on "doggos"."owner_id" = "person"."id"
111
- * ```
112
- */
113
- innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): JoinInterface<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>;
114
- innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): JoinInterface<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>;
115
- /**
116
- * Just like {@link innerJoin} but adds a left join nstead of an inner join.
117
- */
118
- leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): JoinInterface<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>;
119
- leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): JoinInterface<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>;
120
- /**
121
- * Just like {@link innerJoin} but adds a right join instead of an inner join.
122
- */
123
- rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): JoinInterface<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>>;
124
- rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): JoinInterface<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>>;
125
- /**
126
- * Just like {@link innerJoin} but adds a full join instead of an inner join.
127
- */
128
- fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): JoinInterface<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>>;
129
- fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): JoinInterface<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>>;
130
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });