Skip to content

🐛 fix(metadata): 正确识别 SQLite 自增主键 - #106

Merged
ZhaoXingPeng merged 1 commit into
mainfrom
fix/105-sqlite-autoincrement
Sep 7, 2026
Merged

🐛 fix(metadata): 正确识别 SQLite 自增主键#106
ZhaoXingPeng merged 1 commit into
mainfrom
fix/105-sqlite-autoincrement

Conversation

@ZhaoXingPeng

Copy link
Copy Markdown
Owner

背景

SQLite 的 PRAGMA table_info 返回 INTEGER PRIMARY KEY AUTOINCREMENT 列的声明类型为 INTEGER,不会把 AUTOINCREMENT 放进 type 字段。当前元数据读取只检查 type,因此代码生成会丢失自增语义。

变更

  • 查询 sqlite_master 的表定义以识别 AUTOINCREMENT。
  • 只将包含 AUTOINCREMENT 的 INTEGER 主键标记为自增,普通主键保持原行为。
  • 使用参数绑定查询表名,保持 SQLite 标识符安全。
  • 增加真实 SQLite 回归测试。

验证

  • SQLite 元数据与跨数据库契约测试:14 passed。
  • 完整单元测试:650 passed。
  • Ruff 检查、格式检查和 diff 检查通过。

实验

创建 generated_ids (id INTEGER PRIMARY KEY AUTOINCREMENT, value TEXT) 后,修复前 id 的 auto_increment 为 false,修复后为 true;value 仍为 false。

风险与边界

仅补充 SQLite DDL 元数据读取,不改变其他数据库 SQL;未建立可比性能基准,性能数据未测量。

Closes #105

@ZhaoXingPeng

Copy link
Copy Markdown
Owner Author

问题复现:对 id INTEGER PRIMARY KEY AUTOINCREMENT 执行 PRAGMA table_info 只返回 type=INTEGER,原实现因此将 auto_increment 错误标记为 false。

@ZhaoXingPeng

Copy link
Copy Markdown
Owner Author

实现记录:新增 SQLite 表 DDL 查询,从 sqlite_master 读取并识别 AUTOINCREMENT;表名通过参数绑定,未引入 SQL 标识符拼接。

@ZhaoXingPeng

Copy link
Copy Markdown
Owner Author

行为对比:修复后自增 INTEGER 主键返回 auto_increment=true,普通 INTEGER 主键和非主键列仍返回 false。

@ZhaoXingPeng

Copy link
Copy Markdown
Owner Author

测试记录:新增真实 SQLite fixture;元数据和跨数据库契约测试 14 项通过,完整单元测试 650 项通过,Ruff 和 diff 检查通过。

@ZhaoXingPeng

Copy link
Copy Markdown
Owner Author

边界说明:SQLite 只在存在主键列时查询表 DDL,减少无关查询;本次未建立可比性能基准,性能数据未测量。

@ZhaoXingPeng
ZhaoXingPeng merged commit 9fa3ca6 into main Sep 7, 2026
6 of 10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🐛 fix(metadata): 正确识别 SQLite 自增主键

1 participant