VersionedDomainView
Defined in: packages/rxdb-plugin-working-tree/src/working-tree/versioned-domain.ts:112
版本化域在表 / 列平面上的投影,也就是 raw 写判定消费的那个端口
Remarks
成员刻意只有两个:raw 判定拿到的是一条 SQL,它认得的只有表名和列名,不认得实体名, 更不认得「QueryCache」这个概念——它只看表在不在集合里。端口开宽了,判定就会开始按实体 语义分支,于是同一件事在实体平面与表平面各有一套判据。
Extended by
Properties
versionedTables
readonly versionedTables: ReadonlySet<string>;
Defined in: packages/rxdb-plugin-working-tree/src/working-tree/versioned-domain.ts:130
全部 tracked 实体的可寻址表名集合,小写、无引号、无点号 schema 限定
Remarks
放实体名的话,UPDATE post 永远命不中 Post,整条 raw 防线静默失效。
名字来自适配器(VersionedDomainEntityInput.physicalTableNames),一张表通常有两个:
逻辑表名(post)与 SQLite 家族折叠命名空间之后的物理表名(public$post)。两个都要,
因为 6 个 v1 后端分两种物理形态——PGlite 有真 schema,表引用是 "public"."post",判定切掉
点号限定之后回到 post;另外 5 个 SQLite 家族后端没有 schema,命名空间被折进名字本身,
而那是它们唯一能用的表名。只登记逻辑名的话,raw 门禁在 5/6 的后端上整条失效:用户用后端
唯一可用的表名就能把版本化业务表写穿,捕获链一无所知,冷重放从此对不上。
登记别名而不是让判定按 $ 切一刀:_fts_public$post(rxdb-plugin-search 的影子表,
spec.md 明列的域外目标)切完正好等于 post,于是一条本该放行的写开始报错。
判定那一侧继续只做集合成员判定,多一种物理形态由写表的那个适配器多报一个名字。
Methods
untrackedFieldsOf()
untrackedFieldsOf(table): ReadonlySet<string>;
Defined in: packages/rxdb-plugin-working-tree/src/working-tree/versioned-domain.ts:138
取某张表上不构成业务净变化的列集合
Parameters
| Parameter | Type | Description |
|---|---|---|
table | string | 表名;大小写不敏感 |
Returns
ReadonlySet<string>
该表的全域簿记字段 ∪ 它自己登记的派生索引列