MXS-1278: Add 'sql_mode' configuration parameter
Using the 'sql_mode' configuration parameter, the initial sql mode can be specified.
This commit is contained in:
parent
a690b44919
commit
83f8010c4b
@ -519,6 +519,35 @@ This will log all statements that cannot be parsed completely. This may be
|
||||
useful if you suspect that MariaDB MaxScale routes statements to the wrong
|
||||
server (e.g. to a slave instead of to a master).
|
||||
|
||||
#### `sql_mode`
|
||||
|
||||
Specifies whether the query classifier parser should initially expect _MariaDB_
|
||||
or _PL/SQL_ kind of SQL.
|
||||
|
||||
The allowed values are:
|
||||
`default`: The parser expects regular _MariaDB_ SQL.
|
||||
`oracle` : The parser expects PL/SQL.
|
||||
|
||||
```
|
||||
sql_mode=oracle
|
||||
```
|
||||
|
||||
The default value is `default`, which is also used if no value is specified
|
||||
or if `sql_mode=` is not present at all. At runtime, MariaDB MaxScale will
|
||||
recognize statements like
|
||||
```
|
||||
set sql_mode=oracle;
|
||||
```
|
||||
and
|
||||
```
|
||||
set sql_mode=default;
|
||||
```
|
||||
and change mode accordingly.
|
||||
|
||||
Note that MariaDB MaxScale is **not** explicitly aware of the sql mode of
|
||||
the server, so the value of `sql_mode` should reflect the sql mode used
|
||||
when the server is started.
|
||||
|
||||
### Service
|
||||
|
||||
A service represents the database service that MariaDB MaxScale offers to the
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include <sys/utsname.h>
|
||||
|
||||
#include <maxscale/modinfo.h>
|
||||
#include <maxscale/query_classifier.h>
|
||||
|
||||
MXS_BEGIN_DECLS
|
||||
|
||||
@ -74,6 +75,7 @@ typedef struct
|
||||
bool skip_permission_checks; /**< Skip service and monitor permission checks */
|
||||
char qc_name[PATH_MAX]; /**< The name of the query classifier to load */
|
||||
char* qc_args; /**< Arguments for the query classifier */
|
||||
qc_sql_mode_t qc_sql_mode; /**< The query classifier sql mode */
|
||||
} MXS_CONFIG;
|
||||
|
||||
/**
|
||||
|
@ -13,36 +13,6 @@
|
||||
|
||||
/**
|
||||
* @file config.c - Read the gateway.cnf configuration file
|
||||
*
|
||||
* @verbatim
|
||||
* Revision History
|
||||
*
|
||||
* Date Who Description
|
||||
* 21/06/13 Mark Riddoch Initial implementation
|
||||
* 08/07/13 Mark Riddoch Addition on monitor module support
|
||||
* 23/07/13 Mark Riddoch Addition on default monitor password
|
||||
* 06/02/14 Massimiliano Pinto Added support for enable/disable root user in services
|
||||
* 14/02/14 Massimiliano Pinto Added enable_root_user in the service_params list
|
||||
* 11/03/14 Massimiliano Pinto Added Unix socket support
|
||||
* 11/05/14 Massimiliano Pinto Added version_string support to service
|
||||
* 19/05/14 Mark Riddoch Added unique names from section headers
|
||||
* 29/05/14 Mark Riddoch Addition of filter definition
|
||||
* 23/05/14 Massimiliano Pinto Added automatic set of maxscale-id: first listening ipv4_raw + port + pid
|
||||
* 28/05/14 Massimiliano Pinto Added detect_replication_lag parameter
|
||||
* 28/08/14 Massimiliano Pinto Added detect_stale_master parameter
|
||||
* 09/09/14 Massimiliano Pinto Added localhost_match_wildcard_host parameter
|
||||
* 12/09/14 Mark Riddoch Addition of checks on servers list and
|
||||
* internal router suppression of messages
|
||||
* 30/10/14 Massimiliano Pinto Added disable_master_failback parameter
|
||||
* 07/11/14 Massimiliano Pinto Addition of monitor timeouts for connect/read/write
|
||||
* 20/02/15 Markus Mäkelä Added connection_timeout parameter for services
|
||||
* 05/03/15 Massimiliano Pinto Added notification_feedback support
|
||||
* 20/04/15 Guillaume Lefranc Added available_when_donor parameter
|
||||
* 22/04/15 Martin Brampton Added disable_master_role_setting parameter
|
||||
* 26/01/16 Martin Brampton Transfer SSL processing to listener
|
||||
* 31/05/16 Martin Brampton Implement connection throttling, initially no queue
|
||||
*
|
||||
* @endverbatim
|
||||
*/
|
||||
#include <maxscale/config.h>
|
||||
|
||||
@ -1305,6 +1275,22 @@ handle_global_item(const char *name, const char *value)
|
||||
{
|
||||
gateway.qc_args = MXS_STRDUP_A(value);
|
||||
}
|
||||
else if (strcmp(name, "sql_mode") == 0)
|
||||
{
|
||||
if ((*value == 0) || (strcasecmp(value, "default") == 0))
|
||||
{
|
||||
gateway.qc_sql_mode = QC_SQL_MODE_DEFAULT;
|
||||
}
|
||||
else if (strcasecmp(value, "oracle") == 0)
|
||||
{
|
||||
gateway.qc_sql_mode = QC_SQL_MODE_ORACLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
MXS_ERROR("'%s' is not a valid value for '%s'. Allowed values are 'DEFAULT' and "
|
||||
"'ORACLE'. Using 'DEFAULT' as default.", value, name);
|
||||
}
|
||||
}
|
||||
else if (strcmp(name, "log_throttling") == 0)
|
||||
{
|
||||
if (*value == 0)
|
||||
|
@ -1897,7 +1897,7 @@ int main(int argc, char **argv)
|
||||
cnf = config_get_global_options();
|
||||
ss_dassert(cnf);
|
||||
|
||||
if (!qc_setup(cnf->qc_name, QC_SQL_MODE_DEFAULT, cnf->qc_args))
|
||||
if (!qc_setup(cnf->qc_name, cnf->qc_sql_mode, cnf->qc_args))
|
||||
{
|
||||
const char* logerr = "Failed to initialise query classifier library.";
|
||||
print_log_n_stderr(true, true, logerr, logerr, eno);
|
||||
|
Loading…
x
Reference in New Issue
Block a user