Skip to content

Commit

Permalink
fix: make hinting relationships use name as well as hint to avoid dup…
Browse files Browse the repository at this point in the history
…licates
  • Loading branch information
avallete committed Oct 3, 2024
1 parent 59e23a5 commit 4eea178
Showing 1 changed file with 45 additions and 5 deletions.
50 changes: 45 additions & 5 deletions src/select-query-parser/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ type FilterRelationNodes<Nodes extends Node[]> = UnionToArray<
}[number]
>

type ResolveRelationships<
export type ResolveRelationships<
Schema extends GenericSchema,
RelationName extends string,
Relationships extends GenericRelationship[],
Expand Down Expand Up @@ -301,6 +301,44 @@ export type FindMatchingViewRelationships<
: false
: false

export type FindMatchingHintTableRelationships<
Schema extends GenericSchema,
Relationships extends GenericRelationship[],
hint extends string,
name extends string
> = Relationships extends [infer R, ...infer Rest extends GenericRelationship[]]
? R extends { referencedRelation: infer ReferencedRelation }
? ReferencedRelation extends name
? R extends { foreignKeyName: hint }
? R & { match: 'fkname' }
: R extends { referencedRelation: hint }
? R & { match: 'refrel' }
: R extends { columns: [hint] }
? R & { match: 'col' }
: FindMatchingHintTableRelationships<Schema, Rest, hint, name>
: FindMatchingHintTableRelationships<Schema, Rest, hint, name>
: false
: false

export type FindMatchingHintViewRelationships<
Schema extends GenericSchema,
Relationships extends GenericRelationship[],
hint extends string,
name extends string
> = Relationships extends [infer R, ...infer Rest extends GenericRelationship[]]
? R extends { referencedRelation: infer ReferencedRelation }
? ReferencedRelation extends name
? R extends { foreignKeyName: hint }
? R & { match: 'fkname' }
: R extends { referencedRelation: hint }
? R & { match: 'refrel' }
: R extends { columns: [hint] }
? R & { match: 'col' }
: FindMatchingHintViewRelationships<Schema, Rest, hint, name>
: FindMatchingHintViewRelationships<Schema, Rest, hint, name>
: false
: false

type IsColumnsNullable<
Table extends Pick<GenericTable, 'Row'>,
Columns extends (keyof Table['Row'])[]
Expand Down Expand Up @@ -393,19 +431,21 @@ export type FindFieldMatchingRelationships<
Relationships extends GenericRelationship[],
Field extends FieldNode
> = Field extends { hint?: infer Hint extends string }
? FindMatchingTableRelationships<
? FindMatchingHintTableRelationships<
Schema,
Relationships,
Hint
Hint,
Field['name']
> extends infer TableRelationViaHint extends GenericRelationship
? TableRelationViaHint & {
branch: 'found-in-table-via-hint'
hint: Field['hint']
}
: FindMatchingViewRelationships<
: FindMatchingHintViewRelationships<
Schema,
Relationships,
Hint
Hint,
Field['name']
> extends infer TableViewViaHint extends GenericRelationship
? TableViewViaHint & {
branch: 'found-in-view-via-hint'
Expand Down

0 comments on commit 4eea178

Please sign in to comment.