diff --git a/Documentation/REST-API/Resources-MaxScale.md b/Documentation/REST-API/Resources-MaxScale.md index 6c22976c0..a5331f2da 100644 --- a/Documentation/REST-API/Resources-MaxScale.md +++ b/Documentation/REST-API/Resources-MaxScale.md @@ -25,7 +25,7 @@ file locations, configuration options and version information. }, "data": { "attributes": { - "parameters": { + "parameters": { // Core MaxScale parameters "libdir": "/usr/lib64/maxscale", "datadir": "/var/lib/maxscale", "process_datadir": "/var/lib/maxscale/data16218", @@ -58,11 +58,11 @@ file locations, configuration options and version information. "dump_last_statements": "never", "load_persisted_configs": false }, - "version": "2.3.6", - "commit": "47158faf12c156775c39388652a77f8a8c542d28", - "started_at": "Thu, 04 Apr 2019 21:04:06 GMT", - "activated_at": "Thu, 04 Apr 2019 21:04:06 GMT", - "uptime": 337 + "version": "2.3.6", // The MaxScale version + "commit": "47158faf12c156775c39388652a77f8a8c542d28", // Commit that MaxScale was built from + "started_at": "Thu, 04 Apr 2019 21:04:06 GMT", // The time when MaxScale was started + "activated_at": "Thu, 04 Apr 2019 21:04:06 GMT", // The last time when the `passive` parameter was set to `false` + "uptime": 337 // How many seconds MaxScale has been running }, "id": "maxscale", "type": "maxscale" @@ -298,7 +298,7 @@ location where the log files are stored. }, "data": { "attributes": { - "parameters": { + "parameters": { // Logging parameters "highprecision": false, "maxlog": true, "syslog": true, @@ -312,8 +312,8 @@ location where the log files are stored. "log_info": true, "log_debug": false }, - "log_file": "/home/markusjm/build/log/maxscale/maxscale.log", - "log_priorities": [ + "log_file": "/home/markusjm/build/log/maxscale/maxscale.log", // The file MaxScale is logging into if `maxlog` is enabled + "log_priorities": [ // Active log priorities "error", "warning", "notice", @@ -406,22 +406,22 @@ valid loaded module. "description": "Firewall Filter", "api": "filter", "status": "GA", - "commands": [ + "commands": [ // List of module commands { - "id": "rules/reload", + "id": "rules/reload", // Name of the command "type": "module_command", "links": { "self": "http://localhost:8989/v1/modules/dbfwfilter/rules/reload" }, "attributes": { - "method": "POST", - "arg_min": 1, - "arg_max": 2, - "parameters": [ + "method": "POST", // Whether POST or GET should be used to call this command + "arg_min": 1, // Minimum number of arguments + "arg_max": 2, // Maximum number of arguments + "parameters": [ // Parameter types for the command { - "description": "Filter to reload", - "type": "FILTER", - "required": true + "description": "Filter to reload", // Parameter description + "type": "FILTER", // Value type + "required": true // Whether the parameter is required }, { "description": "Path to rule file", @@ -432,15 +432,15 @@ valid loaded module. } } ], - "parameters": [ + "parameters": [ // Module parameters { - "name": "rules", - "type": "path" + "name": "rules", // Parameter name + "type": "path" // Parameter type }, { "name": "log_match", "type": "bool", - "default_value": "false" + "default_value": "false" // Default value of the parameter }, { "name": "log_no_match", @@ -451,7 +451,7 @@ valid loaded module. "name": "action", "type": "enum", "default_value": "block", - "enum_values": [ + "enum_values": [ // Accepted enumeration values "allow", "block", "ignore" @@ -559,7 +559,7 @@ Command with output: "links": { "self": "http://localhost:8989/v1/maxscale/modules/dbfwfilter/rules/json" }, - "meta": [ + "meta": [ // Output of module command (module dependent) { "name": "test3", "type": "COLUMN", @@ -602,14 +602,12 @@ GET /v1/maxscale/query_classifier/classify?sql=SELECT+1 "id": "classify", "type": "classify", "attributes": { - "parameters": { - "parse_result": "QC_QUERY_PARSED", - "type_mask": "QUERY_TYPE_READ", - "operation": "QUERY_OP_SELECT", - "has_where_clause": false, - "fields": [], - "functions": [] - } + "parse_result": "QC_QUERY_PARSED", + "type_mask": "QUERY_TYPE_READ", + "operation": "QUERY_OP_SELECT", + "has_where_clause": false, + "fields": [], + "functions": [] } } } diff --git a/include/maxscale/protocol/mysql.hh b/include/maxscale/protocol/mysql.hh index 0afea98c6..fd36b84fa 100644 --- a/include/maxscale/protocol/mysql.hh +++ b/include/maxscale/protocol/mysql.hh @@ -59,7 +59,7 @@ MXS_BEGIN_DECLS #define MYSQL_CHARSET_OFFSET 12 #define MYSQL_CLIENT_CAP_OFFSET 4 #define MYSQL_CLIENT_CAP_SIZE 4 -#define MARIADB_CAP_OFFSET MYSQL_CHARSET_OFFSET + 19 +#define MARIADB_CAP_OFFSET MYSQL_CHARSET_OFFSET + 20 #define GW_MYSQL_PROTOCOL_VERSION 10 // version is 10 #define GW_MYSQL_HANDSHAKE_FILLER 0x00 diff --git a/maxctrl/lib/classify.js b/maxctrl/lib/classify.js index cb8c00763..a926d07b9 100644 --- a/maxctrl/lib/classify.js +++ b/maxctrl/lib/classify.js @@ -13,12 +13,12 @@ require('./common.js')() const classify_fields = [ - {'Parse result': 'attributes.parameters.parse_result'}, - {'Type mask': 'attributes.parameters.type_mask'}, - {'Operation': 'attributes.parameters.operation'}, - {'Has where clause': 'attributes.parameters.has_where_clause'}, - {'Fields': 'attributes.parameters.fields'}, - {'Functions': 'attributes.parameters.functions'} + {'Parse result': 'attributes.parse_result'}, + {'Type mask': 'attributes.type_mask'}, + {'Operation': 'attributes.operation'}, + {'Has where clause': 'attributes.has_where_clause'}, + {'Fields': 'attributes.fields'}, + {'Functions': 'attributes.functions'} ] exports.command = 'classify ' @@ -28,12 +28,12 @@ exports.handler = function (argv) { return doRequest(host, 'maxscale/query_classifier/classify?sql=' + argv.statement, (res) => { - if (res.data.attributes.parameters.functions) { - var a = res.data.attributes.parameters.functions.map((f) => { + if (res.data.attributes.functions) { + var a = res.data.attributes.functions.map((f) => { return f.name + ': (' + f.arguments.join(', ') + ')' }); - res.data.attributes.parameters.functions = a; + res.data.attributes.functions = a; } return formatResource(classify_fields, res.data) diff --git a/server/core/query_classifier.cc b/server/core/query_classifier.cc index 4abec9d6e..c2b475c31 100644 --- a/server/core/query_classifier.cc +++ b/server/core/query_classifier.cc @@ -1555,32 +1555,30 @@ void append_function_info(json_t* pParams, GWBUF* pBuffer) std::unique_ptr qc_classify_as_json(const char* zHost, const std::string& statement) { - json_t* pParams = json_object(); + json_t* pAttributes = json_object(); std::unique_ptr sBuffer(modutil_create_query(statement.c_str())); GWBUF* pBuffer = sBuffer.get(); qc_parse_result_t result = qc_parse(pBuffer, QC_COLLECT_ALL); - json_object_set_new(pParams, CN_PARSE_RESULT, json_string(qc_result_to_string(result))); + json_object_set_new(pAttributes, CN_PARSE_RESULT, json_string(qc_result_to_string(result))); if (result != QC_QUERY_INVALID) { char* zType_mask = qc_typemask_to_string(qc_get_type_mask(pBuffer)); - json_object_set_new(pParams, CN_TYPE_MASK, json_string(zType_mask)); + json_object_set_new(pAttributes, CN_TYPE_MASK, json_string(zType_mask)); MXS_FREE(zType_mask); - json_object_set_new(pParams, CN_OPERATION, json_string(qc_op_to_string(qc_get_operation(pBuffer)))); + json_object_set_new(pAttributes, CN_OPERATION, + json_string(qc_op_to_string(qc_get_operation(pBuffer)))); bool has_clause = qc_query_has_clause(pBuffer); - json_object_set_new(pParams, CN_HAS_WHERE_CLAUSE, json_boolean(has_clause)); + json_object_set_new(pAttributes, CN_HAS_WHERE_CLAUSE, json_boolean(has_clause)); - append_field_info(pParams, pBuffer); - append_function_info(pParams, pBuffer); + append_field_info(pAttributes, pBuffer); + append_function_info(pAttributes, pBuffer); } - json_t* pAttributes = json_object(); - json_object_set_new(pAttributes, CN_PARAMETERS, pParams); - json_t* pSelf = json_object(); json_object_set_new(pSelf, CN_ID, json_string(CN_CLASSIFY)); json_object_set_new(pSelf, CN_TYPE, json_string(CN_CLASSIFY));