处理aggr的reinforce有小问题

This commit is contained in:
Xu Chang 2023-12-13 19:10:43 +08:00
parent 2fc2bdeb8f
commit b8c5fbe46e
2 changed files with 21 additions and 21 deletions

View File

@ -21,20 +21,24 @@ class CascadeStore extends RowStore_1.RowStore {
selectionRewriters = []; selectionRewriters = [];
operationRewriters = []; operationRewriters = [];
async reinforceSelectionAsync(entity, selection, context, option, isAggr) { async reinforceSelectionAsync(entity, selection, context, option, isAggr) {
this.reinforceSelectionInner(entity, selection, context, isAggr); if (!isAggr) {
this.reinforceSelectionInner(entity, selection, context);
}
const rewriterPromises = this.selectionRewriters.map(ele => ele(this.getSchema(), entity, selection, context, option, isAggr)); const rewriterPromises = this.selectionRewriters.map(ele => ele(this.getSchema(), entity, selection, context, option, isAggr));
if (rewriterPromises.length > 0) { if (rewriterPromises.length > 0) {
await Promise.all(rewriterPromises); await Promise.all(rewriterPromises);
} }
} }
reinforceSelectionSync(entity, selection, context, option, isAggr) { reinforceSelectionSync(entity, selection, context, option, isAggr) {
this.reinforceSelectionInner(entity, selection, context, isAggr); if (!isAggr) {
this.reinforceSelectionInner(entity, selection, context);
}
this.selectionRewriters.forEach(ele => { this.selectionRewriters.forEach(ele => {
const result = ele(this.getSchema(), entity, selection, context, option); const result = ele(this.getSchema(), entity, selection, context, option);
(0, assert_1.default)(!(result instanceof Promise)); (0, assert_1.default)(!(result instanceof Promise));
}); });
} }
reinforceSelectionInner(entity, selection, context, isAggr) { reinforceSelectionInner(entity, selection, context) {
const { filter, data, sorter } = selection; const { filter, data, sorter } = selection;
const assignNecessaryProjectionAttrs = (projectionNode, attrs) => { const assignNecessaryProjectionAttrs = (projectionNode, attrs) => {
attrs.forEach((attr) => { attrs.forEach((attr) => {
@ -294,10 +298,7 @@ class CascadeStore extends RowStore_1.RowStore {
} }
} }
}; };
if (!isAggr) { checkProjectionNode(entity, data);
// aggr的projetion不能改动
checkProjectionNode(entity, data);
}
if (!sorter && relevantIds.length === 0) { if (!sorter && relevantIds.length === 0) {
// 如果没有sorter就给予一个按createAt逆序的sorter // 如果没有sorter就给予一个按createAt逆序的sorter
Object.assign(selection, { Object.assign(selection, {

View File

@ -36,8 +36,9 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
option: Op, option: Op,
isAggr?: true) { isAggr?: true) {
if (!isAggr) {
this.reinforceSelectionInner(entity, selection, context, isAggr); this.reinforceSelectionInner(entity, selection, context);
}
const rewriterPromises = this.selectionRewriters.map( const rewriterPromises = this.selectionRewriters.map(
ele => ele(this.getSchema(), entity, selection, context, option, isAggr) ele => ele(this.getSchema(), entity, selection, context, option, isAggr)
@ -49,13 +50,15 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
} }
private reinforceSelectionSync<Cxt extends SyncContext<ED>, Op extends SelectOption>( private reinforceSelectionSync<Cxt extends SyncContext<ED>, Op extends SelectOption>(
entity: keyof ED, entity: keyof ED,
selection: ED[keyof ED]['Selection'], selection: ED[keyof ED]['Selection'],
context: Cxt, context: Cxt,
option: Op, option: Op,
isAggr?: true isAggr?: true
) { ) {
this.reinforceSelectionInner(entity, selection, context, isAggr); if (!isAggr) {
this.reinforceSelectionInner(entity, selection, context);
}
this.selectionRewriters.forEach( this.selectionRewriters.forEach(
ele => { ele => {
@ -69,7 +72,6 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
entity: keyof ED, entity: keyof ED,
selection: ED[keyof ED]['Selection'] | ED[keyof ED]['Aggregation'], selection: ED[keyof ED]['Selection'] | ED[keyof ED]['Aggregation'],
context: Cxt, context: Cxt,
isAggr?: true,
) { ) {
const { filter, data, sorter } = selection; const { filter, data, sorter } = selection;
@ -357,10 +359,7 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
} }
} }
}; };
if (!isAggr) { checkProjectionNode(entity, data);
// aggr的projetion不能改动
checkProjectionNode(entity, data);
}
if (!sorter && relevantIds.length === 0) { if (!sorter && relevantIds.length === 0) {
// 如果没有sorter就给予一个按createAt逆序的sorter // 如果没有sorter就给予一个按createAt逆序的sorter
@ -382,8 +381,8 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
} }
private async reinforceOperation<Cxt extends AsyncContext<ED>, Op extends OperateOption>( private async reinforceOperation<Cxt extends AsyncContext<ED>, Op extends OperateOption>(
entity: keyof ED, entity: keyof ED,
operation: ED[keyof ED]['Operation'], operation: ED[keyof ED]['Operation'],
context: Cxt, context: Cxt,
option: Op) { option: Op) {
await Promise.all(this.operationRewriters.map( await Promise.all(this.operationRewriters.map(
@ -420,7 +419,7 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
protected abstract countAsync<T extends keyof ED, OP extends SelectOption, Cxt extends AsyncContext<ED>>( protected abstract countAsync<T extends keyof ED, OP extends SelectOption, Cxt extends AsyncContext<ED>>(
entity: T, entity: T,
selection: Pick<ED[T]['Selection'], 'filter' | 'count'>, selection: Pick<ED[T]['Selection'], 'filter' | 'count'>,
context: Cxt, context: Cxt,
option: OP option: OP
): Promise<number>; ): Promise<number>;