kakserpom / phpdaemon

Asynchronous server-side framework for network applications implemented in PHP using libevent
http://daemon.io/
GNU Lesser General Public License v3.0
1.53k stars 231 forks source link

Возможно поправил выдачу результатов после выполнение мультизапроса в Mysql Connection #212

Closed westtrade closed 8 years ago

westtrade commented 9 years ago

Если выполнить SQL запрос


SELECT "query_1" as query; SELECT "query_2" as query; SELECT "query_2" as query;

То в resultRows в текущей версии получится только результат первого запроса

[
 ['query' => 'query_1']
]

Для исправления была внесена правка в /PHPDaemon/Clients/MySQL/Connection.php:503


                if ($this->rsState === self::RS_STATE_ROW) {
                                        if ($this->bev->input->length <= 4) {
                                            $this->onResultDone();
                                        } else {
                                            $this->resultFields = [];
                                        }
                }
                else {
                    ++$this->rsState;
                }

Она позволяет получать полный результат мультизапроса в resultRows для SELECT'a. При этом все равно будет происходить замещение результатов affectedRows и insertId, так же возможно имеет смысл внесения изменений на возврат ошибки в виде массива а не единичной ошибки.

kakserpom commented 9 years ago

Это кривой подход. Думаю, надо вводить отдельное свойство и итератор для таких запросов.

Кстати, думаю, нужно реализовать поточную обработку результата, чтобы callback-функция вызывалась еще в процессе получения ответа передавая результаты группами, чтобы не хранить весь ответ в памяти.