Make query classifier self-contained.
Only the query classifier needs the functionality of the embedded server, while the rest of MaxScale is content with the client library or Connector/C. This have now been rearranged so that query-classifier links with the embedded static library and then explicitly exports its own functions using the query_classifier.map linker script. That way query classifier will use the embedded library, while the rest of maxscale use the client library, and this without conflicts. Currently, query_classifier is not linked to maxscale-common, but executables must link to maxscale-common and query_classifier.
This commit is contained in:
@ -1,6 +1,9 @@
|
||||
add_library(query_classifier SHARED query_classifier.cc)
|
||||
target_link_libraries(query_classifier maxscale-common)
|
||||
|
||||
target_link_libraries(query_classifier ${EMBEDDED_LIB} aio crypt crypto dl m ${PCRE_LINK_FLAGS} ssl stdc++ z)
|
||||
set_target_properties(query_classifier PROPERTIES VERSION "1.0.0")
|
||||
set_target_properties(query_classifier PROPERTIES LINK_FLAGS -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/query_classifier.map)
|
||||
#set_target_properties(query_classifier PROPERTIES LINK_FLAGS -Wl,-z,defs)
|
||||
install(TARGETS query_classifier COMPONENT lib DESTINATION ${MAXSCALE_LIBDIR})
|
||||
if(BUILD_TESTS)
|
||||
add_subdirectory(test)
|
||||
|
@ -46,6 +46,11 @@
|
||||
#include <sql_parse.h>
|
||||
#include <errmsg.h>
|
||||
#include <client_settings.h>
|
||||
// In client_settings.h mysql_server_init and mysql_server_end are defined to
|
||||
// mysql_client_plugin_init and mysql_client_plugin_deinit respectively.
|
||||
// Those must be undefined, so that we here really call mysql_server_[init|end].
|
||||
#undef mysql_server_init
|
||||
#undef mysql_server_end
|
||||
#include <set_var.h>
|
||||
#include <strfunc.h>
|
||||
#include <item_func.h>
|
||||
@ -1478,14 +1483,13 @@ static parsing_info_t* parsing_info_init(void (*donefun)(void *))
|
||||
|
||||
/** Get server handle */
|
||||
mysql = mysql_init(NULL);
|
||||
ss_dassert(mysql != NULL);
|
||||
|
||||
if (mysql == NULL)
|
||||
{
|
||||
MXS_ERROR("Call to mysql_real_connect failed due %d, %s.",
|
||||
mysql_errno(mysql),
|
||||
mysql_error(mysql));
|
||||
|
||||
ss_dassert(mysql != NULL);
|
||||
goto retblock;
|
||||
}
|
||||
|
||||
@ -1770,3 +1774,42 @@ qc_query_op_t qc_get_operation(GWBUF* querybuf)
|
||||
|
||||
return operation;
|
||||
}
|
||||
|
||||
|
||||
bool qc_init(int argc, char** argv, char** groups)
|
||||
{
|
||||
int rc = mysql_library_init(argc, argv, groups);
|
||||
|
||||
if (rc != 0)
|
||||
{
|
||||
MXS_ERROR("mysql_library_init() failed. Error code: %d", rc);
|
||||
}
|
||||
else
|
||||
{
|
||||
MXS_NOTICE("Query classifier initialized.");
|
||||
}
|
||||
|
||||
return rc == 0;
|
||||
}
|
||||
|
||||
void qc_end()
|
||||
{
|
||||
mysql_library_end();
|
||||
}
|
||||
|
||||
bool qc_thread_init()
|
||||
{
|
||||
bool inited = (mysql_thread_init() == 0);
|
||||
|
||||
if (!inited)
|
||||
{
|
||||
MXS_ERROR("mysql_thread_init() failed.");
|
||||
}
|
||||
|
||||
return inited;
|
||||
}
|
||||
|
||||
void qc_thread_end()
|
||||
{
|
||||
mysql_thread_end();
|
||||
}
|
||||
|
@ -83,6 +83,12 @@ typedef enum
|
||||
|
||||
#define QUERY_IS_TYPE(mask,type) ((mask & type) == type)
|
||||
|
||||
bool qc_init(int argc, char** argv, char** groups);
|
||||
void qc_end();
|
||||
|
||||
bool qc_thread_init();
|
||||
void qc_thread_end();
|
||||
|
||||
/**
|
||||
* Create THD and use it for creating parse tree. Examine parse tree and
|
||||
* classify the query.
|
||||
|
20
query_classifier/query_classifier.map
Normal file
20
query_classifier/query_classifier.map
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
global:
|
||||
qc_end;
|
||||
qc_get_affected_fields;
|
||||
qc_get_canonical;
|
||||
qc_get_created_table_name;
|
||||
qc_get_database_names;
|
||||
qc_get_operation;
|
||||
qc_get_qtype_str;
|
||||
qc_get_table_names;
|
||||
qc_get_type;
|
||||
qc_init;
|
||||
qc_is_drop_table_query;
|
||||
qc_is_real_query;
|
||||
qc_query_has_clause;
|
||||
qc_thread_end;
|
||||
qc_thread_init;
|
||||
local:
|
||||
*;
|
||||
};
|
Reference in New Issue
Block a user