Skip to content

OpenFicM 0.10.2

Choose a tag to compare

@tioners tioners released this 01 Oct 18:51
· 3 commits to main since this release

OpenFicM 0.10.2

修复:删掉参考书后,它的参考文风没有被一起删掉

症状是文风选择器里出现多条同名参考文风,其中几条的来源写着“参考书已删除”。它们不是同一本书的 V1/V2/V3,而是失去了参考书的孤儿文风——参考书删了,文风却留在了库里。

根因在数据库层:style_profiles.source_id 声明了 ON DELETE CASCADE,但 expo-sqlite 的 withExclusiveTransactionAsync 会新开一条连接执行事务(useNewConnection: true),而 PRAGMA foreign_keys 是连接级开关、SQLite 默认为关闭,应用只在主连接上打开过它。于是独占事务里的 ON DELETE CASCADE 与 ON DELETE SET NULL 全部不生效:

操作 本应发生 实际发生
删除参考书 它的参考文风一并删除 文风留下成为孤儿,且界面上再也删不掉
删除章节 草稿删除,笔记上浮到卷 草稿与笔记的 chapter_id 都悬空
删除卷 章节删除,笔记上浮到整书 章节与笔记都留下
删除作品 卷、章节、草稿、笔记、角色、世界书、对话、向量块、作者文风全部删除 全部留下成为孤儿

本版处理这个根因带来的全部后果:

  • 启动时做一次幂等的一致性修复:清掉孤儿文风、章节、草稿、笔记、角色、世界书条目、对话、消息、向量块;笔记按设计上浮(章没了归到卷、卷没了归到整书);悬空引用置空;“明确不使用文风”的哨兵值保留,不会因此重新弹出选文风询问。
  • 依赖级联的删除改为显式删除,不再依赖外键开关:删参考书、删作品、删卷、删章节、删文风都在同一事务里显式处理各自的子表。
  • 清理顺序为先父级、后按“父不存在”清理子级,一次启动即可收敛,不留二级孤儿。
  • 设计与交接文档记录这条陷阱:独占事务里外键不生效,级联关系必须显式写出。

兼容性

  • 沿用 0.7.0 起的正式签名证书,可直接覆盖升级。
  • applicationId com.openfic.mobile,versionCode 20,minSdk 28,仅 arm64-v8a。
  • 升级后首次启动会清理历史孤儿数据(父记录已不存在的行);正常数据、参考文风指南文本、笔记内容、对话记录都不受影响。
  • 已在 0.10.1 里加的文风选择器来源/轮次/预览提示保留,用于继续辨认同名参考文风。