kysely 0.19.3 → 0.19.6

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 (73) hide show
  1. package/dist/cjs/dialect/database-introspector.d.ts +11 -2
  2. package/dist/cjs/dialect/mysql/mysql-introspector.js +4 -0
  3. package/dist/cjs/dialect/postgres/postgres-introspector.js +12 -0
  4. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +17 -3
  5. package/dist/cjs/index.d.ts +0 -1
  6. package/dist/cjs/index.js +0 -1
  7. package/dist/cjs/operation-node/check-constraint-node.d.ts +1 -1
  8. package/dist/cjs/operation-node/common-table-expression-name-node.d.ts +1 -1
  9. package/dist/cjs/operation-node/create-schema-node.d.ts +1 -1
  10. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -1
  11. package/dist/cjs/operation-node/drop-index-node.d.ts +1 -1
  12. package/dist/cjs/operation-node/drop-schema-node.d.ts +1 -1
  13. package/dist/cjs/operation-node/drop-table-node.d.ts +1 -1
  14. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +1 -1
  15. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -1
  16. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  17. package/dist/cjs/operation-node/order-by-item-node.d.ts +1 -1
  18. package/dist/cjs/operation-node/primary-constraint-node.d.ts +1 -1
  19. package/dist/cjs/operation-node/select-query-node.d.ts +1 -1
  20. package/dist/cjs/operation-node/unique-constraint-node.d.ts +1 -1
  21. package/dist/cjs/operation-node/update-query-node.d.ts +1 -1
  22. package/dist/cjs/operation-node/with-node.d.ts +1 -1
  23. package/dist/cjs/parser/join-parser.d.ts +4 -4
  24. package/dist/cjs/parser/table-parser.d.ts +5 -14
  25. package/dist/cjs/query-builder/delete-query-builder.d.ts +35 -13
  26. package/dist/cjs/query-builder/expression-builder.d.ts +3 -3
  27. package/dist/cjs/query-builder/join-builder.d.ts +4 -0
  28. package/dist/cjs/query-builder/join-builder.js +10 -0
  29. package/dist/cjs/query-builder/select-query-builder.d.ts +74 -13
  30. package/dist/cjs/query-builder/select-query-builder.js +12 -0
  31. package/dist/cjs/query-builder/update-query-builder.d.ts +37 -15
  32. package/dist/cjs/query-compiler/default-query-compiler.js +2 -0
  33. package/dist/cjs/query-creator.d.ts +5 -5
  34. package/dist/cjs/util/type-utils.d.ts +3 -0
  35. package/dist/esm/dialect/database-introspector.d.ts +11 -2
  36. package/dist/esm/dialect/mysql/mysql-introspector.js +4 -0
  37. package/dist/esm/dialect/postgres/postgres-introspector.js +12 -0
  38. package/dist/esm/dialect/sqlite/sqlite-introspector.js +17 -3
  39. package/dist/esm/index.d.ts +0 -1
  40. package/dist/esm/index.js +0 -1
  41. package/dist/esm/operation-node/check-constraint-node.d.ts +1 -1
  42. package/dist/esm/operation-node/common-table-expression-name-node.d.ts +1 -1
  43. package/dist/esm/operation-node/create-schema-node.d.ts +1 -1
  44. package/dist/esm/operation-node/delete-query-node.d.ts +1 -1
  45. package/dist/esm/operation-node/drop-index-node.d.ts +1 -1
  46. package/dist/esm/operation-node/drop-schema-node.d.ts +1 -1
  47. package/dist/esm/operation-node/drop-table-node.d.ts +1 -1
  48. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +1 -1
  49. package/dist/esm/operation-node/insert-query-node.d.ts +1 -1
  50. package/dist/esm/operation-node/join-node.d.ts +1 -1
  51. package/dist/esm/operation-node/order-by-item-node.d.ts +1 -1
  52. package/dist/esm/operation-node/primary-constraint-node.d.ts +1 -1
  53. package/dist/esm/operation-node/select-query-node.d.ts +1 -1
  54. package/dist/esm/operation-node/unique-constraint-node.d.ts +1 -1
  55. package/dist/esm/operation-node/update-query-node.d.ts +1 -1
  56. package/dist/esm/operation-node/with-node.d.ts +1 -1
  57. package/dist/esm/parser/join-parser.d.ts +4 -4
  58. package/dist/esm/parser/table-parser.d.ts +5 -14
  59. package/dist/esm/query-builder/delete-query-builder.d.ts +35 -13
  60. package/dist/esm/query-builder/expression-builder.d.ts +3 -3
  61. package/dist/esm/query-builder/join-builder.d.ts +4 -0
  62. package/dist/esm/query-builder/join-builder.js +10 -0
  63. package/dist/esm/query-builder/select-query-builder.d.ts +74 -13
  64. package/dist/esm/query-builder/select-query-builder.js +12 -0
  65. package/dist/esm/query-builder/update-query-builder.d.ts +37 -15
  66. package/dist/esm/query-compiler/default-query-compiler.js +2 -0
  67. package/dist/esm/query-creator.d.ts +5 -5
  68. package/dist/esm/util/type-utils.d.ts +3 -0
  69. package/package.json +10 -10
  70. package/dist/cjs/query-builder/join-interface.d.ts +0 -130
  71. package/dist/cjs/query-builder/join-interface.js +0 -2
  72. package/dist/esm/query-builder/join-interface.d.ts +0 -130
  73. package/dist/esm/query-builder/join-interface.js +0 -2
