From 026109f9bcdd8a47f12f166b47708cc9ac3ee96d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Mon, 7 Oct 2019 11:37:24 +0300 Subject: [PATCH] MXS-2706: Fix maxinfo JSON output The output now correctly formats integers. --- include/maxscale/resultset.hh | 1 + server/core/resultset.cc | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/include/maxscale/resultset.hh b/include/maxscale/resultset.hh index 5b83f73e1..1da12209d 100644 --- a/include/maxscale/resultset.hh +++ b/include/maxscale/resultset.hh @@ -64,4 +64,5 @@ private: std::vector> m_rows; ResultSet(std::initializer_list names); + json_t* get_json_value(const std::string& s); }; diff --git a/server/core/resultset.cc b/server/core/resultset.cc index 4276fc9f5..b3593ee50 100644 --- a/server/core/resultset.cc +++ b/server/core/resultset.cc @@ -208,6 +208,24 @@ void ResultSet::write(DCB* dcb) mysql_send_eof(dcb, seqno); } +json_t* ResultSet::get_json_value(const std::string& s) +{ + json_t* js; + char* end; + long l = strtol(s.c_str(), &end, 10); + + if (end != s.c_str() && *end == '\0') + { + js = json_integer(l); + } + else + { + js = json_string(s.c_str()); + } + + return js; +} + void ResultSet::write_as_json(DCB* dcb) { json_t* arr = json_array(); @@ -218,7 +236,7 @@ void ResultSet::write_as_json(DCB* dcb) for (size_t i = 0; i < row.size(); i++) { - json_object_set_new(obj, m_columns[i].c_str(), json_string(row[i].c_str())); + json_object_set_new(obj, m_columns[i].c_str(), get_json_value(row[i])); } json_array_append_new(arr, obj);