Commit f8a6e9d3 authored by unknown's avatar unknown

Don't force column header to @@session.var_name if @@local.var_name

was used. (Bug #10724)


mysql-test/r/key_cache.result:
  Updated results
mysql-test/r/ps_1general.result:
  Updated results
mysql-test/r/user_var.result:
  Add new results
mysql-test/r/variables.result:
  Update results
mysql-test/t/user_var.test:
  Add new regression test
sql/item_func.cc:
  Don't set name explicitly in get_system_var(), let it get set by the
  select_item: rule in sql_parse.yy or other callers of get_system_var().
sql/sql_parse.cc:
  Set the name on the Item returned by get_system_var().
parent bf45b6ba
...@@ -23,13 +23,13 @@ SELECT @@global.default.key_buffer_size; ...@@ -23,13 +23,13 @@ SELECT @@global.default.key_buffer_size;
@@global.default.key_buffer_size @@global.default.key_buffer_size
16777216 16777216
SELECT @@global.default.`key_buffer_size`; SELECT @@global.default.`key_buffer_size`;
@@global.default.key_buffer_size @@global.default.`key_buffer_size`
16777216 16777216
SELECT @@global.`default`.`key_buffer_size`; SELECT @@global.`default`.`key_buffer_size`;
@@global.default.key_buffer_size @@global.`default`.`key_buffer_size`
16777216 16777216
SELECT @@`default`.key_buffer_size; SELECT @@`default`.key_buffer_size;
@@default.key_buffer_size @@`default`.key_buffer_size
16777216 16777216
SELECT @@small.key_buffer_size; SELECT @@small.key_buffer_size;
@@small.key_buffer_size @@small.key_buffer_size
......
...@@ -332,7 +332,7 @@ execute stmt1 ; ...@@ -332,7 +332,7 @@ execute stmt1 ;
ERROR 42S02: Unknown table 't5' ERROR 42S02: Unknown table 't5'
prepare stmt1 from ' SELECT @@version ' ; prepare stmt1 from ' SELECT @@version ' ;
execute stmt1 ; execute stmt1 ;
@@VERSION @@version
<version> <version>
prepare stmt_do from ' do @var:= (1 in (select a from t1)) ' ; prepare stmt_do from ' do @var:= (1 in (select a from t1)) ' ;
prepare stmt_set from ' set @var= (1 in (select a from t1)) ' ; prepare stmt_set from ' set @var= (1 in (select a from t1)) ' ;
......
...@@ -179,3 +179,27 @@ set session @honk=99; ...@@ -179,3 +179,27 @@ set session @honk=99;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@honk=99' at line 1 ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@honk=99' at line 1
set one_shot @honk=99; set one_shot @honk=99;
ERROR HY000: The SET ONE_SHOT syntax is reserved for purposes internal to the MySQL server ERROR HY000: The SET ONE_SHOT syntax is reserved for purposes internal to the MySQL server
select @@local.max_allowed_packet;
@@local.max_allowed_packet
#
select @@session.max_allowed_packet;
@@session.max_allowed_packet
#
select @@global.max_allowed_packet;
@@global.max_allowed_packet
#
select @@max_allowed_packet;
@@max_allowed_packet
#
select @@Max_Allowed_Packet;
@@Max_Allowed_Packet
#
select @@version;
@@version
#
select @@global.version;
@@global.version
#
select @@session.VERSION;
@@session.VERSION
#
...@@ -70,7 +70,7 @@ Variable_name Value ...@@ -70,7 +70,7 @@ Variable_name Value
max_join_size HA_POS_ERROR max_join_size HA_POS_ERROR
set @@max_join_size=1000, @@global.max_join_size=2000; set @@max_join_size=1000, @@global.max_join_size=2000;
select @@local.max_join_size, @@global.max_join_size; select @@local.max_join_size, @@global.max_join_size;
@@session.max_join_size @@global.max_join_size @@local.max_join_size @@global.max_join_size
1000 2000 1000 2000
select @@identity, length(@@version)>0; select @@identity, length(@@version)>0;
@@identity length(@@version)>0 @@identity length(@@version)>0
...@@ -407,23 +407,23 @@ Variable_name Value ...@@ -407,23 +407,23 @@ Variable_name Value
myisam_max_sort_file_size MAX_FILE_SIZE myisam_max_sort_file_size MAX_FILE_SIZE
set global myisam_max_sort_file_size=default; set global myisam_max_sort_file_size=default;
select @@global.max_user_connections,@@local.max_join_size; select @@global.max_user_connections,@@local.max_join_size;
@@global.max_user_connections @@session.max_join_size @@global.max_user_connections @@local.max_join_size
100 200 100 200
set @svc=@@global.max_user_connections, @svj=@@local.max_join_size; set @svc=@@global.max_user_connections, @svj=@@local.max_join_size;
select @@global.max_user_connections,@@local.max_join_size; select @@global.max_user_connections,@@local.max_join_size;
@@global.max_user_connections @@session.max_join_size @@global.max_user_connections @@local.max_join_size
100 200 100 200
set @@global.max_user_connections=111,@@local.max_join_size=222; set @@global.max_user_connections=111,@@local.max_join_size=222;
select @@global.max_user_connections,@@local.max_join_size; select @@global.max_user_connections,@@local.max_join_size;
@@global.max_user_connections @@session.max_join_size @@global.max_user_connections @@local.max_join_size
111 222 111 222
set @@global.max_user_connections=@@local.max_join_size,@@local.max_join_size=@@global.max_user_connections; set @@global.max_user_connections=@@local.max_join_size,@@local.max_join_size=@@global.max_user_connections;
select @@global.max_user_connections,@@local.max_join_size; select @@global.max_user_connections,@@local.max_join_size;
@@global.max_user_connections @@session.max_join_size @@global.max_user_connections @@local.max_join_size
222 111 222 111
set @@global.max_user_connections=@svc, @@local.max_join_size=@svj; set @@global.max_user_connections=@svc, @@local.max_join_size=@svj;
select @@global.max_user_connections,@@local.max_join_size; select @@global.max_user_connections,@@local.max_join_size;
@@global.max_user_connections @@session.max_join_size @@global.max_user_connections @@local.max_join_size
100 200 100 200
set @a=1, @b=2; set @a=1, @b=2;
set @a=@b, @b=@a; set @a=@b, @b=@a;
......
...@@ -119,3 +119,24 @@ select coercibility(@v1),coercibility(@v2),coercibility(@v3),coercibility(@v4); ...@@ -119,3 +119,24 @@ select coercibility(@v1),coercibility(@v2),coercibility(@v3),coercibility(@v4);
set session @honk=99; set session @honk=99;
--error 1105 --error 1105
set one_shot @honk=99; set one_shot @honk=99;
#
# Bug #10724 @@local not preserved in column name of select
#
# The value doesn't actually matter, we just care about the column name
--replace_column 1 #
select @@local.max_allowed_packet;
--replace_column 1 #
select @@session.max_allowed_packet;
--replace_column 1 #
select @@global.max_allowed_packet;
--replace_column 1 #
select @@max_allowed_packet;
--replace_column 1 #
select @@Max_Allowed_Packet;
--replace_column 1 #
select @@version;
--replace_column 1 #
select @@global.version;
--replace_column 1 #
select @@session.VERSION;
...@@ -3417,7 +3417,7 @@ Item *get_system_var(THD *thd, enum_var_type var_type, LEX_STRING name, ...@@ -3417,7 +3417,7 @@ Item *get_system_var(THD *thd, enum_var_type var_type, LEX_STRING name,
if (component.str == 0 && if (component.str == 0 &&
!my_strcasecmp(system_charset_info, name.str, "VERSION")) !my_strcasecmp(system_charset_info, name.str, "VERSION"))
return new Item_string("@@VERSION", server_version, return new Item_string(NULL, server_version,
(uint) strlen(server_version), (uint) strlen(server_version),
system_charset_info, DERIVATION_SYSCONST); system_charset_info, DERIVATION_SYSCONST);
...@@ -3444,28 +3444,10 @@ Item *get_system_var(THD *thd, enum_var_type var_type, LEX_STRING name, ...@@ -3444,28 +3444,10 @@ Item *get_system_var(THD *thd, enum_var_type var_type, LEX_STRING name,
} }
thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT); thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
buff[0]='@';
buff[1]='@';
pos=buff+2;
if (var_type == OPT_SESSION)
pos=strmov(pos,"session.");
else if (var_type == OPT_GLOBAL)
pos=strmov(pos,"global.");
set_if_smaller(component_name->length, MAX_SYS_VAR_LENGTH); set_if_smaller(component_name->length, MAX_SYS_VAR_LENGTH);
set_if_smaller(base_name->length, MAX_SYS_VAR_LENGTH);
if (component_name->str)
{
memcpy(pos, component_name->str, component_name->length);
pos+= component_name->length;
*pos++= '.';
}
memcpy(pos, base_name->str, base_name->length);
pos+= base_name->length;
return new Item_func_get_system_var(var, var_type, component_name, return new Item_func_get_system_var(var, var_type, component_name,
buff, pos - buff); NULL, 0);
} }
......
...@@ -4197,6 +4197,8 @@ void create_select_for_variable(const char *var_name) ...@@ -4197,6 +4197,8 @@ void create_select_for_variable(const char *var_name)
THD *thd; THD *thd;
LEX *lex; LEX *lex;
LEX_STRING tmp, null_lex_string; LEX_STRING tmp, null_lex_string;
Item *var;
char buff[MAX_SYS_VAR_LENGTH*2+4+8], *end;
DBUG_ENTER("create_select_for_variable"); DBUG_ENTER("create_select_for_variable");
thd= current_thd; thd= current_thd;
...@@ -4206,8 +4208,14 @@ void create_select_for_variable(const char *var_name) ...@@ -4206,8 +4208,14 @@ void create_select_for_variable(const char *var_name)
tmp.str= (char*) var_name; tmp.str= (char*) var_name;
tmp.length=strlen(var_name); tmp.length=strlen(var_name);
bzero((char*) &null_lex_string.str, sizeof(null_lex_string)); bzero((char*) &null_lex_string.str, sizeof(null_lex_string));
add_item_to_list(thd, get_system_var(thd, OPT_SESSION, tmp, /*
null_lex_string)); We set the name of Item to @@session.var_name because that then is used
as the column name in the output.
*/
var= get_system_var(thd, OPT_SESSION, tmp, null_lex_string);
end= strxmov(buff, "@@session.", var_name, NullS);
var->set_name(buff, end-buff, system_charset_info);
add_item_to_list(thd, var);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
......
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