@@ -1,10 +1,10 @@
1
1
  import { JoinNode, JoinType } from '../operation-node/join-node.js';
2
2
  import { AnyColumn, AnyColumnWithTable } from '../util/type-utils.js';
3
- import { TableExpressionDatabase, TableExpressionTables } from './table-parser.js';
3
+ import { From, FromTables } from './table-parser.js';
4
4
  import { JoinBuilder } from '../query-builder/join-builder.js';
5
5
  export declare type JoinReferenceExpression<DB, TB extends keyof DB, TE> = AnyJoinColumn<DB, TB, TE> | AnyJoinColumnWithTable<DB, TB, TE>;
6
- export declare type JoinCallbackExpression<DB, TB extends keyof DB, TE> = (join: JoinBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>) => JoinBuilder<any, any>;
7
- declare type AnyJoinColumn<DB, TB extends keyof DB, TE> = AnyColumn<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>;
8
- declare type AnyJoinColumnWithTable<DB, TB extends keyof DB, TE> = AnyColumnWithTable<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>;
6
+ export declare type JoinCallbackExpression<DB, TB extends keyof DB, TE> = (join: JoinBuilder<From<DB, TE>, FromTables<DB, TB, TE>>) => JoinBuilder<any, any>;
7
+ declare type AnyJoinColumn<DB, TB extends keyof DB, TE> = AnyColumn<From<DB, TE>, FromTables<DB, TB, TE>>;
8
+ declare type AnyJoinColumnWithTable<DB, TB extends keyof DB, TE> = AnyColumnWithTable<From<DB, TE>, FromTables<DB, TB, TE>>;
9
9
  export declare function parseJoin(joinType: JoinType, args: any[]): JoinNode;
10
10
  export {};
@@ -1,26 +1,17 @@
1
1
  import { AliasedQueryBuilder } from '../query-builder/select-query-builder.js';
2
2
  import { TableNode } from '../operation-node/table-node.js';
3
- import { AnyAliasedRawBuilder, Nullable } from '../util/type-utils.js';
3
+ import { AnyAliasedRawBuilder } from '../util/type-utils.js';
4
4
  import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
5
5
  import { TableExpressionNode } from '../operation-node/operation-node-utils.js';
6
6
  import { AliasedComplexExpression } from './complex-expression-parser.js';
7
7
  export declare type TableExpression<DB, TB extends keyof DB> = TableReference<DB> | AliasedComplexExpression<DB, TB>;
8
8
  export declare type TableExpressionOrList<DB, TB extends keyof DB> = TableExpression<DB, TB> | ReadonlyArray<TableExpression<DB, TB>>;
9
9
  export declare type TableReference<DB> = AnyAliasedTable<DB> | AnyTable<DB> | AnyAliasedRawBuilder;
10
- export declare type TableExpressionDatabase<DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
11
- [C in keyof DB | A]: C extends A ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? DB[C] : never;
10
+ export declare type From<DB, TE> = {
11
+ [C in keyof DB | ExtractAliasFromTableExpression<DB, TE>]: C extends ExtractAliasFromTableExpression<DB, TE> ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? DB[C] : never;
12
12
  };
