--- sql/mysql/parser3mysql.C 2019/09/10 14:25:59 1.58 +++ sql/mysql/parser3mysql.C 2019/11/30 21:44:19 1.61 @@ -1,7 +1,7 @@ /** @file Parser MySQL driver. - Copyright (c) 2001-2015 Art. Lebedev Studio (http://www.artlebedev.com) + Copyright (c) 2001-2019 Art. Lebedev Studio (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) @@ -15,7 +15,7 @@ #include "pa_sql_driver.h" -volatile const char * IDENT_PARSER3MYSQL_C="$Id: parser3mysql.C,v 1.58 2019/09/10 14:25:59 moko Exp $" IDENT_PA_SQL_DRIVER_H; +volatile const char * IDENT_PARSER3MYSQL_C="$Id: parser3mysql.C,v 1.61 2019/11/30 21:44:19 moko Exp $" IDENT_PA_SQL_DRIVER_H; #define NO_CLIENT_LONG_LONG #include "mysql.h" @@ -380,45 +380,42 @@ public: services._throw("result contains no columns"); } - bool failed=false; SQL_Error sql_error; -#define CHECK(afailed) \ - if(afailed) { \ - failed=true; \ - goto cleanup; \ - } +#define CHECK(afailed) \ + if(afailed) { \ + mysql_free_result(res); \ + services._throw(sql_error); \ + } -#define DO_FETCH_FIELDS(transcode_column_name) { \ - for(size_t i=0; iname_length; \ - const char* str=strdup(services, field->name, length); \ - transcode_column_name \ - CHECK(handlers.add_column(sql_error, str, length)); \ - } else { \ - /* seen broken client, that reported "44" column count for "select 2+2" */ \ - column_count=i; \ - break; \ - } \ - } \ - } +#define DO_FETCH_FIELDS(transcode_column_name) \ + for(size_t i=0; iname_length; \ + const char* str=strdup(services, field->name, length); \ + transcode_column_name \ + CHECK(handlers.add_column(sql_error, str, length)); \ + } else { \ + /* seen broken client, that reported "44" column count for "select 2+2" */ \ + column_count=i; \ + break; \ + } \ + } -#define DO_FETCH_ROWS(transcode_cell_value) { \ - while(MYSQL_ROW mysql_row=mysql_fetch_row(res)) { \ - CHECK(handlers.add_row(sql_error)); \ - unsigned long *lengths=mysql_fetch_lengths(res); \ - for(size_t i=0; i