1
0
mirror of https://github.com/mariadb-corporation/mariadb-connector-c.git synced 2025-08-07 02:42:49 +03:00

- Windows build fixes for async API

This commit is contained in:
Georg Richter
2014-04-10 10:17:45 +02:00
parent b55403544e
commit ad0580377d
8 changed files with 278 additions and 23 deletions

View File

@@ -459,6 +459,7 @@ typedef SOCKET_SIZE_TYPE size_socket;
#ifdef _WIN32
#define NO_DIR_LIBRARY /* Not standar dir-library */
#define USE_MY_STAT_STRUCT /* For my_lib */
typedef SSIZE_T ssize_t;
#endif
/* Some things that this system does have */

View File

@@ -366,6 +366,8 @@ typedef struct
/* Local infile support functions */
#define LOCAL_INFILE_ERROR_LEN 512
#include <my_stmt.h>
void STDCALL mysql_set_local_infile_handler(MYSQL *mysql,
int (*local_infile_init)(void **, const char *, void *),
int (*local_infile_read)(void *, char *, unsigned int),
@@ -494,7 +496,115 @@ my_socket STDCALL mysql_get_socket(const MYSQL *mysql);
unsigned int STDCALL mysql_get_timeout_value(const MYSQL *mysql);
unsigned int STDCALL mysql_get_timeout_value_ms(const MYSQL *mysql);
#include <my_stmt.h>
/* Async API */
int STDCALL mysql_close_start(MYSQL *sock);
int STDCALL mysql_close_cont(MYSQL *sock, int status);
int STDCALL mysql_commit_start(my_bool *ret, MYSQL * mysql);
int STDCALL mysql_commit_cont(my_bool *ret, MYSQL * mysql, int status);
int STDCALL mysql_rollback_start(my_bool *ret, MYSQL * mysql);
int STDCALL mysql_rollback_cont(my_bool *ret, MYSQL * mysql, int status);
int STDCALL mysql_autocommit_start(my_bool *ret, MYSQL * mysql,
my_bool auto_mode);
int STDCALL mysql_autocommit_cont(my_bool *ret, MYSQL * mysql, int status);
int STDCALL mysql_next_result_start(int *ret, MYSQL *mysql);
int STDCALL mysql_next_result_cont(int *ret, MYSQL *mysql, int status);
int STDCALL mysql_stmt_next_result_start(int *ret, MYSQL_STMT *stmt);
int STDCALL mysql_stmt_next_result_cont(int *ret, MYSQL_STMT *stmt, int status);
int STDCALL mysql_stmt_close_start(my_bool *ret, MYSQL_STMT *stmt);
int STDCALL mysql_stmt_close_cont(my_bool *ret, MYSQL_STMT * stmt, int status);
int STDCALL mysql_set_character_set_start(int *ret, MYSQL *mysql,
const char *csname);
int STDCALL mysql_set_character_set_cont(int *ret, MYSQL *mysql,
int status);
int STDCALL mysql_change_user_start(my_bool *ret, MYSQL *mysql,
const char *user,
const char *passwd,
const char *db);
int STDCALL mysql_change_user_cont(my_bool *ret, MYSQL *mysql,
int status);
int STDCALL mysql_real_connect_start(MYSQL **ret, MYSQL *mysql,
const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long clientflag);
int STDCALL mysql_real_connect_cont(MYSQL **ret, MYSQL *mysql,
int status);
int STDCALL mysql_query_start(int *ret, MYSQL *mysql,
const char *q);
int STDCALL mysql_query_cont(int *ret, MYSQL *mysql,
int status);
int STDCALL mysql_send_query_start(int *ret, MYSQL *mysql,
const char *q,
unsigned long length);
int STDCALL mysql_send_query_cont(int *ret, MYSQL *mysql, int status);
int STDCALL mysql_real_query_start(int *ret, MYSQL *mysql,
const char *q,
unsigned long length);
int STDCALL mysql_real_query_cont(int *ret, MYSQL *mysql,
int status);
int STDCALL mysql_store_result_start(MYSQL_RES **ret, MYSQL *mysql);
int STDCALL mysql_store_result_cont(MYSQL_RES **ret, MYSQL *mysql,
int status);
int STDCALL mysql_shutdown_start(int *ret, MYSQL *mysql,
enum mysql_enum_shutdown_level
shutdown_level);
int STDCALL mysql_shutdown_cont(int *ret, MYSQL *mysql,
int status);
int STDCALL mysql_refresh_start(int *ret, MYSQL *mysql,
unsigned int refresh_options);
int STDCALL mysql_refresh_cont(int *ret, MYSQL *mysql, int status);
int STDCALL mysql_kill_start(int *ret, MYSQL *mysql,
unsigned long pid);
int STDCALL mysql_kill_cont(int *ret, MYSQL *mysql, int status);
int STDCALL mysql_set_server_option_start(int *ret, MYSQL *mysql,
enum enum_mysql_set_option
option);
int STDCALL mysql_set_server_option_cont(int *ret, MYSQL *mysql,
int status);
int STDCALL mysql_ping_start(int *ret, MYSQL *mysql);
int STDCALL mysql_ping_cont(int *ret, MYSQL *mysql, int status);
int STDCALL mysql_stat_start(const char **ret, MYSQL *mysql);
int STDCALL mysql_stat_cont(const char **ret, MYSQL *mysql,
int status);
int STDCALL mysql_free_result_start(MYSQL_RES *result);
int STDCALL mysql_free_result_cont(MYSQL_RES *result, int status);
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
int STDCALL mysql_fetch_row_start(MYSQL_ROW *ret,
MYSQL_RES *result);
int STDCALL mysql_fetch_row_cont(MYSQL_ROW *ret, MYSQL_RES *result,
int status);
int STDCALL mysql_read_query_result_start(my_bool *ret,
MYSQL *mysql);
int STDCALL mysql_read_query_result_cont(my_bool *ret,
MYSQL *mysql, int status);
int STDCALL mysql_stmt_prepare_start(int *ret, MYSQL_STMT *stmt,const char *query, unsigned long length);
int STDCALL mysql_stmt_prepare_cont(int *ret, MYSQL_STMT *stmt, int status);
int STDCALL mysql_stmt_execute_start(int *ret, MYSQL_STMT *stmt);
int STDCALL mysql_stmt_execute_cont(int *ret, MYSQL_STMT *stmt, int status);
int STDCALL mysql_stmt_fetch_start(int *ret, MYSQL_STMT *stmt);
int STDCALL mysql_stmt_fetch_cont(int *ret, MYSQL_STMT *stmt, int status);
int STDCALL mysql_stmt_store_result_start(int *ret, MYSQL_STMT *stmt);
int STDCALL mysql_stmt_store_result_cont(int *ret, MYSQL_STMT *stmt,int status);
int STDCALL mysql_stmt_close_start(my_bool *ret, MYSQL_STMT *stmt);
int STDCALL mysql_stmt_close_cont(my_bool *ret, MYSQL_STMT * stmt, int status);
my_bool STDCALL mysql_stmt_reset(MYSQL_STMT * stmt);
int STDCALL mysql_stmt_reset_start(my_bool *ret, MYSQL_STMT * stmt);
int STDCALL mysql_stmt_reset_cont(my_bool *ret, MYSQL_STMT *stmt, int status);
int STDCALL mysql_stmt_free_result_start(my_bool *ret, MYSQL_STMT *stmt);
int STDCALL mysql_stmt_free_result_cont(my_bool *ret, MYSQL_STMT *stmt,
int status);
int STDCALL mysql_stmt_send_long_data_start(my_bool *ret, MYSQL_STMT *stmt,
unsigned int param_number,
const char *data,
unsigned long len);
int STDCALL mysql_stmt_send_long_data_cont(my_bool *ret, MYSQL_STMT *stmt,
int status);
/* these methods can be overwritten by db plugins */
struct st_mysql_methods {

View File

@@ -2191,7 +2191,7 @@ void my_set_error(MYSQL *mysql,
DBUG_VOID_RETURN;
}
void STDCALL mysql_close_slow_part(MYSQL *mysql)
void mysql_close_slow_part(MYSQL *mysql)
{
if (mysql->net.vio)
{

View File

@@ -135,4 +135,76 @@ EXPORTS
mariadb_dyncol_column_cmp_named
mariadb_dyncol_column_count
mariadb_dyncol_json
mysql_autocommit_cont
mysql_autocommit_start
mysql_change_user_cont
mysql_change_user_start
mysql_close_cont
mysql_close_start
mysql_commit_cont
mysql_commit_start
mysql_dump_debug_info_cont
mysql_dump_debug_info_start
mysql_fetch_row_cont
mysql_fetch_row_start
mysql_free_result_cont
mysql_free_result_start
mysql_kill_cont
mysql_kill_start
mysql_list_dbs_cont
mysql_list_dbs_start
mysql_list_fields_cont
mysql_list_fields_start
mysql_list_processes_cont
mysql_list_processes_start
mysql_list_tables_cont
mysql_list_tables_start
mysql_next_result_cont
mysql_next_result_start
mysql_ping_cont
mysql_ping_start
mysql_query_cont
mysql_query_start
mysql_read_query_result_cont
mysql_read_query_result_start
mysql_real_connect_cont
mysql_real_connect_start
mysql_real_query_cont
mysql_real_query_start
mysql_refresh_cont
mysql_refresh_start
mysql_rollback_cont
mysql_rollback_start
mysql_select_db_cont
mysql_select_db_start
mysql_send_query_cont
mysql_send_query_start
mysql_set_character_set_cont
mysql_set_character_set_start
mysql_set_server_option_cont
mysql_set_server_option_start
mysql_shutdown_cont
mysql_shutdown_start
mysql_stat_cont
mysql_stat_start
mysql_stmt_close_cont
mysql_stmt_close_start
mysql_stmt_execute_cont
mysql_stmt_execute_start
mysql_stmt_fetch_cont
mysql_stmt_fetch_start
mysql_stmt_free_result_cont
mysql_stmt_free_result_start
mysql_stmt_next_result_cont
mysql_stmt_next_result_start
mysql_stmt_prepare_cont
mysql_stmt_prepare_start
mysql_stmt_reset_cont
mysql_stmt_reset_start
mysql_stmt_send_long_data_cont
mysql_stmt_send_long_data_start
mysql_stmt_store_result_cont
mysql_stmt_store_result_start
mysql_store_result_cont
mysql_store_result_start

View File

@@ -34,7 +34,7 @@
#include "mysql_async.h"
#ifdef __WIN__
#ifdef _WIN32
/*
Windows does not support MSG_DONTWAIT for send()/recv(). So we need to ensure
that the socket is non-blocking at the start of every operation.
@@ -67,7 +67,7 @@ my_connect_async(struct mysql_async_context *b, my_socket fd,
size_socket s_err_size;
/* Make the socket non-blocking. */
#ifdef __WIN__
#ifdef _WIN32
ulong arg= 1;
ioctlsocket(fd, FIONBIO, (void *)&arg);
#else
@@ -84,7 +84,7 @@ my_connect_async(struct mysql_async_context *b, my_socket fd,
res= connect(fd, name, namelen);
if (res != 0)
{
#ifdef __WIN__
#ifdef _WIN32
int wsa_err= WSAGetLastError();
if (wsa_err != WSAEWOULDBLOCK)
return res;

View File

@@ -135,6 +135,78 @@ global:
mariadb_dyncol_column_cmp_named;
mariadb_dyncol_column_count;
mariadb_dyncol_json;
mysql_autocommit_cont;
mysql_autocommit_start;
mysql_change_user_cont;
mysql_change_user_start;
mysql_close_cont;
mysql_close_start;
mysql_commit_cont;
mysql_commit_start;
mysql_dump_debug_info_cont;
mysql_dump_debug_info_start;
mysql_fetch_row_cont;
mysql_fetch_row_start;
mysql_free_result_cont;
mysql_free_result_start;
mysql_kill_cont;
mysql_kill_start;
mysql_list_dbs_cont;
mysql_list_dbs_start;
mysql_list_fields_cont;
mysql_list_fields_start;
mysql_list_processes_cont;
mysql_list_processes_start;
mysql_list_tables_cont;
mysql_list_tables_start;
mysql_next_result_cont;
mysql_next_result_start;
mysql_ping_cont;
mysql_ping_start;
mysql_query_cont;
mysql_query_start;
mysql_read_query_result_cont;
mysql_read_query_result_start;
mysql_real_connect_cont;
mysql_real_connect_start;
mysql_real_query_cont;
mysql_real_query_start;
mysql_refresh_cont;
mysql_refresh_start;
mysql_rollback_cont;
mysql_rollback_start;
mysql_select_db_cont;
mysql_select_db_start;
mysql_send_query_cont;
mysql_send_query_start;
mysql_set_character_set_cont;
mysql_set_character_set_start;
mysql_set_server_option_cont;
mysql_set_server_option_start;
mysql_shutdown_cont;
mysql_shutdown_start;
mysql_stat_cont;
mysql_stat_start;
mysql_stmt_close_cont;
mysql_stmt_close_start;
mysql_stmt_execute_cont;
mysql_stmt_execute_start;
mysql_stmt_fetch_cont;
mysql_stmt_fetch_start;
mysql_stmt_free_result_cont;
mysql_stmt_free_result_start;
mysql_stmt_next_result_cont;
mysql_stmt_next_result_start;
mysql_stmt_prepare_cont;
mysql_stmt_prepare_start;
mysql_stmt_reset_cont;
mysql_stmt_reset_start;
mysql_stmt_send_long_data_cont;
mysql_stmt_send_long_data_start;
mysql_stmt_store_result_cont;
mysql_stmt_store_result_start;
mysql_store_result_cont;
mysql_store_result_start;
local:
*;
};

View File

@@ -18,7 +18,7 @@
#include "ma_common.h"
#ifndef __WIN__
#ifndef _WIN32
#include <poll.h>
#else
#include <WinSock2.h>
@@ -33,7 +33,7 @@
static int
wait_for_mysql(MYSQL *mysql, int status)
{
#ifdef __WIN__
#ifdef _WIN32
fd_set rs, ws, es;
int res;
struct timeval tv, *timeout;

View File

@@ -74,7 +74,7 @@ static int test_ssl_cipher(MYSQL *unused)
my= mysql_init(NULL);
FAIL_IF(!my, "mysql_init() failed");
mysql_ssl_set(my,0, 0, "/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/ca.pem", 0, 0);
mysql_ssl_set(my,0, 0, "C:/work/mariadb-native-client/unittest/libmariadb/certs/ca.pem", 0, 0);
FAIL_IF(!mysql_real_connect(my, hostname, username, password, schema,
port, socketname, 0), mysql_error(my));
@@ -118,7 +118,7 @@ static int test_multi_ssl_connections(MYSQL *unused)
mysql[i]= mysql_init(NULL);
FAIL_IF(!mysql[i],"mysql_init() failed");
mysql_ssl_set(mysql[i], 0, 0, "/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/ca.pem", 0, 0);
mysql_ssl_set(mysql[i], 0, 0, "C:/work/mariadb-native-client/unittest/libmariadb/certs/ca.pem", 0, 0);
mysql_real_connect(mysql[i], hostname, username, password, schema,
port, socketname, 0);
@@ -161,7 +161,7 @@ static void ssl_thread(void)
mysql_thread_end();
pthread_exit(NULL);
}
mysql_ssl_set(mysql, 0, 0, "/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/ca.pem", 0, 0);
mysql_ssl_set(mysql, 0, 0, "C:/work/mariadb-native-client/unittest/libmariadb/certs/ca.pem", 0, 0);
if(!mysql_real_connect(mysql, hostname, username, password, schema,
port, socketname, 0))
@@ -227,9 +227,9 @@ static int test_phpbug51647(MYSQL *my)
mysql= mysql_init(NULL);
FAIL_IF(!mysql, "Can't allocate memory");
mysql_ssl_set(mysql, "/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/client-key.pem",
"/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/client-cert.pem",
"/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/ca.pem", 0, 0);
mysql_ssl_set(mysql, "C:/work/mariadb-native-client/unittest/libmariadb/certs/client-key.pem",
"C:/work/mariadb-native-client/unittest/libmariadb/certs/client-cert.pem",
"C:/work/mariadb-native-client/unittest/libmariadb/certs/ca.pem", 0, 0);
FAIL_IF(!mysql_real_connect(mysql, hostname, username, password, schema,
port, socketname, 0), mysql_error(mysql));
@@ -249,7 +249,7 @@ static int test_conc50(MYSQL *my)
mysql= mysql_init(NULL);
FAIL_IF(!mysql, "Can't allocate memory");
mysql_ssl_set(mysql, NULL, NULL, "/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/my_cert.pem", NULL, NULL);
mysql_ssl_set(mysql, NULL, NULL, "C:/work/mariadb-native-client/unittest/libmariadb/certs/my_cert.pem", NULL, NULL);
mysql_real_connect(mysql, hostname, username, password, schema,
port, socketname, 0);
@@ -270,7 +270,7 @@ static int test_conc50_1(MYSQL *my)
mysql= mysql_init(NULL);
FAIL_IF(!mysql, "Can't allocate memory");
mysql_ssl_set(mysql, NULL, NULL, "/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/ca.pem", NULL, NULL);
mysql_ssl_set(mysql, NULL, NULL, "C:/work/mariadb-native-client/unittest/libmariadb/certs/ca.pem", NULL, NULL);
mysql_real_connect(mysql, hostname, username, password, schema,
port, socketname, 0);
@@ -292,7 +292,7 @@ static int test_conc50_2(MYSQL *my)
mysql= mysql_init(NULL);
FAIL_IF(!mysql, "Can't allocate memory");
mysql_ssl_set(mysql, NULL, NULL, "/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/dummy.pem", NULL, NULL);
mysql_ssl_set(mysql, NULL, NULL, "C:/work/mariadb-native-client/unittest/libmariadb/certs/dummy.pem", NULL, NULL);
mysql_real_connect(mysql, hostname, username, password, schema,
port, socketname, 0);
@@ -332,7 +332,7 @@ static int test_conc50_3(MYSQL *my)
mysql= mysql_init(NULL);
FAIL_IF(!mysql, "Can't allocate memory");
mysql_ssl_set(mysql, NULL, NULL, "/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/ca.pem", NULL, NULL);
mysql_ssl_set(mysql, NULL, NULL, "C:/work/mariadb-native-client/unittest/libmariadb/certs/ca.pem", NULL, NULL);
mysql_real_connect(mysql, hostname, "ssltest", NULL, schema,
port, socketname, 0);
@@ -352,7 +352,7 @@ static int test_conc50_4(MYSQL *my)
mysql= mysql_init(NULL);
FAIL_IF(!mysql, "Can't allocate memory");
mysql_ssl_set(mysql, NULL, "/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/ca.pem", NULL, NULL, NULL);
mysql_ssl_set(mysql, NULL, "C:/work/mariadb-native-client/unittest/libmariadb/certs/ca.pem", NULL, NULL, NULL);
mysql_real_connect(mysql, hostname, username, password, schema,
port, socketname, 0);
@@ -376,7 +376,7 @@ static int verify_ssl_server_cert(MYSQL *my)
mysql= mysql_init(NULL);
FAIL_IF(!mysql, "Can't allocate memory");
mysql_ssl_set(mysql, NULL, NULL, "/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/ca.pem", NULL, NULL);
mysql_ssl_set(mysql, NULL, NULL, "C:/work/mariadb-native-client/unittest/libmariadb/certs/ca.pem", NULL, NULL);
mysql_options(mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, &verify);
mysql_real_connect(mysql, hostname, username, password, schema,
@@ -409,7 +409,7 @@ static int test_bug62743(MYSQL *my)
mysql= mysql_init(NULL);
FAIL_IF(!mysql, "Can't allocate memory");
mysql_ssl_set(mysql, "/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/client-key.pem", NULL, NULL, NULL, NULL);
mysql_ssl_set(mysql, "C:/work/mariadb-native-client/unittest/libmariadb/certs/client-key.pem", NULL, NULL, NULL, NULL);
mysql_real_connect(mysql, hostname, username, password, schema,
port, socketname, 0);
@@ -420,8 +420,8 @@ static int test_bug62743(MYSQL *my)
mysql= mysql_init(NULL);
FAIL_IF(!mysql, "Can't allocate memory");
mysql_ssl_set(mysql, "/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/client-key.pem",
"/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/client-cert.pem", NULL, NULL, NULL);
mysql_ssl_set(mysql, "C:/work/mariadb-native-client/unittest/libmariadb/certs/client-key.pem",
"C:/work/mariadb-native-client/unittest/libmariadb/certs/client-cert.pem", NULL, NULL, NULL);
mysql_real_connect(mysql, hostname, username, password, schema,
port, socketname, 0);
@@ -431,7 +431,7 @@ static int test_bug62743(MYSQL *my)
mysql= mysql_init(NULL);
FAIL_IF(!mysql, "Can't allocate memory");
mysql_ssl_set(mysql, "/home/georg/work/mariadb/client/mariadb-native-client/unittest/libmariadb/certs/client-key.pem", "blablubb", NULL, NULL, NULL);
mysql_ssl_set(mysql, "C:/work/mariadb-native-client/unittest/libmariadb/certs/client-key.pem", "blablubb", NULL, NULL, NULL);
mysql_real_connect(mysql, hostname, username, password, schema,
port, socketname, 0);