【问题标题】:MySQL Proxy Query RewritingMySQL 代理查询重写
【发布时间】:2012-02-15 15:43:23
【问题描述】:

我想用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

我做错了什么?

【问题讨论】:

    标签: mysql lua mysql-proxy


    【解决方案1】:

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

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

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

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

    所以

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

    【讨论】:

    • 对不起,它对我不起作用。但是这样做了:如果 string.lower(query) == 'select count(*) from mysql.user' then
    • 虽然这不能回答我原来的用例
    猜你喜欢
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2021-11-01
    • 2011-12-13
    相关资源
    最近更新 更多