3

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

私は何を間違っていますか?

4

1 に答える 1

1

文字列「COUNT(*)」を検索する場合、2 番目のパラメーターは単純な文字列ではなくパターンであることを思い出してください。

正規表現のマジック文字を禁止する ^$()%.[]*+-?)

すべての英数字以外の文字 (%W) の前に % エスケープ文字を付けます。ここで、%% は % エスケープ、%1 は元の文字です。

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

それで

if string.match(string.upper(query), strPlainText('COUNT(*)')) then
于 2012-02-16T14:14:47.237 に答える