mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
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().
This commit is contained in:
parent
bf45b6ba84
commit
f8a6e9d369
7 changed files with 67 additions and 32 deletions
|
@ -23,13 +23,13 @@ SELECT @@global.default.key_buffer_size;
|
|||
@@global.default.key_buffer_size
|
||||
16777216
|
||||
SELECT @@global.default.`key_buffer_size`;
|
||||
@@global.default.key_buffer_size
|
||||
@@global.default.`key_buffer_size`
|
||||
16777216
|
||||
SELECT @@global.`default`.`key_buffer_size`;
|
||||
@@global.default.key_buffer_size
|
||||
@@global.`default`.`key_buffer_size`
|
||||
16777216
|
||||
SELECT @@`default`.key_buffer_size;
|
||||
@@default.key_buffer_size
|
||||
@@`default`.key_buffer_size
|
||||
16777216
|
||||
SELECT @@small.key_buffer_size;
|
||||
@@small.key_buffer_size
|
||||
|
|
|
@ -332,7 +332,7 @@ execute stmt1 ;
|
|||
ERROR 42S02: Unknown table 't5'
|
||||
prepare stmt1 from ' SELECT @@version ' ;
|
||||
execute stmt1 ;
|
||||
@@VERSION
|
||||
@@version
|
||||
<version>
|
||||
prepare stmt_do from ' do @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;
|
|||
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;
|
||||
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
|
|||
max_join_size HA_POS_ERROR
|
||||
set @@max_join_size=1000, @@global.max_join_size=2000;
|
||||
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
|
||||
select @@identity, length(@@version)>0;
|
||||
@@identity length(@@version)>0
|
||||
|
@ -407,23 +407,23 @@ Variable_name Value
|
|||
myisam_max_sort_file_size MAX_FILE_SIZE
|
||||
set global myisam_max_sort_file_size=default;
|
||||
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
|
||||
set @svc=@@global.max_user_connections, @svj=@@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
|
||||
set @@global.max_user_connections=111,@@local.max_join_size=222;
|
||||
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
|
||||
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;
|
||||
@@global.max_user_connections @@session.max_join_size
|
||||
@@global.max_user_connections @@local.max_join_size
|
||||
222 111
|
||||
set @@global.max_user_connections=@svc, @@local.max_join_size=@svj;
|
||||
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
|
||||
set @a=1, @b=2;
|
||||
set @a=@b, @b=@a;
|
||||
|
|
|
@ -119,3 +119,24 @@ select coercibility(@v1),coercibility(@v2),coercibility(@v3),coercibility(@v4);
|
|||
set session @honk=99;
|
||||
--error 1105
|
||||
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,
|
|||
|
||||
if (component.str == 0 &&
|
||||
!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),
|
||||
system_charset_info, DERIVATION_SYSCONST);
|
||||
|
||||
|
@ -3444,28 +3444,10 @@ Item *get_system_var(THD *thd, enum_var_type var_type, LEX_STRING name,
|
|||
}
|
||||
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(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,
|
||||
buff, pos - buff);
|
||||
NULL, 0);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -4197,6 +4197,8 @@ void create_select_for_variable(const char *var_name)
|
|||
THD *thd;
|
||||
LEX *lex;
|
||||
LEX_STRING tmp, null_lex_string;
|
||||
Item *var;
|
||||
char buff[MAX_SYS_VAR_LENGTH*2+4+8], *end;
|
||||
DBUG_ENTER("create_select_for_variable");
|
||||
|
||||
thd= current_thd;
|
||||
|
@ -4206,8 +4208,14 @@ void create_select_for_variable(const char *var_name)
|
|||
tmp.str= (char*) var_name;
|
||||
tmp.length=strlen(var_name);
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue