重写了子查询的实现,有一个用例未通过

This commit is contained in:
Xu Chang 2023-07-22 16:04:41 +08:00
parent 69cabaf851
commit c79d054334
1 changed files with 10 additions and 11 deletions

View File

@ -1043,8 +1043,11 @@ export default class TreeStore<ED extends EntityDict & BaseEntityDict> extends C
entity: T,
selection: ED[T]['Selection'],
context: Cxt,
option?: OP): Partial<ED[T]['Schema']>[] {
option: OP): Partial<ED[T]['Schema']>[] {
const { filter } = selection;
if (!option.nodeDict) {
option.nodeDict = {};
}
const nodeDict = option?.nodeDict;
const filterFn = filter && this.translateFilter(entity, filter!, context, option);
@ -1056,19 +1059,15 @@ export default class TreeStore<ED extends EntityDict & BaseEntityDict> extends C
continue;
}
assert(!n.$txnId || n.$txnId === context.getCurrentTxnId());
const nodeDict2: NodeDict = {};
if (nodeDict) {
Object.assign(nodeDict2, nodeDict);
}
const exprResolveFns: Array<ExprResolveFn> = [];
// 如果没有filterFn要保证行不为null(本事务remove的case)
if (filterFn ? filterFn(n, nodeDict2, exprResolveFns) : this.constructRow(n, context, option)) {
if (filterFn ? filterFn(n, option.nodeDict!, exprResolveFns) : this.constructRow(n, context, option)) {
// 如果有延时处理的expression在这里加以判断此时所有在filter中的node应该都已经加以遍历了
let exprResult = true;
if (exprResolveFns.length > 0) {
for (const fn of exprResolveFns) {
const result = fn(nodeDict2);
const result = fn(option.nodeDict!);
if (typeof result === 'function') {
throw new OakExpressionUnresolvedException();
}
@ -1095,7 +1094,7 @@ export default class TreeStore<ED extends EntityDict & BaseEntityDict> extends C
entity: T,
operation: ED[T]['CreateSingle'] | ED[T]['Update'] | ED[T]['Remove'],
context: Cxt,
option?: OP): number {
option: OP): number {
const { data, action, id: operId } = operation;
switch (action) {
@ -1139,7 +1138,7 @@ export default class TreeStore<ED extends EntityDict & BaseEntityDict> extends C
indexFrom: operation.indexFrom,
count: operation.count,
};
const rows = this.selectAbjointRow(entity, selection, context);
const rows = this.selectAbjointRow(entity, selection, context, { dontCollect: true });
const ids = rows.map(ele => ele.id);
for (const id of ids) {
@ -1179,7 +1178,7 @@ export default class TreeStore<ED extends EntityDict & BaseEntityDict> extends C
entity: T,
selection: ED[T]['Selection'],
context: Cxt,
option?: OP) {
option: OP) {
return this.selectAbjointRow(entity, selection, context, option);
}
@ -1187,7 +1186,7 @@ export default class TreeStore<ED extends EntityDict & BaseEntityDict> extends C
entity: T,
operation: ED[T]['CreateSingle'] | ED[T]['Update'] | ED[T]['Remove'],
context: Cxt,
option?: OP) {
option: OP) {
return this.updateAbjointRow(entity, operation, context, option);
}