import { GenericType, DeleteMode, ValueType, IObjectType, ObjectLike } from "../Common/Type"; import { DbContext } from "../Data/DBContext"; import { DeferredQuery } from "../Query/DeferredQuery"; import { IQueryExpression } from "./QueryExpression/IQueryExpression"; import { IQueryVisitor } from "../Query/IQueryVisitor"; import { IQueryParameterMap } from "../Query/IQueryParameter"; import { IQueryOption } from "../Query/IQueryOption"; export declare abstract class Queryable { type: GenericType; readonly dbContext: DbContext; queryOption: IQueryOption; /** * equal to number of times queryable.parameter() was called. * represent the stack index of parameter used by current queryable */ protected parameterStackIndex: number; /** * all parameter used by current queryable and it's parent. */ flatParameterStacks: { [key: string]: any; }; /** * parameter that is actually used by current queryable */ parameters: { [key: string]: any; }; protected parent: Queryable; constructor(type: GenericType, parent?: Queryable); abstract buildQuery(queryVisitor: IQueryVisitor): IQueryExpression; abstract hashCode(): number; buildParameter(queryExp: IQueryExpression, params: { [key: string]: any; }): IQueryParameterMap; toString(): string; toArray(): Promise; toMap(keySelector: (item: T) => K, valueSelector?: (item: T) => V): Promise>; count(): Promise; contains(item: T): Promise; sum(selector?: (item: T) => number): Promise; max(selector?: (item: T) => number): Promise; min(selector?: (item: T) => number): Promise; avg(selector?: (item: T) => number): Promise; all(predicate: (item: T) => boolean): Promise; any(predicate?: (item: T) => boolean): Promise; find(id: ValueType | ObjectLike): Promise; first(predicate?: (item: T) => boolean): Promise; update(setter: { [key in keyof T]?: T[key] | ((item: T) => ValueType); }): Promise; delete(mode: DeleteMode): Promise; delete(predicate?: (item: T) => boolean, mode?: DeleteMode): Promise; insertInto(type: IObjectType): Promise; deferredToArray(): DeferredQuery; deferredToMap(keySelector: (item: T) => K, valueSelector?: (item: T) => V): DeferredQuery>; deferredCount(): DeferredQuery; deferredSum(selector?: (item: T) => number): DeferredQuery; deferredMax(selector?: (item: T) => number): DeferredQuery; deferredMin(selector?: (item: T) => number): DeferredQuery; deferredAvg(selector?: (item: T) => number): DeferredQuery; deferredAll(predicate: (item: T) => boolean): DeferredQuery; deferredAny(predicate?: (item: T) => boolean): DeferredQuery; deferredFind(id: ValueType | ObjectLike): DeferredQuery; deferredFirst(predicate?: (item: T) => boolean): DeferredQuery; deferredContains(item: T): DeferredQuery; deferredUpdate(setter: { [key in keyof T]?: T[key] | ((item: T) => ValueType); }): DeferredQuery; deferredDelete(mode: DeleteMode): DeferredQuery; deferredDelete(predicate?: (item: T) => boolean, mode?: DeleteMode): DeferredQuery; deferredInsertInto(type: IObjectType): DeferredQuery; private cacheKey; } import "./Queryable.partial"; import "../Extensions/QueryableExtension"; import "../Extensions/DateExtension"; import "../Extensions/StringExtension"; import "../Extensions/ArrayItemTypeExtension";