2014-01-30 2 views
1

У меня есть сервер MYSQL и MYSQL-PROXY, и я пытаюсь манипулировать результатами, которые я отправляю клиенту в ответ на запрос SELECT. Я написал этот код в lua:манипуляция с результатом в mysql-proxy

function string.starts(String,Start) 
    return string.sub(String,1,string.len(Start))==Start 
end 

function read_query_result(inj) 
     local fn = 1 
     local fields = inj.resultset.fields 
     while fields[fn] do 
      fn = fn + 1 
     end 
     fn = fn - 1 
     print("FIELD NUMBER: " .. fn) 
     for row in inj.resultset.rows do 
      print ("--------------") 
      for i = 1, fn do 
       if (string.starts(fields[i].name,"TEST")) then 
        row[i]="TESTED" 
       end 
       print ("DATA: " .. fields[i].name .. " -> " .. row[i]) 
      end 
     end 
     return proxy.PROXY_SEND_RESULT 
end 

Я могу правильно прочитать имена и значения полей. Я могу обнаружить условие, в котором я хочу, чтобы результат был изменен, но я не могу получить данные, отправленные клиенту.

Я вижу две проблемы:

  • Я устанавливаю значение в локальной переменной строки, но я не нашел способ, чтобы установить реальный результирующий (inj.Resultset.row [I] или что-то подобное).
  • Что-то не так с return proxy.PROXY_SEND_RESULT, потому что я вижу, что всякий раз, когда я прокомментирую это предложение, я вижу результаты, и если я раскомментирую его, я получаю сообщение об ошибке.

Я не нашел пример кода в качестве ссылки.

ответ

0

Хорошо. Решаемые.

  • данные должны быть вставлены в таблице
  • PROXY_SEND_RESULT требует proxy.response.type быть установлено.

Это правильный модуль:

function read_query_result(inj) 
     local fn = 1 
     local fields = inj.resultset.fields 
     proxy.response.resultset = {fields = {}, rows = {}} 
     while fields[fn] do 
      table.insert(proxy.response.resultset.fields, {type = proxy.MYSQL_TYPE_STRING, name = fields[fn].name}) 
      fn = fn + 1 
     end 
     fn = fn - 1 
     for row in inj.resultset.rows do 
      for i = 1, fn do 
       if (string.starts(fields[i].name,"TEST")) then 
        row[i]="TESTED" 
       end 
      end 
      table.insert(proxy.response.resultset.rows, row) 
     end 
     proxy.response.type = proxy.MYSQLD_PACKET_OK 
     return proxy.PROXY_SEND_RESULT 
end