TL;DR
如果我们想在应用层屏蔽分表的实现,那基于 ORM 或者原生 SQL 可能会执行:
SELECT a.id, a.user_id, a.birthday FROM a WHERE a.user_id=12345 ORDER BY a.birthday;
实际上真实执行的 SQL 应该是:
SELECT a_0045.id, a_0045.user_id, a_0045.birthday FROM a_0045 WHERE a_0045.user_id=12345 ORDER BY a_0045.birthday;
请教各位 V 友有没有用过类似的基础组件,任何包或者工具平台都可以,输入是 SQL 文本,输出也是 SQL 文本(其实也不限定形式,其他的输入输出也没问题,可以自己看看代码,看看别人是怎么实现的)
背景
我们在之前的尝试中发现的一些问题 /需求:
-
尽可能覆盖多的 MySQL 语法;之前用过一些开源项目不会改写
SELECT xxxx FROM ...里面 SELECT 和 FROM 之间的内容,只改写了 WHERE 条件里的内容,换句话说就是改写得不够完整,可能又很多语法没有尝试解析,举例:- JOIN 查询没改写
- 子查询或类似的嵌套 SQL 没改写,或者改写不完整
如果有胖友用过好用的组件或者平台的话求安利,如果没有的话咱也考虑自己写一个试试,看看能覆盖到多少的语法,好用再开源出来。
这样的组件如果只是负责 SQL 改写,可以很方便适配不同的客户端,例如 Go 语言里面 MySQL 的 client 常见的有 GORM / XORM / database/sql 等等,先实现 SQL 改写,再实现不同 client 的扩展包应该就很简单而且兼容。