diff --git a/include/maxscale/query_classifier.h b/include/maxscale/query_classifier.h index 86843a18e..c7f3d1a07 100644 --- a/include/maxscale/query_classifier.h +++ b/include/maxscale/query_classifier.h @@ -434,6 +434,13 @@ typedef struct query_classifier void (*qc_info_close)(QC_STMT_INFO* info); } QUERY_CLASSIFIER; +/** + * QC_CACHE specifies the limits of the query classification cache. + */ +typedef struct QC_CACHE_PROPERTIES +{ +} QC_CACHE_PROPERTIES; + /** * Loads and sets up the default query classifier. * @@ -443,9 +450,10 @@ typedef struct query_classifier * * MaxScale calls this function, so plugins should not do that. * + * @param qc_cache If non-NULL, specifies the properties of the QC cache. + * @param sql_mode The default sql mode. * @param plugin_name The name of the plugin from which the query classifier * should be loaded. - * @param sql_mode The default sql mode. * @param plugin_args The arguments to be provided to the query classifier. * * @return True if the query classifier could be loaded and initialized, @@ -453,7 +461,9 @@ typedef struct query_classifier * * @see qc_end qc_thread_init */ -bool qc_setup(const char* plugin_name, qc_sql_mode_t sql_mode, const char* plugin_args); +bool qc_setup(const QC_CACHE_PROPERTIES* cache_properties, + qc_sql_mode_t sql_mode, + const char* plugin_name, const char* plugin_args); /** * Intializes the query classifier. diff --git a/query_classifier/test/classify.c b/query_classifier/test/classify.c index a85c6b465..1dba83d76 100644 --- a/query_classifier/test/classify.c +++ b/query_classifier/test/classify.c @@ -317,7 +317,7 @@ int main(int argc, char** argv) if (mxs_log_init(NULL, ".", MXS_LOG_TARGET_DEFAULT)) { - if (qc_setup(lib, QC_SQL_MODE_DEFAULT, NULL) && + if (qc_setup(NULL, QC_SQL_MODE_DEFAULT, lib, NULL) && qc_process_init(QC_INIT_BOTH) && qc_thread_init(QC_INIT_BOTH)) { diff --git a/query_classifier/test/crash_qc_sqlite.c b/query_classifier/test/crash_qc_sqlite.c index 58e0676ef..edf6fb95b 100644 --- a/query_classifier/test/crash_qc_sqlite.c +++ b/query_classifier/test/crash_qc_sqlite.c @@ -41,7 +41,7 @@ int main() set_libdir(strdup("../qc_sqlite")); - if (qc_setup("qc_sqlite", QC_SQL_MODE_DEFAULT, NULL) && + if (qc_setup(NULL, QC_SQL_MODE_DEFAULT, "qc_sqlite", NULL) && qc_process_init(QC_INIT_BOTH) && qc_thread_init(QC_INIT_BOTH)) { diff --git a/query_classifier/test/version_sensitivity.cc b/query_classifier/test/version_sensitivity.cc index ddbd3a940..f64ce739e 100644 --- a/query_classifier/test/version_sensitivity.cc +++ b/query_classifier/test/version_sensitivity.cc @@ -131,7 +131,7 @@ int main(int argc, char* argv[]) set_libdir(strdup(LIBDIR)); - if (qc_setup(QC_LIB, QC_SQL_MODE_DEFAULT, NULL)) + if (qc_setup(NULL, QC_SQL_MODE_DEFAULT, QC_LIB, NULL)) { if (qc_process_init(QC_INIT_BOTH) && qc_thread_init(QC_INIT_BOTH)) { diff --git a/server/core/gateway.cc b/server/core/gateway.cc index 02edd9c24..ffc589804 100644 --- a/server/core/gateway.cc +++ b/server/core/gateway.cc @@ -1975,7 +1975,7 @@ int main(int argc, char **argv) goto return_main; } - if (!qc_setup(cnf->qc_name, cnf->qc_sql_mode, cnf->qc_args)) + if (!qc_setup(NULL, cnf->qc_sql_mode, cnf->qc_name, cnf->qc_args)) { const char* logerr = "Failed to initialise query classifier library."; print_log_n_stderr(true, true, logerr, logerr, eno); diff --git a/server/core/query_classifier.cc b/server/core/query_classifier.cc index cea75b83d..ac1503697 100644 --- a/server/core/query_classifier.cc +++ b/server/core/query_classifier.cc @@ -255,7 +255,9 @@ private: } -bool qc_setup(const char* plugin_name, qc_sql_mode_t sql_mode, const char* plugin_args) +bool qc_setup(const QC_CACHE_PROPERTIES* cache_properties, + qc_sql_mode_t sql_mode, + const char* plugin_name, const char* plugin_args) { QC_TRACE(); ss_dassert(!this_unit.classifier); @@ -276,6 +278,7 @@ bool qc_setup(const char* plugin_name, qc_sql_mode_t sql_mode, const char* plugi if (rv == QC_RESULT_OK) { this_unit.qc_sql_mode = sql_mode; + this_unit.use_cached_result = (cache_properties ? true : false); } else { diff --git a/server/core/test/canonical_tests/canonizer.cc b/server/core/test/canonical_tests/canonizer.cc index 0c8bd69ab..df7659ee8 100644 --- a/server/core/test/canonical_tests/canonizer.cc +++ b/server/core/test/canonical_tests/canonizer.cc @@ -48,7 +48,7 @@ int main(int argc, char** argv) set_langdir(strdup(".")); set_process_datadir(strdup("/tmp")); - qc_setup("qc_sqlite", QC_SQL_MODE_DEFAULT, NULL); + qc_setup(NULL, QC_SQL_MODE_DEFAULT, "qc_sqlite", NULL); qc_process_init(QC_INIT_BOTH); qc_thread_init(QC_INIT_BOTH); diff --git a/server/core/test/test_trxcompare.cc b/server/core/test/test_trxcompare.cc index f6cb85ea4..d6dd74591 100644 --- a/server/core/test/test_trxcompare.cc +++ b/server/core/test/test_trxcompare.cc @@ -186,7 +186,7 @@ int main(int argc, char* argv[]) set_libdir(strdup("../../../query_classifier/qc_sqlite")); // We have to setup something in order for the regexes to be compiled. - if (qc_setup("qc_sqlite", QC_SQL_MODE_DEFAULT, NULL) && + if (qc_setup(NULL, QC_SQL_MODE_DEFAULT, "qc_sqlite", NULL) && qc_process_init(QC_INIT_BOTH) && qc_thread_init(QC_INIT_BOTH)) { diff --git a/server/core/test/test_trxtracking.cc b/server/core/test/test_trxtracking.cc index 301474f4c..cca6b6f59 100644 --- a/server/core/test/test_trxtracking.cc +++ b/server/core/test/test_trxtracking.cc @@ -423,7 +423,7 @@ int main(int argc, char* argv[]) set_libdir(strdup("../../../query_classifier/qc_sqlite")); // We have to setup something in order for the regexes to be compiled. - if (qc_setup("qc_sqlite", QC_SQL_MODE_DEFAULT, NULL) && + if (qc_setup(NULL, QC_SQL_MODE_DEFAULT, "qc_sqlite", NULL) && qc_process_init(QC_INIT_BOTH) && qc_thread_init(QC_INIT_BOTH)) { diff --git a/server/core/test/test_utils.h b/server/core/test/test_utils.h index afe73af2d..2f54ee436 100644 --- a/server/core/test/test_utils.h +++ b/server/core/test/test_utils.h @@ -42,7 +42,7 @@ void init_test_env(char *path) } dcb_global_init(); set_libdir(MXS_STRDUP(TEST_DIR "/query_classifier/qc_sqlite/")); - qc_setup(NULL, QC_SQL_MODE_DEFAULT, NULL); + qc_setup(NULL, QC_SQL_MODE_DEFAULT, NULL, NULL); qc_process_init(QC_INIT_BOTH); poll_init(); maxscale::MessageQueue::init(); diff --git a/server/modules/filter/cache/test/test_cacheoptions.cc b/server/modules/filter/cache/test/test_cacheoptions.cc index f69958e61..629541022 100644 --- a/server/modules/filter/cache/test/test_cacheoptions.cc +++ b/server/modules/filter/cache/test/test_cacheoptions.cc @@ -423,7 +423,7 @@ int main(int argc, char* argv[]) { if (mxs_log_init(NULL, ".", MXS_LOG_TARGET_DEFAULT)) { - if (qc_setup("qc_sqlite", QC_SQL_MODE_DEFAULT, NULL)) + if (qc_setup(NULL, QC_SQL_MODE_DEFAULT, "qc_sqlite", NULL)) { if (qc_process_init(QC_INIT_SELF)) { diff --git a/server/modules/filter/cache/test/testkeygeneration.cc b/server/modules/filter/cache/test/testkeygeneration.cc index 9be8bd181..861d61358 100644 --- a/server/modules/filter/cache/test/testkeygeneration.cc +++ b/server/modules/filter/cache/test/testkeygeneration.cc @@ -133,7 +133,7 @@ int main(int argc, char* argv[]) if (mxs_log_init(NULL, ".", MXS_LOG_TARGET_DEFAULT)) { - if (qc_setup(NULL, QC_SQL_MODE_DEFAULT, NULL) && qc_process_init(QC_INIT_BOTH)) + if (qc_setup(NULL, QC_SQL_MODE_DEFAULT, NULL, NULL) && qc_process_init(QC_INIT_BOTH)) { const char* zModule = argv[1]; libdir = MXS_STRDUP("../storage/storage_inmemory/"); diff --git a/server/modules/filter/cache/test/testrules.cc b/server/modules/filter/cache/test/testrules.cc index ce7f1f4b7..9a0dec3ba 100644 --- a/server/modules/filter/cache/test/testrules.cc +++ b/server/modules/filter/cache/test/testrules.cc @@ -397,7 +397,7 @@ int main() pConfig->n_threads = 1; set_libdir(MXS_STRDUP_A("../../../../../query_classifier/qc_sqlite/")); - if (qc_setup("qc_sqlite", QC_SQL_MODE_DEFAULT, "") && + if (qc_setup(NULL, QC_SQL_MODE_DEFAULT, "qc_sqlite", "") && qc_process_init(QC_INIT_BOTH) && qc_thread_init(QC_INIT_BOTH)) { diff --git a/server/modules/filter/cache/test/teststorage.cc b/server/modules/filter/cache/test/teststorage.cc index 56c7a934f..9f11233e0 100644 --- a/server/modules/filter/cache/test/teststorage.cc +++ b/server/modules/filter/cache/test/teststorage.cc @@ -54,7 +54,7 @@ int TestStorage::run(int argc, char** argv) { if (mxs_log_init(NULL, ".", MXS_LOG_TARGET_DEFAULT)) { - if (qc_setup(NULL, QC_SQL_MODE_DEFAULT, NULL) && qc_process_init(QC_INIT_BOTH)) + if (qc_setup(NULL, QC_SQL_MODE_DEFAULT, NULL, NULL) && qc_process_init(QC_INIT_BOTH)) { const char* zModule = NULL; size_t threads = m_threads; diff --git a/server/modules/filter/dbfwfilter/test/test_dbfwfilter.cc b/server/modules/filter/dbfwfilter/test/test_dbfwfilter.cc index 2d9a12fd5..eef5dd03f 100644 --- a/server/modules/filter/dbfwfilter/test/test_dbfwfilter.cc +++ b/server/modules/filter/dbfwfilter/test/test_dbfwfilter.cc @@ -995,7 +995,7 @@ int main(int argc, char* argv[]) { if (mxs_log_init(NULL, ".", MXS_LOG_TARGET_STDOUT)) { - if (qc_setup("qc_sqlite", QC_SQL_MODE_DEFAULT, NULL)) + if (qc_setup(NULL, QC_SQL_MODE_DEFAULT, "qc_sqlite", NULL)) { if (qc_process_init(QC_INIT_SELF)) {