From c49f17f4286453baa971f7ac7c0e0acebbbd0481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Thu, 12 Nov 2020 16:13:04 +0200 Subject: [PATCH] MXS-3295: Fix layout of the classify endpoint The values were stored in the parameters object which is used for configuration parameters in other endpoints. The proper place for them is inside the attributes object. --- Documentation/REST-API/Resources-MaxScale.md | 14 ++++++-------- maxctrl/lib/classify.js | 18 +++++++++--------- server/core/query_classifier.cc | 18 ++++++++---------- 3 files changed, 23 insertions(+), 27 deletions(-) diff --git a/Documentation/REST-API/Resources-MaxScale.md b/Documentation/REST-API/Resources-MaxScale.md index c6e067632..01c0337a7 100644 --- a/Documentation/REST-API/Resources-MaxScale.md +++ b/Documentation/REST-API/Resources-MaxScale.md @@ -606,14 +606,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/maxctrl/lib/classify.js b/maxctrl/lib/classify.js index 571553278..536bdd715 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 425167f60..37809eeea 100644 --- a/server/core/query_classifier.cc +++ b/server/core/query_classifier.cc @@ -1518,32 +1518,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 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));