1
0
mirror of https://github.com/mariadb-corporation/mariadb-connector-c.git synced 2025-08-08 14:02:17 +03:00
Conflicts:
	cmake/FindIconv.cmake
This commit is contained in:
Georg Richter
2015-09-18 15:27:47 +02:00
14 changed files with 135 additions and 60 deletions

View File

@@ -196,15 +196,18 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include)
IF(WIN32) IF(WIN32)
SET(SYSTEM_LIBS ws2_32 advapi32 kernel32) SET(SYSTEM_LIBS ws2_32 advapi32 kernel32)
ELSE() ELSE()
SET(SYSTEM_LIBS ${LIBPTHREAD} ${LIBDL} ${LIBM} ${LIBICONV}) SET(SYSTEM_LIBS ${LIBPTHREAD} ${LIBDL} ${LIBM})
IF(ICONV_EXTERNAL)
SET(SYSTEM_LIBS ${SYSTEM_LIBS} ${ICONV_LIBRARIES})
ENDIF()
ENDIF() ENDIF()
IF(OPENSSL_FOUND) IF(OPENSSL_FOUND)
SET(SYSTEM_LIBS ${SYSTEM_LIBS} ${SSL_LIBRARIES}) SET(SYSTEM_LIBS ${SYSTEM_LIBS} ${SSL_LIBRARIES})
ENDIF() ENDIF()
ADD_SUBDIRECTORY(include) ADD_SUBDIRECTORY(include)
ADD_SUBDIRECTORY(plugins)
ADD_SUBDIRECTORY(libmariadb) ADD_SUBDIRECTORY(libmariadb)
ADD_SUBDIRECTORY(plugins)
IF(NOT WIN32) IF(NOT WIN32)
ADD_SUBDIRECTORY(mariadb_config) ADD_SUBDIRECTORY(mariadb_config)
ENDIF() ENDIF()

View File

@@ -19,6 +19,7 @@ IF(APPLE)
/opt/local/lib/ /opt/local/lib/
/usr/lib/ /usr/lib/
NO_CMAKE_SYSTEM_PATH) NO_CMAKE_SYSTEM_PATH)
SET(ICONV_EXTERNAL TRUE)
ELSE() ELSE()
find_library(ICONV_LIBRARIES NAMES iconv libiconv libiconv-2) find_library(ICONV_LIBRARIES NAMES iconv libiconv libiconv-2)
IF(ICONV_LIBRARIES) IF(ICONV_LIBRARIES)

30
cmake/symlink.cmake Normal file
View File

