import { GetColumnConfig } from 'drizzle-orm'; import { Placeholder, SQL, SQLResponse } from 'drizzle-orm/sql'; import { Simplify } from 'drizzle-orm/utils'; import { AnyPgColumn } from '../columns'; import { ChangeColumnTableName } from '../columns/common'; import { SelectFields, SelectFieldsOrdered, SelectResultField, SelectResultFields } from '../operations'; import { AnyPgTable, GetTableConfig, PgTableWithColumns, TableConfig, UpdateTableConfig } from '../table'; import { PgSelect } from './select'; export declare type JoinType = 'inner' | 'left' | 'right' | 'full'; export declare type SelectMode = 'partial' | 'single' | 'multiple'; export interface JoinsValue { on: SQL; table: AnyPgTable; joinType: JoinType; } export declare type JoinNullability = 'nullable' | 'null' | 'not-null'; export declare type ApplyNullability = TNullability extends 'nullable' ? T | null : TNullability extends 'null' ? null : T; export declare type ApplyNullabilityNested = T extends Record ? { [Key in keyof T]: ApplyNullabilityNested; } : ApplyNullability; export declare type ApplyNotNullMapToJoins> = TJoinsNotNullable extends TJoinsNotNullable ? { [TTableName in keyof TResult & keyof TJoinsNotNullable & string]: ApplyNullability; } : never; export declare type SelectResult> = TSelectMode extends 'partial' ? SelectPartialResult : TSelectMode extends 'single' ? TResult : RemoveDuplicates>>; declare type GetNullableKeys> = { [Key in keyof T]: T[Key] extends 'nullable' ? Key : never; }[keyof T]; declare type SplitNullability> = RemoveDuplicates<'nullable' extends T[keyof T] ? T extends T ? GetNullableKeys extends infer TKey extends string ? [TKey] extends [TKey] ? TKey extends TKey ? Simplify> & { [Key in TKey]: 'not-null'; }> | Simplify> & { [Key in TKey]: 'null'; }> : never : never : T : never : T>; declare type SelectPartialResult> = SplitNullability extends infer TNullability extends Record ? TNullability extends TNullability ? { [Key in keyof TFields as Key extends string ? Key : never]: TFields[Key] extends infer TField ? TField extends AnyPgTable ? SelectPartialResult, TNullability> : TField extends AnyPgColumn ? GetColumnConfig extends infer TTableName extends keyof TNullability ? ApplyNullability, TNullability[TTableName]> : never : TField extends SQL | SQLResponse ? SelectResultField : TField extends Record ? SelectPartialResult : SelectResultField : never; } : never : never; export declare type AnyPgSelect = PgSelect; export declare type BuildAliasTable = GetTableConfig extends infer TConfig extends TableConfig ? PgTableWithColumns>; }>> : never; export declare type MapColumnsToTableAlias, TAlias extends string> = { [Key in keyof TColumns]: ChangeColumnTableName; }; export declare type AppendToResult = TOldSelectMode extends 'partial' ? TResult : TOldSelectMode extends 'single' ? Record, TResult> & Record> : Simplify>>; declare type SetJoinsNotNull, TValue extends JoinNullability> = { [Key in keyof TJoinsNotNull]: TValue; }; declare type UnionToParm = U extends any ? (k: U) => void : never; declare type UnionToSect = UnionToParm extends ((k: infer I) => void) ? I : never; declare type ExtractParm = F extends { (a: infer A): void; } ? A : never; declare type SpliceOne = Exclude>; declare type ExtractOne = ExtractParm>>; declare type ToTupleRec = SpliceOne extends never ? [ExtractOne, ...Result] : ToTupleRec, [ExtractOne, ...Result]>; export declare type RemoveDuplicates = ToTupleRec extends any[] ? ToTupleRec[number] : never; export declare type AppendToJoinsNotNull, TJoinedName extends string, TJoinType extends JoinType> = Simplify<'left' extends TJoinType ? TJoinsNotNull & { [name in TJoinedName]: 'nullable'; } : 'right' extends TJoinType ? SetJoinsNotNull & { [name in TJoinedName]: 'not-null'; } : 'inner' extends TJoinType ? SetJoinsNotNull & { [name in TJoinedName]: 'not-null'; } : 'full' extends TJoinType ? (TJoinsNotNull & { [name in TJoinedName]: 'not-null'; }) | (TJoinsNotNull & { [name in TJoinedName]: 'null'; }) | (SetJoinsNotNull & { [name in TJoinedName]: 'not-null'; }) : never>; export interface PgSelectConfig { fields: SelectFieldsOrdered; where?: SQL | undefined; table: AnyPgTable; limit?: number | Placeholder; offset?: number | Placeholder; joins: Record; orderBy: SQL[]; groupBy: (AnyPgColumn | SQL)[]; } export declare type JoinFn = Record, 'not-null'>> = = GetTableConfig>(table: TJoinedTable, on: SQL) => PgSelect, TSelectMode>, TSelectMode extends 'partial' ? TSelectMode : 'multiple', AppendToJoinsNotNull>; export {}; //# sourceMappingURL=select.types.d.ts.map