From 2000b06183bfda39f1a56ffcba1ceb3a3e9c2952 Mon Sep 17 00:00:00 2001 From: Georg Richter Date: Tue, 11 Apr 2023 18:31:19 +0200 Subject: [PATCH 1/5] Replace SET_CLIENT_STMT_ERROR by stmt_set_error(). --- include/mariadb_stmt.h | 3 -- libmariadb/mariadb_lib.c | 4 +- libmariadb/mariadb_stmt.c | 94 +++++++++++++++++------------------ unittest/libmariadb/basic-t.c | 10 ++-- 4 files changed, 54 insertions(+), 57 deletions(-) diff --git a/include/mariadb_stmt.h b/include/mariadb_stmt.h index e25405e8..146dc88f 100644 --- a/include/mariadb_stmt.h +++ b/include/mariadb_stmt.h @@ -34,9 +34,6 @@ ((stmt)->mysql->extension->mariadb_server_capabilities & \ (MARIADB_CLIENT_STMT_BULK_OPERATIONS >> 32)))) -#define SET_CLIENT_STMT_ERROR(a, b, c, d, ...) \ - stmt_set_error((a),(b),(c),(d), ##__VA_ARGS__) - #define CLEAR_CLIENT_STMT_ERROR(a) \ do { \ (a)->last_errno= 0;\ diff --git a/libmariadb/mariadb_lib.c b/libmariadb/mariadb_lib.c index 333bf5a6..1f3556fa 100644 --- a/libmariadb/mariadb_lib.c +++ b/libmariadb/mariadb_lib.c @@ -1814,7 +1814,7 @@ my_bool STDCALL mariadb_reconnect(MYSQL *mysql) if (stmt->state != MYSQL_STMT_INITTED) { stmt->state= MYSQL_STMT_INITTED; - SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); } } @@ -1851,7 +1851,7 @@ void ma_invalidate_stmts(MYSQL *mysql, const char *function_name) { MYSQL_STMT *stmt= (MYSQL_STMT *)li_stmt->data; stmt->mysql= NULL; - SET_CLIENT_STMT_ERROR(stmt, CR_STMT_CLOSED, SQLSTATE_UNKNOWN, 0, function_name); + stmt_set_error(stmt, CR_STMT_CLOSED, SQLSTATE_UNKNOWN, 0, function_name); } mysql->stmts= NULL; } diff --git a/libmariadb/mariadb_stmt.c b/libmariadb/mariadb_stmt.c index e8f799d9..7e922164 100644 --- a/libmariadb/mariadb_stmt.c +++ b/libmariadb/mariadb_stmt.c @@ -59,7 +59,7 @@ #define UPDATE_STMT_ERROR(stmt)\ -SET_CLIENT_STMT_ERROR((stmt), (stmt)->mysql->net.last_errno, (stmt)->mysql->net.sqlstate, (stmt)->mysql->net.last_error) +stmt_set_error((stmt), (stmt)->mysql->net.last_errno, (stmt)->mysql->net.sqlstate, (stmt)->mysql->net.last_error) #define STMT_NUM_OFS(type, a, r) (((type *)(a))[r]) #define MADB_RESET_ERROR 1 @@ -222,7 +222,7 @@ int mthd_stmt_read_all_rows(MYSQL_STMT *stmt) /* allocate space for rows */ if (!(current= (MYSQL_ROWS *)ma_alloc_root(&result->alloc, sizeof(MYSQL_ROWS) + packet_len))) { - SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); return(1); } current->data= (MYSQL_ROW)(current + 1); @@ -312,7 +312,7 @@ int mthd_stmt_read_all_rows(MYSQL_STMT *stmt) } } stmt->result_cursor= 0; - SET_CLIENT_STMT_ERROR(stmt, stmt->mysql->net.last_errno, stmt->mysql->net.sqlstate, + stmt_set_error(stmt, stmt->mysql->net.last_errno, stmt->mysql->net.sqlstate, stmt->mysql->net.last_error); return(1); } @@ -324,7 +324,7 @@ static int stmt_cursor_fetch(MYSQL_STMT *stmt, uchar **row) if (stmt->state < MYSQL_STMT_USE_OR_STORE_CALLED) { - SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); return(1); } @@ -691,7 +691,7 @@ int store_param(MYSQL_STMT *stmt, int column, unsigned char **p, unsigned long r default: /* unsupported parameter type */ - SET_CLIENT_STMT_ERROR(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0); return 1; } return 0; @@ -871,7 +871,7 @@ unsigned char* mysql_stmt_execute_generate_simple_request(MYSQL_STMT *stmt, size *request_len = (size_t)(p - start); return start; mem_error: - SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); free(start); *request_len= 0; return NULL; @@ -1081,7 +1081,7 @@ unsigned char* mysql_stmt_execute_generate_bulk_request(MYSQL_STMT *stmt, size_t *request_len = (size_t)(p - start); return start; mem_error: - SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); free(start); *request_len= 0; return NULL; @@ -1144,7 +1144,7 @@ my_bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt, enum enum_stmt_attr_type a case STMT_ATTR_CURSOR_TYPE: if (*(ulong *)value > (unsigned long) CURSOR_TYPE_READ_ONLY) { - SET_CLIENT_STMT_ERROR(stmt, CR_NOT_IMPLEMENTED, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_NOT_IMPLEMENTED, SQLSTATE_UNKNOWN, 0); return(1); } stmt->flags = *(ulong *)value; @@ -1181,7 +1181,7 @@ my_bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt, enum enum_stmt_attr_type a stmt->user_data= (void *)value; break; default: - SET_CLIENT_STMT_ERROR(stmt, CR_NOT_IMPLEMENTED, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_NOT_IMPLEMENTED, SQLSTATE_UNKNOWN, 0); return(1); } return(0); @@ -1193,7 +1193,7 @@ my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind) if (!mysql) { - SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); return(1); } @@ -1207,7 +1207,7 @@ my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind) { if (!(stmt->params= (MYSQL_BIND *)ma_alloc_root(&stmt->mem_root, stmt->prebind_params * sizeof(MYSQL_BIND)))) { - SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); return(1); } memset(stmt->params, '\0', stmt->prebind_params * sizeof(MYSQL_BIND)); @@ -1215,7 +1215,7 @@ my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind) stmt->param_count= stmt->prebind_params; } else if (stmt->state < MYSQL_STMT_PREPARED) { - SET_CLIENT_STMT_ERROR(stmt, CR_NO_PREPARE_STMT, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_NO_PREPARE_STMT, SQLSTATE_UNKNOWN, 0); return(1); } @@ -1231,7 +1231,7 @@ my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind) if (stmt->mysql->methods->db_supported_buffer_type && !stmt->mysql->methods->db_supported_buffer_type(stmt->params[i].buffer_type)) { - SET_CLIENT_STMT_ERROR(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0); return(1); } if (!stmt->params[i].is_null) @@ -1283,7 +1283,7 @@ my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind) case MYSQL_TYPE_NEWDECIMAL: break; default: - SET_CLIENT_STMT_ERROR(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0); return(1); break; } @@ -1301,13 +1301,13 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind) if (stmt->state < MYSQL_STMT_PREPARED) { - SET_CLIENT_STMT_ERROR(stmt, CR_NO_PREPARE_STMT, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_NO_PREPARE_STMT, SQLSTATE_UNKNOWN, 0); return(1); } if (!stmt->field_count) { - SET_CLIENT_STMT_ERROR(stmt, CR_NO_STMT_METADATA, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_NO_STMT_METADATA, SQLSTATE_UNKNOWN, 0); return(1); } @@ -1324,7 +1324,7 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind) &((MADB_STMT_EXTENSION *)stmt->extension)->fields_ma_alloc_root; if (!(stmt->bind= (MYSQL_BIND *)ma_alloc_root(fields_ma_alloc_root, stmt->field_count * sizeof(MYSQL_BIND)))) { - SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); return(1); } } @@ -1336,7 +1336,7 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind) if (stmt->mysql->methods->db_supported_buffer_type && !stmt->mysql->methods->db_supported_buffer_type(bind[i].buffer_type)) { - SET_CLIENT_STMT_ERROR(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0); return(1); } @@ -1477,13 +1477,13 @@ int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt) if (stmt->state <= MYSQL_STMT_EXECUTED) { - SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); return(1); } if (stmt->state < MYSQL_STMT_WAITING_USE_OR_STORE || !stmt->field_count) { - SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); return(1); } else if (stmt->state== MYSQL_STMT_WAITING_USE_OR_STORE) { @@ -1513,7 +1513,7 @@ int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind, unsigned { if (stmt->state < MYSQL_STMT_USER_FETCHING || column >= stmt->field_count || stmt->state == MYSQL_STMT_FETCH_DONE) { - SET_CLIENT_STMT_ERROR(stmt, CR_NO_DATA, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_NO_DATA, SQLSTATE_UNKNOWN, 0); return(1); } @@ -1661,7 +1661,7 @@ int STDCALL mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, unsigned lon if (!stmt->mysql) { - SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); return(1); } @@ -1734,13 +1734,13 @@ int STDCALL mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, unsigned lon { if (stmt->prebind_params != stmt->param_count) { - SET_CLIENT_STMT_ERROR(stmt, CR_INVALID_PARAMETER_NO, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_INVALID_PARAMETER_NO, SQLSTATE_UNKNOWN, 0); goto fail; } } else { if (!(stmt->params= (MYSQL_BIND *)ma_alloc_root(&stmt->mem_root, stmt->param_count * sizeof(MYSQL_BIND)))) { - SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); goto fail; } memset(stmt->params, '\0', stmt->param_count * sizeof(MYSQL_BIND)); @@ -1752,7 +1752,7 @@ int STDCALL mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, unsigned lon MA_MEM_ROOT *fields_ma_alloc_root= &((MADB_STMT_EXTENSION *)stmt->extension)->fields_ma_alloc_root; if (!(stmt->bind= (MYSQL_BIND *)ma_alloc_root(fields_ma_alloc_root, stmt->field_count * sizeof(MYSQL_BIND)))) { - SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); goto fail; } memset(stmt->bind, 0, sizeof(MYSQL_BIND) * stmt->field_count); @@ -1772,7 +1772,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt) if (!stmt->mysql) { - SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); return(1); } @@ -1786,7 +1786,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt) if (stmt->state < MYSQL_STMT_EXECUTED) { SET_CLIENT_ERROR(stmt->mysql, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); - SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); return(1); } @@ -1809,7 +1809,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt) else if (stmt->mysql->status != MYSQL_STATUS_STMT_RESULT) { SET_CLIENT_ERROR(stmt->mysql, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); - SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); return(1); } @@ -1858,7 +1858,7 @@ static int madb_alloc_stmt_fields(MYSQL_STMT *stmt) if (!(stmt->fields= (MYSQL_FIELD *)ma_alloc_root(fields_ma_alloc_root, sizeof(MYSQL_FIELD) * stmt->mysql->field_count))) { - SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); return(1); } stmt->field_count= stmt->mysql->field_count; @@ -1892,7 +1892,7 @@ static int madb_alloc_stmt_fields(MYSQL_STMT *stmt) } if (!(stmt->bind= (MYSQL_BIND *)ma_alloc_root(fields_ma_alloc_root, stmt->field_count * sizeof(MYSQL_BIND)))) { - SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); return(1); } memset(stmt->bind, 0, stmt->field_count * sizeof(MYSQL_BIND)); @@ -1920,7 +1920,7 @@ int stmt_read_execute_response(MYSQL_STMT *stmt) if (ret) { - SET_CLIENT_STMT_ERROR(stmt, mysql->net.last_errno, mysql->net.sqlstate, + stmt_set_error(stmt, mysql->net.last_errno, mysql->net.sqlstate, mysql->net.last_error); /* if mariadb_stmt_execute_direct was used, we need to send the number of parameters to the specified prebinded value to prevent possible @@ -1957,7 +1957,7 @@ int stmt_read_execute_response(MYSQL_STMT *stmt) !(stmt->fields= (MYSQL_FIELD *)ma_alloc_root(fields_ma_alloc_root, sizeof(MYSQL_FIELD) * mysql->field_count))) { - SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); return(1); } memset(stmt->bind, 0, sizeof(MYSQL_BIND) * mysql->field_count); @@ -2042,7 +2042,7 @@ int stmt_read_execute_response(MYSQL_STMT *stmt) } else { /* table was altered, see test_wl4166_2 */ - SET_CLIENT_STMT_ERROR(stmt, CR_NEW_STMT_METADATA, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_NEW_STMT_METADATA, SQLSTATE_UNKNOWN, 0); return(1); } } @@ -2058,20 +2058,20 @@ int STDCALL mysql_stmt_execute(MYSQL_STMT *stmt) if (!stmt->mysql) { - SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); return(1); } if (stmt->state < MYSQL_STMT_PREPARED) { SET_CLIENT_ERROR(mysql, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); - SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); return(1); } if (stmt->param_count && !stmt->bind_param_done) { - SET_CLIENT_STMT_ERROR(stmt, CR_PARAMS_NOT_BOUND, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_PARAMS_NOT_BOUND, SQLSTATE_UNKNOWN, 0); return(1); } @@ -2131,7 +2131,7 @@ static my_bool madb_reset_stmt(MYSQL_STMT *stmt, unsigned int flags) if (!stmt->mysql) { - SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); return(1); } @@ -2216,7 +2216,7 @@ static my_bool mysql_stmt_internal_reset(MYSQL_STMT *stmt, my_bool is_close) { /* connection could be invalid, e.g. after mysql_stmt_close or failed reconnect attempt (see bug CONC-97) */ - SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); return(1); } @@ -2271,7 +2271,7 @@ MYSQL_RES * STDCALL mysql_stmt_result_metadata(MYSQL_STMT *stmt) /* aloocate result set structutr and copy stmt information */ if (!(res= (MYSQL_RES *)calloc(1, sizeof(MYSQL_RES)))) { - SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); return(NULL); } @@ -2322,13 +2322,13 @@ my_bool STDCALL mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number, if (stmt->state < MYSQL_STMT_PREPARED || !stmt->params) { - SET_CLIENT_STMT_ERROR(stmt, CR_NO_PREPARE_STMT, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_NO_PREPARE_STMT, SQLSTATE_UNKNOWN, 0); return(1); } if (param_number >= stmt->param_count) { - SET_CLIENT_STMT_ERROR(stmt, CR_INVALID_PARAMETER_NO, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_INVALID_PARAMETER_NO, SQLSTATE_UNKNOWN, 0); return(1); } @@ -2388,14 +2388,14 @@ int STDCALL mysql_stmt_next_result(MYSQL_STMT *stmt) if (!stmt->mysql) { - SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); return(1); } if (stmt->state < MYSQL_STMT_EXECUTED) { SET_CLIENT_ERROR(stmt->mysql, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); - SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); return(1); } @@ -2410,7 +2410,7 @@ int STDCALL mysql_stmt_next_result(MYSQL_STMT *stmt) if (mysql_next_result(stmt->mysql)) { stmt->state= MYSQL_STMT_FETCH_DONE; - SET_CLIENT_STMT_ERROR(stmt, stmt->mysql->net.last_errno, stmt->mysql->net.sqlstate, + stmt_set_error(stmt, stmt->mysql->net.last_errno, stmt->mysql->net.sqlstate, stmt->mysql->net.last_error); return(1); } @@ -2448,7 +2448,7 @@ int STDCALL mariadb_stmt_execute_direct(MYSQL_STMT *stmt, mysql= stmt->mysql; if (!mysql) { - SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); return 1; } @@ -2470,7 +2470,7 @@ int STDCALL mariadb_stmt_execute_direct(MYSQL_STMT *stmt, if (ma_multi_command(mysql, COM_MULTI_ENABLED)) { - SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); return 1; } @@ -2551,7 +2551,7 @@ int STDCALL mariadb_stmt_execute_direct(MYSQL_STMT *stmt, MA_MEM_ROOT *fields_ma_alloc_root= &((MADB_STMT_EXTENSION *)stmt->extension)->fields_ma_alloc_root; if (!(stmt->bind= (MYSQL_BIND *)ma_alloc_root(fields_ma_alloc_root, stmt->field_count * sizeof(MYSQL_BIND)))) { - SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); goto fail; } memset(stmt->bind, 0, sizeof(MYSQL_BIND) * stmt->field_count); diff --git a/unittest/libmariadb/basic-t.c b/unittest/libmariadb/basic-t.c index 0a4630fc..f7501989 100644 --- a/unittest/libmariadb/basic-t.c +++ b/unittest/libmariadb/basic-t.c @@ -810,16 +810,16 @@ static int test_conc624(MYSQL *mysql) MYSQL_STMT *stmt= mysql_stmt_init(mysql); char errmsg[MYSQL_ERRMSG_SIZE]; - SET_CLIENT_STMT_ERROR(stmt, 9000, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, 9000, SQLSTATE_UNKNOWN, 0); snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 9000); diag("stmt_error: %s", mysql_stmt_error(stmt)); FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "expected undefined error 9000"); - SET_CLIENT_STMT_ERROR(stmt, 0, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, 0, SQLSTATE_UNKNOWN, 0); snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 0); FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "expected undefined error 0"); - SET_CLIENT_STMT_ERROR(stmt, 4999, SQLSTATE_UNKNOWN, 0); + stmt_set_error(stmt, 4999, SQLSTATE_UNKNOWN, 0); snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 4999); FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "expected undefined error 4999"); @@ -835,8 +835,8 @@ static int test_conc624(MYSQL *mysql) snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 9000); FAIL_IF(strcmp(mysql_error(mysql), errmsg), "expected undefined error 9000"); - /* test if SET_CLIENT_STMT_ERROR works with variadic arguments */ - SET_CLIENT_STMT_ERROR(stmt, CR_STMT_CLOSED, SQLSTATE_UNKNOWN, 0, "foobar"); + /* test if stmt_set_error works with variadic arguments */ + stmt_set_error(stmt, CR_STMT_CLOSED, SQLSTATE_UNKNOWN, 0, "foobar"); snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER(CR_STMT_CLOSED), "foobar"); FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "error when passing variadic arguments to prepared stmt error function"); From 11ba413498e2d418dd9a37ca39813a5d7f58d6f7 Mon Sep 17 00:00:00 2001 From: Georg Richter Date: Fri, 21 Apr 2023 06:55:56 +0200 Subject: [PATCH 2/5] Travis fix --- .travis.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 83f593a2..b71f0b17 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,15 +36,16 @@ env: local=0 jobs: fast_finish: true allow_failures: - - env: srv=mysql + - env: srv=mysql v=5.7 native=1 + - env: srv=mysql v=8.0 native=1 include: - - env: srv=mariadb v=10.5 + - env: srv=mariadb v=10.11 os: windows language: shell - - env: srv=mariadb v=10.3 local=1 - dist: bionic - env: srv=mariadb v=10.4 local=1 - env: srv=mariadb v=10.5 local=1 + - env: srv=mariadb v=10.6 local=1 + - env: srv=mariadb v=10.11 local=1 - if: type = push AND fork = false env: srv=mariadb-es v=10.5 - if: type = push AND fork = false @@ -56,11 +57,11 @@ jobs: env: srv=skysql - if: type = push AND fork = false env: srv=skysql-ha - - env: server_branch=10.3 - - env: server_branch=10.3 TEST_OPTION=--ps-protocol - - env: server_branch=10.4 - - env: server_branch=10.4 TEST_OPTION=--ps-protocol - env: server_branch=10.5 - env: server_branch=10.5 TEST_OPTION=--ps-protocol + - env: server_branch=10.6 + - env: server_branch=10.6 TEST_OPTION=--ps-protocol + - env: server_branch=10.11 + - env: server_branch=10.11 TEST_OPTION=--ps-protocol script: ./travis.sh From 0e452f66ac3c6ca8845eb65211234cda2a7da227 Mon Sep 17 00:00:00 2001 From: Georg Richter Date: Fri, 21 Apr 2023 07:11:29 +0200 Subject: [PATCH 3/5] MariaDB Server detection fix Use mariadb_connection() instead of checking 5.5.5 rpl hack to detect if we are connected to a MariaDB Server. --- libmariadb/mariadb_lib.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/libmariadb/mariadb_lib.c b/libmariadb/mariadb_lib.c index 1f3556fa..59fa526e 100644 --- a/libmariadb/mariadb_lib.c +++ b/libmariadb/mariadb_lib.c @@ -1356,7 +1356,6 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user, MA_PVIO_CINFO cinfo= {NULL, NULL, 0, -1, NULL}; MARIADB_PVIO *pvio= NULL; char *scramble_data; - my_bool is_maria= 0; const char *scramble_plugin; uint pkt_length, scramble_len, pkt_scramble_len= 0; NET *net= &mysql->net; @@ -1566,7 +1565,6 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user, if (strncmp(end, MA_RPL_VERSION_HACK, sizeof(MA_RPL_VERSION_HACK) - 1) == 0) { mysql->server_version= strdup(end + sizeof(MA_RPL_VERSION_HACK) - 1); - is_maria= 1; } else { @@ -1575,7 +1573,6 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user, SET_CLIENT_ERROR(mysql, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); goto error; } - is_maria= mariadb_connection(mysql); } end+= strlen(end) + 1; @@ -1606,7 +1603,7 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user, pkt_scramble_len= uint1korr(end + 7); /* check if MariaD2B specific capabilities are available */ - if (is_maria && !(mysql->server_capabilities & CLIENT_MYSQL)) + if (mariadb_connection(mysql) && !(mysql->server_capabilities & CLIENT_MYSQL)) { mysql->extension->mariadb_server_capabilities= (ulonglong) uint4korr(end + 14); } From 6c29921bbe174eb3171ccdad89d562ca73f913bd Mon Sep 17 00:00:00 2001 From: Georg Richter Date: Sat, 22 Apr 2023 06:56:53 +0200 Subject: [PATCH 4/5] travis fix: remove server builds > 10.5, since 10.6 and above use Connector/C 3.3 branch. --- .travis.yml | 5 ----- unittest/libmariadb/connection.c | 6 ++++++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index b71f0b17..bf5c2124 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,7 +50,6 @@ jobs: env: srv=mariadb-es v=10.5 - if: type = push AND fork = false env: srv=maxscale - - if: type = push AND fork = false - env: srv=mysql v=5.7 native=1 - env: srv=mysql v=8.0 native=1 - if: type = push AND fork = false @@ -59,9 +58,5 @@ jobs: env: srv=skysql-ha - env: server_branch=10.5 - env: server_branch=10.5 TEST_OPTION=--ps-protocol - - env: server_branch=10.6 - - env: server_branch=10.6 TEST_OPTION=--ps-protocol - - env: server_branch=10.11 - - env: server_branch=10.11 TEST_OPTION=--ps-protocol script: ./travis.sh diff --git a/unittest/libmariadb/connection.c b/unittest/libmariadb/connection.c index 6b00dd61..7c3a8256 100644 --- a/unittest/libmariadb/connection.c +++ b/unittest/libmariadb/connection.c @@ -618,6 +618,12 @@ int test_conc21(MYSQL *mysql) int major=0, minor= 0, patch=0; SKIP_MAXSCALE; + if (strlen(mysql_get_server_info(mysql)) > 63) + { + diag("server name is too long - skip until rpl hack was removed"); + return SKIP; + } + rc= mysql_query(mysql, "SELECT @@version"); check_mysql_rc(rc, mysql); From b0ec2101bf1e1ca2d8a710f37b5cafc839ae065c Mon Sep 17 00:00:00 2001 From: Georg Richter Date: Mon, 24 Apr 2023 14:58:01 +0200 Subject: [PATCH 5/5] Test fixes when testing against MySQL --- unittest/libmariadb/connection.c | 5 ++++- unittest/libmariadb/ps_bugs.c | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/unittest/libmariadb/connection.c b/unittest/libmariadb/connection.c index 7c3a8256..5a099d44 100644 --- a/unittest/libmariadb/connection.c +++ b/unittest/libmariadb/connection.c @@ -1208,6 +1208,7 @@ static int test_auth256(MYSQL *my) if (!my_test_connect(mysql, hostname, "sha256user", "foo", NULL, port, socketname, 0)) { diag("error: %s", mysql_error(mysql)); + diag("host: %s", this_host); mysql_close(mysql); return FAIL; } @@ -1940,7 +1941,9 @@ static int test_conc632(MYSQL *my __attribute__((unused))) return FAIL; } - rc= mysql_query(mysql, "CREATE OR REPLACE PROCEDURE conc632() " + rc= mysql_query(mysql, "DROP PROCEDURE conc632"); + + rc= mysql_query(mysql, "CREATE PROCEDURE conc632() " "BEGIN " " SELECT 1;" " SELECT 2;" diff --git a/unittest/libmariadb/ps_bugs.c b/unittest/libmariadb/ps_bugs.c index e04330da..15c52501 100644 --- a/unittest/libmariadb/ps_bugs.c +++ b/unittest/libmariadb/ps_bugs.c @@ -5489,9 +5489,13 @@ static int test_mdev19838(MYSQL *mysql) static int test_conc627(MYSQL *mysql) { - MYSQL_STMT *stmt= mysql_stmt_init(mysql); + MYSQL_STMT *stmt; int rc; + SKIP_MYSQL(mysql); + + stmt= mysql_stmt_init(mysql); + rc= mysql_stmt_prepare(stmt, SL("show grants for mysqltest_8")); check_stmt_rc(rc, stmt);