Commit bb215f64 authored by jimw@mysql.com's avatar jimw@mysql.com

Merge

parents 81977103 247f2ac5
...@@ -294,6 +294,7 @@ Q_QUERY_VERTICAL, Q_QUERY_HORIZONTAL, ...@@ -294,6 +294,7 @@ Q_QUERY_VERTICAL, Q_QUERY_HORIZONTAL,
Q_START_TIMER, Q_END_TIMER, Q_START_TIMER, Q_END_TIMER,
Q_CHARACTER_SET, Q_DISABLE_PS_PROTOCOL, Q_ENABLE_PS_PROTOCOL, Q_CHARACTER_SET, Q_DISABLE_PS_PROTOCOL, Q_ENABLE_PS_PROTOCOL,
Q_EXIT, Q_EXIT,
Q_DISABLE_RECONNECT, Q_ENABLE_RECONNECT,
Q_UNKNOWN, /* Unknown command. */ Q_UNKNOWN, /* Unknown command. */
Q_COMMENT, /* Comments, ignored. */ Q_COMMENT, /* Comments, ignored. */
...@@ -382,6 +383,8 @@ const char *command_names[]= ...@@ -382,6 +383,8 @@ const char *command_names[]=
"disable_ps_protocol", "disable_ps_protocol",
"enable_ps_protocol", "enable_ps_protocol",
"exit", "exit",
"disable_reconnect",
"enable_reconnect",
0 0
}; };
...@@ -3895,6 +3898,12 @@ int main(int argc, char **argv) ...@@ -3895,6 +3898,12 @@ int main(int argc, char **argv)
case Q_ENABLE_PS_PROTOCOL: case Q_ENABLE_PS_PROTOCOL:
ps_protocol_enabled= ps_protocol; ps_protocol_enabled= ps_protocol;
break; break;
case Q_DISABLE_RECONNECT:
cur_con->mysql.reconnect= 0;
break;
case Q_ENABLE_RECONNECT:
cur_con->mysql.reconnect= 1;
break;
case Q_EXIT: case Q_EXIT:
abort_flag= 1; abort_flag= 1;
......
...@@ -924,3 +924,22 @@ a b a b ...@@ -924,3 +924,22 @@ a b a b
3 1 NULL NULL 3 1 NULL NULL
4 2 NULL NULL 4 2 NULL NULL
DROP TABLE t1,t2; DROP TABLE t1,t2;
set group_concat_max_len=5;
create table t1 (a int, b varchar(20));
create table t2 (a int, c varchar(20));
insert into t1 values (1,"aaaaaaaaaa"),(2,"bbbbbbbbbb");
insert into t2 values (1,"cccccccccc"),(2,"dddddddddd");
select group_concat(t1.b,t2.c) from t1 left join t2 using(a) group by t1.a;
group_concat(t1.b,t2.c)
aaaaa
bbbbb
Warnings:
Warning 1260 2 line(s) were cut by GROUP_CONCAT()
select group_concat(t1.b,t2.c) from t1 inner join t2 using(a) group by t1.a;
group_concat(t1.b,t2.c)
aaaaa
bbbbb
Warnings:
Warning 1260 2 line(s) were cut by GROUP_CONCAT()
drop table t1, t2;
set group_concat_max_len=default;
...@@ -5,6 +5,8 @@ select ((@id := kill_id) - kill_id) from t1; ...@@ -5,6 +5,8 @@ select ((@id := kill_id) - kill_id) from t1;
((@id := kill_id) - kill_id) ((@id := kill_id) - kill_id)
0 0
kill @id; kill @id;
select 1;
ERROR HY000: MySQL server has gone away
select ((@id := kill_id) - kill_id) from t1; select ((@id := kill_id) - kill_id) from t1;
((@id := kill_id) - kill_id) ((@id := kill_id) - kill_id)
0 0
......
...@@ -651,4 +651,13 @@ SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.a WHERE not(0+(t1.a=30 and t2.b=1)); ...@@ -651,4 +651,13 @@ SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.a WHERE not(0+(t1.a=30 and t2.b=1));
DROP TABLE t1,t2; DROP TABLE t1,t2;
# Bug #8681: Bad warning message when group_concat() exceeds max length
set group_concat_max_len=5;
create table t1 (a int, b varchar(20));
create table t2 (a int, c varchar(20));
insert into t1 values (1,"aaaaaaaaaa"),(2,"bbbbbbbbbb");
insert into t2 values (1,"cccccccccc"),(2,"dddddddddd");
select group_concat(t1.b,t2.c) from t1 left join t2 using(a) group by t1.a;
select group_concat(t1.b,t2.c) from t1 inner join t2 using(a) group by t1.a;
drop table t1, t2;
set group_concat_max_len=default;
...@@ -23,13 +23,15 @@ connection con2; ...@@ -23,13 +23,15 @@ connection con2;
select ((@id := kill_id) - kill_id) from t1; select ((@id := kill_id) - kill_id) from t1;
kill @id; kill @id;
# Wait for thread to do.
--sleep 5
# verify that con1 is doning a reconnect
connection con1; connection con1;
--ping
--ping --disable_reconnect
select ((@id := kill_id) - kill_id) from t1; # this statement should fail
--error 2006
select 1;
--enable_reconnect
# this should work, and we should have a new connection_id()
select ((@id := kill_id) - kill_id) from t1;
select @id != connection_id(); select @id != connection_id();
#make sure the server is still alive #make sure the server is still alive
......
...@@ -2211,6 +2211,29 @@ my_bool mysql_reconnect(MYSQL *mysql) ...@@ -2211,6 +2211,29 @@ my_bool mysql_reconnect(MYSQL *mysql)
} }
tmp_mysql.reconnect= 1; tmp_mysql.reconnect= 1;
tmp_mysql.free_me= mysql->free_me; tmp_mysql.free_me= mysql->free_me;
/*
For each stmt in mysql->stmts, move it to tmp_mysql if it is
in state MYSQL_STMT_INIT_DONE, otherwise close it.
*/
{
LIST *element= mysql->stmts;
for (; element; element= element->next)
{
MYSQL_STMT *stmt= (MYSQL_STMT *) element->data;
if (stmt->state != MYSQL_STMT_INIT_DONE)
{
stmt->mysql= 0;
}
else
{
tmp_mysql.stmts= list_add(tmp_mysql.stmts, &stmt->list);
}
/* No need to call list_delete for statement here */
}
mysql->stmts= NULL;
}
/* Don't free options as these are now used in tmp_mysql */ /* Don't free options as these are now used in tmp_mysql */
bzero((char*) &mysql->options,sizeof(mysql->options)); bzero((char*) &mysql->options,sizeof(mysql->options));
mysql->free_me=0; mysql->free_me=0;
...@@ -2299,6 +2322,10 @@ static void mysql_close_free(MYSQL *mysql) ...@@ -2299,6 +2322,10 @@ static void mysql_close_free(MYSQL *mysql)
SYNOPSYS SYNOPSYS
mysql_detach_stmt_list() mysql_detach_stmt_list()
stmt_list pointer to mysql->stmts stmt_list pointer to mysql->stmts
NOTE
There is similar code in mysql_reconnect(), so changes here
should also be reflected there.
*/ */
void mysql_detach_stmt_list(LIST **stmt_list __attribute__((unused))) void mysql_detach_stmt_list(LIST **stmt_list __attribute__((unused)))
......
...@@ -2802,9 +2802,20 @@ Item_func_group_concat::Item_func_group_concat(THD *thd, ...@@ -2802,9 +2802,20 @@ Item_func_group_concat::Item_func_group_concat(THD *thd,
void Item_func_group_concat::cleanup() void Item_func_group_concat::cleanup()
{ {
THD *thd= current_thd;
DBUG_ENTER("Item_func_group_concat::cleanup"); DBUG_ENTER("Item_func_group_concat::cleanup");
Item_sum::cleanup(); Item_sum::cleanup();
/* Adjust warning message to include total number of cut values */
if (warning)
{
char warn_buff[MYSQL_ERRMSG_SIZE];
sprintf(warn_buff, ER(ER_CUT_VALUE_GROUP_CONCAT), count_cut_values);
warning->set_msg(thd, warn_buff);
warning= 0;
}
/* /*
Free table and tree if they belong to this item (if item have not pointer Free table and tree if they belong to this item (if item have not pointer
to original item from which was made copy => it own its objects ) to original item from which was made copy => it own its objects )
...@@ -3059,6 +3070,10 @@ String* Item_func_group_concat::val_str(String* str) ...@@ -3059,6 +3070,10 @@ String* Item_func_group_concat::val_str(String* str)
return 0; return 0;
if (count_cut_values && !warning) if (count_cut_values && !warning)
{ {
/*
ER_CUT_VALUE_GROUP_CONCAT needs an argument, but this gets set in
Item_func_group_concat::cleanup().
*/
DBUG_ASSERT(table); DBUG_ASSERT(table);
warning= push_warning(table->in_use, MYSQL_ERROR::WARN_LEVEL_WARN, warning= push_warning(table->in_use, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_CUT_VALUE_GROUP_CONCAT, ER_CUT_VALUE_GROUP_CONCAT,
......
...@@ -6116,16 +6116,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), ...@@ -6116,16 +6116,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
sf_malloc_mem_limit = atoi(argument); sf_malloc_mem_limit = atoi(argument);
#endif #endif
break; break;
#ifdef EMBEDDED_LIBRARY
case OPT_MAX_ALLOWED_PACKET:
max_allowed_packet= atoi(argument);
global_system_variables.max_allowed_packet= max_allowed_packet;
break;
case OPT_NET_BUFFER_LENGTH:
net_buffer_length= atoi(argument);
global_system_variables.net_buffer_length= net_buffer_length;
break;
#endif
#include <sslopt-case.h> #include <sslopt-case.h>
case 'V': case 'V':
print_version(); print_version();
...@@ -6713,6 +6703,9 @@ static void get_options(int argc,char **argv) ...@@ -6713,6 +6703,9 @@ static void get_options(int argc,char **argv)
#ifndef EMBEDDED_LIBRARY #ifndef EMBEDDED_LIBRARY
if (mysqld_chroot) if (mysqld_chroot)
set_root(mysqld_chroot); set_root(mysqld_chroot);
#else
max_allowed_packet= global_system_variables.max_allowed_packet;
net_buffer_length= global_system_variables.net_buffer_length;
#endif #endif
fix_paths(); fix_paths();
......
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