diff --git a/include/my_context.h b/include/my_context.h index 2694fd09..b66482a4 100644 --- a/include/my_context.h +++ b/include/my_context.h @@ -112,11 +112,6 @@ struct my_context { }; #endif -extern void -my_context_install_suspend_resume_hook(struct mysql_async_context *b, - void (*hook)(my_bool, void *), - void *user_data); - /* Initialize an asynchroneous context object. Returns 0 on success, non-zero on failure. diff --git a/include/my_stmt.h b/include/my_stmt.h index 77046caf..0dfb1ba1 100644 --- a/include/my_stmt.h +++ b/include/my_stmt.h @@ -165,6 +165,7 @@ struct st_mysqlnd_stmt_methods my_bool (*get_attribute)(const MYSQL_STMT * stmt, enum enum_stmt_attr_type attr_type, const void * value); my_bool (*set_attribute)(const MYSQL_STMT * stmt, enum enum_stmt_attr_type attr_type, const void * value); + void (*set_error)(MYSQL_STMT *stmt, unsigned int error_nr, const char *sqlstate, const char *format, ...); }; typedef int (*mysql_stmt_fetch_row_func)(MYSQL_STMT *stmt, unsigned char **row); diff --git a/include/mysql.h b/include/mysql.h index 473f7401..04cce7f0 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -641,125 +641,125 @@ int STDCALL mysql_stmt_send_long_data_cont(my_bool *ret, MYSQL_STMT *stmt, /* API function calls (used by dynmic plugins) */ struct st_mariadb_api { - my_ulonglong (*mysql_num_rows)(MYSQL_RES *res); - unsigned int (*mysql_num_fields)(MYSQL_RES *res); - my_bool (*mysql_eof)(MYSQL_RES *res); - MYSQL_FIELD *(*mysql_fetch_field_direct)(MYSQL_RES *res, unsigned int fieldnr); - MYSQL_FIELD * (*mysql_fetch_fields)(MYSQL_RES *res); - MYSQL_ROWS * (*mysql_row_tell)(MYSQL_RES *res); - unsigned int (*mysql_field_tell)(MYSQL_RES *res); - unsigned int (*mysql_field_count)(MYSQL *mysql); - my_bool (*mysql_more_results)(MYSQL *mysql); - int (*mysql_next_result)(MYSQL *mysql); - my_ulonglong (*mysql_affected_rows)(MYSQL *mysql); - my_bool (*mysql_autocommit)(MYSQL *mysql, my_bool mode); - my_bool (*mysql_commit)(MYSQL *mysql); - my_bool (*mysql_rollback)(MYSQL *mysql); - my_ulonglong (*mysql_insert_id)(MYSQL *mysql); - unsigned int (*mysql_errno)(MYSQL *mysql); - char * (*mysql_error)(MYSQL *mysql); - char * (*mysql_info)(MYSQL *mysql); - unsigned long (*mysql_thread_id)(MYSQL *mysql); - const char * (*mysql_character_set_name)(MYSQL *mysql); - void (*mysql_get_character_set_info)(MYSQL *mysql, MY_CHARSET_INFO *cs); - int (*mysql_set_character_set)(MYSQL *mysql, const char *csname); - my_bool (*mariadb_get_infov)(MYSQL *mysql, enum mariadb_value value, void *arg, ...); - my_bool (*mariadb_get_info)(MYSQL *mysql, enum mariadb_value value, void *arg); - MYSQL * (*mysql_init)(MYSQL *mysql); - int (*mysql_ssl_set)(MYSQL *mysql, const char *key, const char *cert, const char *ca, const char *capath, const char *cipher); - const char * (*mysql_get_ssl_cipher)(MYSQL *mysql); - MYSQL * (*mysql_connect)(MYSQL *mysql, const char *host, const char *user, const char *passwd); - my_bool (*mysql_change_user)(MYSQL *mysql, const char *user, const char *passwd, const char *db); - MYSQL * (*mysql_real_connect)(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag); - void (*mysql_close)(MYSQL *sock); - int (*mysql_select_db)(MYSQL *mysql, const char *db); - int (*mysql_query)(MYSQL *mysql, const char *q); - int (*mysql_send_query)(MYSQL *mysql, const char *q, size_t length); - my_bool (*mysql_read_query_result)(MYSQL *mysql); - int (*mysql_real_query)(MYSQL *mysql, const char *q, size_t length); - int (*mysql_create_db)(MYSQL *mysql, const char *DB); - int (*mysql_drop_db)(MYSQL *mysql, const char *DB); - int (*mysql_shutdown)(MYSQL *mysql, enum mysql_enum_shutdown_level shutdown_level); - int (*mysql_dump_debug_info)(MYSQL *mysql); - int (*mysql_refresh)(MYSQL *mysql, unsigned int refresh_options); - int (*mysql_kill)(MYSQL *mysql,unsigned long pid); - int (*mysql_ping)(MYSQL *mysql); - char * (*mysql_stat)(MYSQL *mysql); - char * (*mysql_get_server_info)(MYSQL *mysql); - unsigned long (*mysql_get_server_version)(MYSQL *mysql); - char * (*mysql_get_host_info)(MYSQL *mysql); - unsigned int (*mysql_get_proto_info)(MYSQL *mysql); - MYSQL_RES * (*mysql_list_dbs)(MYSQL *mysql,const char *wild); - MYSQL_RES * (*mysql_list_tables)(MYSQL *mysql,const char *wild); - MYSQL_RES * (*mysql_list_fields)(MYSQL *mysql, const char *table, const char *wild); - MYSQL_RES * (*mysql_list_processes)(MYSQL *mysql); - MYSQL_RES * (*mysql_store_result)(MYSQL *mysql); - MYSQL_RES * (*mysql_use_result)(MYSQL *mysql); - int (*mysql_options)(MYSQL *mysql,enum mysql_option option, const void *arg); - void (*mysql_free_result)(MYSQL_RES *result); - void (*mysql_data_seek)(MYSQL_RES *result, my_ulonglong offset); - MYSQL_ROW_OFFSET (*mysql_row_seek)(MYSQL_RES *result, MYSQL_ROW_OFFSET); - MYSQL_FIELD_OFFSET (*mysql_field_seek)(MYSQL_RES *result, MYSQL_FIELD_OFFSET offset); - MYSQL_ROW (*mysql_fetch_row)(MYSQL_RES *result); - unsigned long * (*mysql_fetch_lengths)(MYSQL_RES *result); - MYSQL_FIELD * (*mysql_fetch_field)(MYSQL_RES *result); - unsigned long (*mysql_escape_string)(char *to,const char *from, unsigned long from_length); - unsigned long (*mysql_real_escape_string)(MYSQL *mysql, char *to,const char *from, unsigned long length); - void (*mysql_debug)(const char *debug); - void (*mysql_debug_end)(void); - unsigned int (*mysql_thread_safe)(void); - unsigned int (*mysql_warning_count)(MYSQL *mysql); - const char * (*mysql_sqlstate)(MYSQL *mysql); - int (*mysql_server_init)(int argc, char **argv, char **groups); - void (*mysql_server_end)(void); - void (*mysql_thread_end)(void); - my_bool (*mysql_thread_init)(void); - int (*mysql_set_server_option)(MYSQL *mysql, enum enum_mysql_set_option option); - const char * (*mysql_get_client_info)(void); - unsigned long (*mysql_get_client_version)(void); - my_bool (*mariadb_connection)(MYSQL *mysql); - const char * (*mysql_get_server_name)(MYSQL *mysql); - CHARSET_INFO * (*mariadb_get_charset_by_name)(const char *csname); - CHARSET_INFO * (*mariadb_get_charset_by_nr)(unsigned int csnr); - size_t (*mariadb_convert_string)(const char *from, size_t *from_len, CHARSET_INFO *from_cs, char *to, size_t *to_len, CHARSET_INFO *to_cs, int *errorcode); - int (*mysql_optionsv)(MYSQL *mysql,enum mysql_option option, ...); - int (*mysql_get_optionv)(MYSQL *mysql, enum mysql_option option, void *arg, ...); - int (*mysql_get_option)(MYSQL *mysql, enum mysql_option option, void *arg); - MYSQL_PARAMETERS *(*mysql_get_parameters)(void); - unsigned long (*mysql_hex_string)(char *to, const char *from, size_t len); - my_socket (*mysql_get_socket)(MYSQL *mysql); - unsigned int (*mysql_get_timeout_value)(const MYSQL *mysql); - unsigned int (*mysql_get_timeout_value_ms)(const MYSQL *mysql); - my_bool (*mysql_reconnect)(MYSQL *mysql); - MYSQL_STMT * (*mysql_stmt_init)(MYSQL *mysql); - int (*mysql_stmt_prepare)(MYSQL_STMT *stmt, const char *query, size_t length); - int (*mysql_stmt_execute)(MYSQL_STMT *stmt); - int (*mysql_stmt_fetch)(MYSQL_STMT *stmt); - int (*mysql_stmt_fetch_column)(MYSQL_STMT *stmt, MYSQL_BIND *bind_arg, unsigned int column, unsigned long offset); - int (*mysql_stmt_store_result)(MYSQL_STMT *stmt); - unsigned long (*mysql_stmt_param_count)(MYSQL_STMT * stmt); - my_bool (*mysql_stmt_attr_set)(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, const void *attr); - my_bool (*mysql_stmt_attr_get)(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, void *attr); - my_bool (*mysql_stmt_bind_param)(MYSQL_STMT * stmt, MYSQL_BIND * bnd); - my_bool (*mysql_stmt_bind_result)(MYSQL_STMT * stmt, MYSQL_BIND * bnd); - my_bool (*mysql_stmt_close)(MYSQL_STMT * stmt); - my_bool (*mysql_stmt_reset)(MYSQL_STMT * stmt); - my_bool (*mysql_stmt_free_result)(MYSQL_STMT *stmt); - my_bool (*mysql_stmt_send_long_data)(MYSQL_STMT *stmt, unsigned int param_number, const char *data, size_t length); - MYSQL_RES *(*mysql_stmt_result_metadata)(MYSQL_STMT *stmt); - MYSQL_RES *(*mysql_stmt_param_metadata)(MYSQL_STMT *stmt); - unsigned int (*mysql_stmt_errno)(MYSQL_STMT * stmt); - const char *(*mysql_stmt_error)(MYSQL_STMT * stmt); - const char *(*mysql_stmt_sqlstate)(MYSQL_STMT * stmt); - MYSQL_ROW_OFFSET (*mysql_stmt_row_seek)(MYSQL_STMT *stmt, MYSQL_ROW_OFFSET offset); - MYSQL_ROW_OFFSET (*mysql_stmt_row_tell)(MYSQL_STMT *stmt); - void (*mysql_stmt_data_seek)(MYSQL_STMT *stmt, my_ulonglong offset); - my_ulonglong (*mysql_stmt_num_rows)(MYSQL_STMT *stmt); - my_ulonglong (*mysql_stmt_affected_rows)(MYSQL_STMT *stmt); - my_ulonglong (*mysql_stmt_insert_id)(MYSQL_STMT *stmt); - unsigned int (*mysql_stmt_field_count)(MYSQL_STMT *stmt); - int (*mysql_stmt_next_result)(MYSQL_STMT *stmt); - my_bool (*mysql_stmt_more_results)(MYSQL_STMT *stmt); + my_ulonglong (STDCALL *mysql_num_rows)(MYSQL_RES *res); + unsigned int (STDCALL *mysql_num_fields)(MYSQL_RES *res); + my_bool (STDCALL *mysql_eof)(MYSQL_RES *res); + MYSQL_FIELD *(STDCALL *mysql_fetch_field_direct)(MYSQL_RES *res, unsigned int fieldnr); + MYSQL_FIELD * (STDCALL *mysql_fetch_fields)(MYSQL_RES *res); + MYSQL_ROWS * (STDCALL *mysql_row_tell)(MYSQL_RES *res); + unsigned int (STDCALL *mysql_field_tell)(MYSQL_RES *res); + unsigned int (STDCALL *mysql_field_count)(MYSQL *mysql); + my_bool (STDCALL *mysql_more_results)(MYSQL *mysql); + int (STDCALL *mysql_next_result)(MYSQL *mysql); + my_ulonglong (STDCALL *mysql_affected_rows)(MYSQL *mysql); + my_bool (STDCALL *mysql_autocommit)(MYSQL *mysql, my_bool mode); + my_bool (STDCALL *mysql_commit)(MYSQL *mysql); + my_bool (STDCALL *mysql_rollback)(MYSQL *mysql); + my_ulonglong (STDCALL *mysql_insert_id)(MYSQL *mysql); + unsigned int (STDCALL *mysql_errno)(MYSQL *mysql); + char * (STDCALL *mysql_error)(MYSQL *mysql); + char * (STDCALL *mysql_info)(MYSQL *mysql); + unsigned long (STDCALL *mysql_thread_id)(MYSQL *mysql); + const char * (STDCALL *mysql_character_set_name)(MYSQL *mysql); + void (STDCALL *mysql_get_character_set_info)(MYSQL *mysql, MY_CHARSET_INFO *cs); + int (STDCALL *mysql_set_character_set)(MYSQL *mysql, const char *csname); + my_bool (STDCALL *mariadb_get_infov)(MYSQL *mysql, enum mariadb_value value, void *arg, ...); + my_bool (STDCALL *mariadb_get_info)(MYSQL *mysql, enum mariadb_value value, void *arg); + MYSQL * (STDCALL *mysql_init)(MYSQL *mysql); + int (STDCALL *mysql_ssl_set)(MYSQL *mysql, const char *key, const char *cert, const char *ca, const char *capath, const char *cipher); + const char * (STDCALL *mysql_get_ssl_cipher)(MYSQL *mysql); + MYSQL * (STDCALL *mysql_connect)(MYSQL *mysql, const char *host, const char *user, const char *passwd); + my_bool (STDCALL *mysql_change_user)(MYSQL *mysql, const char *user, const char *passwd, const char *db); + MYSQL * (STDCALL *mysql_real_connect)(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag); + void (STDCALL *mysql_close)(MYSQL *sock); + int (STDCALL *mysql_select_db)(MYSQL *mysql, const char *db); + int (STDCALL *mysql_query)(MYSQL *mysql, const char *q); + int (STDCALL *mysql_send_query)(MYSQL *mysql, const char *q, size_t length); + my_bool (STDCALL *mysql_read_query_result)(MYSQL *mysql); + int (STDCALL *mysql_real_query)(MYSQL *mysql, const char *q, size_t length); + int (STDCALL *mysql_create_db)(MYSQL *mysql, const char *DB); + int (STDCALL *mysql_drop_db)(MYSQL *mysql, const char *DB); + int (STDCALL *mysql_shutdown)(MYSQL *mysql, enum mysql_enum_shutdown_level shutdown_level); + int (STDCALL *mysql_dump_debug_info)(MYSQL *mysql); + int (STDCALL *mysql_refresh)(MYSQL *mysql, unsigned int refresh_options); + int (STDCALL *mysql_kill)(MYSQL *mysql,unsigned long pid); + int (STDCALL *mysql_ping)(MYSQL *mysql); + char * (STDCALL *mysql_stat)(MYSQL *mysql); + char * (STDCALL *mysql_get_server_info)(MYSQL *mysql); + unsigned long (STDCALL *mysql_get_server_version)(MYSQL *mysql); + char * (STDCALL *mysql_get_host_info)(MYSQL *mysql); + unsigned int (STDCALL *mysql_get_proto_info)(MYSQL *mysql); + MYSQL_RES * (STDCALL *mysql_list_dbs)(MYSQL *mysql,const char *wild); + MYSQL_RES * (STDCALL *mysql_list_tables)(MYSQL *mysql,const char *wild); + MYSQL_RES * (STDCALL *mysql_list_fields)(MYSQL *mysql, const char *table, const char *wild); + MYSQL_RES * (STDCALL *mysql_list_processes)(MYSQL *mysql); + MYSQL_RES * (STDCALL *mysql_store_result)(MYSQL *mysql); + MYSQL_RES * (STDCALL *mysql_use_result)(MYSQL *mysql); + int (STDCALL *mysql_options)(MYSQL *mysql,enum mysql_option option, const void *arg); + void (STDCALL *mysql_free_result)(MYSQL_RES *result); + void (STDCALL *mysql_data_seek)(MYSQL_RES *result, my_ulonglong offset); + MYSQL_ROW_OFFSET (STDCALL *mysql_row_seek)(MYSQL_RES *result, MYSQL_ROW_OFFSET); + MYSQL_FIELD_OFFSET (STDCALL *mysql_field_seek)(MYSQL_RES *result, MYSQL_FIELD_OFFSET offset); + MYSQL_ROW (STDCALL *mysql_fetch_row)(MYSQL_RES *result); + unsigned long * (STDCALL *mysql_fetch_lengths)(MYSQL_RES *result); + MYSQL_FIELD * (STDCALL *mysql_fetch_field)(MYSQL_RES *result); + unsigned long (STDCALL *mysql_escape_string)(char *to,const char *from, unsigned long from_length); + unsigned long (STDCALL *mysql_real_escape_string)(MYSQL *mysql, char *to,const char *from, unsigned long length); + void (STDCALL *mysql_debug)(const char *debug); + void (STDCALL *mysql_debug_end)(void); + unsigned int (STDCALL *mysql_thread_safe)(void); + unsigned int (STDCALL *mysql_warning_count)(MYSQL *mysql); + const char * (STDCALL *mysql_sqlstate)(MYSQL *mysql); + int (STDCALL *mysql_server_init)(int argc, char **argv, char **groups); + void (STDCALL *mysql_server_end)(void); + void (STDCALL *mysql_thread_end)(void); + my_bool (STDCALL *mysql_thread_init)(void); + int (STDCALL *mysql_set_server_option)(MYSQL *mysql, enum enum_mysql_set_option option); + const char * (STDCALL *mysql_get_client_info)(void); + unsigned long (STDCALL *mysql_get_client_version)(void); + my_bool (STDCALL *mariadb_connection)(MYSQL *mysql); + const char * (STDCALL *mysql_get_server_name)(MYSQL *mysql); + CHARSET_INFO * (STDCALL *mariadb_get_charset_by_name)(const char *csname); + CHARSET_INFO * (STDCALL *mariadb_get_charset_by_nr)(unsigned int csnr); + size_t (STDCALL *mariadb_convert_string)(const char *from, size_t *from_len, CHARSET_INFO *from_cs, char *to, size_t *to_len, CHARSET_INFO *to_cs, int *errorcode); + int (STDCALL *mysql_optionsv)(MYSQL *mysql,enum mysql_option option, ...); + int (STDCALL *mysql_get_optionv)(MYSQL *mysql, enum mysql_option option, void *arg, ...); + int (STDCALL *mysql_get_option)(MYSQL *mysql, enum mysql_option option, void *arg); + MYSQL_PARAMETERS *(STDCALL *mysql_get_parameters)(void); + unsigned long (STDCALL *mysql_hex_string)(char *to, const char *from, size_t len); + my_socket (STDCALL *mysql_get_socket)(MYSQL *mysql); + unsigned int (STDCALL *mysql_get_timeout_value)(const MYSQL *mysql); + unsigned int (STDCALL *mysql_get_timeout_value_ms)(const MYSQL *mysql); + my_bool (STDCALL *mysql_reconnect)(MYSQL *mysql); + MYSQL_STMT * (STDCALL *mysql_stmt_init)(MYSQL *mysql); + int (STDCALL *mysql_stmt_prepare)(MYSQL_STMT *stmt, const char *query, size_t length); + int (STDCALL *mysql_stmt_execute)(MYSQL_STMT *stmt); + int (STDCALL *mysql_stmt_fetch)(MYSQL_STMT *stmt); + int (STDCALL *mysql_stmt_fetch_column)(MYSQL_STMT *stmt, MYSQL_BIND *bind_arg, unsigned int column, unsigned long offset); + int (STDCALL *mysql_stmt_store_result)(MYSQL_STMT *stmt); + unsigned long (STDCALL *mysql_stmt_param_count)(MYSQL_STMT * stmt); + my_bool (STDCALL *mysql_stmt_attr_set)(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, const void *attr); + my_bool (STDCALL *mysql_stmt_attr_get)(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, void *attr); + my_bool (STDCALL *mysql_stmt_bind_param)(MYSQL_STMT * stmt, MYSQL_BIND * bnd); + my_bool (STDCALL *mysql_stmt_bind_result)(MYSQL_STMT * stmt, MYSQL_BIND * bnd); + my_bool (STDCALL *mysql_stmt_close)(MYSQL_STMT * stmt); + my_bool (STDCALL *mysql_stmt_reset)(MYSQL_STMT * stmt); + my_bool (STDCALL *mysql_stmt_free_result)(MYSQL_STMT *stmt); + my_bool (STDCALL *mysql_stmt_send_long_data)(MYSQL_STMT *stmt, unsigned int param_number, const char *data, size_t length); + MYSQL_RES *(STDCALL *mysql_stmt_result_metadata)(MYSQL_STMT *stmt); + MYSQL_RES *(STDCALL *mysql_stmt_param_metadata)(MYSQL_STMT *stmt); + unsigned int (STDCALL *mysql_stmt_errno)(MYSQL_STMT * stmt); + const char *(STDCALL *mysql_stmt_error)(MYSQL_STMT * stmt); + const char *(STDCALL *mysql_stmt_sqlstate)(MYSQL_STMT * stmt); + MYSQL_ROW_OFFSET (STDCALL *mysql_stmt_row_seek)(MYSQL_STMT *stmt, MYSQL_ROW_OFFSET offset); + MYSQL_ROW_OFFSET (STDCALL *mysql_stmt_row_tell)(MYSQL_STMT *stmt); + void (STDCALL *mysql_stmt_data_seek)(MYSQL_STMT *stmt, my_ulonglong offset); + my_ulonglong (STDCALL *mysql_stmt_num_rows)(MYSQL_STMT *stmt); + my_ulonglong (STDCALL *mysql_stmt_affected_rows)(MYSQL_STMT *stmt); + my_ulonglong (STDCALL *mysql_stmt_insert_id)(MYSQL_STMT *stmt); + unsigned int (STDCALL *mysql_stmt_field_count)(MYSQL_STMT *stmt); + int (STDCALL *mysql_stmt_next_result)(MYSQL_STMT *stmt); + my_bool (STDCALL *mysql_stmt_more_results)(MYSQL_STMT *stmt); }; /* these methods can be overwritten by db plugins */ @@ -784,6 +784,7 @@ struct st_mysql_methods { int (*db_stmt_fetch_to_bind)(MYSQL_STMT *stmt, unsigned char *row); void (*db_stmt_flush_unbuffered)(MYSQL_STMT *stmt); void (*set_error)(MYSQL *mysql, unsigned int error_nr, const char *sqlstate, const char *format, ...); + void (*invalidate_stmts)(MYSQL *mysql, const char *function_name); struct st_mariadb_api *api; }; diff --git a/libmariadb/libmariadb.c b/libmariadb/libmariadb.c index bb976041..7086831b 100644 --- a/libmariadb/libmariadb.c +++ b/libmariadb/libmariadb.c @@ -519,7 +519,7 @@ append_wild(char *to, char *end, const char *wild) /************************************************************************** ** Init debugging if MYSQL_DEBUG environment variable is found **************************************************************************/ -void STDCALL mysql_debug_end() +void STDCALL mysql_debug_end(void) { #ifndef DBUG_OFF DEBUGGER_OFF; @@ -1806,8 +1806,7 @@ my_bool STDCALL mysql_reconnect(MYSQL *mysql) DBUG_RETURN(0); } - -static void ma_invalidate_stmts(MYSQL *mysql, const char *function_name) +void ma_invalidate_stmts(MYSQL *mysql, const char *function_name) { if (mysql->stmts) { @@ -3352,7 +3351,7 @@ static void mariadb_get_charset_info(MYSQL *mysql, MY_CHARSET_INFO *cs) void STDCALL mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *cs) { - return mariadb_get_charset_info(mysql, cs); + mariadb_get_charset_info(mysql, cs); } int STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname) @@ -3451,7 +3450,7 @@ void STDCALL mysql_server_end() my_init_done= 0; } -my_bool STDCALL mysql_thread_init() +my_bool STDCALL mysql_thread_init(void) { #ifdef THREAD return my_thread_init(); @@ -3459,7 +3458,7 @@ my_bool STDCALL mysql_thread_init() return 0; } -void STDCALL mysql_thread_end() +void STDCALL mysql_thread_end(void) { #ifdef THREAD my_thread_end(); @@ -3743,8 +3742,10 @@ my_bool STDCALL mariadb_get_info(MYSQL *mysql, enum mariadb_value value, void *a return mariadb_get_infov(mysql, value, arg); } +#undef STDCALL /* API functions for usage in dynamic plugins */ -struct st_mariadb_api MARIADB_API= { +struct st_mariadb_api MARIADB_API= +{ mysql_num_rows, mysql_num_fields, mysql_eof, @@ -3906,5 +3907,7 @@ struct st_mysql_methods MARIADB_DEFAULT_METHODS = { mthd_stmt_flush_unbuffered, /* set error */ my_set_error, + /* invalidate statements */ + ma_invalidate_stmts, &MARIADB_API }; diff --git a/plugins/connection/aurora.c b/plugins/connection/aurora.c index 76d828de..524f4364 100644 --- a/plugins/connection/aurora.c +++ b/plugins/connection/aurora.c @@ -60,7 +60,7 @@ my_bool aurora_reconnect(MYSQL *mysql); #define DISABLE_AURORA(mysql)\ (mysql)->net.conn_hdlr->active= 0; -#ifndef HAVE_REPLICATION_DYNAMIC +#ifndef HAVE_AURORA_DYNAMIC MARIADB_CONNECTION_PLUGIN connection_aurora_plugin = #else MARIADB_CONNECTION_PLUGIN _mysql_client_plugin_declaration_ = @@ -394,18 +394,8 @@ MYSQL *aurora_connect_instance(AURORA *aurora, AURORA_INSTANCE *instance, MYSQL /* {{{ void aurora_copy_mysql() */ void aurora_copy_mysql(MYSQL *from, MYSQL *to) { - LIST *li_stmt= to->stmts; - - for (;li_stmt;li_stmt= li_stmt->next) - { - MYSQL_STMT *stmt= (MYSQL_STMT *)li_stmt->data; - - if (stmt->state != MYSQL_STMT_INITTED) - { - stmt->state= MYSQL_STMT_INITTED; - SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); - } - } + /* invalidate statements */ + to->methods->invalidate_stmts(to, "aurora connect/reconnect"); from->free_me= to->free_me; from->reconnect= to->reconnect; @@ -431,7 +421,6 @@ my_bool aurora_find_replica(AURORA *aurora) my_bool replica_found= 0; AURORA_INSTANCE *instance[AURORA_MAX_INSTANCES]; MYSQL mysql; -// struct st_dynamic_array *init_command= aurora->mysql[AURORA_PRIMARY]->options.init_command; if (aurora->num_instances < 2) return 0; @@ -565,6 +554,8 @@ MYSQL *aurora_connect(MYSQL *mysql, const char *host, const char *user, const ch if (!mariadb_api) mariadb_api= mysql->methods->api; + mariadb_api->mariadb_get_info(mysql, MARIADB_CLIENT_ERRORS, &client_errors); + if ((aurora= (AURORA *)hdlr->data)) { aurora_refresh_blacklist(aurora); @@ -577,7 +568,7 @@ MYSQL *aurora_connect(MYSQL *mysql, const char *host, const char *user, const ch } else { - if (!(aurora= (AURORA *)my_malloc(sizeof(AURORA), MYF(MY_ZEROFILL)))) + if (!(aurora= (AURORA *)calloc(1, sizeof(AURORA)))) { mysql->methods->set_error(mysql, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); return NULL; diff --git a/unittest/libmariadb/CMakeLists.txt b/unittest/libmariadb/CMakeLists.txt index f2976b38..7d1c0be4 100644 --- a/unittest/libmariadb/CMakeLists.txt +++ b/unittest/libmariadb/CMakeLists.txt @@ -57,7 +57,7 @@ IF(WITH_SSL) ENDIF() FOREACH(API_TEST ${API_TESTS}) - ADD_EXECUTABLE(${API_TEST} ${API_TEST}.c) + ADD_EXECUTABLE(${API_TEST} ${API_TEST}.c ${CMAKE_SOURCE_DIR}/libmariadb/getopt.c) TARGET_LINK_LIBRARIES(${API_TEST} mytap libmariadb) ADD_TEST(${API_TEST} ${EXECUTABLE_OUTPUT_PATH}/${API_TEST}) SET_TESTS_PROPERTIES(${API_TEST} PROPERTIES TIMEOUT 120) diff --git a/unittest/libmariadb/misc.c b/unittest/libmariadb/misc.c index fcb6a14c..1dd9f478 100644 --- a/unittest/libmariadb/misc.c +++ b/unittest/libmariadb/misc.c @@ -266,7 +266,7 @@ static int test_frm_bug(MYSQL *mysql) sprintf(test_frm, "%s/%s/test_frm_bug.frm", data_dir, schema); - if (!(test_file= my_fopen(test_frm, (int) (O_RDWR | O_CREAT), MYF(MY_WME)))) + if (!(test_file= fopen(test_frm, "rw"))) { mysql_stmt_close(stmt); diag("Can't write to file %s -> SKIP", test_frm); @@ -294,7 +294,7 @@ static int test_frm_bug(MYSQL *mysql) mysql_free_result(result); mysql_stmt_close(stmt); - my_fclose(test_file, MYF(0)); + fclose(test_file); mysql_query(mysql, "drop table if exists test_frm_bug"); return OK; }