import * as sd from "type-mapping"; import { PrimitiveExpr } from "./primitive-expr"; import { IAnonymousTypedExpr, IExpr } from "./expr"; import { IAnonymousTypedColumn, IColumn } from "./column"; import { ColumnRefUtil } from "./column-ref"; import { QueryTree } from "./query-tree"; import { ColumnRef } from "./column-ref"; import { OneSelectItemQuery, ZeroOrOneRowQuery, OneRowQuery, MainQuery } from "./query/util"; import { IQuery, QueryUtil } from "./query"; import { IJoin } from "./join"; import { IAnonymousTypedExprSelectItem, IExprSelectItem } from "./expr-select-item"; import { UnionToIntersection } from "./type"; export declare type RawExpr = ((TypeT extends PrimitiveExpr ? TypeT : never) | IAnonymousTypedExpr | IAnonymousTypedColumn | (null extends TypeT ? (OneSelectItemQuery & ZeroOrOneRowQuery) : (OneSelectItemQuery & OneRowQuery)) | IAnonymousTypedExprSelectItem); export declare type RawExprNoUsedRef = ((TypeT extends PrimitiveExpr ? TypeT : never) | IExpr<{ usedRef: {}; assertDelegate: sd.SafeMapper; }> | (null extends TypeT ? (OneSelectItemQuery & ZeroOrOneRowQuery & MainQuery) : (OneSelectItemQuery & OneRowQuery & MainQuery)) | IExprSelectItem<{ usedRef: {}; assertDelegate: sd.SafeMapper; tableAlias: string; alias: string; }>); export declare namespace RawExprUtil { type UsedRef> = (RawExprT extends PrimitiveExpr ? {} : RawExprT extends IExpr ? RawExprT["usedRef"] : RawExprT extends IColumn ? ColumnRefUtil.FromColumn : RawExprT extends IQuery ? (RawExprT["_parentJoins"] extends IJoin[] ? ColumnRefUtil.FromJoinArray> : {}) : RawExprT extends IExprSelectItem ? RawExprT["usedRef"] : never); function usedRef>(rawExpr: RawExprT): UsedRef; type TypeOf> = (RawExprT extends PrimitiveExpr ? RawExprT : RawExprT extends IExpr ? ReturnType : RawExprT extends IColumn ? ReturnType : RawExprT extends OneSelectItemQuery & ZeroOrOneRowQuery ? QueryUtil.TypeOf : RawExprT extends IExprSelectItem ? ReturnType : never); type AssertDelegate> = (sd.SafeMapper>); function assertDelegate>(rawExpr: RawExprT): AssertDelegate; function queryTree(rawExpr: RawExpr): QueryTree; type IntersectUsedRefTuple[]> = (ArrT[number] extends never ? {} : Extract>, ColumnRef>); function intersectUsedRefTuple[]>(...arr: ArrT): IntersectUsedRefTuple; }