Upgrading MariaDB Connector C to 2.3.1

ProxySQL used a patched version of MariaDB Connector C 2.1.0 (aka libmariadbclient).
That version was patched to fix several bugs.
Although, version 2.1.0 seems to be quite broken in handling Prepared Statements, so now MariaDB Connector C was upgraded to version 2.3.1 .
Since this is a key compoenent in ProxySQL, several tests need to be performed because of this major change.
pull/739/head
René Cannaò 10 years ago
parent 304944a194
commit 5f0b68d004

1
.gitignore vendored

@ -79,6 +79,7 @@ deps/mariadb-client-library/mariadb_client-2.0.0-Linux-x86/
deps/mariadb-client-library/mariadb_client-2.0.0-Linux-x86_64/
deps/mariadb-client-library/mariadb_client-2.0.0-src/
deps/mariadb-client-library/mariadb-connector-c-2.1.0-src/
deps/mariadb-client-library/mariadb-connector-c-2.3.1/
#glib
deps/glib/glib-2.40.0/

8
deps/Makefile vendored

@ -22,12 +22,14 @@ jemalloc: jemalloc/jemalloc/lib/libjemalloc.a
mariadb-client-library/mariadb_client/include/my_config.h:
cd mariadb-client-library && rm -rf mariadb-connector-c-2.1.0-src
cd mariadb-client-library && tar -zxf mariadb-connector-c-2.1.0-src.tar.gz
# cd mariadb-client-library && rm -rf mariadb-connector-c-2.1.0-src
# cd mariadb-client-library && tar -zxf mariadb-connector-c-2.1.0-src.tar.gz
cd mariadb-client-library && rm -rf mariadb-connector-c-2.3.1
cd mariadb-client-library && tar -zxf mariadb-connector-c-2.3.1-src.tar.gz
cd mariadb-client-library/mariadb_client && cmake .
cd mariadb-client-library/mariadb_client && patch libmariadb/libmariadb.c < ../libmariadb.c.patch
cd mariadb-client-library/mariadb_client && patch libmariadb/net.c < ../net.c.patch
cd mariadb-client-library/mariadb_client && patch libmariadb/mysql_async.c < ../mysql_async.c.patch
# cd mariadb-client-library/mariadb_client && patch libmariadb/mysql_async.c < ../mysql_async.c.patch
cd mariadb-client-library/mariadb_client && patch libmariadb/password.c < ../password.c.patch
cd mariadb-client-library/mariadb_client && patch include/mysql.h < ../mysql.h.patch
cd mariadb-client-library/mariadb_client && CC=${CC} CXX=${CXX} ${MAKE}

@ -1,21 +1,3 @@
@@ -2192,6 +2192,17 @@
my_free(mysql->options.extension->ssl_crlpath, MYF(MY_ALLOW_ZERO_PTR));
if(hash_inited(&mysql->options.extension->connect_attrs))
hash_free(&mysql->options.extension->connect_attrs);
+ {
+ struct mysql_async_context *ctxt;
+ if ((ctxt = mysql->options.extension->async_context) != 0) {
+ //if (ctxt->active==0) {
+ if (&ctxt->async_context)
+ my_context_destroy(&ctxt->async_context);
+ my_free((gptr)ctxt, MYF(0));
+ mysql->options.extension->async_context=NULL;
+ //}
+ }
+ }
}
my_free((gptr)mysql->options.extension, MYF(MY_ALLOW_ZERO_PTR));
/* clear all pointer */
@@ -2257,6 +2268,44 @@
/* reset the connection in all active statements
todo: check stmt->mysql in mysql_stmt* functions ! */
@ -33,7 +15,7 @@
+ bzero((char*) &mysql->options,sizeof(mysql->options));
+ mysql->net.vio= 0;
+ if (mysql->free_me)
+ my_free((gptr) mysql,MYF(0));
+ my_free((gptr) mysql);
+ }
+ DBUG_VOID_RETURN;
+}

@ -1 +1 @@
mariadb-connector-c-2.1.0-src
mariadb-connector-c-2.3.1

@ -1,10 +1,8 @@
@@ -420,6 +420,9 @@
@@ -424,6 +424,7 @@
const char *unix_socket,
unsigned long clientflag);
void STDCALL mysql_close(MYSQL *sock);
+void STDCALL mysql_close_no_command(MYSQL *sock);
int STDCALL mysql_select_db(MYSQL *mysql, const char *db);
+int STDCALL mysql_select_db_start(int *ret, MYSQL *mysql, const char *db);
+int STDCALL mysql_select_db_cont(int *ret, MYSQL *mysql, int ready_status);
+void STDCALL mysql_close_no_command(MYSQL *sock);
int STDCALL mysql_query(MYSQL *mysql, const char *q);
int STDCALL mysql_send_query(MYSQL *mysql, const char *q,
unsigned long length);

@ -479,17 +479,17 @@ void MySQL_Connection::stmt_execute_start() {
if (_rc) {
fprintf(stderr, " mysql_stmt_bind_param() failed: %s\n", mysql_stmt_error(query.stmt));
}
proxy_info("Calling mysql_stmt_execute_start, current state: %d\n", query.stmt->state);
//proxy_info("Calling mysql_stmt_execute_start, current state: %d\n", query.stmt->state);
async_exit_status = mysql_stmt_execute_start(&interr , query.stmt);
fprintf(stderr,"Current state: %d\n", query.stmt->state);
//fprintf(stderr,"Current state: %d\n", query.stmt->state);
}
void MySQL_Connection::stmt_execute_cont(short event) {
proxy_debug(PROXY_DEBUG_MYSQL_PROTOCOL, 6,"event=%d\n", event);
proxy_info("Calling mysql_stmt_execute_cont, current state: %d\n", query.stmt->state);
//proxy_info("Calling mysql_stmt_execute_cont, current state: %d\n", query.stmt->state);
async_exit_status = mysql_stmt_execute_cont(&interr , query.stmt , mysql_status(event, true));
//proxy_info("mysql_stmt_execute_cont , ret=%d\n", async_exit_status);
fprintf(stderr,"Current state: %d\n", query.stmt->state);
//fprintf(stderr,"Current state: %d\n", query.stmt->state);
}
void MySQL_Connection::stmt_execute_store_result_start() {

Loading…
Cancel
Save