Spec-Zone .ru
спецификации, руководства, описания, API

15.7.4.7. Управление Запросами с read_query()

read_query() функция вызывается однажды для каждого запроса, представленного клиентом, и принимает единственный параметр, пакет запроса, который был обеспечен. Чтобы получить доступ к контенту пакета, следует проанализировать пакетное содержание вручную.

Например, можно прервать пакет запроса и распечатать содержание, используя следующее функциональное определение:

function read_query( packet )        if packet:byte() == proxy.COM_QUERY then                print("we got a normal query: " .. packet:sub(2))        endend

Этот пример проверяет первый байт пакета, чтобы определить тип. Если тип COM_QUERY (см. Константы Команды Сервера), мы извлекаем запрос из пакета и печатаем это. Структура пакетного предоставленного типа важна. В случае a COM_QUERY пакет, остающееся содержание пакета является текстом строки запроса. В этом примере никакие изменения не были произведены в запросе или списке запросов, которые будут в конечном счете отправлены серверу MySQL.

Чтобы изменить запрос, или добавить новые запросы, следует заполнить очередь запроса (proxy.queries), затем выполните запросы, которые Вы поместили в очередь. Если Вы не изменяете исходный запрос или очередь, запрос, полученный от клиента, отправляется серверу MySQL дословно.

Добавляя запросы к очереди, следует следовать за этими направляющими линиями:

Обычно, read_query() и read_query_result() функция используется в соединении друг с другом, чтобы ввести дополнительные запросы и удалить дополнительные наборы результатов. Однако, read_query_result() только вызывается, если Вы заполняете очередь запроса в пределах read_query().