Mycat2 icon indicating copy to clipboard operation
Mycat2 copied to clipboard

一种针对sql的匹配器,主要是mysql,但完备情况上不限sql方言

Open junwen12221 opened this issue 5 years ago • 0 comments

一种针对sql的匹配器,主要是mysql,但完备情况上不限sql方言 1.支持sql词法,主要是mysql 2.支持多语句,以;分隔的多个sql的字符串,匹配模式中的;原则上不影响多语句中每个sql的匹配,如果不支持这个特性,那意味着每个匹配模式都要写两个版本,一个带;一个不带 3.一个匹配模式对应一个sql 4.支持通配符 {xx}是字符串捕获,在匹配模式中select id from {xxxx} 可以对应select id from travelrecord 或者 select id from travelrecord where id = 1; 此时xxx是travelrecord 或者travelrecord where id = 1 5.支持?词法单元捕获,参考预处理的匹配模式,此单元原则上就是mysql词法单元的一个字面量,对应数值类型,字符等,而不是1+1(表达式)这类的非字面量 6.支持匹配条件,比如 id = 1 or user = 1或者 id = 1 and user = 1可以提供一种模式语法提取逻辑运算符,例如 id = 1 #{condition } user = 1 7.支持按表名分组匹配,提取表名 8.支持按字段分组匹配 9.高性能,sql的长度可能是很长的,对于一些常用sql可以瞬速预判,然后走特定的匹配场景 10.输出结果应该是带有原sql的下标的,方便改写 11.支持byte基本的解析,无需转成String再匹配,byte是按照utf8编码的 12.支持中文 13.sql注释可以开启可以提取也是很重要 14.动态更新 15.检查到匹配模式有冲突在启动时候给与提示 上述功能不要求全部实现,尽可能实现即可

junwen12221 avatar Mar 03 '20 10:03 junwen12221