diff options
author | unknown <ram@gw.mysql.r18.ru> | 2004-09-06 16:48:11 +0500 |
---|---|---|
committer | unknown <ram@gw.mysql.r18.ru> | 2004-09-06 16:48:11 +0500 |
commit | 0275ada8af5c94662df250ef2cde6ddb1ac727c1 (patch) | |
tree | e1e8a952de2e89eebeb7bff2e634e0f8988b0b77 /client | |
parent | cf43c2382cfde2a58df58b03a6cd6c750fdc2fd4 (diff) | |
download | mariadb-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.cc | 29 |
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) |