RxDBBranch
Defined in: packages/rxdb/src/system/branch.ts:129
分支表
记录当前分支的信息,包括是否激活、是否本地分支、是否远程分支等
Remarks
下面的 parent / children 是自引用关系,不是树实体声明——分支刻意用 @Entity
而非 @TreeEntity。parentId 列由 parent 这条 MANY_TO_ONE 产生,与树能力无关。
不用树查询是因为用了会错:递归 CTE 碰到断链、成环只会静默截断,返回一棵少了枝干的树
而不是报错,也给不出有序路径和逐段的 fromChangeId 区间。分支的父链遍历一律手写
(getPathToRoot / collectBranchChain / sync_branches / remove_branch),
各自带着坏数据检测。别把 @TreeEntity 装回来。
activeKey 是 activated 的第二份拷贝(口径恒为 activated ? '*active*' : null),
它存在的唯一理由是让「同时只有一条分支是激活的」成为一条唯一约束——布尔列上没法表达
「只许一个 true」,而 unique + nullable 的哨兵列可以。代价是这个不变量由约十处生产写点
手工共写(RxDB.ts 的建库初始行、system-repositories.ts、active-branch-guard.ts,
以及 pglite / sqlite-core 两个适配器的 migrate 与 switch SQL 路径),每一处都带着
「漏写一处就绕过唯一约束」的注释——也就是说不变量靠人守,不是机械保证的。
真正的修法是让约束由 schema 表达:activeKey 改成生成列(GENERATED ALWAYS AS),
或者干脆去掉它、在 activated 上建部分唯一索引(WHERE activated)。两种都只需一处编码。
没做是因为它要动六个适配器的 system schema 迁移、并给既有库写迁移步骤;只改写点不改 schema
等于把十处手写换成十处调用,不变量仍然靠人守。顺延记录见 requirements/roadmap.md
的「epic-006 评审顺延的架构项」。
Constructors
Constructor
new RxDBBranch(): RxDBBranch;
Returns
RxDBBranch
Properties
activated
activated: boolean;
Defined in: packages/rxdb/src/system/branch.ts:148
是否激活
activeKey?
optional activeKey?: string | null;
Defined in: packages/rxdb/src/system/branch.ts:163
active 哨兵键:本分支是 active 时为 ACTIVE_BRANCH_KEY,否则为 null
Remarks
唯一约束 + NULL 不参与唯一比较 = 全库至多一条 active 分支。这条约束只有 schema
拦得住:运行期守卫再严,也只能在两行都写进去之后才发现,而那时「当前分支是谁」
已经没有答案了。
它不是第二份 active 分支 id。真相仍然只有 activated 一列,本列存的是一个与任何
分支 id 都不相同的常量哨兵——存 id 会让同一个事实有两份写法,二者漂移时无法判定谁对。
因此每一处写 activated 的地方都必须同时写本列,两列必须同进同出。
changes$
changes$: RelationEntitiesObservable<typeof RxDBChange>;
Defined in: packages/rxdb/src/system/branch.ts:195
变更
children$
children$: RelationEntitiesObservable<typeof RxDBBranch>;
Defined in: packages/rxdb/src/system/branch.ts:205
子分支
createdAt?
optional createdAt?: Date | null;
Defined in: packages/rxdb/src/system/branch.ts:179
创建时间
Default
new Date()
fromChangeId?
optional fromChangeId?: number | null;
Defined in: packages/rxdb/src/system/branch.ts:173
来源变更 ID
id
id: string;
Defined in: packages/rxdb/src/system/branch.ts:134
id
local
local: boolean;
Defined in: packages/rxdb/src/system/branch.ts:138
本地分支
parent$
parent$: RelationEntityObservable<typeof RxDBBranch>;
Defined in: packages/rxdb/src/system/branch.ts:190
父分支
parentId?
optional parentId?: string | null;
Defined in: packages/rxdb/src/system/branch.ts:168
父分支 ID
remote
remote: boolean;
Defined in: packages/rxdb/src/system/branch.ts:143
线上已有分支
remove
remove: () => Promise<RxDBBranch>;
Defined in: packages/rxdb/src/system/branch.ts:256
删除
Returns
Promise<RxDBBranch>
reset
reset: () => void;
Defined in: packages/rxdb/src/system/branch.ts:260
重置数据
Returns
void
save
save: () => Promise<RxDBBranch>;
Defined in: packages/rxdb/src/system/branch.ts:264
保存
Returns
Promise<RxDBBranch>
syncs$
syncs$: RelationEntitiesObservable<typeof RxDBSync>;
Defined in: packages/rxdb/src/system/branch.ts:200
syncs - 此分支的 Repository 同步记录
updatedAt?
optional updatedAt?: Date | null;
Defined in: packages/rxdb/src/system/branch.ts:185
更新时间
Default
new Date()
[ENTITY_STATIC_TYPES]
static [ENTITY_STATIC_TYPES]: RxDBBranchStaticTypes;
Defined in: packages/rxdb/src/system/branch.ts:130
count
static count: (options) => Observable<number>;
Defined in: packages/rxdb/src/system/branch.ts:211
count 查询
Parameters
| Parameter | Type | Description |
|---|---|---|
options | CountOptions<typeof RxDBBranch, RxDBBranchRuleGroup> | 查询选项 |
Returns
Observable<number>
find
static find: (options) => Observable<RxDBBranch[]>;
Defined in: packages/rxdb/src/system/branch.ts:216
find 查询
Parameters
| Parameter | Type | Description |
|---|---|---|
options | FindOptions<typeof RxDBBranch, RxDBBranchRuleGroup, RxDBBranchOrderByField> | 查询选项 |
Returns
Observable<RxDBBranch[]>
findAll
static findAll: (options) => Observable<RxDBBranch[]>;
Defined in: packages/rxdb/src/system/branch.ts:223
findAll 查询
Parameters
| Parameter | Type | Description |
|---|---|---|
options | FindAllOptions<typeof RxDBBranch, RxDBBranchRuleGroup, RxDBBranchOrderByField> | 查询选项 |
Returns
Observable<RxDBBranch[]>
findByCursor
static findByCursor: (options) => Observable<RxDBBranch[]>;
Defined in: packages/rxdb/src/system/branch.ts:230
findByCursor 查询
Parameters
| Parameter | Type | Description |
|---|---|---|
options | FindByCursorOptions<typeof RxDBBranch, RxDBBranchRuleGroup, RxDBBranchOrderByField> | 查询选项 |
Returns
Observable<RxDBBranch[]>
findOne
static findOne: (options) => Observable<RxDBBranch | null>;
Defined in: packages/rxdb/src/system/branch.ts:237
findOne 查询
Parameters
| Parameter | Type | Description |
|---|---|---|
options | FindOneOptions<typeof RxDBBranch, RxDBBranchRuleGroup, RxDBBranchOrderByField> | 查询选项 |
Returns
Observable<RxDBBranch | null>
findOneOrFail
static findOneOrFail: (options) => Observable<RxDBBranch>;
Defined in: packages/rxdb/src/system/branch.ts:244
findOneOrFail 查询
Parameters
| Parameter | Type | Description |
|---|---|---|
options | FindOneOrFailOptions<typeof RxDBBranch, RxDBBranchRuleGroup, RxDBBranchOrderByField> | 查询选项 |
Returns
Observable<RxDBBranch>
get
static get: (options) => Observable<RxDBBranch>;
Defined in: packages/rxdb/src/system/branch.ts:251
get 查询
Parameters
| Parameter | Type | Description |
|---|---|---|
options | string | 查询选项 |
Returns
Observable<RxDBBranch>