WorkingTreeCaptureBatch
Defined in: packages/rxdb-plugin-working-tree/src/working-tree/capture-runtime.ts:269
一批变更共用的捕获上下文
Remarks
批级的意义只有一个:同一个事务里,读两遍的东西只读一遍。
- 令牌(active 分支 + activation revision)两个字段来自两张表,逐变更重读一次就是每条变更 2 次查询。同事务里的第二次读只可能读回第一次那个值——token 校验要拦的是「另一个 realm 在 期间切过分支」,而那种切换要么在本事务开始前已经提交(第一次读就看得见),要么在本事务提交前 落不了地(本事务正持着工作树行的写锁)。
- 状态行只在第一次
bumpWorkingTreeRevision()时读出来,此后在内存里累加, 由 WorkingTreeCaptureBatch.flush 一次写回。中间态的workingTreeRevision在事务内 无人可读,可观测的只有提交后的终值,而终值与逐条读改写逐字相同。
一条都没捕获时一次查询都不发:untracked 域整批被挡掉是常态,那种批次不该为了
「先把状态行读出来备用」付一次 IO。
Methods
flush()
flush(): Promise<void>;
Defined in: packages/rxdb-plugin-working-tree/src/working-tree/capture-runtime.ts:289
把本批攒下的 workingTreeRevision / entryCount 一次写回状态行
Returns
Promise<void>
Remarks
没有任何一条变更走过 bumpWorkingTreeRevision() 时不发语句。必须在同一个事务里调用,
且排在全部条目落盘之后:反过来的话,条目写失败时 revision 已经 +1,而它是 commit 的 CAS 依据。
portFor()
portFor(key): WorkingTreeCapturePort;
Defined in: packages/rxdb-plugin-working-tree/src/working-tree/capture-runtime.ts:280
为这一批里的一条变更造端口
Parameters
| Parameter | Type | Description |
|---|---|---|
key | WorkingTreeEntryKey | 这条变更的实体身份 |
Returns
绑在该身份上的端口
Remarks
每条变更各造一个,不按身份复用:同一实体在一批里连写两次时,第二次必须重新读一遍既有行—— 它要读的正是第一次刚落下去的那一行。