Commit 3cbaa966 authored by unknown's avatar unknown

Merge zippy.cornsilk.net:/home/cmiller/work/mysql/merge/tmp_merge

into  zippy.cornsilk.net:/home/cmiller/work/mysql/merge/mysql-5.0


client/mysql.cc:
  Auto merged
tests/mysql_client_test.c:
  Auto merged
parents 74c48abe 285b7349
...@@ -136,7 +136,8 @@ static my_bool info_flag=0,ignore_errors=0,wait_flag=0,quick=0, ...@@ -136,7 +136,8 @@ static my_bool info_flag=0,ignore_errors=0,wait_flag=0,quick=0,
tty_password= 0, opt_nobeep=0, opt_reconnect=1, tty_password= 0, opt_nobeep=0, opt_reconnect=1,
default_charset_used= 0, opt_secure_auth= 0, default_charset_used= 0, opt_secure_auth= 0,
default_pager_set= 0, opt_sigint_ignore= 0, default_pager_set= 0, opt_sigint_ignore= 0,
show_warnings = 0; show_warnings= 0;
static volatile int executing_query= 0, interrupted_query= 0;
static ulong opt_max_allowed_packet, opt_net_buffer_length; static ulong opt_max_allowed_packet, opt_net_buffer_length;
static uint verbose=0,opt_silent=0,opt_mysql_port=0, opt_local_infile=0; static uint verbose=0,opt_silent=0,opt_mysql_port=0, opt_local_infile=0;
static my_string opt_mysql_unix_port=0; static my_string opt_mysql_unix_port=0;
...@@ -338,6 +339,7 @@ static void end_timer(ulong start_time,char *buff); ...@@ -338,6 +339,7 @@ static void end_timer(ulong start_time,char *buff);
static void mysql_end_timer(ulong start_time,char *buff); static void mysql_end_timer(ulong start_time,char *buff);
static void nice_time(double sec,char *buff,bool part_second); static void nice_time(double sec,char *buff,bool part_second);
static sig_handler mysql_end(int sig); static sig_handler mysql_end(int sig);
static sig_handler mysql_sigint(int sig);
int main(int argc,char *argv[]) int main(int argc,char *argv[])
...@@ -420,7 +422,7 @@ int main(int argc,char *argv[]) ...@@ -420,7 +422,7 @@ int main(int argc,char *argv[])
if (opt_sigint_ignore) if (opt_sigint_ignore)
signal(SIGINT, SIG_IGN); signal(SIGINT, SIG_IGN);
else else
signal(SIGINT, mysql_end); // Catch SIGINT to clean up signal(SIGINT, mysql_sigint); // Catch SIGINT to clean up
signal(SIGQUIT, mysql_end); // Catch SIGQUIT to clean up signal(SIGQUIT, mysql_end); // Catch SIGQUIT to clean up
/* /*
...@@ -488,6 +490,28 @@ int main(int argc,char *argv[]) ...@@ -488,6 +490,28 @@ int main(int argc,char *argv[])
#endif #endif
} }
sig_handler mysql_sigint(int sig)
{
char kill_buffer[40];
MYSQL *kill_mysql= NULL;
signal(SIGINT, mysql_sigint);
/* terminate if no query being executed, or we already tried interrupting */
if (!executing_query || interrupted_query++)
mysql_end(sig);
kill_mysql= mysql_init(kill_mysql);
if (!mysql_real_connect(kill_mysql,current_host, current_user, opt_password,
"", opt_mysql_port, opt_mysql_unix_port,0))
mysql_end(sig);
/* kill_buffer is always big enough because max length of %lu is 15 */
sprintf(kill_buffer, "KILL /*!50000 QUERY */ %lu", mysql_thread_id(&mysql));
mysql_real_query(kill_mysql, kill_buffer, strlen(kill_buffer));
mysql_close(kill_mysql);
tee_fprintf(stdout, "Query aborted by Ctrl+C\n");
}
sig_handler mysql_end(int sig) sig_handler mysql_end(int sig)
{ {
mysql_close(&mysql); mysql_close(&mysql);
...@@ -1006,6 +1030,8 @@ static int read_and_execute(bool interactive) ...@@ -1006,6 +1030,8 @@ static int read_and_execute(bool interactive)
if (opt_outfile && glob_buffer.is_empty()) if (opt_outfile && glob_buffer.is_empty())
fflush(OUTFILE); fflush(OUTFILE);
interrupted_query= 0;
#if defined( __WIN__) || defined(OS2) || defined(__NETWARE__) #if defined( __WIN__) || defined(OS2) || defined(__NETWARE__)
tee_fputs(prompt, stdout); tee_fputs(prompt, stdout);
#if defined(__NETWARE__) #if defined(__NETWARE__)
...@@ -2007,6 +2033,8 @@ com_go(String *buffer,char *line __attribute__((unused))) ...@@ -2007,6 +2033,8 @@ com_go(String *buffer,char *line __attribute__((unused)))
timer=start_timer(); timer=start_timer();
executing_query= 1;
error= mysql_real_query_for_lazy(buffer->ptr(),buffer->length()); error= mysql_real_query_for_lazy(buffer->ptr(),buffer->length());
#ifdef HAVE_READLINE #ifdef HAVE_READLINE
...@@ -2021,6 +2049,7 @@ com_go(String *buffer,char *line __attribute__((unused))) ...@@ -2021,6 +2049,7 @@ com_go(String *buffer,char *line __attribute__((unused)))
if (error) if (error)
{ {
buffer->length(0); // Remove query on error buffer->length(0); // Remove query on error
executing_query= 0;
return error; return error;
} }
error=0; error=0;
...@@ -2031,14 +2060,20 @@ com_go(String *buffer,char *line __attribute__((unused))) ...@@ -2031,14 +2060,20 @@ com_go(String *buffer,char *line __attribute__((unused)))
if (quick) if (quick)
{ {
if (!(result=mysql_use_result(&mysql)) && mysql_field_count(&mysql)) if (!(result=mysql_use_result(&mysql)) && mysql_field_count(&mysql))
{
executing_query= 0;
return put_error(&mysql); return put_error(&mysql);
} }
}
else else
{ {
error= mysql_store_result_for_lazy(&result); error= mysql_store_result_for_lazy(&result);
if (error) if (error)
{
executing_query= 0;
return error; return error;
} }
}
if (verbose >= 3 || !opt_silent) if (verbose >= 3 || !opt_silent)
mysql_end_timer(timer,time_buff); mysql_end_timer(timer,time_buff);
...@@ -2098,6 +2133,9 @@ com_go(String *buffer,char *line __attribute__((unused))) ...@@ -2098,6 +2133,9 @@ com_go(String *buffer,char *line __attribute__((unused)))
fflush(stdout); fflush(stdout);
mysql_free_result(result); mysql_free_result(result);
} while (!(err= mysql_next_result(&mysql))); } while (!(err= mysql_next_result(&mysql)));
executing_query= 0;
if (err >= 1) if (err >= 1)
error= put_error(&mysql); error= put_error(&mysql);
......
...@@ -88,7 +88,7 @@ Listener_thread::~Listener_thread() ...@@ -88,7 +88,7 @@ Listener_thread::~Listener_thread()
void Listener_thread::run() void Listener_thread::run()
{ {
int n= 0; int i, n= 0;
#ifndef __WIN__ #ifndef __WIN__
/* we use this var to check whether we are running on LinuxThreads */ /* we use this var to check whether we are running on LinuxThreads */
...@@ -117,7 +117,7 @@ void Listener_thread::run() ...@@ -117,7 +117,7 @@ void Listener_thread::run()
#endif #endif
/* II. Listen sockets and spawn childs */ /* II. Listen sockets and spawn childs */
for (int i= 0; i < num_sockets; i++) for (i= 0; i < num_sockets; i++)
n= max(n, sockets[i]); n= max(n, sockets[i]);
n++; n++;
...@@ -176,7 +176,7 @@ void Listener_thread::run() ...@@ -176,7 +176,7 @@ void Listener_thread::run()
log_info("Listener_thread::run(): shutdown requested, exiting..."); log_info("Listener_thread::run(): shutdown requested, exiting...");
for (int i= 0; i < num_sockets; i++) for (i= 0; i < num_sockets; i++)
close(sockets[i]); close(sockets[i]);
#ifndef __WIN__ #ifndef __WIN__
...@@ -189,7 +189,7 @@ void Listener_thread::run() ...@@ -189,7 +189,7 @@ void Listener_thread::run()
err: err:
// we have to close the ip sockets in case of error // we have to close the ip sockets in case of error
for (int i= 0; i < num_sockets; i++) for (i= 0; i < num_sockets; i++)
close(sockets[i]); close(sockets[i]);
thread_registry.unregister_thread(&thread_info); thread_registry.unregister_thread(&thread_info);
......
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