13
- export declare type LeftJoinTableExpressionDatabase<DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
14
- [C in keyof DB | A]: C extends A ? Nullable<ExtractRowTypeFromTableExpression<DB, TE, C>> : C extends keyof DB ? DB[C] : never;
15
- };
16
- export declare type RightJoinTableExpressionDatabase<DB, TB extends keyof DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
17
- [C in keyof DB | A]: C extends A ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? C extends TB ? Nullable<DB[C]> : DB[C] : never;
18
- };
19
- export declare type FullJoinTableExpressionDatabase<DB, TB extends keyof DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
20
- [C in keyof DB | A]: C extends A ? Nullable<ExtractRowTypeFromTableExpression<DB, TE, C>> : C extends keyof DB ? C extends TB ? Nullable<DB[C]> : DB[C] : never;
21
- };
22
- export declare type ExtractAliasFromTableExpression<DB, TE> = TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : TE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends AliasedRawBuilder<any, infer RA> ? RA : TE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : never;
23
- export declare type TableExpressionTables<DB, TB extends keyof DB, TE> = TB | ExtractAliasFromTableExpression<DB, TE>;
13
+ export declare type FromTables<DB, TB extends keyof DB, TE> = TB | ExtractAliasFromTableExpression<DB, TE>;
14
+ declare type ExtractAliasFromTableExpression<DB, TE> = TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : TE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends AliasedRawBuilder<any, infer RA> ? RA : TE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : never;
24
15
  declare type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O : never : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O : never : TE extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : TE extends (qb: any) => AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : never;
25
16
  declare type AnyAliasedTable<DB> = `${AnyTable<DB>} as ${string}`;
26
17
  declare type AnyTable<DB> = keyof DB & string;
@@ -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 {};
@@ -1,5 +1,5 @@
1
1
  import { SelectQueryBuilder } from './select-query-builder.js';
2
- import { TableExpression, TableExpressionDatabase, TableExpressionTables } from '../parser/table-parser.js';
2
+ import { TableExpression, From, FromTables } from '../parser/table-parser.js';
3
3
  import { FunctionBuilder } from './function-builder.js';
4
4
  import { ExtractTypeFromReferenceExpression, StringReference } from '../parser/reference-parser.js';
5
5
  import { RawBuilder } from '../raw-builder/raw-builder.js';
@@ -83,8 +83,8 @@ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
83
83
  * that case Kysely typings wouldn't allow you to reference `pet.owner_id`
84
84
  * because `pet` is not joined to that query.
85
85
  */
86
- selectFrom<TE extends TableExpression<DB, TB>>(from: TE[]): SelectQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, {}>;
87
- selectFrom<TE extends TableExpression<DB, TB>>(from: TE): SelectQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, {}>;
86
+ selectFrom<TE extends TableExpression<DB, TB>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
87
+ selectFrom<TE extends TableExpression<DB, TB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
88
88
  /**
89
89
  * See {@link QueryCreator.withSchema}
90
90
  */
@@ -66,6 +66,10 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
66
66
  * See {@link WhereInterface.orWhereNotExists} for documentation and examples.
67
67
  */
68
68
  orOnNotExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB>;
69
+ /**
70
+ * Adds `on true`.
71
+ */
72
+ onTrue(): JoinBuilder<DB, TB>;
69
73
  toOperationNode(): JoinNode;
70
74
  }
71
75
  export interface JoinBuilderProps {
@@ -1,5 +1,6 @@
1
1
  /// <reference types="./join-builder.d.ts" />
2
2
  import { JoinNode } from '../operation-node/join-node.js';
3
+ import { RawNode } from '../operation-node/raw-node.js';
3
4
  import { parseExistFilter, parseNotExistFilter, parseOnFilter, parseReferenceFilter, } from '../parser/filter-parser.js';
4
5
  import { freeze } from '../util/object-utils.js';
5
6
  import { preventAwait } from '../util/prevent-await.js';
@@ -92,6 +93,15 @@ export class JoinBuilder {
92
93
  joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseNotExistFilter(arg)),
93
94
  });
94
95
  }
