MySQL代理查询重写

我想用 SELECT COUNT(1) 代替所有的 SELECT COUNT(*) 查询(对于这个用例)。

我有以下的 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

我做错了什么?

原文链接 https://stackoverflow.com/questions/9296410

点赞
stackoverflow用户438753
stackoverflow用户438753

如果你在搜索字符串"COUNT(*)",请记住第二个参数是一个模式而不是一个简单的字符串,你可以使用以下方法转义该字符串:

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

在每个非字母数字字符 (%W) 前加一个 % 转义字符,其中 %% 是 % 转义字符,%1 是原始字符

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

所以

if string.match(string.upper(query), strPlainText('COUNT(*)')) then
2012-02-16 14:14:47