import { Expr, CaseExpr, ScalarExpr, VariableExpr, ScoreExpr, BuildEnumsetExpr } from "./types"; import Schema from "./Schema"; /** Represents a row to be evaluated */ export interface PromiseExprEvaluatorRow { /** gets primary key of row */ getPrimaryKey(): Promise; /** gets the value of a column. * For joins, getField will get either the primary key or array of primary keys */ getField(columnId: string): Promise; /** Get array of rows for 1-n and n-n joins and a row or null for n-1 and 1-1 joins */ followJoin(columnId: string): Promise; } export interface PromiseExprEvaluatorContext { /** current row. Optional for aggr expressions */ row?: PromiseExprEvaluatorRow; /** array of rows (for aggregate expressions) */ rows?: PromiseExprEvaluatorRow[]; } /** Expression evaluator that is promise-based */ export declare class PromiseExprEvaluator { schema?: Schema; locale?: string; constructor(options: { schema?: Schema; locale?: string; }); /** Evaluate an expression given the context */ evaluate(expr: Expr, context: PromiseExprEvaluatorContext): Promise; /** Evaluate an expression synchronously */ evaluateSync(expr: Expr): any; evaluateBuildEnumset(expr: BuildEnumsetExpr, context: PromiseExprEvaluatorContext): Promise; evaluateScore(expr: ScoreExpr, context: PromiseExprEvaluatorContext): Promise; evaluateCase(expr: CaseExpr, context: PromiseExprEvaluatorContext): Promise; evaluateScalar(expr: ScalarExpr, context: PromiseExprEvaluatorContext): Promise; evaluateOp(table: string | undefined, op: string, exprs: Expr[], context: PromiseExprEvaluatorContext): Promise; getOrderingValues(table: string, orderExpr: Expr | null | undefined, rows: PromiseExprEvaluatorRow[], schema?: Schema): Promise; /** NOTE: This is not technically correct. It's not a window function (as window * functions can't be used in where clauses) but rather a special query */ evaluateIsLatest(table: string, exprs: Expr[], context: PromiseExprEvaluatorContext): Promise; evaluteAggrOp(table: string, op: string, exprs: Expr[], context: PromiseExprEvaluatorContext): Promise; /** Synchronously evaluate an op when the values are already known */ evaluateOpValues(op: string, exprs: Expr[], values: any[]): any; evaluateVariable(expr: VariableExpr, context: PromiseExprEvaluatorContext): Promise; /** Synchronously evaluate case expression */ evaluateCaseSync(expr: CaseExpr): any; }