Commit 70fe41d2 authored by unknown's avatar unknown

A fix (bug #4802 prompt in mysql client shows wrong database after dropping default db).


client/mysql.cc:
  A fix (bug #4802 prompt in mysql client shows wrong database after dropping default db).
  Introduced new get_current_db() function which is called from the com_use()
  and the com_go() if we get SERVER_STATUS_DB_DROPPED.
include/mysql_com.h:
  A fix (bug #4802 prompt in mysql client shows wrong database after dropping default db).
  SERVER_STATUS_DB_DROPPED flag added.
    Note: it is set to 256 to don't conflict with 5.0 ver.
sql/sql_db.cc:
  A fix (bug #4802 prompt in mysql client shows wrong database after dropping default db).
  SERVER_STATUS_DB_DROPPED flag is set/unset.
parent ffd77c46
...@@ -1574,6 +1574,22 @@ static int reconnect(void) ...@@ -1574,6 +1574,22 @@ static int reconnect(void)
return 0; return 0;
} }
static void get_current_db()
{
MYSQL_RES *res;
my_free(current_db, MYF(MY_ALLOW_ZERO_PTR));
current_db= NULL;
/* In case of error below current_db will be NULL */
if (!mysql_query(&mysql, "SELECT DATABASE()") &&
(res= mysql_use_result(&mysql)))
{
MYSQL_ROW row= mysql_fetch_row(res);
if (row[0])
current_db= my_strdup(row[0], MYF(MY_WME));
mysql_free_result(res);
}
}
/*************************************************************************** /***************************************************************************
The different commands The different commands
...@@ -1899,6 +1915,9 @@ com_go(String *buffer,char *line __attribute__((unused))) ...@@ -1899,6 +1915,9 @@ com_go(String *buffer,char *line __attribute__((unused)))
if (err >= 1) if (err >= 1)
error= put_error(&mysql); error= put_error(&mysql);
if (!status.batch && (mysql.server_status & SERVER_STATUS_DB_DROPPED))
get_current_db();
return error; /* New command follows */ return error; /* New command follows */
} }
...@@ -2614,24 +2633,7 @@ com_use(String *buffer __attribute__((unused)), char *line) ...@@ -2614,24 +2633,7 @@ com_use(String *buffer __attribute__((unused)), char *line)
under our feet, for example if DROP DATABASE or RENAME DATABASE under our feet, for example if DROP DATABASE or RENAME DATABASE
(latter one not yet available by the time the comment was written) (latter one not yet available by the time the comment was written)
*/ */
/* Let's reset current_db, assume it's gone */ get_current_db();
my_free(current_db, MYF(MY_ALLOW_ZERO_PTR));
current_db= 0;
/*
We don't care about in case of an error below because current_db
was just set to 0.
*/
if (!mysql_query(&mysql, "SELECT DATABASE()") &&
(res= mysql_use_result(&mysql)))
{
row= mysql_fetch_row(res);
if (row[0])
{
current_db= my_strdup(row[0], MYF(MY_WME));
}
(void) mysql_fetch_row(res); // Read eof
mysql_free_result(res);
}
if (!current_db || cmp_database(charset_info, current_db,tmp)) if (!current_db || cmp_database(charset_info, current_db,tmp))
{ {
......
...@@ -127,6 +127,7 @@ enum enum_server_command ...@@ -127,6 +127,7 @@ enum enum_server_command
#define SERVER_MORE_RESULTS_EXISTS 8 /* Multi query - next query exists */ #define SERVER_MORE_RESULTS_EXISTS 8 /* Multi query - next query exists */
#define SERVER_QUERY_NO_GOOD_INDEX_USED 16 #define SERVER_QUERY_NO_GOOD_INDEX_USED 16
#define SERVER_QUERY_NO_INDEX_USED 32 #define SERVER_QUERY_NO_INDEX_USED 32
#define SERVER_STATUS_DB_DROPPED 256 /* A database was dropped */
#define MYSQL_ERRMSG_SIZE 512 #define MYSQL_ERRMSG_SIZE 512
#define NET_READ_TIMEOUT 30 /* Timeout on read */ #define NET_READ_TIMEOUT 30 /* Timeout on read */
......
...@@ -634,7 +634,9 @@ int mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent) ...@@ -634,7 +634,9 @@ int mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
thd->clear_error(); thd->clear_error();
mysql_bin_log.write(&qinfo); mysql_bin_log.write(&qinfo);
} }
thd->server_status|= SERVER_STATUS_DB_DROPPED;
send_ok(thd, (ulong) deleted); send_ok(thd, (ulong) deleted);
thd->server_status&= !SERVER_STATUS_DB_DROPPED;
} }
exit: exit:
......
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