MySQL代理检测选择查询的更好方法

我正在使用lua脚本https://github.com/clofresh/mysql-proxy-cache来缓存select查询。 但是它检测select语句的方式存在问题。 它使用以下代码

return query:sub(1,6):lower() == 'select'

如果select查询嵌套在()中,这将无效。例如:

(SELECT * from tbl_name);

有没有办法在mysql代理中删除额外的()

或者有更好的检测select查询的方法吗?

点赞
用户296452
用户296452

我会尝试编写一个规范化脚本,使用 String 库,以检测常见模式并将它们替换为等效的规范化 SQL。

一个例子是你的括号,以及 where 部分已被移动的查询也会受益于此。

2013-01-01 08:27:00
用户1938309
用户1938309

问题:查询实际上在括号内,而不是字符串内?即使使用插件,也不能正确解析。如果它是在字符串中,则只需使用:sub(2, 7),但是如果不是,则将其放在字符串中。创建一个函数,基本上复制该函数,只是将其放在字符串中,例如:

function mysqlQuery(mysqlString)
    loadstring(mysqlString)();
    return mysqlString;
end
mysqlQuery("SELECT * from tbl");
2013-01-01 16:19:41