diff --git a/include/ma_common.h b/include/ma_common.h index aac4adef..6b170e9e 100644 --- a/include/ma_common.h +++ b/include/ma_common.h @@ -84,6 +84,8 @@ struct st_mariadb_session_state struct st_mariadb_extension { MA_CONNECTION_HANDLER *conn_hdlr; struct st_mariadb_session_state session_state[SESSION_TRACK_TYPES]; + unsigned long mariadb_client_flag; /* MariaDB specific client flags */ + unsigned long mariadb_server_capabilities; /* MariaDB specific server capabilities */ }; #define OPT_HAS_EXT_VAL(a,key) \ diff --git a/include/mariadb_com.h b/include/mariadb_com.h index ade12ffa..29b5de57 100644 --- a/include/mariadb_com.h +++ b/include/mariadb_com.h @@ -171,7 +171,8 @@ enum enum_server_command !(mysql->server_capabilities & CLIENT_MYSQL) #define MARIADB_CLIENT_SUPPORTED_FLAGS (MARIADB_CLIENT_PROGRESS |\ - MARIADB_CLIENT_COM_MULTI) + MARIADB_CLIENT_COM_MULTI |\ + MARIADB_CLIENT_STMT_BULK_OPERATIONS) #define CLIENT_SUPPORTED_FLAGS (CLIENT_MYSQL |\ CLIENT_FOUND_ROWS |\ diff --git a/include/mysql.h b/include/mysql.h index 425abc59..b6ca10f2 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -44,8 +44,6 @@ typedef char my_bool; #define STDCALL __stdcall #endif - - #ifndef my_socket_defined #define my_socket_defined #if defined(_WIN64) @@ -335,8 +333,8 @@ struct st_mysql_options { unsigned long thread_id; /* Id for connection in server */ unsigned long packet_length; unsigned int port; - unsigned long long client_flag; - unsigned long long server_capabilities; /* changed from long to longlong in 10.2 protocol */ + unsigned long client_flag; + unsigned long server_capabilities; unsigned int protocol_version; unsigned int field_count; unsigned int server_status; diff --git a/libmariadb/mariadb_lib.c b/libmariadb/mariadb_lib.c index 61a6b733..89a13bb4 100644 --- a/libmariadb/mariadb_lib.c +++ b/libmariadb/mariadb_lib.c @@ -206,7 +206,7 @@ restart: if (last_errno== 65535 && ((mariadb_connection(mysql) && (mysql->server_capabilities & CLIENT_PROGRESS)) || - (!(mysql->server_capabilities & CLIENT_MYSQL) && mysql->server_capabilities & MARIADB_CLIENT_PROGRESS))) + (!(mysql->extension->mariadb_server_capabilities & MARIADB_CLIENT_PROGRESS >> 32)))) { if (cli_report_progress(mysql, (uchar *)pos, (uint) (len-1))) { @@ -1371,7 +1371,7 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user, /* check if MariaD2B specific capabilities are available */ if (is_maria && !(mysql->server_capabilities & CLIENT_MYSQL)) { - mysql->server_capabilities|= (ulonglong) uint4korr(end + 14) << 32; + mysql->extension->mariadb_server_capabilities= (ulonglong) uint4korr(end + 14); } } diff --git a/libmariadb/mariadb_stmt.c b/libmariadb/mariadb_stmt.c index a7acec12..7d81b901 100644 --- a/libmariadb/mariadb_stmt.c +++ b/libmariadb/mariadb_stmt.c @@ -54,6 +54,7 @@ #include #include #include +#include #define STMT_NUM_OFS(type, a,r) ((type *)(a))[r] #define MADB_RESET_ERROR 1 @@ -598,7 +599,7 @@ unsigned char* mysql_stmt_execute_generate_request(MYSQL_STMT *stmt, size_t *req uint i, j, num_rows= 1; my_bool bulk_supported= stmt->array_size > 0 && (!(stmt->mysql->server_capabilities & CLIENT_MYSQL) && - (stmt->mysql->server_capabilities & MARIADB_CLIENT_STMT_BULK_OPERATIONS)); + (stmt->mysql->extension->mariadb_server_capabilities & MARIADB_CLIENT_STMT_BULK_OPERATIONS >> 32)); uchar *start= NULL, *p; diff --git a/plugins/auth/my_auth.c b/plugins/auth/my_auth.c index 4e203c62..6b77efd7 100644 --- a/plugins/auth/my_auth.c +++ b/plugins/auth/my_auth.c @@ -218,8 +218,8 @@ static int send_client_reply_packet(MCPVIO_EXT *mpvio, memset(buff + 9, 0, 32-9); if (!(mysql->server_capabilities & CLIENT_MYSQL)) { - mysql->client_flag |= MARIADB_CLIENT_SUPPORTED_FLAGS; - int4store(buff + 28, mysql->client_flag >> 32); + mysql->extension->mariadb_client_flag = MARIADB_CLIENT_SUPPORTED_FLAGS >> 32; + int4store(buff + 28, mysql->extension->mariadb_client_flag); } end= buff+32; } diff --git a/unittest/libmariadb/connection.c b/unittest/libmariadb/connection.c index e4fbcd28..dbe23150 100644 --- a/unittest/libmariadb/connection.c +++ b/unittest/libmariadb/connection.c @@ -921,7 +921,7 @@ static int test_sess_track_db(MYSQL *mysql) if (!(mysql->server_capabilities & CLIENT_SESSION_TRACKING)) { - diag("Server doesn't support session tracking (cap=%llu)", mysql->server_capabilities); + diag("Server doesn't support session tracking (cap=%lu)", mysql->server_capabilities); return SKIP; }