summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorunknown <ram@gw.mysql.r18.ru>2004-09-06 16:48:11 +0500
committerunknown <ram@gw.mysql.r18.ru>2004-09-06 16:48:11 +0500
commit0275ada8af5c94662df250ef2cde6ddb1ac727c1 (patch)
treee1e8a952de2e89eebeb7bff2e634e0f8988b0b77 /client
parentcf43c2382cfde2a58df58b03a6cd6c750fdc2fd4 (diff)
downloadmariadb-git-0275ada8af5c94662df250ef2cde6ddb1ac727c1.tar.gz
A fix (bug #2205 USE database doesn't work after DROP database + CREATE database)
(Jani's CS 1.1675 04/01/05 21:45:14 was adapted an aplied). client/mysql.cc: A fix (bug #2205 USE database doesn't work after DROP database + CREATE database).
Diffstat (limited to 'client')
-rw-r--r--client/mysql.cc29
1 files changed, 27 insertions, 2 deletions
diff --git a/client/mysql.cc b/client/mysql.cc
index 154695aa9e5..1858699e8da 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -2200,8 +2200,9 @@ static int com_source(String *buffer, char *line)
static int
com_use(String *buffer __attribute__((unused)), char *line)
{
- char *tmp;
- char buff[256];
+ char *tmp, buff[FN_REFLEN + 1];
+ MYSQL_RES *res;
+ MYSQL_ROW row;
while (isspace(*line))
line++;
@@ -2214,6 +2215,30 @@ com_use(String *buffer __attribute__((unused)), char *line)
put_info("USE must be followed by a database name",INFO_ERROR);
return 0;
}
+ /*
+ We need to recheck the current database, because it may change
+ under our feet, for example if DROP DATABASE or RENAME DATABASE
+ (latter one not yet available by the time the comment was written)
+ */
+ current_db= 0; // Let's reset current_db, assume it's gone
+ /*
+ 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 || cmp_database(current_db, row[0])))
+ {
+ my_free(current_db, MYF(MY_ALLOW_ZERO_PTR));
+ 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(current_db,tmp))
{
if (one_database)