1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

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.
This commit is contained in:
unknown
2004-10-21 17:02:24 +05:00
parent ffd77c4679
commit 70fe41d2ec
3 changed files with 23 additions and 18 deletions

View File

@ -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)))
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)
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))
{ {

View File

@ -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 */

View File

@ -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: