MySQL代理查询重写

时间:2012-02-15 15:43:23

标签: mysql lua mysql-proxy

我想用SELECT COUNT(*)更改所有SELECT COUNT(1)个查询(针对此用例)。

我有以下lua脚本,但它不能以某种方式工作:

function read_query( packet )
   if string.byte(packet) == proxy.COM_QUERY then
     local query = string.sub(packet, 2)
     local replacing = false
     if string.match(string.upper(query), 'COUNT(*)') then
         query = string.gsub(query,'COUNT(*)', 'COUNT(1)')
         replacing = true
     end
     if (replacing) then
         proxy.queries:append(1, string.char(proxy.COM_QUERY) .. query )
         return proxy.PROXY_SEND_QUERY
     end
   end
 end

我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果要搜索字符串“COUNT(*)”,请记住第二个参数是模式而不是简单字符串,您可以使用

来转义字符串

禁止正则表达式魔术字符^ $()%。[] * + - ?)

使用%转义字符前缀每个非字母数字字符(%W),其中%%是%转义符,%1是原始字符

function strPlainText(strText)
    return strText:gsub("(%W)","%%%1")
end

所以

if string.match(string.upper(query), strPlainText('COUNT(*)')) then