본문으로 건너뛰기

타입 별칭: MergeContextWithJoinType<TContext, TNewSchema, TJoinType>

type MergeContextWithJoinType<TContext, TNewSchema, TJoinType> = object & PreserveSingleResultFlag<TContext["singleResult"]> & PreserveHasResultFlag<TContext["hasResult"]> & PreserveUnionFromFlag<TContext["hasUnionFrom"]> & PreserveFromSourceNames<TContext["fromSourceNames"]>;

정의 위치: packages/db/src/query/builder/types.ts:943

MergeContextWithJoinType - 조인 작업 후 새 컨텍스트를 생성합니다

테이블을 조인할 때 스키마를 병합하는 복잡한 로직을 처리하고, 조인 유형에 따라 올바른 선택 사항 여부를 적용하는 핵심 타입입니다.

주요 책임:

  1. 스키마 병합: 기존 스키마와 새로 조인된 테이블을 결합합니다.
  2. 선택 사항 여부 로직: 조인별 선택 사항 여부 규칙을 적용합니다:
    • LEFT JOIN: 새 테이블이 선택 사항이 됩니다.
    • RIGHT JOIN: 기존 테이블이 선택 사항이 됩니다.
    • FULL JOIN: 기존 테이블과 새 테이블이 모두 선택 사항이 됩니다.
    • INNER JOIN: 어떤 테이블도 선택 사항이 되지 않습니다.
  3. 상태 추적: 이후 작업을 위해 hasJoins 및 joinTypes를 업데이트합니다.

컨텍스트 변화:

  • baseSchema: 변경되지 않습니다(항상 원래 from() 테이블입니다).
  • schema: 새 테이블과 적절한 선택 사항 여부가 반영되어 확장됩니다.
  • hasJoins: true로 설정됩니다.
  • joinTypes: 이 조인 유형을 추적하도록 업데이트됩니다.
  • result: 이전 작업에서 보존됩니다.
  • singleResult: 이미 true인 경우에만 보존됩니다(PreserveSingleResultFlag를 통해).

타입 선언

baseSchema

baseSchema: TContext["baseSchema"];

fromSourceName

fromSourceName: TContext["fromSourceName"];

hasJoins

hasJoins: true;

joinTypes

joinTypes: TContext["joinTypes"] extends Record<string, any> ? TContext["joinTypes"] : object & { [K in keyof TNewSchema & string]: TJoinType };

refsSchema

refsSchema: ApplyJoinOptionalityToMergedSchema<RefsSchemaForContext<TContext>, TNewSchema, TJoinType, FromSourceNamesForOptionality<TContext>>;

result

result: TContext["result"];

schema

schema: ApplyJoinOptionalityToMergedSchema<TContext["schema"], TNewSchema, TJoinType, FromSourceNamesForOptionality<TContext>>;

타입 매개변수

TContext

TContext extends Context

TNewSchema

TNewSchema extends ContextSchema

TJoinType

TJoinType extends "inner" | "left" | "right" | "full" | "outer" | "cross"