This repository was archived by the owner on May 18, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 14
This repository was archived by the owner on May 18, 2024. It is now read-only.
Support conditional application level join #59
Copy link
Copy link
Closed
Labels
enhancementNew feature or requestNew feature or request
Description
Support conditional app join through those AppJoinBuilder
and JsonSelectBuilder
classes.
To support the conditional app join, complement #57 and refactor AppJoinBuilder
and JsonSelectBuilder
classes like below:
export class AppJoinBuilder<Mine extends object>
{
// TUPLE TYPE
public join<Field extends AppJoinBuilder.Key<Mine>>
(
target: Field |
[
Field,
(stmt: orm.SelectQueryBuilder<Relationship.TargetType<Mine, Field>>) => void
],
closure?: AppJoinBuilder.Closure<Relationship.TargetType<Mine, Field>>
): AppJoinBuilder<Relationship.TargetType<Mine, Field>>;
// METHOD OVERRIDING
public set<Field extends AppJoinBuilder.Key<Mine>>
(
field: Field,
builder: AppJoinBuilder<Relationship.TargetType<Mine, Field>>,
): this;
public set<Field extends AppJoinBuilder.Key<Mine>>
(
field: Field,
filter: (stmt: orm.SelectQueryBuilder<Relationship.TargetType<Mine, any>>) => void,
builder: AppJoinBuilder<Relationship.TargetType<Mine, Field>>
): this;
}
export namespace AppJoinBuilder
{
export type Initialized<Mine extends object> = OmitNever<
{
[P in keyof Mine]: Mine[P] extends Relationship<infer Target>
? (AppJoinBuilder<Target> | undefined | Closure<Target> | "join")
| [
(AppJoinBuilder<Target> | undefined | Closure<Target> | "join"),
(condition: orm.SelectQueryBuilder<Target>) => void
] : never;
}>;
}
export namespace JsonSelectBuilder
{
export type Input<Mine extends object> = Partial<OmitNever<
{
[P in keyof Mine]: Mine[P] extends Relationship<infer Target>
? Mine[P] extends BelongsCommon<Target, any, infer TargetOptions>
? TargetOptions extends { nullable: true }
? Same<Mine, Target> extends true
? "recursive" | Tuplize<Target, "join"> | DEFAULT | undefined
: Tuplize<Target, JsonSelectBuilder<Target, any, any>> | Tuplize<Target, "join"> | DEFAULT | undefined
: Same<Mine, Target> extends true
? "recursive" | Tuplize<Target, "join"> | DEFAULT | undefined
: Tuplize<Target, JsonSelectBuilder<Target, any, any>> | Tuplize<Target, "join"> | DEFAULT | undefined
: Same<Mine, Target> extends true
? "recursive" | Tuplize<Target, "join"> | undefined
: Tuplize<Target, JsonSelectBuilder<Target, any, any>> | Tuplize<Target, "join"> | undefined
: never
}>>;
type Tuplize<Target extends object, Value>
= Value
| [Value, (stmt: orm.SelectQueryBuilder<Target>) => void];
}
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request