@@ -0,0 +1,30 @@
MACRO(create_symlink symlink_name target install_path)
# According to cmake documentation symlinks work on unix systems only
IF(UNIX)
# Get target components
GET_TARGET_PROPERTY(target_location ${target} LOCATION)
GET_FILENAME_COMPONENT(target_path ${target_location} PATH)
GET_FILENAME_COMPONENT(target_name ${target_location} NAME)
ADD_CUSTOM_COMMAND(
OUTPUT ${target_path}/${symlink_name}
COMMAND ${CMAKE_COMMAND} ARGS -E remove -f ${target_path}/${symlink_name}
COMMAND ${CMAKE_COMMAND} ARGS -E create_symlink ${target_name} ${symlink_name}
WORKING_DIRECTORY ${target_path}
DEPENDS ${target}
)
ADD_CUSTOM_TARGET(SYM_${symlink_name}
ALL
DEPENDS ${target_path}/${symlink_name})
SET_TARGET_PROPERTIES(SYM_${symlink_name} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
IF(CMAKE_GENERATOR MATCHES "Xcode")
# For Xcode, replace project config with install config
STRING(REPLACE "${CMAKE_CFG_INTDIR}"
"\${CMAKE_INSTALL_CONFIG_NAME}" output ${target_path}/${symlink_name})
ENDIF()
INSTALL(FILES ${target_path}/${symlink_name} DESTINATION ${install_path})
ENDIF()
ENDMACRO()

View File

@@ -454,7 +454,7 @@ typedef SOCKET_SIZE_TYPE size_socket;
#ifdef _WIN32 #ifdef _WIN32
#define NO_DIR_LIBRARY /* Not standar dir-library */ #define NO_DIR_LIBRARY /* Not standar dir-library */
#define USE_MY_STAT_STRUCT /* For my_lib */ #define USE_MY_STAT_STRUCT /* For my_lib */
#ifdef _SIZE_T_DEFINED #ifdef _MSVC
typedef SSIZE_T ssize_t; typedef SSIZE_T ssize_t;
#endif #endif
#endif #endif

View File

@@ -362,10 +362,17 @@ IF(UNIX)
SET_TARGET_PROPERTIES(mariadb_obj PROPERTIES COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}") SET_TARGET_PROPERTIES(mariadb_obj PROPERTIES COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}")
ENDIF() ENDIF()
ADD_LIBRARY(mariadbclient STATIC $<TARGET_OBJECTS:mariadb_obj> ${EXPORT_LINK}) # Xcode doesn't support targets that have only object files,
# so let's add an empty file to keep Xcode happy
IF(CMAKE_GENERATOR MATCHES Xcode)
FILE(WRITE ${CMAKE_SOURCE_DIR}/libmariadb/empty.c "")
SET(EMPTY_FILE ${CMAKE_SOURCE_DIR}/libmariadb/empty.c)
ENDIF()
ADD_LIBRARY(mariadbclient STATIC $<TARGET_OBJECTS:mariadb_obj> ${EMPTY_FILE} ${EXPORT_LINK})
TARGET_LINK_LIBRARIES(mariadbclient ${SYSTEM_LIBS}) TARGET_LINK_LIBRARIES(mariadbclient ${SYSTEM_LIBS})
ADD_LIBRARY(libmariadb SHARED $<TARGET_OBJECTS:mariadb_obj> ${EXPORT_LINK}) ADD_LIBRARY(libmariadb SHARED $<TARGET_OBJECTS:mariadb_obj> ${EMPTY_FILE} ${EXPORT_LINK})
TARGET_LINK_LIBRARIES(libmariadb ${SYSTEM_LIBS}) TARGET_LINK_LIBRARIES(libmariadb ${SYSTEM_LIBS})
IF(UNIX) IF(UNIX)
SET_TARGET_PROPERTIES(libmariadb PROPERTIES COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}") SET_TARGET_PROPERTIES(libmariadb PROPERTIES COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}")
@@ -387,33 +394,18 @@ SET_TARGET_PROPERTIES(libmariadb PROPERTIES VERSION
# #
# Installation # Installation
# #
INCLUDE(${CMAKE_SOURCE_DIR}/cmake/symlink.cmake)
# There are still several projects which don't make use # There are still several projects which don't make use
# of the config program. To make sure these programs can # of the config program. To make sure these programs can
# use mariadb client library we provide libmysql symlinks # use mariadb client library we provide libmysql symlinks
IF(NOT WIN32 AND WITH_MYSQLCOMPAT) IF(NOT WIN32 AND WITH_MYSQLCOMPAT)
ADD_CUSTOM_COMMAND(OUTPUT "libmysql${CMAKE_SHARED_LIBRARY_SUFFIX}" SET(INSTALL_PATH ${LIB_INSTALL_DIR}/${SUFFIX_INSTALL_DIR})
"libmysqlclient${CMAKE_SHARED_LIBRARY_SUFFIX}" create_symlink(libmysqlclient${CMAKE_SHARED_LIBRARY_SUFFIX} libmariadb ${INSTALL_PATH})
"libmysqlclient_r${CMAKE_SHARED_LIBRARY_SUFFIX}" create_symlink(libmysqlclient_r${CMAKE_SHARED_LIBRARY_SUFFIX} libmariadb ${INSTALL_PATH})
"libmysqlclient${CMAKE_STATIC_LIBRARY_SUFFIX}" create_symlink(libmysqlclient${CMAKE_STATIC_LIBRARY_SUFFIX} mariadbclient ${INSTALL_PATH})
COMMAND ${CMAKE_COMMAND} ARGS -E remove -f libmysql${CMAKE_SHARED_LIBRARY_SUFFIX} create_symlink(libmysqlclient_r${CMAKE_STATIC_LIBRARY_SUFFIX} mariadbclient ${INSTALL_PATH})
COMMAND ${CMAKE_COMMAND} ARGS -E create_symlink libmariadb${CMAKE_SHARED_LIBRARY_SUFFIX} libmysql${CMAKE_SHARED_LIBRARY_SUFFIX}
COMMAND ${CMAKE_COMMAND} ARGS -E remove -f libmysqlclient_r${CMAKE_SHARED_LIBRARY_SUFFIX}
COMMAND ${CMAKE_COMMAND} ARGS -E create_symlink libmariadb${CMAKE_SHARED_LIBRARY_SUFFIX} libmysqlclient_r${CMAKE_SHARED_LIBRARY_SUFFIX}
COMMAND ${CMAKE_COMMAND} ARGS -E remove -f libmysqlclient${CMAKE_SHARED_LIBRARY_SUFFIX}
COMMAND ${CMAKE_COMMAND} ARGS -E create_symlink libmariadb${CMAKE_SHARED_LIBRARY_SUFFIX} libmysqlclient${CMAKE_SHARED_LIBRARY_SUFFIX}
COMMAND ${CMAKE_COMMAND} ARGS -E remove -f libmysqlclient${CMAKE_STATIC_LIBRARY_SUFFIX}
COMMAND ${CMAKE_COMMAND} ARGS -E create_symlink libmariadbclient${CMAKE_STATIC_LIBRARY_SUFFIX} libmysqlclient${CMAKE_STATIC_LIBRARY_SUFFIX}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/libmariadb
DEPENDS libmariadb mariadbclient)
ADD_CUSTOM_TARGET(LIBMYSQL_SYMLINKS
ALL
DEPENDS "libmysql${CMAKE_SHARED_LIBRARY_SUFFIX}"
"libmysqlclient_r${CMAKE_SHARED_LIBRARY_SUFFIX}"
"libmysqlclient${CMAKE_SHARED_LIBRARY_SUFFIX}"
"libmysqlclient${CMAKE_STATIC_LIBRARY_SUFFIX}"
VERBATIM)
ENDIF() ENDIF()
@@ -423,14 +415,6 @@ INSTALL(TARGETS
LIBRARY DESTINATION "${LIB_INSTALL_DIR}/${SUFFIX_INSTALL_DIR}" LIBRARY DESTINATION "${LIB_INSTALL_DIR}/${SUFFIX_INSTALL_DIR}"
ARCHIVE DESTINATION "${LIB_INSTALL_DIR}/${SUFFIX_INSTALL_DIR}") ARCHIVE DESTINATION "${LIB_INSTALL_DIR}/${SUFFIX_INSTALL_DIR}")
IF(NOT WIN32 AND WITH_MYSQLCOMPAT)
INSTALL(FILES "${CMAKE_BINARY_DIR}/libmariadb/libmysql${CMAKE_SHARED_LIBRARY_SUFFIX}"
"${CMAKE_BINARY_DIR}/libmariadb/libmysqlclient${CMAKE_SHARED_LIBRARY_SUFFIX}"
"${CMAKE_BINARY_DIR}/libmariadb/libmysqlclient_r${CMAKE_SHARED_LIBRARY_SUFFIX}"
"${CMAKE_BINARY_DIR}/libmariadb/libmysqlclient${CMAKE_STATIC_LIBRARY_SUFFIX}"
DESTINATION ${LIB_INSTALL_DIR}/mariadb)
ENDIF()
INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/include/ INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/include/
DESTINATION ${INCLUDE_INSTALL_DIR}/${SUFFIX_INSTALL_DIR}) DESTINATION ${INCLUDE_INSTALL_DIR}/${SUFFIX_INSTALL_DIR})
INSTALL(FILES INSTALL(FILES

View File

@@ -1376,13 +1376,16 @@ int STDCALL
mysql_ssl_set(MYSQL *mysql, const char *key, const char *cert, mysql_ssl_set(MYSQL *mysql, const char *key, const char *cert,
const char *ca, const char *capath, const char *cipher) const char *ca, const char *capath, const char *cipher)
{ {
mysql->options.ssl_key = key==0 ? 0 : my_strdup(key,MYF(0)); #ifdef HAVE_SSL
mysql->options.ssl_cert = cert==0 ? 0 : my_strdup(cert,MYF(0)); return (mysql_optionsv(mysql, MYSQL_OPT_SSL_KEY, key) |
mysql->options.ssl_ca = ca==0 ? 0 : my_strdup(ca,MYF(0)); mysql_optionsv(mysql, MYSQL_OPT_SSL_CERT, cert) |
mysql->options.ssl_capath = capath==0 ? 0 : my_strdup(capath,MYF(0)); mysql_optionsv(mysql, MYSQL_OPT_SSL_CA, ca) |
mysql->options.ssl_cipher = cipher==0 ? 0 : my_strdup(cipher,MYF(0)); mysql_optionsv(mysql, MYSQL_OPT_SSL_CAPATH, capath) |
/* todo: add crl stuff */ mysql_optionsv(mysql, MYSQL_OPT_SSL_CIPHER, cipher)) ? 1 : 0;
#else
return 0; return 0;
#endif
} }
/************************************************************************** /**************************************************************************
@@ -1711,10 +1714,10 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user,
if (mysql->options.extension && mysql->options.extension->async_context && if (mysql->options.extension && mysql->options.extension->async_context &&
mysql->options.extension->async_context->active) mysql->options.extension->async_context->active)
break; break;
else if (socket_block(sock, 1) == SOCKET_ERROR) else if (socket_block(sock, 0) == SOCKET_ERROR)
{ {
closesocket(sock); closesocket(sock);
continue; continue;
} }
break; /* success! */ break; /* success! */
} }
@@ -1739,7 +1742,6 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user,
goto error; goto error;
} }
} }
/* set timeouts */ /* set timeouts */
net->vio->read_timeout= mysql->options.read_timeout; net->vio->read_timeout= mysql->options.read_timeout;
net->vio->write_timeout= mysql->options.write_timeout; net->vio->write_timeout= mysql->options.write_timeout;
@@ -1767,8 +1769,8 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user,
vio_write_timeout(net->vio, mysql->options.read_timeout); vio_write_timeout(net->vio, mysql->options.read_timeout);
/* Get version info */ /* Get version info */
mysql->protocol_version= PROTOCOL_VERSION; /* Assume this */ mysql->protocol_version= PROTOCOL_VERSION; /* Assume this */
if (mysql->options.connect_timeout >= 0 && if (mysql->options.connect_timeout &&
vio_wait_or_timeout(net->vio, FALSE, mysql->options.connect_timeout * 1000) < 1) vio_wait_or_timeout(net->vio, TRUE, mysql->options.connect_timeout * 1000) < 1)
{ {
my_set_error(mysql, CR_SERVER_LOST, SQLSTATE_UNKNOWN, my_set_error(mysql, CR_SERVER_LOST, SQLSTATE_UNKNOWN,
ER(CR_SERVER_LOST_EXTENDED), ER(CR_SERVER_LOST_EXTENDED),
@@ -3031,23 +3033,23 @@ mysql_optionsv(MYSQL *mysql,enum mysql_option option, ...)
break; break;
case MYSQL_OPT_SSL_KEY: case MYSQL_OPT_SSL_KEY:
my_free(mysql->options.ssl_key); my_free(mysql->options.ssl_key);
mysql->options.ssl_key=my_strdup((char *)arg1,MYF(MY_WME)); mysql->options.ssl_key=my_strdup((char *)arg1,MYF(MY_WME | MY_ALLOW_ZERO_PTR));
break; break;
case MYSQL_OPT_SSL_CERT: case MYSQL_OPT_SSL_CERT:
my_free(mysql->options.ssl_cert); my_free(mysql->options.ssl_cert);
mysql->options.ssl_cert=my_strdup((char *)arg1,MYF(MY_WME)); mysql->options.ssl_cert=my_strdup((char *)arg1,MYF(MY_WME | MY_ALLOW_ZERO_PTR));
break; break;
case MYSQL_OPT_SSL_CA: case MYSQL_OPT_SSL_CA:
my_free(mysql->options.ssl_ca); my_free(mysql->options.ssl_ca);
mysql->options.ssl_ca=my_strdup((char *)arg1,MYF(MY_WME)); mysql->options.ssl_ca=my_strdup((char *)arg1,MYF(MY_WME | MY_ALLOW_ZERO_PTR));
break; break;
case MYSQL_OPT_SSL_CAPATH: case MYSQL_OPT_SSL_CAPATH:
my_free(mysql->options.ssl_capath); my_free(mysql->options.ssl_capath);
mysql->options.ssl_capath=my_strdup((char *)arg1,MYF(MY_WME)); mysql->options.ssl_capath=my_strdup((char *)arg1,MYF(MY_WME | MY_ALLOW_ZERO_PTR));
break; break;
case MYSQL_OPT_SSL_CIPHER: case MYSQL_OPT_SSL_CIPHER:
my_free(mysql->options.ssl_cipher); my_free(mysql->options.ssl_cipher);
mysql->options.ssl_cipher=my_strdup((char *)arg1,MYF(MY_WME)); mysql->options.ssl_cipher=my_strdup((char *)arg1,MYF(MY_WME | MY_ALLOW_ZERO_PTR));
break; break;
case MYSQL_OPT_SSL_CRL: case MYSQL_OPT_SSL_CRL:
OPT_SET_EXTENDED_VALUE(&mysql->options, ssl_crl, (char *)arg1, 1); OPT_SET_EXTENDED_VALUE(&mysql->options, ssl_crl, (char *)arg1, 1);

View File

@@ -283,10 +283,9 @@ static int my_ssl_set_certs(MYSQL *mysql)
if ((certstore= SSL_CTX_get_cert_store(SSL_context))) if ((certstore= SSL_CTX_get_cert_store(SSL_context)))
{ {
if (X509_STORE_load_locations(certstore, mysql->options.ssl_ca, if (X509_STORE_load_locations(certstore, mysql->options.extension->ssl_crl,
mysql->options.ssl_capath) == 0 || mysql->options.extension->ssl_crlpath) == 0 ||
X509_STORE_set_flags(certstore, X509_V_FLAG_CRL_CHECK | X509_STORE_set_flags(certstore, X509_V_FLAG_CRL_CHECK | X509_V_FLAG_CRL_CHECK_ALL) == 0)
X509_V_FLAG_CRL_CHECK_ALL) == 0)
goto error; goto error;
} }
} }

View File

@@ -263,7 +263,7 @@ static int send_client_reply_packet(MCPVIO_EXT *mpvio,
mysql->client_flag|= CLIENT_SSL; mysql->client_flag|= CLIENT_SSL;
/* if server doesn't support SSL and verification of server certificate /* if server doesn't support SSL and verification of server certificate
was set to mandator, we need to return an error */ was set to mandatory, we need to return an error */
if (mysql->options.use_ssl && !(mysql->server_capabilities & CLIENT_SSL)) if (mysql->options.use_ssl && !(mysql->server_capabilities & CLIENT_SSL))
{ {
if ((mysql->client_flag & CLIENT_SSL_VERIFY_SERVER_CERT) || if ((mysql->client_flag & CLIENT_SSL_VERIFY_SERVER_CERT) ||

View File

@@ -77,7 +77,12 @@ gptr my_memdup(const unsigned char *from, size_t length, myf MyFlags)
my_string my_strdup(const char *from, myf MyFlags) my_string my_strdup(const char *from, myf MyFlags)
{ {
gptr ptr; gptr ptr;
uint length=(uint) strlen(from)+1; uint length;
if ((MyFlags & MY_ALLOW_ZERO_PTR) && !from)
return NULL;
length=(uint) strlen(from)+1;
if ((ptr=my_malloc(length,MyFlags)) != 0) if ((ptr=my_malloc(length,MyFlags)) != 0)
memcpy((unsigned char*) ptr, (unsigned char*) from,(size_t) length); memcpy((unsigned char*) ptr, (unsigned char*) from,(size_t) length);
return((my_string) ptr); return((my_string) ptr);

View File

@@ -1887,6 +1887,7 @@ int STDCALL mysql_stmt_next_result(MYSQL_STMT *stmt)
if (mysql_next_result(stmt->mysql)) 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, SET_CLIENT_STMT_ERROR(stmt, stmt->mysql->net.last_errno, stmt->mysql->net.sqlstate,
stmt->mysql->net.last_error); stmt->mysql->net.last_error);
DBUG_RETURN(1); DBUG_RETURN(1);

View File

@@ -805,7 +805,7 @@ mysql_close_start(MYSQL *sock)
int res; int res;
/* It is legitimate to have NULL sock argument, which will do nothing. */ /* It is legitimate to have NULL sock argument, which will do nothing. */
if (sock) if (sock && sock->net.vio)
{ {
res= mysql_close_slow_part_start(sock); res= mysql_close_slow_part_start(sock);
/* If we need to block, return now and do the rest in mysql_close_cont(). */ /* If we need to block, return now and do the rest in mysql_close_cont(). */

View File

@@ -164,7 +164,11 @@ static my_bool net_realloc(NET *net, size_t length)
DBUG_RETURN(1); DBUG_RETURN(1);
} }
pkt_length = (length+IO_SIZE-1) & ~(IO_SIZE-1); pkt_length = (length+IO_SIZE-1) & ~(IO_SIZE-1);
if (!(buff=(uchar*) my_realloc((char*) net->buff, pkt_length + 1, MYF(MY_WME)))) /* reallocate buffer:
size= pkt_length + NET_HEADER_SIZE + COMP_HEADER_SIZE */
if (!(buff=(uchar*) my_realloc((char*) net->buff,
pkt_length + NET_HEADER_SIZE + COMP_HEADER_SIZE,
MYF(MY_WME))))
{ {
DBUG_PRINT("info", ("Out of memory")); DBUG_PRINT("info", ("Out of memory"));
net->error=1; net->error=1;

View File

@@ -200,10 +200,17 @@ static int test_conc131(MYSQL *my)
return OK; return OK;
} }
static int test_conc129(MYSQL *my)
{
MYSQL *mysql= mysql_init(NULL);
FAIL_IF(mysql_close_start(mysql), "No error expected");
}
struct my_tests_st my_tests[] = { struct my_tests_st my_tests[] = {
{"async1", async1, TEST_CONNECTION_DEFAULT, 0, NULL, NULL}, {"async1", async1, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"test_conc131", test_conc131, TEST_CONNECTION_NONE, 0, NULL, NULL}, {"test_conc131", test_conc131, TEST_CONNECTION_NONE, 0, NULL, NULL},
{"test_conc129", test_conc129, TEST_CONNECTION_NONE, 0, NULL, NULL},
{NULL, NULL, 0, 0, NULL, NULL} {NULL, NULL, 0, 0, NULL, NULL}
}; };

View File

@@ -3868,7 +3868,46 @@ static int test_conc_5(MYSQL *mysql)
return OK; return OK;
} }
static int test_conc141(MYSQL *mysql)
{
int rc;
MYSQL_RES *res;
char *query= "CALL p_conc141";
MYSQL_STMT *stmt= mysql_stmt_init(mysql);
rc= mysql_query(mysql, "DROP TABLE IF EXISTS conc141");
check_mysql_rc(rc, mysql);
rc= mysql_query(mysql, "CREATE TABLE conc141 (KeyVal int not null primary key)");
check_mysql_rc(rc, mysql);
rc= mysql_query(mysql, "INSERT INTO conc141 VALUES(1)");
check_mysql_rc(rc, mysql);
rc= mysql_query(mysql, "DROP PROCEDURE IF EXISTS p_conc141");
check_mysql_rc(rc, mysql);
rc= mysql_query(mysql, "CREATE PROCEDURE p_conc141()\n"
"BEGIN\n"
"select * from conc141;\n"
"insert into conc141(KeyVal) VALUES(1);\n"
"END");
check_mysql_rc(rc, mysql);
rc= mysql_stmt_prepare(stmt, query, strlen(query));
check_stmt_rc(rc, stmt);
rc= mysql_stmt_execute(stmt);
check_stmt_rc(rc, stmt);
/* skip first result */
rc= mysql_stmt_next_result(stmt);
FAIL_IF(rc==-1, "No more results and error expected");
mysql_stmt_free_result(stmt);
FAIL_IF(mysql_stmt_errno(stmt), "No Error expected");
rc= mysql_stmt_execute(stmt);
check_stmt_rc(rc, stmt);
mysql_stmt_close(stmt);
return OK;
}
struct my_tests_st my_tests[] = { struct my_tests_st my_tests[] = {
{"test_conc141", test_conc141, TEST_CONNECTION_NEW, 0, NULL , NULL},
{"test_conc67", test_conc67, TEST_CONNECTION_DEFAULT, 0, NULL , NULL}, {"test_conc67", test_conc67, TEST_CONNECTION_DEFAULT, 0, NULL , NULL},
{"test_conc_5", test_conc_5, TEST_CONNECTION_DEFAULT, 0, NULL , NULL}, {"test_conc_5", test_conc_5, TEST_CONNECTION_DEFAULT, 0, NULL , NULL},
{"test_bug1115", test_bug1115, TEST_CONNECTION_DEFAULT, 0, NULL , NULL}, {"test_bug1115", test_bug1115, TEST_CONNECTION_DEFAULT, 0, NULL , NULL},