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

时间:2013-01-01 07:29:07

标签: mysql lua mysql-proxy

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

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

如果选择查询嵌套在()中,则无效。例如:

(SELECT * from tbl_name);

有没有办法在mysql代理中删除extra()?

或者有更好的方法来检测选择查询吗?

2 个答案:

答案 0 :(得分:0)

我会尝试使用检测常见模式的String Library来编写规范化脚本,并用等效的规范化sql替换它们。

一个例子是你的产品,但也可以查询部件移动到哪里可以从中受益。

答案 1 :(得分:0)

查询实际上在括号内,而不是在字符串内?即使使用插件,这也不应该正确解析。如果它在字符串中,那么只需使用:sub(2, 7),但如果不是,则将其放在字符串中。创建一个基本上重现该函数的函数,除了将它放在一个字符串中,例如:

function mysqlQuery(mysqlString)
    loadstring(mysqlString)(); 
    return mysqlString;
end
mysqlQuery("SELECT * from tbl");