@@ -29,7 +29,6 @@ import {
2929 AnyRawBuilder ,
3030 MergePartial ,
3131 Nullable ,
32- NullableValues ,
3332 SingleResultType ,
3433} from '../util/type-utils.js'
3534import { preventAwait } from '../util/prevent-await.js'
@@ -656,170 +655,156 @@ export interface DeleteQueryBuilderProps {
656655 readonly executor : QueryExecutor
657656}
658657
659- type DeleteQueryBuilderWithInnerJoin <
658+ export type DeleteQueryBuilderWithInnerJoin <
660659 DB ,
661660 TB extends keyof DB ,
662661 O ,
663662 TE extends TableExpression < DB , TB >
664663> = TE extends `${infer T } as ${infer A } `
665664 ? T extends keyof DB
666- ? DeleteQueryBuilder < Omit < DB , A > & Record < A , DB [ T ] > , Exclude < TB , A > | A , O >
665+ ? InnerJoinedBuilder < DB , TB , O , A , DB [ T ] >
667666 : never
668667 : TE extends keyof DB
669668 ? DeleteQueryBuilder < DB , TB | TE , O >
670669 : TE extends AliasedQueryBuilder < any , any , infer QO , infer QA >
671- ? DeleteQueryBuilder < Omit < DB , QA > & Record < QA , QO > , Exclude < TB , QA > | QA , O >
670+ ? InnerJoinedBuilder < DB , TB , O , QA , QO >
672671 : TE extends ( qb : any ) => AliasedQueryBuilder < any , any , infer QO , infer QA >
673- ? DeleteQueryBuilder < Omit < DB , QA > & Record < QA , QO > , Exclude < TB , QA > | QA , O >
672+ ? InnerJoinedBuilder < DB , TB , O , QA , QO >
674673 : TE extends AliasedRawBuilder < infer RO , infer RA >
675- ? DeleteQueryBuilder < Omit < DB , RA > & Record < RA , RO > , Exclude < TB , RA > | RA , O >
674+ ? InnerJoinedBuilder < DB , TB , O , RA , RO >
676675 : TE extends ( qb : any ) => AliasedRawBuilder < infer RO , infer RA >
677- ? DeleteQueryBuilder < Omit < DB , RA > & Record < RA , RO > , Exclude < TB , RA > | RA , O >
676+ ? InnerJoinedBuilder < DB , TB , O , RA , RO >
678677 : never
679678
679+ type InnerJoinedBuilder <
680+ DB ,
681+ TB extends keyof DB ,
682+ O ,
683+ A extends string ,
684+ R
685+ > = A extends keyof DB
686+ ? DeleteQueryBuilder < InnerJoinedDB < DB , A , R > , TB | A , O >
687+ : // Much faster non-recursive solution for the simple case.
688+ DeleteQueryBuilder < DB & Record < A , R > , TB | A , O >
689+
690+ type InnerJoinedDB < DB , A extends string , R > = {
691+ [ C in keyof DB | A ] : C extends A ? R : C extends keyof DB ? DB [ C ] : never
692+ }
693+
680694export type DeleteQueryBuilderWithLeftJoin <
681695 DB ,
682696 TB extends keyof DB ,
683697 O ,
684698 TE extends TableExpression < DB , TB >
685699> = TE extends `${infer T } as ${infer A } `
686700 ? T extends keyof DB
687- ? DeleteQueryBuilder <
688- Omit < DB , A > & Record < A , Nullable < DB [ T ] > > ,
689- Exclude < TB , A > | A ,
690- O
691- >
701+ ? LeftJoinedBuilder < DB , TB , O , A , DB [ T ] >
692702 : never
693703 : TE extends keyof DB
694- ? DeleteQueryBuilder <
695- Omit < DB , TE > & Record < TE , Nullable < DB [ TE ] > > ,
696- Exclude < TB , TE > | TE ,
697- O
698- >
704+ ? LeftJoinedBuilder < DB , TB , O , TE , DB [ TE ] >
699705 : TE extends AliasedQueryBuilder < any , any , infer QO , infer QA >
700- ? DeleteQueryBuilder <
701- Omit < DB , QA > & Record < QA , Nullable < QO > > ,
702- Exclude < TB , QA > | QA ,
703- O
704- >
706+ ? LeftJoinedBuilder < DB , TB , O , QA , QO >
705707 : TE extends ( qb : any ) => AliasedQueryBuilder < any , any , infer QO , infer QA >
706- ? DeleteQueryBuilder <
707- Omit < DB , QA > & Record < QA , Nullable < QO > > ,
708- Exclude < TB , QA > | QA ,
709- O
710- >
708+ ? LeftJoinedBuilder < DB , TB , O , QA , QO >
711709 : TE extends AliasedRawBuilder < infer RO , infer RA >
712- ? DeleteQueryBuilder <
713- Omit < DB , RA > & Record < RA , Nullable < RO > > ,
714- Exclude < TB , RA > | RA ,
715- O
716- >
710+ ? LeftJoinedBuilder < DB , TB , O , RA , RO >
717711 : TE extends ( qb : any ) => AliasedRawBuilder < infer RO , infer RA >
718- ? DeleteQueryBuilder <
719- Omit < DB , RA > & Record < RA , Nullable < RO > > ,
720- Exclude < TB , RA > | RA ,
721- O
722- >
712+ ? LeftJoinedBuilder < DB , TB , O , RA , RO >
723713 : never
724714
715+ type LeftJoinedBuilder <
716+ DB ,
717+ TB extends keyof DB ,
718+ O ,
719+ A extends keyof any ,
720+ R
721+ > = A extends keyof DB
722+ ? DeleteQueryBuilder < LeftJoinedDB < DB , A , R > , TB | A , O >
723+ : // Much faster non-recursive solution for the simple case.
724+ DeleteQueryBuilder < DB & Record < A , Nullable < R > > , TB | A , O >
725+
726+ type LeftJoinedDB < DB , A extends keyof any , R > = {
727+ [ C in keyof DB | A ] : C extends A
728+ ? Nullable < R >
729+ : C extends keyof DB
730+ ? DB [ C ]
731+ : never
732+ }
733+
725734export type DeleteQueryBuilderWithRightJoin <
726735 DB ,
727736 TB extends keyof DB ,
728737 O ,
729738 TE extends TableExpression < DB , TB >
730739> = TE extends `${infer T } as ${infer A } `
731740 ? T extends keyof DB
732- ? DeleteQueryBuilder <
733- Omit < DB , TB | A > & NullableValues < Pick < DB , TB > > & Record < A , DB [ T ] > ,
734- TB | A ,
735- O
736- >
741+ ? RightJoinedBuilder < DB , TB , O , A , DB [ T ] >
737742 : never
738743 : TE extends keyof DB
739- ? DeleteQueryBuilder <
740- Omit < DB , TB | TE > & NullableValues < Pick < DB , TB > > & Pick < DB , TE > ,
741- TB | TE ,
742- O
743- >
744+ ? RightJoinedBuilder < DB , TB , O , TE , DB [ TE ] >
744745 : TE extends AliasedQueryBuilder < any , any , infer QO , infer QA >
745- ? DeleteQueryBuilder <
746- Omit < DB , TB | QA > & NullableValues < Pick < DB , TB > > & Record < QA , QO > ,
747- TB | QA ,
748- O
749- >
746+ ? RightJoinedBuilder < DB , TB , O , QA , QO >
750747 : TE extends ( qb : any ) => AliasedQueryBuilder < any , any , infer QO , infer QA >
751- ? DeleteQueryBuilder <
752- Omit < DB , TB | QA > & NullableValues < Pick < DB , TB > > & Record < QA , QO > ,
753- TB | QA ,
754- O
755- >
748+ ? RightJoinedBuilder < DB , TB , O , QA , QO >
756749 : TE extends AliasedRawBuilder < infer RO , infer RA >
757- ? DeleteQueryBuilder <
758- Omit < DB , TB | RA > & NullableValues < Pick < DB , TB > > & Record < RA , RO > ,
759- TB | RA ,
760- O
761- >
750+ ? RightJoinedBuilder < DB , TB , O , RA , RO >
762751 : TE extends ( qb : any ) => AliasedRawBuilder < infer RO , infer RA >
763- ? DeleteQueryBuilder <
764- Omit < DB , TB | RA > & NullableValues < Pick < DB , TB > > & Record < RA , RO > ,
765- TB | RA ,
766- O
767- >
752+ ? RightJoinedBuilder < DB , TB , O , RA , RO >
768753 : never
769754
755+ type RightJoinedBuilder <
756+ DB ,
757+ TB extends keyof DB ,
758+ O ,
759+ A extends keyof any ,
760+ R
761+ > = DeleteQueryBuilder < RightJoinedDB < DB , TB , A , R > , TB | A , O >
762+
763+ type RightJoinedDB < DB , TB extends keyof DB , A extends keyof any , R > = {
764+ [ C in keyof DB | A ] : C extends A
765+ ? R
766+ : C extends TB
767+ ? Nullable < DB [ C ] >
768+ : C extends keyof DB
769+ ? DB [ C ]
770+ : never
771+ }
772+
770773export type DeleteQueryBuilderWithFullJoin <
771774 DB ,
772775 TB extends keyof DB ,
773776 O ,
774777 TE extends TableExpression < DB , TB >
775778> = TE extends `${infer T } as ${infer A } `
776779 ? T extends keyof DB
777- ? DeleteQueryBuilder <
778- Omit < DB , TB | A > &
779- NullableValues < Pick < DB , TB > > &
780- Record < A , Nullable < DB [ T ] > > ,
781- TB | A ,
782- O
783- >
780+ ? OuterJoinedBuilder < DB , TB , O , A , DB [ T ] >
784781 : never
785782 : TE extends keyof DB
786- ? DeleteQueryBuilder <
787- Omit < DB , TB | TE > &
788- NullableValues < Pick < DB , TB > > &
789- NullableValues < Pick < DB , TE > > ,
790- TB | TE ,
791- O
792- >
783+ ? OuterJoinedBuilder < DB , TB , O , TE , DB [ TE ] >
793784 : TE extends AliasedQueryBuilder < any , any , infer QO , infer QA >
794- ? DeleteQueryBuilder <
795- Omit < DB , TB | QA > &
796- NullableValues < Pick < DB , TB > > &
797- Record < QA , Nullable < QO > > ,
798- TB | QA ,
799- O
800- >
785+ ? OuterJoinedBuilder < DB , TB , O , QA , QO >
801786 : TE extends ( qb : any ) => AliasedQueryBuilder < any , any , infer QO , infer QA >
802- ? DeleteQueryBuilder <
803- Omit < DB , TB | QA > &
804- NullableValues < Pick < DB , TB > > &
805- Record < QA , Nullable < QO > > ,
806- TB | QA ,
807- O
808- >
787+ ? OuterJoinedBuilder < DB , TB , O , QA , QO >
809788 : TE extends AliasedRawBuilder < infer RO , infer RA >
810- ? DeleteQueryBuilder <
811- Omit < DB , TB | RA > &
812- NullableValues < Pick < DB , TB > > &
813- Record < RA , Nullable < RO > > ,
814- TB | RA ,
815- O
816- >
789+ ? OuterJoinedBuilder < DB , TB , O , RA , RO >
817790 : TE extends ( qb : any ) => AliasedRawBuilder < infer RO , infer RA >
818- ? DeleteQueryBuilder <
819- Omit < DB , TB | RA > &
820- NullableValues < Pick < DB , TB > > &
821- Record < RA , Nullable < RO > > ,
822- TB | RA ,
823- O
824- >
791+ ? OuterJoinedBuilder < DB , TB , O , RA , RO >
825792 : never
793+
794+ type OuterJoinedBuilder <
795+ DB ,
796+ TB extends keyof DB ,
797+ O ,
798+ A extends keyof any ,
799+ R
800+ > = DeleteQueryBuilder < OuterJoinedBuilderDB < DB , TB , A , R > , TB | A , O >
801+
802+ type OuterJoinedBuilderDB < DB , TB extends keyof DB , A extends keyof any , R > = {
803+ [ C in keyof DB | A ] : C extends A
804+ ? Nullable < R >
805+ : C extends TB
806+ ? Nullable < DB [ C ] >
807+ : C extends keyof DB
808+ ? DB [ C ]
809+ : never
810+ }
0 commit comments