96
+ /**
97
+ * Adds `on true`.
98
+ */
99
+ onTrue() {
100
+ return new JoinBuilder({
101
+ ...this.#props,
102
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, RawNode.createWithSql('true')),
103
+ });
104
+ }
95
105
  toOperationNode() {
96
106
  return this.#props.joinNode;
97
107
  }
@@ -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,63 @@ 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
+ /**
877
+ * Just like {@link innerJoin} but adds a lateral join instead of an inner join.
878
+ *
879
+ * ### Examples
880
+ *
881
+ * ```ts
882
+ * db.selectFrom('person')
883
+ * .innerJoinLateral(
884
+ * (eb) =>
885
+ * eb.selectFrom('pet')
886
+ * .select('name')
887
+ * .whereRef('pet.owner_id', '=', 'person.id')
888
+ * .as('p'),
889
+ * (join) => join.onTrue()
890
+ * )
891
+ * .select(['first_name', 'p.name'])
892
+ * .orderBy('first_name')
893
+ */
894
+ innerJoinLateral<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>;
895
+ innerJoinLateral<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilderWithInnerJoin<DB, TB, O, TE>;
896
+ /**
897
+ * Just like {@link innerJoin} but adds a lateral left join instead of an inner join.
898
+ * ### Examples
899
+ *
900
+ * ```ts
901
+ * db.selectFrom('person')
902
+ * .leftJoinLateral(
903
+ * (eb) =>
904
+ * eb.selectFrom('pet')
905
+ * .select('name')
906
+ * .whereRef('pet.owner_id', '=', 'person.id')
907
+ * .as('p'),
908
+ * (join) => join.onTrue()
909
+ * )
910
+ * .select(['first_name', 'p.name'])
911
+ * .orderBy('first_name')
912
+ * ```
913
+ */
914
+ leftJoinLateral<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>;
915
+ leftJoinLateral<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilderWithLeftJoin<DB, TB, O, TE>;
876
916
  /**
877
917
  * Adds an `order by` clause to the query.
878
918
  *
@@ -1282,3 +1322,24 @@ export declare class AliasedQueryBuilder<DB, TB extends keyof DB, O = undefined,
1282
1322
  protected get alias(): A;
1283
1323
  toOperationNode(): AliasNode;
1284
1324
  }
1325
+ 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;
1326
+ 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>;
1327
+ declare type InnerJoinedDB<DB, A extends string, R> = {
1328
+ [C in keyof DB | A]: C extends A ? R : C extends keyof DB ? DB[C] : never;
1329
+ };
1330
+ 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;
1331
+ 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>;
1332
+ declare type LeftJoinedDB<DB, A extends keyof any, R> = {
1333
+ [C in keyof DB | A]: C extends A ? Nullable<R> : C extends keyof DB ? DB[C] : never;
1334
+ };
1335
+ 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;
1336
+ declare type RightJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = SelectQueryBuilder<RightJoinedDB<DB, TB, A, R>, TB | A, O>;
1337
+ declare type RightJoinedDB<DB, TB extends keyof DB, A extends keyof any, R> = {
1338
+ [C in keyof DB | A]: C extends A ? R : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
1339
+ };
1340
+ 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;
1341
+ declare type OuterJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = SelectQueryBuilder<OuterJoinedBuilderDB<DB, TB, A, R>, TB | A, O>;
1342
+ declare type OuterJoinedBuilderDB<DB, TB extends keyof DB, A extends keyof any, R> = {
1343
+ [C in keyof DB | A]: C extends A ? Nullable<R> : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
1344
+ };
1345
+ export {};
@@ -235,6 +235,18 @@ export class SelectQueryBuilder {
235
235
  queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
236
236
  });
237
237
  }
238
+ innerJoinLateral(...args) {
239
+ return new SelectQueryBuilder({
240
+ ...this.#props,
241
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LateralInnerJoin', args)),
242
+ });
243
+ }
244
+ leftJoinLateral(...args) {
245
+ return new SelectQueryBuilder({
246
+ ...this.#props,
247
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LateralLeftJoin', args)),
248
+ });
249
+ }
238
250
  /**
239
251
  * Adds an `order by` clause to the query.
240
252
  *
@@ -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, From, FromTables } 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
  /**
@@ -433,8 +434,8 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
433
434
  * where "pet"."owner_id" = "person"."id"
434
435
  * ```
435
436
  */
