Переписывание запросов MySQL Proxy - PullRequest
3 голосов
/ 15 февраля 2012

Я хотел бы изменить все 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 Ответ

1 голос
/ 16 февраля 2012

Если вы ищете строку «COUNT (*)», помните, что второй параметр - это шаблон, а не простая строка, вы можете экранировать строку, используя

Запретить магические символы регулярного выражения ^ $ ()%. [] * + -?)

Префикс каждого не алфавитно-цифрового символа (% W) с escape-символом%, где %% - escape-символ%, а% 1 - оригинальный символ

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

так

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