我正在使用 lua 脚本 https://github.com/clofresh/mysql-proxy-cache来缓存选择查询。但是它检测 select 语句的方式存在问题。它使用以下代码
return query:sub(1,6):lower() == 'select'
如果选择查询嵌套在()
. 例子:
(SELECT * from tbl_name);
有没有办法在 mysql 代理中删除多余的 () ?
或者有没有更好的方法来检测选择查询?
我正在使用 lua 脚本 https://github.com/clofresh/mysql-proxy-cache来缓存选择查询。但是它检测 select 语句的方式存在问题。它使用以下代码
return query:sub(1,6):lower() == 'select'
如果选择查询嵌套在()
. 例子:
(SELECT * from tbl_name);
有没有办法在 mysql 代理中删除多余的 () ?
或者有没有更好的方法来检测选择查询?
查询实际上在括号内,而不是在字符串内?即使使用插件,它也不应该正确解析。如果它在字符串中,则只需使用:sub(2, 7)
,但是,如果不是,则将其放在字符串中。创建一个基本上重现该函数的函数,除了将它放在一个字符串中,例如:
function mysqlQuery(mysqlString)
loadstring(mysqlString)();
return mysqlString;
end
mysqlQuery("SELECT * from tbl");
我会尝试使用检测常见模式并用等效的规范化 sql 替换它们的字符串库编写规范化脚本。
一个例子是你的父母,但也可以查询零件被移动到哪里可以从中受益。