Compare commits

..

No commits in common. "213ccf981c8500edf632440f31a4336bed121bea" and "cc40dfd72797621035e713d12f090a056dc50f6e" have entirely different histories.

3 changed files with 35 additions and 37 deletions

View File

@ -349,7 +349,7 @@ export class Cache extends Feature {
opers.forEach((oper) => {
const { entity, operation } = oper;
this.cacheStore.operate(entity, operation, this.context, {
checkerTypes: ['logical'],
checkerTypes: ['logical'], // 这里不能检查data不然在数据没填完前会有大量异常
dontCollect: true,
});
});

View File

@ -6,7 +6,6 @@ import { judgeRelation } from "oak-domain/lib/store/relation";
import { Feature } from '../types/Feature';
import { generateNewId } from 'oak-domain/lib/utils/uuid';
export const MODI_NEXT_PATH_SUFFIX = ':next';
const START_LSN = 100;
function mergeOperation(schema, entity, oper1, oper2) {
const { action, data } = oper2;
const operMerged = cloneDeep(oper1);
@ -91,7 +90,7 @@ class UpdateLogManager {
constructor(schema, entity, maxLsn) {
this.schema = schema,
this.entity = entity,
this.maxLsn = maxLsn || START_LSN;
this.maxLsn = maxLsn || 0;
}
/**
* 合并两个filter完全一致的更新
@ -166,7 +165,7 @@ class UpdateLogManager {
rollback(lsn) {
const newLogs = this.logs.filter(ele => ele.lsn <= lsn);
this.logs = newLogs;
this.maxLsn = lsn || START_LSN;
this.maxLsn = lsn;
}
makeOperations() {
const opers = {};
@ -1432,7 +1431,7 @@ class SingleNode extends Node {
saveRefreshResult(data) {
const ids = Object.keys(data);
assert(ids.length === 1);
this.setId(ids[0]);
this.id = ids[0];
this.sr = data[ids[0]];
this.passRsToChild();
// this.publish();
@ -1744,7 +1743,7 @@ export class RunningTree extends Feature {
this.nodeCountDict = {};
this.pageNodeStack = {};
this.singletonDict = {};
this.logSerailNumber = START_LSN;
this.logSerailNumber = 100;
}
increaseNodeCount(path) {
if (!this.nodeCountDict[path]) {

View File

@ -15,11 +15,10 @@ import { ActionDef } from '../types/Page';
import { generateNewId } from 'oak-domain/lib/utils/uuid';
export const MODI_NEXT_PATH_SUFFIX = ':next';
const START_LSN = 100;
type LegalOperation<ED extends EntityDict & BaseEntityDict, T extends keyof ED> = ED[T]['CreateSingle']
| ED[T]['Update']
| ED[T]['Remove'];
| ED[T]['Update']
| ED[T]['Remove'];
type UpdateLog<ED extends EntityDict & BaseEntityDict, T extends keyof ED> = {
lsn: number;
@ -27,7 +26,7 @@ type UpdateLog<ED extends EntityDict & BaseEntityDict, T extends keyof ED> = {
};
function mergeOperation<ED extends EntityDict & BaseEntityDict, T extends keyof ED>(
function mergeOperation<ED extends EntityDict & BaseEntityDict, T extends keyof ED> (
schema: StorageSchema<ED>,
entity: T,
oper1: LegalOperation<ED, T>,
@ -84,7 +83,7 @@ function mergeOperation<ED extends EntityDict & BaseEntityDict, T extends keyof
dataMerged[attr] = cloneDeep(data[attr]);
}
}
else if (typeof rel === 'string') {
else if (typeof rel === 'string') {
if (dataMerged[attr]) {
const merged = mergeOperation(
schema,
@ -117,7 +116,7 @@ function mergeOperation<ED extends EntityDict & BaseEntityDict, T extends keyof
}
}
return operMerged;
}
}
/**
*
*/
@ -130,8 +129,8 @@ class UpdateLogManager<ED extends EntityDict & BaseEntityDict, T extends keyof E
constructor(schema: StorageSchema<ED>, entity: T, maxLsn?: number) {
this.schema = schema,
this.entity = entity,
this.maxLsn = maxLsn || START_LSN;
this.entity = entity,
this.maxLsn = maxLsn || 0;
}
/**
* filter完全一致的更新
@ -214,7 +213,7 @@ class UpdateLogManager<ED extends EntityDict & BaseEntityDict, T extends keyof E
ele => ele.lsn <= lsn
);
this.logs = newLogs;
this.maxLsn = lsn || START_LSN;
this.maxLsn = lsn;
}
makeOperations() {
@ -982,7 +981,7 @@ class ListNode<
undefinedAttrs.push(k);
}
}
undefinedAttrs.forEach(
(attr) => unset(data, attr)
);
@ -1018,16 +1017,16 @@ class ListNode<
if (childOperations) {
childOperations.forEach(
(childOperation) => this.ulManager.push(ulmLsn + 100, childOperation.operation as any)
);
);
}
}
const operations = this.ulManager.makeOperations();
this.ulManager.rollback(ulmLsn);
return operations.map(
(operation) => {
const { filter, ...rest } = operation;
const { filter, ...rest} = operation;
return {
entity: this.entity,
operation: {
@ -1390,7 +1389,7 @@ class SingleNode<ED extends EntityDict & BaseEntityDict,
if (id !== this.id) {
const operations = this.ulManager.makeOperations();
assert(operations.length <= 1);
const [operation] = operations;
const [ operation ] = operations;
// 如果本身是create 这里无视就行(因为框架原因会调用一次)
if (operation?.action === 'create') {
if (operation.data.id === id) {
@ -1418,7 +1417,7 @@ class SingleNode<ED extends EntityDict & BaseEntityDict,
}
const operations = this.ulManager.makeOperations();
assert(operations.length <= 1);
const [operation] = operations;
const [ operation ] = operations;
if (operation && operation?.action === 'create') {
return operation.data.id;
}
@ -1507,14 +1506,14 @@ class SingleNode<ED extends EntityDict & BaseEntityDict,
(attr) => unset(data, attr)
);
this.ulManager.push(lsn, {
this.ulManager.push(lsn, {
action: action || 'update',
data,
filter: {
id: this.getId()!,
}
} as unknown as Omit<ED[T]['Operation'], "id">);
// 处理外键如果update的数据中有相应的外键其子对象上的动作应当被clean掉
// 并将sr传递到子组件上
@ -1545,7 +1544,7 @@ class SingleNode<ED extends EntityDict & BaseEntityDict,
action: 'remove',
data: {},
filter: {
id,
id,
}
} as unknown as Omit<ED[T]['Remove'], "id">);
@ -1559,7 +1558,7 @@ class SingleNode<ED extends EntityDict & BaseEntityDict,
action: 'update',
data: {},
filter: {
id,
id,
}
} as unknown as Omit<ED[T]['Update'], "id">);
super.setDirty();
@ -1580,7 +1579,7 @@ class SingleNode<ED extends EntityDict & BaseEntityDict,
assert(childOperations.length === 1);
this.ulManager.push(lsnMax + 100, {
action: 'update',
data: {
data: {
[ele2]: childOperations[0].operation,
},
filter: {
@ -1595,7 +1594,7 @@ class SingleNode<ED extends EntityDict & BaseEntityDict,
data: {
[ele2]: childOperations.map(
({ operation }) => operation
),
),
},
filter: {
id: this.getId(),
@ -1608,12 +1607,12 @@ class SingleNode<ED extends EntityDict & BaseEntityDict,
this.ulManager.rollback(lsnMax);
assert(operations.length <= 1);
const [operation] = operations;
const [ operation ] = operations;
if (operation) {
const { filter, ...rest } = operation;
const intrinsticFilter = this.getIntrinsticFilters();
return [
{
entity: this.entity,
@ -1729,7 +1728,7 @@ class SingleNode<ED extends EntityDict & BaseEntityDict,
saveRefreshResult(data: Record<string, any>) {
const ids = Object.keys(data);
assert(ids.length === 1);
this.setId(ids[0]);
this.id = ids[0];
this.sr = data[ids[0]!];
this.passRsToChild();
@ -1785,7 +1784,7 @@ class SingleNode<ED extends EntityDict & BaseEntityDict,
private getFilter(): ED[T]['Selection']['filter'] | undefined {
// 如果是新建等于没有filter
const [operation] = this.ulManager.makeOperations();
const [ operation ] = this.ulManager.makeOperations();
if (operation?.action === 'create') {
return;
}
@ -2023,7 +2022,7 @@ class VirtualNode<ED extends EntityDict & BaseEntityDict> extends Feature {
for (const ele in this.children) {
this.children[ele].clean(lsn, dontPublish);
}
if (!lsn) {
this.dirty = false;
}
@ -2108,7 +2107,7 @@ export class RunningTree<ED extends EntityDict & BaseEntityDict> extends Feature
this.nodeCountDict = {};
this.pageNodeStack = {};
this.singletonDict = {};
this.logSerailNumber = START_LSN;
this.logSerailNumber = 100;
}
private increaseNodeCount(path: string) {
@ -2800,10 +2799,10 @@ export class RunningTree<ED extends EntityDict & BaseEntityDict> extends Feature
throw err;
}
}
savePoint() {
const lsn = this.logSerailNumber;
this.logSerailNumber++;
this.logSerailNumber ++;
return lsn;
}
@ -2813,7 +2812,7 @@ export class RunningTree<ED extends EntityDict & BaseEntityDict> extends Feature
* @param lsn savepoint
* @param dontPublish
*/
clean(path: string, lsn?: number, dontPublish?: true) {
clean(path: string, lsn?:number, dontPublish?: true) {
const node = this.findNode(path)!;
node.clean(lsn, dontPublish);