Commit Graph

137 Commits

Author SHA1 Message Date
e840f92cbb Make query_classifier a wrapper.
The query_classifier library is now only a wrapper that loads an
actual query classifier implementation. Currently it is hardwired
to load qc_mysqlembedded, which implements the query classifier
API using MySQL embedded.

This will be changed, so that the library to load is specified
when qc_init() is called. That will then allow the query classifier
to be specified in the config file.

Currently there seems to be a conflict between the mysql_library_end()
call made in qc_mysqlembedded and the mysql_library_end() call made in
gateway.c. The reason is that they both finalize a shared library.
For the time being mysql_library_end() is not called in gateway.c.
This problem is likely to go away by switching from the client
library to the connector-c library.
2016-01-29 16:35:03 +02:00
42b1722e49 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.
2016-01-25 21:43:49 +02:00
985543dbb2 Fixed merge conflict
One function in the query classifier used the old name which led to undefined
symbols.
2016-01-12 09:19:46 +02:00
8ee110efa8 Fixed canonicalization and added more tests
Fixed mistakes in the canonicalization regular expressions and altered the
functions to use a source and destination buffers. This reduces the amount
of memory allocations that take place.

Added more canonical query tests to the internal test suite.
2016-01-11 17:14:44 +02:00
e0c84e0fe3 Added removal of MySQL style comments to query canonicalization.
Also fixed minor issues with the canonicalization regular expressions.
2016-01-11 17:13:14 +02:00
995ed8c9d2 Improved query canonicalization
The query does not need to be parsed for it to be canonicalized and the parsing
uses the PCRE2 library. The regular expressions were changed so that only one
call to the function which replaces literal unquoted values is made.
2016-01-11 17:08:03 +02:00
f57df4b967 Hide unused public functions
parse_query and query_is_parsed are not used outside query classifier
anymore. Consequently, they can be made internal.
2016-01-11 15:28:00 +02:00
79fa226000 Move private type to implementation.
parsing_info_t is only used by the query_classifier implementation.
No need to keep it public.
2016-01-11 14:58:15 +02:00
23a7562d3a Replace skygw_ type prefix with qc_.
- skygw_query_type_t renamed to qc_query_type_t.
- skygw_query_op_t renamed to qc_query_op_t.
2016-01-11 12:06:21 +02:00
2f42246880 Rename query classifier functions consistently.
All public query classifier functions now have the prefix qc_.
2016-01-11 12:04:52 +02:00
6e6ad67504 Parse query if it has not been parsed already.
Now consistently all functions parse the query if it has not
been parsed already.
2016-01-11 10:02:27 +02:00
4b21154066 Make private query_classifier functions static.
parsing_info_init and parsing_info_done are only used by
query_classifier. Hence they should not be public and extern.
2016-01-07 22:36:15 +02:00
93f10fdb7b Formatted query_classifier
Query_classifier formatted according to the style guide.
2015-12-02 13:36:51 +02:00
a8535f42af Remove all traces of logfile_t
The earlier log file based approach for enabling and disabling
messages has now been completely replaced with the syslog priority
based approach.

Similarly as with log files before it is now possible to enable
and disable a log priority for a particular session, even though
it apparently has not been used much.

The local test-programs of the logging has got minimal attention
only to make them compile. They should get an overhaul as they did
not work before either.
2015-11-23 19:10:53 +02:00
23b2ce004b Added support for MariaDB 10.1 embedded library
The code used in the query classifier was not compatible with 10.1 version
of MariaDB and needed to be fine tuned in order for it to work with all
supported versions of MariaDB.
2015-11-23 11:41:05 +02:00
1bd16db593 query_classifier: LOGIF and skygw_log_write replaced.
The use of LOgIF and skygw_log_write replaced with the equivalent
MXS_[ERROR|WARNING|NOTICE|INFO|DEBUG] macros.
2015-11-16 13:42:37 +02:00
a355e1beef Printf format checking added to logging function.
Printf format checking added to logging function and all
issues that were revealed by that fixed.
2015-11-16 12:40:49 +02:00
834a88aeda Log variables moved to log_manager.h
The log manager variables lm_enabled_log_files_bitmask, log_ses_count
and tls_log_info that earlier were declared separately in every
c-file are now declared in the log_manager.h header.
2015-11-04 14:26:53 +02:00
0accf869de Fix to MXS-365: https://mariadb.atlassian.net/browse/MXS-365 Added tracking of LOAD DATA LOCAL INFILE
While a LOAD DATA LOCAL INFILE query is being executed, all queries will be sent to the master
and they will not be processed as normal packets.
2015-11-04 12:47:55 +02:00
9064212353 Fixed queries without assignment operators failing to be properly canonized. 2015-10-27 14:20:43 +02:00
d960984bb9 Added NULL check for func_name() 2015-07-20 16:26:34 +03:00
0684cd40ce Fix to MXS-220: https://mariadb.atlassian.net/browse/MXS-220
Switched Item_func::name to Item_func::func_name.
2015-07-20 16:13:47 +03:00
5f49a62724 Fix to MXS-166
Added a call to thd->end_statement in parsing_info_done
2015-05-26 14:41:20 +03:00
c8e5df94be Fixed memory leak in query_classifier. 2015-05-03 09:58:17 +03:00
440a6ece59 Fix to MXS-78: https://mariadb.atlassian.net/browse/MXS-78
Literal USE statements are now parsed and classified as a database change queries.
2015-04-02 08:16:45 +03:00
9e7afeb302 Merge branch 'develop' into MAX-324
Conflicts:
	macros.cmake
	server/core/config.c
	server/core/service.c
	server/modules/routing/CMakeLists.txt
