summaryrefslogtreecommitdiff
path: root/server-tools/instance-manager
diff options
context:
space:
mode:
authorpetr@mysql.com <>2006-02-10 03:35:07 +0300
committerpetr@mysql.com <>2006-02-10 03:35:07 +0300
commit8488498545a109affd83dd99b8f79e96245baec9 (patch)
treec9dc6a0d1d49261bdc304f29814b85fe7d7aa473 /server-tools/instance-manager
parent01ef1d13f854157b7912e4f1bf8d945e7af49776 (diff)
downloadmariadb-git-8488498545a109affd83dd99b8f79e96245baec9.tar.gz
IM changes by GUI team: add a version_no column to the
SHOW INSTANCE STATUS output
Diffstat (limited to 'server-tools/instance-manager')
-rw-r--r--server-tools/instance-manager/commands.cc46
-rw-r--r--server-tools/instance-manager/instance_options.cc9
2 files changed, 50 insertions, 5 deletions
diff --git a/server-tools/instance-manager/commands.cc b/server-tools/instance-manager/commands.cc
index b4dd1b469f1..cde0f784f39 100644
--- a/server-tools/instance-manager/commands.cc
+++ b/server-tools/instance-manager/commands.cc
@@ -25,6 +25,7 @@
#include "options.h"
#include <m_string.h>
+#include <m_ctype.h>
#include <mysql.h>
#include <my_dir.h>
@@ -62,6 +63,31 @@ static inline int put_to_buff(Buffer *buff, const char *str, uint *position)
}
+static int parse_version_number(const char *version_str, char *version,
+ uint version_size)
+{
+ const char *start= version_str;
+ const char *end;
+
+ // skip garbage
+ while (!my_isdigit(default_charset_info, *start))
+ start++;
+
+ end= start;
+ // skip digits and dots
+ while (my_isdigit(default_charset_info, *end) || *end == '.')
+ end++;
+
+ if ((uint)(end - start) >= version_size)
+ return -1;
+
+ strncpy(version, start, end-start);
+ version[end-start]= '\0';
+
+ return 0;
+}
+
+
/* implementation for Show_instances: */
@@ -174,9 +200,10 @@ int Show_instance_status::execute(struct st_net *net,
{
enum { MAX_VERSION_LENGTH= 40 };
Buffer send_buff; /* buffer for packets */
- LIST name, status, version;
+ LIST name, status, version, version_number;
LIST *field_list;
- NAME_WITH_LENGTH name_field, status_field, version_field;
+ NAME_WITH_LENGTH name_field, status_field, version_field,
+ version_number_field;
uint position=0;
if (!instance_name)
@@ -192,7 +219,11 @@ int Show_instance_status::execute(struct st_net *net,
version_field.name= (char*) "version";
version_field.length= MAX_VERSION_LENGTH;
version.data= &version_field;
+ version_number_field.name= (char*) "version_number";
+ version_number_field.length= MAX_VERSION_LENGTH;
+ version_number.data= &version_number_field;
field_list= list_add(NULL, &version);
+ field_list= list_add(field_list, &version_number);
field_list= list_add(field_list, &status);
field_list= list_add(field_list, &name);
@@ -210,10 +241,21 @@ int Show_instance_status::execute(struct st_net *net,
store_to_protocol_packet(&send_buff, (char*) "offline", &position);
if (instance->options.mysqld_version)
+ {
+ char parsed_version[MAX_VERSION_LENGTH];
+
+ parse_version_number(instance->options.mysqld_version, parsed_version,
+ sizeof(parsed_version));
+ store_to_protocol_packet(&send_buff, parsed_version, &position);
+
store_to_protocol_packet(&send_buff, instance->options.mysqld_version,
&position);
+ }
else
+ {
store_to_protocol_packet(&send_buff, (char*) "unknown", &position);
+ store_to_protocol_packet(&send_buff, (char*) "unknown", &position);
+ }
if (send_buff.is_error() ||
diff --git a/server-tools/instance-manager/instance_options.cc b/server-tools/instance-manager/instance_options.cc
index 83f13b34aa2..d2946270b9e 100644
--- a/server-tools/instance-manager/instance_options.cc
+++ b/server-tools/instance-manager/instance_options.cc
@@ -138,9 +138,14 @@ int Instance_options::fill_instance_version()
if (*result != '\0')
{
+ char *start;
/* chop the newline from the end of the version string */
result[strlen(result) - NEWLINE_LEN]= '\0';
- mysqld_version= strdup_root(&alloc, result);
+ /* trim leading whitespaces */
+ start= result;
+ while (my_isspace(default_charset_info, *start))
+ ++start;
+ mysqld_version= strdup_root(&alloc, start);
}
err:
return rc;
@@ -167,8 +172,6 @@ err:
int Instance_options::fill_log_options()
{
Buffer buff;
- uint position= 0;
- char **tmp_argv= argv;
enum { MAX_LOG_OPTION_LENGTH= 256 };
char datadir[MAX_LOG_OPTION_LENGTH];
char hostname[MAX_LOG_OPTION_LENGTH];