跳到主要内容

generateSwitchBranchSql()

function generateSwitchBranchSql(adapter, branchId): string;

Defined in: packages/rxdb-adapter-sqlite-core/src/version/switch_branch.ts:119

生成切换分支的 SQL 语句(generateSwitchBranchStatements 拼成的一整段)。

Parameters​

ParameterType
adapterRxDBAdapterSqliteBase
branchIdstring

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 少一条就意味着那一侧翻转过的行不进事件派发。