From 89a0364fc88efa7d91d02839a25fa22e4b276995 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 24 Dec 2021 22:16:10 +0100 Subject: MDEV-27304 SHOW ... result columns are right-aligned --version=value was setting sys_var::CONFIG (meaning, the value came from the config file), but the filename was left as NULL. --- mysql-test/suite/sys_vars/r/version.result | 16 ++++++++++++++++ mysql-test/suite/sys_vars/t/version.test | 1 + sql/mysqld.cc | 3 ++- sql/set_var.cc | 4 +++- sql/set_var.h | 3 ++- storage/perfschema/unittest/pfs_server_stubs.cc | 2 +- 6 files changed, 25 insertions(+), 4 deletions(-) diff --git a/mysql-test/suite/sys_vars/r/version.result b/mysql-test/suite/sys_vars/r/version.result index 29a2fb8c7e9..5dafd8e0d93 100644 --- a/mysql-test/suite/sys_vars/r/version.result +++ b/mysql-test/suite/sys_vars/r/version.result @@ -2,3 +2,19 @@ SELECT @@version; @@version my_favorite_version 1 +select * from information_schema.system_variables where variable_name='version'; +VARIABLE_NAME VERSION +SESSION_VALUE NULL +GLOBAL_VALUE my_favorite_version +GLOBAL_VALUE_ORIGIN COMMAND-LINE +DEFAULT_VALUE NULL +VARIABLE_SCOPE GLOBAL +VARIABLE_TYPE VARCHAR +VARIABLE_COMMENT Server version number. It may also include a suffix with configuration or build information. -debug indicates debugging support was enabled on the server, and -log indicates at least one of the binary log, general log or slow query log are enabled, for example 10.1.1-MariaDB-mariadb1precise-log. +NUMERIC_MIN_VALUE NULL +NUMERIC_MAX_VALUE NULL +NUMERIC_BLOCK_SIZE NULL +ENUM_VALUE_LIST NULL +READ_ONLY YES +COMMAND_LINE_ARGUMENT NULL +GLOBAL_VALUE_PATH NULL diff --git a/mysql-test/suite/sys_vars/t/version.test b/mysql-test/suite/sys_vars/t/version.test index daa95386fd4..35067a43406 100644 --- a/mysql-test/suite/sys_vars/t/version.test +++ b/mysql-test/suite/sys_vars/t/version.test @@ -4,3 +4,4 @@ perl; grep /my_favorite_version/, `$ENV{MYSQL} -e status`; print "$cnt\n"; EOF +query_vertical select * from information_schema.system_variables where variable_name='version'; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 5775902c476..80aa87a5410 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -7967,7 +7967,8 @@ mysqld_get_one_option(const struct my_option *opt, const char *argument, if (argument) { strmake(server_version, argument, sizeof(server_version) - 1); - set_sys_var_value_origin(&server_version_ptr, sys_var::CONFIG); + set_sys_var_value_origin(&server_version_ptr, + *filename ? sys_var::CONFIG : sys_var::COMMAND_LINE, filename); using_custom_server_version= true; } #ifndef EMBEDDED_LIBRARY diff --git a/sql/set_var.cc b/sql/set_var.cc index 9744f0f6f39..861db2c1b8d 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -1278,7 +1278,8 @@ end: and update it directly. */ -void set_sys_var_value_origin(void *ptr, enum sys_var::where here) +void set_sys_var_value_origin(void *ptr, enum sys_var::where here, + const char *filename) { bool found __attribute__((unused))= false; DBUG_ASSERT(!mysqld_server_started); // only to be used during startup @@ -1289,6 +1290,7 @@ void set_sys_var_value_origin(void *ptr, enum sys_var::where here) if (var->option.value == ptr) { found= true; + var->origin_filename= filename; var->value_origin= here; /* don't break early, search for all matches */ } diff --git a/sql/set_var.h b/sql/set_var.h index 2d538624825..611f16e8bbb 100644 --- a/sql/set_var.h +++ b/sql/set_var.h @@ -450,7 +450,8 @@ int sql_set_variables(THD *thd, List *var_list, bool free); } \ } while(0) -void set_sys_var_value_origin(void *ptr, enum sys_var::where here); +void set_sys_var_value_origin(void *ptr, enum sys_var::where here, + const char *filename= NULL); enum sys_var::where get_sys_var_value_origin(void *ptr); inline bool IS_SYSVAR_AUTOSIZE(void *ptr) diff --git a/storage/perfschema/unittest/pfs_server_stubs.cc b/storage/perfschema/unittest/pfs_server_stubs.cc index 5a855b2c147..ca7b2300797 100644 --- a/storage/perfschema/unittest/pfs_server_stubs.cc +++ b/storage/perfschema/unittest/pfs_server_stubs.cc @@ -51,7 +51,7 @@ void sql_print_warning(const char *format, ...) } class sys_var { public: enum where { AUTO }; }; -void set_sys_var_value_origin(void *ptr, enum sys_var::where here) +void set_sys_var_value_origin(void *, enum sys_var::where, const char *) { } -- cgit v1.2.1