跳到主要内容

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​

ParameterTypeDescription
optionsCountOptions<typeof RxDBBranch, RxDBBranchRuleGroup>查询选项

Returns​

Observable<number>


find​

static find: (options) => Observable<RxDBBranch[]>;

Defined in: packages/rxdb/src/system/branch.ts:216

find 查询

Parameters​

ParameterTypeDescription
optionsFindOptions<typeof RxDBBranch, RxDBBranchRuleGroup, RxDBBranchOrderByField>查询选项

Returns​

Observable<RxDBBranch[]>


findAll​

static findAll: (options) => Observable<RxDBBranch[]>;

Defined in: packages/rxdb/src/system/branch.ts:223

findAll 查询

Parameters​

ParameterTypeDescription
optionsFindAllOptions<typeof RxDBBranch, RxDBBranchRuleGroup, RxDBBranchOrderByField>查询选项

Returns​

Observable<RxDBBranch[]>


findByCursor​

static findByCursor: (options) => Observable<RxDBBranch[]>;

Defined in: packages/rxdb/src/system/branch.ts:230

findByCursor 查询

Parameters​

ParameterTypeDescription
optionsFindByCursorOptions<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​

ParameterTypeDescription
optionsFindOneOptions<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​

ParameterTypeDescription
optionsFindOneOrFailOptions<typeof RxDBBranch, RxDBBranchRuleGroup, RxDBBranchOrderByField>查询选项

Returns​

Observable<RxDBBranch>


get​

static get: (options) => Observable<RxDBBranch>;

Defined in: packages/rxdb/src/system/branch.ts:251

get 查询

Parameters​

ParameterTypeDescription
optionsstring查询选项

Returns​

Observable<RxDBBranch>