436
- from<TE extends TableExpression<DB, TB>>(table: TE): UpdateQueryBuilder<TableExpressionDatabase<DB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
437
- from<TE extends TableExpression<DB, TB>>(table: TE[]): UpdateQueryBuilder<TableExpressionDatabase<DB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
437
+ from<TE extends TableExpression<DB, TB>>(table: TE): UpdateQueryBuilder<From<DB, TE>, UT, FromTables<DB, TB, TE>, O>;
438
+ from<TE extends TableExpression<DB, TB>>(table: TE[]): UpdateQueryBuilder<From<DB, TE>, UT, FromTables<DB, TB, TE>, O>;
438
439
  /**
439
440
  * Joins another table to the query using an inner join.
440
441
  *
@@ -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 {};
@@ -836,4 +836,6 @@ const JOIN_TYPE_SQL = freeze({
836
836
  LeftJoin: 'left join',
837
837
  RightJoin: 'right join',
838
838
  FullJoin: 'full join',
839
+ LateralInnerJoin: 'inner join lateral',
840
+ LateralLeftJoin: 'left join lateral',
839
841
  });
@@ -2,7 +2,7 @@ import { SelectQueryBuilder } from './query-builder/select-query-builder.js';
2
2
  import { InsertQueryBuilder } from './query-builder/insert-query-builder.js';
3
3
  import { DeleteQueryBuilder } from './query-builder/delete-query-builder.js';
4
4
  import { UpdateQueryBuilder } from './query-builder/update-query-builder.js';
5
- import { TableExpression, TableExpressionDatabase, TableExpressionTables, TableReference } from './parser/table-parser.js';
5
+ import { TableExpression, From, FromTables, TableReference } from './parser/table-parser.js';
6
6
  import { QueryExecutor } from './query-executor/query-executor.js';
7
7
  import { CommonTableExpression, QueryCreatorWithCommonTableExpression, RecursiveCommonTableExpression } from './parser/with-parser.js';
8
8
  import { WithNode } from './operation-node/with-node.js';
@@ -120,8 +120,8 @@ export declare class QueryCreator<DB> {
120
120
  * (select 1 as one) as "q"
121
121
  * ```
122
122
  */
123
- selectFrom<TE extends TableExpression<DB, keyof DB>>(from: TE[]): SelectQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, never, TE>, {}>;
124
- selectFrom<TE extends TableExpression<DB, keyof DB>>(from: TE): SelectQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, never, TE>, {}>;
123
+ selectFrom<TE extends TableExpression<DB, keyof DB>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
124
+ selectFrom<TE extends TableExpression<DB, keyof DB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
125
125
  /**
126
126
  * Creates an insert query.
127
127
  *
@@ -180,7 +180,7 @@ export declare class QueryCreator<DB> {
180
180
  * console.log(result.numDeletedRows)
181
181
  * ```
182
182
  */
183
- deleteFrom<TR extends TableReference<DB>>(table: TR): DeleteQueryBuilder<TableExpressionDatabase<DB, TR>, TableExpressionTables<DB, never, TR>, DeleteResult>;
183
+ deleteFrom<TR extends TableReference<DB>>(table: TR): DeleteQueryBuilder<From<DB, TR>, FromTables<DB, never, TR>, DeleteResult>;
184
184
  /**
185
185
  * Creates an update query.
186
186
  *
@@ -204,7 +204,7 @@ export declare class QueryCreator<DB> {
204
204
  * console.log(result.numUpdatedRows)
205
205
  * ```
206
206
  */
207
- updateTable<TR extends TableReference<DB>>(table: TR): UpdateQueryBuilder<TableExpressionDatabase<DB, TR>, TableExpressionTables<DB, never, TR>, TableExpressionTables<DB, never, TR>, UpdateResult>;
207
+ updateTable<TR extends TableReference<DB>>(table: TR): UpdateQueryBuilder<From<DB, TR>, FromTables<DB, never, TR>, FromTables<DB, never, TR>, UpdateResult>;
208
208
  /**
209
209
  * Creates a `with` query (Common Table Expression).
210
210
  *
@@ -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.3",
3
+ "version": "0.19.6",
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
  }