记录当前Git开发基线、Kingbase真实表结构、培训数据与权限状态。 补充数据库与代码差异、只读兼容性验证及PRD V1.0核心对象映射,未包含业务代码或数据库修改。
6.6 KiB
Kingbase 只读兼容性核验
1. 核验边界与方法
本报告针对当前项目实际连接的 Kingbase 实例执行只读探测。连接复用现有数据源配置,通过项目已有 Kingbase JDBC 驱动建立;事务设置为只读,全部业务探测均使用 SELECT、SHOW 或系统目录查询,结束时执行回滚并关闭连接。未执行任何 DDL、DML、迁移或生成键写入测试,也未在报告中记录连接密码。
当前环境证据:
| 项目 | 实际结果 |
|---|---|
| 数据库产品 | KingbaseES V009R003C018 |
| JDBC 驱动 | Kingbase8 JDBC Driver V008R006B0001;Maven 依赖版本 8.6.0 |
| database | training |
| schema | public |
database_mode |
mysql |
| 服务端兼容基线 | server_version 返回 12.1 |
| 简单 SELECT | 正常 |
2. 指定语法的实测结果
| 探测项 | 无副作用测试形式 | 实际结果 | 分类 | 对当前代码的含义 |
|---|---|---|---|---|
date_format |
对固定 timestamp 格式化为 %Y%m%d |
返回 20260102 |
兼容模式支持 | 若依 Mapper 中同类写法可被当前实例解析 |
ifnull |
ifnull(null,'fallback') |
返回 fallback |
兼容模式支持 | 当前 Mapper 中的空值表达式可被解析 |
find_in_set |
find_in_set('2','1,2,3') |
返回 2 | 兼容模式支持 | 若依数据权限中同类表达式具备语法基础 |
current_database() |
查询当前数据库 | 返回 training |
当前实例直接支持 | 函数本身可用,但不能代替当前 schema,见第4节 |
sysdate() |
查询当前时间 | 返回 timestamp | 兼容模式支持 | MySQL 风格当前时间函数可用 |
LIMIT 1 OFFSET 1 |
常规分页 SELECT | 正常返回 | 当前实例直接支持 | PostgreSQL/Kingbase 风格分页可用 |
LIMIT 0,1 |
MySQL 风格分页 SELECT | 正常返回 | 兼容模式支持 | 当前 PageHelper helperDialect=mysql 具备语法基础 |
SELECT 1 FROM dual |
数据源校验形式 | 返回 1 | 兼容模式支持 | 当前 Druid validation query 可用 |
| 反引号标识符 | 使用反引号访问 public.sys_menu 字段 |
正常返回 | 兼容模式支持 | 代码生成器中的反引号可被当前实例解析 |
本次明确列出的 MySQL 语法探测均通过。结论只适用于当前 database_mode=mysql 实例,不能据此推断其他 Kingbase 实例或其他兼容模式也会通过。
3. PageHelper 分页判断
配置依据:
ruoyi-admin/src/main/resources/application.yml中 PageHelper 使用helperDialect: mysql。- 当前实例能够执行
LIMIT offset,row_count,所以 PageHelper 常见的 MySQL 分页尾句在语法层面可用。
只读测试没有启动完整 Web 请求链,也没有核对每一种复杂 Mapper SQL 经 PageHelper 改写后的结果。当前可判定为“分页基础语法兼容”,完整插件行为仍需后续集成测试。
4. 已确认的应用级兼容冲突
4.1 代码生成器把 database 当作 schema
当前代码生成器在信息模式查询中使用:
table_schema = current_database()
当前 current_database() 是 training,实际业务表 schema 是 public。只读核验结果:
- 按当前生成器条件查询:0 张表;
publicschema 实际有 46 张表;public.train_teacher实际有 12个字段,按当前生成器条件查询为0个字段。
因此这不是 SQL 函数不支持,而是 database 与 schema 语义被混用。当前代码生成模块无法依靠这组查询正确发现实际表结构,数据库 V2 前必须明确处理。
相关文件:
ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xmlruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
4.2 sys_* 名称与 Kingbase 系统视图冲突
当前隐式 schema 搜索顺序为:
sys, pg_catalog, sys_catalog, public
sys_catalog 中存在 sys_user、sys_role、sys_config 系统视图,public 中同时存在若依同名业务表。当前若依 Mapper 普遍使用未限定 schema 的表名。只读探测显示:
- 未限定的
sys_user.user_id查询失败,命中了系统视图; - 未限定的
sys_role.role_id查询失败,命中了系统视图; - 未限定的
sys_config.config_id查询失败,命中了系统视图; - 显式访问
public.sys_user、public.sys_role、public.sys_config时结构可正常读取。
因此若依登录、角色和配置等核心 Mapper 当前具备真实运行阻塞。该问题不能由“数据库支持 MySQL 函数”这一结论覆盖。
相关文件:
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xmlruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xmlruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
5. generated keys 与 identity/sequence
当前6张数字主键业务表的主键实际为 bigint GENERATED BY DEFAULT AS IDENTITY,数据库目录能够识别对应内部 sequence。JDBC 元数据结果:
IS_AUTOINCREMENT=YES;- 驱动声明
supportsGetGeneratedKeys=true。
这说明 MyBatis useGeneratedKeys 具备数据库和驱动基础条件。由于实际插入会修改数据,本阶段没有执行 INSERT,也不能确认所有 Mapper 的生成键回填行为。该项分类为“基础条件满足,完整行为无法只读确认”。
6. 分类结论
当前实例直接支持
current_database();LIMIT ... OFFSET ...;- 标准只读事务与系统目录查询;
- identity/sequence 元数据读取。
兼容模式支持
date_format;ifnull;find_in_set;sysdate();- MySQL 风格
LIMIT offset,row_count; DUAL;- 反引号标识符。
明确不支持
本次指定且可安全执行的语法项中,没有发现当前实例明确不支持的项。
无法只读确认
- MyBatis 在真实 INSERT 场景中的 generated keys 回填;
- PageHelper 对全部复杂 Mapper SQL 的改写和计数行为;
- 触发器、批量写入、导入导出等写链路的完整兼容性。
已确认但不属于语法缺失的问题
- 代码生成器以
current_database()过滤table_schema,当前返回空结果; - 未限定 schema 的若依
sys_*Mapper 命中 Kingbase 系统视图,核心账号与权限查询会失败。
7. Phase 0判断
当前 Kingbase MySQL 兼容模式覆盖了项目已识别的主要 MySQL 函数和分页形式,但项目不能据此视为“已完成 Kingbase 适配”。数据库 V2 前应先确定 schema 解析策略、系统表访问策略和生成键集成验证方案;本报告只记录现状,不提出或实施源码、配置、数据库结构修复。