oak-db 更新日志
4.0.2 未发布(区间:4.0.1..HEAD)
- schema migration 不再输出数据库物理外键 SQL,
ref语义改由列注释中的oak_ref:元数据保存和反查;初始化阶段也不再单独补外键。 index.config.unique现在被视为 Oak 框架层语义,MySQL / PostgreSQL 建表和 migration 不再生成UNIQUE INDEXDDL;历史唯一索引会被规划为普通索引重建。- migration 计划补充引用注释、覆盖索引
include、浮点 / decimal 类型归一化、更保守的 rename candidate 判断,以及 nullable geometry 的方言差异处理。 - MySQL / PostgreSQL update expression 翻译补齐,支持
$case、布尔 /null常量、日期 floor / ceil 月年单位等;JSON / JSONB 属性中的普通对象不会再被误判为表达式。 Geo/SingleGeo字段补齐字段级过滤:$within、$contains、$intersects、$distance会分别翻译为 PostGIS / MySQL 空间函数,点数组会归一化为闭合 polygon。- decimal 读写边界收紧:数据库返回的 decimal / numeric 保留为字符串以避免精度丢失,decimal update 的直接赋值要求字符串或
$expr。 - PostgreSQL
money查询结果转换为整数,聚合和投影结果通过resultColumnMap映射避免长路径别名或特殊聚合键破坏结果回填。 - MySQL / PostgreSQL connector 增加
OAK_DB_LOG_SQL开关;MySQLdisconnect()会先回滚仍挂起的事务连接再关闭连接池。 - 新增 SQLite store 与 schema migration 支持,并把数据库驱动改为按需动态装载;安装检查只要求 MySQL、PostgreSQL、SQLite 中至少存在一个兼容驱动,消费端不使用的可选驱动不会被根入口强制加载。
- 驱动解析同时以
process.cwd()和 oak-db 自身目录为查找根。即使 oak-db 通过file:、workspace/link 或发布包安装,只要消费应用根安装了兼容的mysql2、pg或better-sqlite3,运行时就能解析;不要求驱动成为 oak-db 的直接依赖。 - XOR filter SQL、JSON path predicate、JSON boolean predicate、
unset带点字面量 key、translateCreateEntity结束分号等修复同步进存储层。 - 新增 VitePress 版 oak-db 使用指南,补充 query、aggregate、JSON、update expression、migration、方言边界和真实数据库测试覆盖。
主要 diff 文件:
src/sqlTranslator.ts、src/MySQL/*、src/PostgreSQL/*、src/migration.ts、src/utils/*、test/*、docs/*4.0.1(tag:4.0.1,区间:4.0.0..4.0.1)
升级注意
外键语义:如果项目以前依赖数据库物理外键兜底一致性,需要把约束迁移到 Oak checker / trigger,并确认引用字段索引足够支撑查询。升级后 ref 关系主要通过 Oak schema 和列注释元数据维持,不再通过数据库 FK 约束维持。
唯一索引语义:
index.config.unique 不再对应数据库唯一索引。需要硬性唯一约束的项目必须在 Oak checker 或业务规则里实现,否则历史数据库唯一索引在迁移收敛时可能被重建为普通索引。