generateSwitchBranchSql()
function generateSwitchBranchSql(adapter, branchId): string;
Defined in: packages/rxdb-adapter-sqlite-core/src/version/switch_branch.ts:119
生成切换分支的 SQL 语句(generateSwitchBranchStatements 拼成的一整段)。
Parameters
| Parameter | Type |
|---|---|
adapter | RxDBAdapterSqliteBase |
branchId | string |
Returns
string
Remarks
只适用于不读结果集的调用方:拼接会让第二条 RETURNING 的行在部分后端上收不回来,
理由见 generateSwitchBranchStatements。要行就逐条执行。 *
另一个后端有一份平行实现(packages/rxdb-adapter-pglite/src/version/switch_branch.ts)。
两端的机制已经一致(都是「先熄灭、后点亮」两条带 RETURNING 的 UPDATE,理由见上),
剩下的分歧只在语句收集协议:sqlite 侧交出语句数组(要行的调用方逐条执行,不要行的才用
join('') 的那个变体),pglite 侧交出一整段 ---STATEMENT_SEPARATOR--- 分隔的字符串。
合一的前提是先统一这个协议,而两个适配器互不依赖、公共层该落在哪个包本身未定——
与 version/switch-result.utils.ts 的判定是同一件事(那两份文件的 @fileoverview 里写了
「抽完只剩壳」的具体理由)。顺延记录见 requirements/roadmap.md 的「epic-006 评审顺延的架构项」。
在合一之前,这两条 UPDATE 的任何改动都必须两端同改:activeKey 的唯一索引是
「至多一条激活分支」的唯一机械保证(口径见 packages/rxdb/src/system/branch.ts),
而 RETURNING 少一条就意味着那一侧翻转过的行不进事件派发。