2015-02-24 06:26:55 +02:00
46c4fefb00 Fixes to coverity defects 87601 87557 87548 87547 87546 87545 87544 87536 87535 87529 87528 2015-02-22 22:29:30 +02:00
a2bff1dcea Merge branch 'develop' into MAX-324 2015-02-16 14:58:35 +02:00
37360eb02e Merge pull request #72 from hholzgra/hartmut-warnings-2nd
"Hartmut warnings 2nd" merged.
2015-02-15 20:26:09 +02:00
3bad5dc814 Fixes to Coverity defects 87308, 87307, 87306, 87074, 87068. 2015-02-14 07:54:17 +02:00
792d4e9c8c fix 'unused value' warning 2015-02-13 16:28:57 +01:00
0d4761ade8 Merge branch 'develop' into MAX-324 2015-02-06 23:27:59 +02:00
32c9d39302 Fix to bug 771: http://bugs.mariadb.com/show_bug.cgi?id=711
SHOW GLOBAL STATUS was misclassified as a global system variable write and was being routed to all servers instead of being routed only to the master.
2015-02-05 18:31:01 +02:00
db1ea422a0 Merge branch 'develop' into MAX-324
Conflicts:
	server/core/modutil.c
2015-01-20 04:25:40 +02:00
c5c9165a26 Merge branch 'develop' of https://github.com/mariadb-corporation/MaxScale into develop 2015-01-15 15:21:58 +02:00
39e4253c81 Fix to bug #694, http://bugs.mariadb.com/show_bug.cgi?id=694
query_classifier.cc: set_query_type lost previous query type if the new was more restrictive. Problem was that if query is both READ and SESSION_WRITE and configuration parameter use_sql_variables_in=all was set, routing target became ambiguous. Replaced call to set_query_type with simply adding new type to type (=bit field) and checking unsupported combinations in readwritesplit.c:get_route_target. If such a case is met, a detailed error is written to error log in readwritesplit.c. mysql_client.c sees the error code and sends an error to client. Then mysql_client.c calls router's handleError which ensures that there are enough backend servers so that the session can continue.
2015-01-15 15:16:22 +02:00
533042b61a Fixes to coverity defects from 85514 up to 85529. 2015-01-15 14:09:11 +02:00
db70163373 Merge branch 'develop' into MAX-324
Conflicts:
	query_classifier/query_classifier.cc
2015-01-15 13:17:42 +02:00
b3824a1eaf Clean up bits and pieces, removed some unnecessary checks. 2015-01-14 14:11:19 +02:00
0187edf559 Merge branch 'develop' into MAX-324
Conflicts:
	query_classifier/query_classifier.cc
2015-01-14 04:56:58 +02:00
2b4e6bb594 Merge branch 'develop' into firewall
Conflicts:
	server/modules/filter/test/CMakeLists.txt
2015-01-13 07:48:43 +02:00
9177b6bcd3 Merge branch 'develop' into MAX-324
Conflicts:
	query_classifier/query_classifier.h
2015-01-13 06:34:22 +02:00
ee2876e9a4 Added parameter NULL checks to query_classifier.cc 2015-01-10 21:29:29 +02:00
fed828eb29 Merge branch 'release-1.0GA' into MAX-324
Conflicts:
	server/MaxScale_template.cnf
	server/core/service.c
2015-01-06 04:45:30 +02:00
8729413655 Fixed build issues due to missing headers. 2015-01-05 11:37:37 +02:00
ba009e5fd3 Fixes to Coverity defects 85010 84878 72752 72742 72719 and 73418.
skygw_utils.cc: Added function is_valid_posix_path that checks if a path is POSIX-compliant.
2015-01-05 06:05:56 +02:00
1e43102eea Merge branch 'release-1.0GA' into firewall 2014-12-16 11:10:02 +02:00
04a92e40df Fixes to Coverity defects 84879 84878 72752 72742 2014-12-15 06:28:47 +02:00
d1f5eaaaec Fixed databases not being detected in query_classifier when creating new tables. 2014-12-12 16:57:19 +02:00
f2cec6e51e Merge branch 'release-1.0GA' into firewall
Conflicts:
	query_classifier/query_classifier.cc
2014-12-09 14:23:07 +02:00