diff options
author | evgen@moonbone.local <> | 2006-07-18 23:45:17 +0400 |
---|---|---|
committer | evgen@moonbone.local <> | 2006-07-18 23:45:17 +0400 |
commit | b7a55b9b5c645fbedc81d7e751c25fed4a44d8db (patch) | |
tree | a7cde77bb894ad2fe7efa42cf6785616d7604353 /client | |
parent | ed8eb314124b18b6b4884a6eea98e806a2c1fd30 (diff) | |
parent | fbd94751b86c30d554a88523c02faf303ffbdc18 (diff) | |
download | mariadb-git-b7a55b9b5c645fbedc81d7e751c25fed4a44d8db.tar.gz |
Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0
into moonbone.local:/work/tmp_merge-5.0-opt-mysql
Diffstat (limited to 'client')
-rw-r--r-- | client/mysql.cc | 57 | ||||
-rw-r--r-- | client/mysqldump.c | 34 |
2 files changed, 60 insertions, 31 deletions
diff --git a/client/mysql.cc b/client/mysql.cc index bf13170c58e..94b43d030e8 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -2970,6 +2970,7 @@ static int com_use(String *buffer __attribute__((unused)), char *line) { char *tmp, buff[FN_REFLEN + 1]; + int select_db; bzero(buff, sizeof(buff)); strmov(buff, line); @@ -2989,34 +2990,52 @@ com_use(String *buffer __attribute__((unused)), char *line) if (!current_db || cmp_database(charset_info, current_db,tmp)) { if (one_database) + { skip_updates= 1; + select_db= 0; // don't do mysql_select_db() + } else - { - /* - reconnect once if connection is down or if connection was found to - be down during query - */ - if (!connected && reconnect()) + select_db= 2; // do mysql_select_db() and build_completion_hash() + } + else + { + /* + USE to the current db specified. + We do need to send mysql_select_db() to make server + update database level privileges, which might + change since last USE (see bug#10979). + For performance purposes, we'll skip rebuilding of completion hash. + */ + skip_updates= 0; + select_db= 1; // do only mysql_select_db(), without completion + } + + if (select_db) + { + /* + reconnect once if connection is down or if connection was found to + be down during query + */ + if (!connected && reconnect()) return opt_reconnect ? -1 : 1; // Fatal error - if (mysql_select_db(&mysql,tmp)) - { - if (mysql_errno(&mysql) != CR_SERVER_GONE_ERROR) - return put_error(&mysql); + if (mysql_select_db(&mysql,tmp)) + { + if (mysql_errno(&mysql) != CR_SERVER_GONE_ERROR) + return put_error(&mysql); - if (reconnect()) + if (reconnect()) return opt_reconnect ? -1 : 1; // Fatal error - if (mysql_select_db(&mysql,tmp)) - return put_error(&mysql); - } - my_free(current_db,MYF(MY_ALLOW_ZERO_PTR)); - current_db=my_strdup(tmp,MYF(MY_WME)); + if (mysql_select_db(&mysql,tmp)) + return put_error(&mysql); + } + my_free(current_db,MYF(MY_ALLOW_ZERO_PTR)); + current_db=my_strdup(tmp,MYF(MY_WME)); #ifdef HAVE_READLINE + if (select_db > 1) build_completion_hash(rehash, 1); #endif - } } - else - skip_updates= 0; + put_info("Database changed",INFO_INFO); return 0; } diff --git a/client/mysqldump.c b/client/mysqldump.c index 53cb06be6f3..4318e4b9528 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -2239,15 +2239,16 @@ static void dump_table(char *table, char *db) goto err; } - if (opt_disable_keys) + if (opt_lock) { - fprintf(md_result_file, "\n/*!40000 ALTER TABLE %s DISABLE KEYS */;\n", - opt_quoted_table); + fprintf(md_result_file,"LOCK TABLES %s WRITE;\n", opt_quoted_table); check_io(md_result_file); } - if (opt_lock) + /* Moved disable keys to after lock per bug 15977 */ + if (opt_disable_keys) { - fprintf(md_result_file,"LOCK TABLES %s WRITE;\n", opt_quoted_table); + fprintf(md_result_file, "/*!40000 ALTER TABLE %s DISABLE KEYS */;\n", + opt_quoted_table); check_io(md_result_file); } @@ -2511,17 +2512,19 @@ static void dump_table(char *table, char *db) error= EX_CONSCHECK; goto err; } - if (opt_lock) - { - fputs("UNLOCK TABLES;\n", md_result_file); - check_io(md_result_file); - } + + /* Moved enable keys to before unlock per bug 15977 */ if (opt_disable_keys) { fprintf(md_result_file,"/*!40000 ALTER TABLE %s ENABLE KEYS */;\n", opt_quoted_table); check_io(md_result_file); } + if (opt_lock) + { + fputs("UNLOCK TABLES;\n", md_result_file); + check_io(md_result_file); + } if (opt_autocommit) { fprintf(md_result_file, "commit;\n"); @@ -2781,6 +2784,12 @@ static my_bool dump_all_views_in_db(char *database) uint numrows; char table_buff[NAME_LEN*2+3]; + if (mysql_select_db(sock, database)) + { + DB_error(sock, "when selecting the database"); + return 1; + } + if (opt_xml) print_xml_tag1(md_result_file, "", "database name=", database, "\n"); if (lock_tables) @@ -3436,12 +3445,13 @@ static my_bool get_view_structure(char *table, char* db) mysql_free_result(table_res); /* Get the result from "select ... information_schema" */ - if (!(table_res= mysql_store_result(sock))) + if (!(table_res= mysql_store_result(sock)) || + !(row= mysql_fetch_row(table_res))) { safe_exit(EX_MYSQLERR); DBUG_RETURN(1); } - row= mysql_fetch_row(table_res); + lengths= mysql_fetch_lengths(table_res); /* |