import { OperationResult, OperateOption, OpRecord, EntityDict, SelectOption, AggregationResult } from "oak-domain/lib/types/Entity"; import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain'; import { StorageSchema } from 'oak-domain/lib/types/Storage'; import { NodeDict } from "./types/type"; import { SyncContext } from 'oak-domain/lib/store/SyncRowStore'; import { AsyncContext } from 'oak-domain/lib/store/AsyncRowStore'; import { CascadeStore } from 'oak-domain/lib/store/CascadeStore'; import { Context } from 'oak-domain/lib/types'; export interface TreeStoreSelectOption extends SelectOption { nodeDict?: NodeDict; disableSubQueryHashjoin?: boolean; warnWhenAttributeMiss?: boolean; } export interface TreeStoreOperateOption extends OperateOption { } export default class TreeStore extends CascadeStore { private store; private seq; private activeTxnDict; private stat; private getNextSeq; private setMaxSeq; protected supportMultipleCreate(): boolean; protected supportManyToOneJoin(): boolean; resetInitialData(data: { [T in keyof ED]?: ED[T]['CreateSingle']['data'][]; }, stat?: { create: number; update: number; remove: number; commit: number; }): void; getCurrentData(keys?: (keyof ED)[]): { [T in keyof ED]?: ED[T]['OpSchema'][]; }; constructor(storageSchema: StorageSchema); private constructRow; private testFilterFns; private translateLogicFilter; /** * 对表达式中某个结点的翻译,有三种情况: * 1、结点是一个表达式,此时递归翻译其子结点 * 2、结点是一个常量,直接返回 * 3、结点引用了某个属性,此时返回一个函数(ExprNodeTranslator),该函数在实际执行时对某行进行处理,又可能有两种case: * 3.1、得到结果,此时返回结果的值(常量) * 3.2、还欠缺某些外部结点的值才能得到结果,此时返回一个函数(ExprLaterCheckFn),此函数可以在执行中获得更多结点之后再调用并得到结果的值 * @param entity * @param expression * @param context * @returns */ private translateExpressionNode; private translateExpression; private translateFulltext; private translatePredicate; private translateObjectPredicate; private translateAttribute; private translateFilterInner; private translateFilter; private translateSorter; /** * 目标行,如果有id过滤条件可直接取 * @param entity * @param selection * @returns */ private getEntityNodes; protected selectAbjointRow(entity: T, selection: ED[T]['Selection'], context: Cxt, option: OP): Partial[]; protected updateAbjointRow(entity: T, operation: ED[T]['CreateSingle'] | ED[T]['Update'] | ED[T]['Remove'], context: Cxt, option: OP): number; protected selectAbjointRowAsync(entity: T, selection: ED[T]['Selection'], context: Cxt, option: OP): Promise[]>; protected updateAbjointRowAsync(entity: T, operation: ED[T]['CreateSingle'] | ED[T]['Update'] | ED[T]['Remove'], context: Cxt, option: OP): Promise; protected operateSync>(entity: T, operation: ED[T]['Operation'], context: Cxt, option: OP): OperationResult; protected operateAsync>(entity: T, operation: ED[T]['Operation'], context: Cxt, option: OP): Promise>; /** * 计算最终结果集当中的函数,这个函数可能测试不够充分 * @param entity * @param projection * @param data * @param nodeDict * @param context */ private formExprInResult; private formResult; /** * 本函数把结果中的相应属性映射成一个字符串,用于GroupBy * @param entity * @param row * @param projection */ private mappingProjectionOnRow; private calcAggregation; private formAggregation; protected selectSync>(entity: T, selection: ED[T]['Selection'], context: Cxt, option: OP): Partial[]; protected selectAsync>(entity: T, selection: ED[T]['Selection'], context: Cxt, option: OP): Promise[]>; protected aggregateAbjointRowSync>(entity: T, aggregation: ED[T]['Aggregation'], context: Cxt, option: OP): AggregationResult; protected aggregateAbjointRowAsync>(entity: T, aggregation: ED[T]['Aggregation'], context: Cxt, option: OP): Promise>; protected countAbjointRow>(entity: T, selection: Pick, context: Cxt, option: OP): number; protected countAbjointRowAsync>(entity: T, selection: Pick, context: Cxt, option: OP): Promise; private addToTxnNode; getStat(): { create: number; update: number; remove: number; commit: number; }; beginSync(): string; private commitCallbacks; onCommit(callback: (result: OperationResult) => Promise): () => ((result: OperationResult) => Promise)[]; private addToOperationResult; private commitLogic; commitSync(uuid: string): void; rollbackSync(uuid: string): void; beginAsync(): Promise; commitAsync(uuid: string): Promise; rollbackAsync(uuid: string): Promise; sync>(opRecords: Array>, context: Cxt, option?: OP): void; getLastUpdateTs(): number; }