import { ColumnMap, ColumnMapUtil } from "./column-map"; import { IJoin, JoinUtil } from "./join"; import { IColumn, ColumnUtil } from "./column"; import { IQuery } from "./query"; import { ColumnIdentifier } from "./column-identifier"; import { Tuple } from "./tuple"; import { ColumnIdentifierRefUtil, ColumnIdentifierRef } from "./column-identifier-ref"; import { SelectItem } from "./select-item"; import { IExprSelectItem } from "./expr-select-item"; import { UnionToIntersection } from "./type"; export declare type ColumnRef = { readonly [tableAlias: string]: ColumnMap; }; export declare namespace ColumnRefUtil { type FromJoinArray = ({ readonly [tableAlias in JoinUtil.Array.TableAliases]: (ColumnMapUtil.FromJoin>); }); function fromJoinArray(joins: JoinsT): (FromJoinArray); type HasOneTable = (Extract extends never ? false : string extends Extract ? boolean : ({ [tableAlias in Extract]: (Exclude, tableAlias>); }[Extract]) extends never ? true : false); function hasOneTable(columnRef: ColumnRefT): HasOneTable; type ToConvenient = (HasOneTable extends true ? ColumnRefT[Extract] : ColumnRefT); function toConvenient(columnRef: ColumnRefT): ToConvenient; type FromColumn = ({ readonly [tableAlias in ColumnT["tableAlias"]]: (ColumnMapUtil.FromColumn); }); function fromColumn(column: ColumnT): FromColumn; type FromQueryJoins = ((QueryT["_joins"] extends IJoin[] ? FromJoinArray : {}) & (QueryT["_parentJoins"] extends IJoin[] ? FromJoinArray : {})); function fromQueryJoins(query: QueryT): FromQueryJoins; type FromSelectItemArray_ColumnElement = ({ readonly [tableAlias in ColumnT["tableAlias"]]: { readonly [columnName in Extract["name"]]: (Extract); }; }); type FromSelectItemArray_ExprSelectItemElement = ({ readonly [tableAlias in ExprSelectItemT["tableAlias"]]: { readonly [columnName in ExprSelectItemT["alias"]]: (ColumnUtil.FromExprSelectItem>); }; }); type FromSelectItemArray_ColumnMapElement = ({ readonly [tableAlias in ColumnMapUtil.TableAlias]: { readonly [columnName in ColumnMapUtil.FindWithTableAlias["name"]]: (Extract[columnName]); }; }); type FromSelectItemArray_ColumnRefElement = (ColumnRefT[keyof ColumnRefT] extends ColumnMap ? { readonly [tableAlias in ColumnRefUtil.TableAlias]: { readonly [columnName in ColumnRefUtil.FindWithTableAlias["name"]]: (Extract[tableAlias][columnName]); }; } : {}); type FromSelectItemArray = (ArrT[number] extends never ? {} : (FromSelectItemArray_ColumnElement> & FromSelectItemArray_ExprSelectItemElement> & FromSelectItemArray_ColumnMapElement> & FromSelectItemArray_ColumnRefElement>)); function fromSelectItemArray(arr: ArrT): FromSelectItemArray; type FromQuerySelects = (QueryT["_selects"] extends SelectItem[] ? FromSelectItemArray : {}); function fromQuerySelects(query: QueryT): FromQuerySelects; type FromQuery = (FromQueryJoins & FromQuerySelects); function fromQuery(query: QueryT): FromQuery; function assertIsSubset(a: ColumnIdentifierRef, b: ColumnIdentifierRef): void; type HasColumnIdentifier = (ColumnIdentifierRefUtil.HasColumnIdentifier); function hasColumnIdentifier(columnRef: ColumnRefT, columnIdentifier: ColumnIdentifierT): (HasColumnIdentifier); function assertHasColumnIdentifier(columnRef: ColumnRef, columnIdentifier: ColumnIdentifier): void; function assertHasColumnIdentifiers(columnRef: ColumnRef, columnIdentifiers: ColumnIdentifier[]): void; type FromColumnArray = ({ readonly [tableAlias in ColumnsT[number]["tableAlias"]]: (ColumnMapUtil.FromColumnArray[]>); }); function fromColumnArray(columns: ColumnsT): FromColumnArray; type LeftIntersect = ({ readonly [tableAlias in Extract]: (tableAlias extends keyof ColumnRefB ? ColumnMapUtil.Intersect : ColumnRefA[tableAlias]); }); type Intersect = (Extract & { readonly [tableAlias in Exclude, keyof ColumnRefA>]: (ColumnRefB[tableAlias]); }, ColumnRef>); function intersect(columnRefA: ColumnRefA, columnRefB: ColumnRefB): Intersect; type IntersectTuple = (ArrT[number] extends never ? {} : Extract, ColumnRef>); function intersectTuple>(...arr: ArrT): IntersectTuple; type ToPartial = ({ readonly [tableAlias in Extract]?: { readonly [columnName in Extract]?: (RefT[tableAlias][columnName]); }; }); function isColumnRef(raw: any): raw is ColumnRef; type TableAlias = (RefT extends ColumnRef ? Extract : never); type FindWithTableAlias = (RefT extends ColumnRef ? ColumnMapUtil.FindWithTableAlias], TableAliasT> : never); type FindWithColumnName = (RefT extends ColumnRef ? ColumnMapUtil.FindWithColumnName], ColumnNameT> : never); function getSortedColumnArray(columnRef: ColumnRef): IColumn[]; type DuplicateColumnName = ({ [tableAlias in Extract]: (Extract, ColumnMapUtil.ColumnNames, tableAlias>]>>); }[Extract]); type HasDuplicateColumnName = (DuplicateColumnName extends never ? false : true); type ToInterface = ({ readonly [tableAlias in keyof RefT]: (ColumnMapUtil.ToInterface); }); type ColumnNames = (RefT extends ColumnRef ? ColumnMapUtil.ColumnNames]> : never); function columnNames(columnRef: RefT): ColumnNames[]; }