Commit 4e5bed78 authored by unknown's avatar unknown

Bug #12792: @@system_time_zone is not SELECTable

Bug #15684: @@version_* are not all SELECTable

  Added the appropriate information as read-only system variables, and
  also removed some special-case handling of @@version along the way.

  @@version_bdb was added, but isn't included in the test because it
  depends on the presence of BDB.


mysql-test/r/variables.result:
  Update results
mysql-test/t/variables.test:
  Fix error from setting @@version, reset sql_select_limit to avoid confusion
  in later tests, and add new regression tests.
sql/item_func.cc:
  Remove special-case handling of VERSION, it's just a read-only server
  variable like the others now.
sql/set_var.cc:
  Add system_time_zone and various version-related system variables
parent d8df724a
...@@ -275,7 +275,7 @@ ERROR HY000: Variable 'autocommit' is a SESSION variable and can't be used with ...@@ -275,7 +275,7 @@ ERROR HY000: Variable 'autocommit' is a SESSION variable and can't be used with
select @@global.timestamp; select @@global.timestamp;
ERROR HY000: Variable 'timestamp' is a SESSION variable ERROR HY000: Variable 'timestamp' is a SESSION variable
set @@version=''; set @@version='';
ERROR HY000: Unknown system variable 'version' ERROR HY000: Variable 'version' is a read only variable
set @@concurrent_insert=1; set @@concurrent_insert=1;
ERROR HY000: Variable 'concurrent_insert' is a GLOBAL variable and should be set with SET GLOBAL ERROR HY000: Variable 'concurrent_insert' is a GLOBAL variable and should be set with SET GLOBAL
set @@global.sql_auto_is_null=1; set @@global.sql_auto_is_null=1;
...@@ -384,6 +384,7 @@ select @@sql_max_join_size,@@max_join_size; ...@@ -384,6 +384,7 @@ select @@sql_max_join_size,@@max_join_size;
set sql_quote_show_create=1; set sql_quote_show_create=1;
set sql_safe_updates=1; set sql_safe_updates=1;
set sql_select_limit=1; set sql_select_limit=1;
set sql_select_limit=default;
set sql_warnings=1; set sql_warnings=1;
set global table_cache=100; set global table_cache=100;
set storage_engine=myisam; set storage_engine=myisam;
...@@ -584,3 +585,11 @@ set @@global.character_set_filesystem=default; ...@@ -584,3 +585,11 @@ set @@global.character_set_filesystem=default;
select @@global.character_set_filesystem; select @@global.character_set_filesystem;
@@global.character_set_filesystem @@global.character_set_filesystem
binary binary
select @@system_time_zone;
@@system_time_zone
#
select @@version, @@version_comment, @@version_compile_machine,
@@version_compile_os;
@@version @@version_comment @@version_compile_machine @@version_compile_os
# # # #
End of 5.0 tests
...@@ -169,7 +169,7 @@ set collation_connection=NULL; ...@@ -169,7 +169,7 @@ set collation_connection=NULL;
set global autocommit=1; set global autocommit=1;
--error 1238 --error 1238
select @@global.timestamp; select @@global.timestamp;
--error 1193 --error 1238
set @@version=''; set @@version='';
--error 1229 --error 1229
set @@concurrent_insert=1; set @@concurrent_insert=1;
...@@ -258,6 +258,8 @@ select @@sql_max_join_size,@@max_join_size; ...@@ -258,6 +258,8 @@ select @@sql_max_join_size,@@max_join_size;
set sql_quote_show_create=1; set sql_quote_show_create=1;
set sql_safe_updates=1; set sql_safe_updates=1;
set sql_select_limit=1; set sql_select_limit=1;
# reset it, so later tests don't get confused
set sql_select_limit=default;
set sql_warnings=1; set sql_warnings=1;
set global table_cache=100; set global table_cache=100;
set storage_engine=myisam; set storage_engine=myisam;
...@@ -472,4 +474,19 @@ select @@character_set_filesystem; ...@@ -472,4 +474,19 @@ select @@character_set_filesystem;
set @@global.character_set_filesystem=default; set @@global.character_set_filesystem=default;
select @@global.character_set_filesystem; select @@global.character_set_filesystem;
# End of 5.0 tests #
# Bug #12792: @@system_time_zone is not SELECTable.
#
# Don't actually output, since it depends on the system
--replace_column 1 #
select @@system_time_zone;
#
# Bug #15684: system variables cannot be SELECTed (e.g. @@version_comment)
#
# Don't actually output, since it depends on the system
--replace_column 1 # 2 # 3 # 4 #
select @@version, @@version_comment, @@version_compile_machine,
@@version_compile_os;
--echo End of 5.0 tests
...@@ -4558,12 +4558,6 @@ Item *get_system_var(THD *thd, enum_var_type var_type, LEX_STRING name, ...@@ -4558,12 +4558,6 @@ Item *get_system_var(THD *thd, enum_var_type var_type, LEX_STRING name,
sys_var *var; sys_var *var;
LEX_STRING *base_name, *component_name; LEX_STRING *base_name, *component_name;
if (component.str == 0 &&
!my_strcasecmp(system_charset_info, name.str, "VERSION"))
return new Item_string(NULL, server_version,
(uint) strlen(server_version),
system_charset_info, DERIVATION_SYSCONST);
if (component.str) if (component.str)
{ {
base_name= &component; base_name= &component;
......
...@@ -377,6 +377,8 @@ sys_var_thd_table_type sys_table_type("table_type", ...@@ -377,6 +377,8 @@ sys_var_thd_table_type sys_table_type("table_type",
sys_var_thd_storage_engine sys_storage_engine("storage_engine", sys_var_thd_storage_engine sys_storage_engine("storage_engine",
&SV::table_type); &SV::table_type);
sys_var_bool_ptr sys_sync_frm("sync_frm", &opt_sync_frm); sys_var_bool_ptr sys_sync_frm("sync_frm", &opt_sync_frm);
sys_var_const_str sys_system_time_zone("system_time_zone",
system_time_zone);
sys_var_long_ptr sys_table_cache_size("table_cache", sys_var_long_ptr sys_table_cache_size("table_cache",
&table_cache_size); &table_cache_size);
sys_var_long_ptr sys_table_lock_wait_timeout("table_lock_wait_timeout", sys_var_long_ptr sys_table_lock_wait_timeout("table_lock_wait_timeout",
...@@ -391,6 +393,16 @@ sys_var_thd_ulong sys_tmp_table_size("tmp_table_size", ...@@ -391,6 +393,16 @@ sys_var_thd_ulong sys_tmp_table_size("tmp_table_size",
&SV::tmp_table_size); &SV::tmp_table_size);
sys_var_bool_ptr sys_timed_mutexes("timed_mutexes", sys_var_bool_ptr sys_timed_mutexes("timed_mutexes",
&timed_mutexes); &timed_mutexes);
sys_var_const_str sys_version("version", server_version);
#ifdef HAVE_BERKELEY_DB
sys_var_const_str sys_version_bdb("version_bdb", DB_VERSION_STRING);
#endif
sys_var_const_str sys_version_comment("version_comment",
MYSQL_COMPILATION_COMMENT);
sys_var_const_str sys_version_compile_machine("version_compile_machine",
MACHINE_TYPE);
sys_var_const_str sys_version_compile_os("version_compile_os",
SYSTEM_TYPE);
sys_var_thd_ulong sys_net_wait_timeout("wait_timeout", sys_var_thd_ulong sys_net_wait_timeout("wait_timeout",
&SV::net_wait_timeout); &SV::net_wait_timeout);
...@@ -546,7 +558,6 @@ sys_var_thd_time_zone sys_time_zone("time_zone"); ...@@ -546,7 +558,6 @@ sys_var_thd_time_zone sys_time_zone("time_zone");
/* Read only variables */ /* Read only variables */
sys_var_const_str sys_os("version_compile_os", SYSTEM_TYPE);
sys_var_readonly sys_have_innodb("have_innodb", OPT_GLOBAL, sys_var_readonly sys_have_innodb("have_innodb", OPT_GLOBAL,
SHOW_CHAR, get_have_innodb); SHOW_CHAR, get_have_innodb);
/* Global read-only variable describing server license */ /* Global read-only variable describing server license */
...@@ -698,6 +709,7 @@ sys_var *sys_variables[]= ...@@ -698,6 +709,7 @@ sys_var *sys_variables[]=
&sys_sql_notes, &sys_sql_notes,
&sys_storage_engine, &sys_storage_engine,
&sys_sync_frm, &sys_sync_frm,
&sys_system_time_zone,
&sys_table_cache_size, &sys_table_cache_size,
&sys_table_lock_wait_timeout, &sys_table_lock_wait_timeout,
&sys_table_type, &sys_table_type,
...@@ -710,7 +722,13 @@ sys_var *sys_variables[]= ...@@ -710,7 +722,13 @@ sys_var *sys_variables[]=
&sys_trans_alloc_block_size, &sys_trans_alloc_block_size,
&sys_trans_prealloc_size, &sys_trans_prealloc_size,
&sys_tx_isolation, &sys_tx_isolation,
&sys_os, &sys_version,
#ifdef HAVE_BERKELEY_DB
&sys_version_bdb,
#endif
&sys_version_comment,
&sys_version_compile_machine,
&sys_version_compile_os,
#ifdef HAVE_INNOBASE_DB #ifdef HAVE_INNOBASE_DB
&sys_innodb_fast_shutdown, &sys_innodb_fast_shutdown,
&sys_innodb_max_dirty_pages_pct, &sys_innodb_max_dirty_pages_pct,
...@@ -1015,13 +1033,14 @@ struct show_var_st init_vars[]= { ...@@ -1015,13 +1033,14 @@ struct show_var_st init_vars[]= {
{sys_tx_isolation.name, (char*) &sys_tx_isolation, SHOW_SYS}, {sys_tx_isolation.name, (char*) &sys_tx_isolation, SHOW_SYS},
{sys_updatable_views_with_limit.name, {sys_updatable_views_with_limit.name,
(char*) &sys_updatable_views_with_limit,SHOW_SYS}, (char*) &sys_updatable_views_with_limit,SHOW_SYS},
{"version", server_version, SHOW_CHAR}, {sys_version.name, (char*) &sys_version, SHOW_SYS},
#ifdef HAVE_BERKELEY_DB #ifdef HAVE_BERKELEY_DB
{"version_bdb", (char*) DB_VERSION_STRING, SHOW_CHAR}, {sys_version_bdb.name, (char*) &sys_version_bdb, SHOW_SYS},
#endif #endif
{"version_comment", (char*) MYSQL_COMPILATION_COMMENT, SHOW_CHAR}, {sys_version_comment.name, (char*) &sys_version_comment, SHOW_SYS},
{"version_compile_machine", (char*) MACHINE_TYPE, SHOW_CHAR}, {sys_version_compile_machine.name, (char*) &sys_version_compile_machine,
{sys_os.name, (char*) &sys_os, SHOW_SYS}, SHOW_SYS},
{sys_version_compile_os.name, (char*) &sys_version_compile_os, SHOW_SYS},
{sys_net_wait_timeout.name, (char*) &sys_net_wait_timeout, SHOW_SYS}, {sys_net_wait_timeout.name, (char*) &sys_net_wait_timeout, SHOW_SYS},
{NullS, NullS, SHOW_LONG} {NullS, NullS, SHOW_LONG}
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment