diff options
author | unknown <monty@hundin.mysql.fi> | 2002-02-11 13:48:59 +0200 |
---|---|---|
committer | unknown <monty@hundin.mysql.fi> | 2002-02-11 13:48:59 +0200 |
commit | e0ccdc17a208abb21cf15e7fbbbc3b88b969e0ec (patch) | |
tree | ada172b5dc5dccd546e301548aac618812e19814 /sql/sql_table.cc | |
parent | af932b5db200407cb250d6e398383e8db387e680 (diff) | |
parent | 501650c5b16a4c7cf7b673b19f9a2ae9c319e24f (diff) | |
download | mariadb-git-e0ccdc17a208abb21cf15e7fbbbc3b88b969e0ec.tar.gz |
merge with 3.23.48
BUILD/FINISH.sh:
Auto merged
BUILD/SETUP.sh:
Auto merged
BUILD/compile-alpha:
Auto merged
BUILD/compile-pentium-gcov:
Auto merged
BUILD/compile-pentium-gprof:
Auto merged
BUILD/compile-pentium:
Auto merged
BitKeeper/deleted/.del-my_new.cc:
Delete: mysys/my_new.cc
Build-tools/Do-compile:
Auto merged
acconfig.h:
Auto merged
acinclude.m4:
Auto merged
Docs/manual.texi:
Auto merged
bdb/dist/configure.in:
Auto merged
client/Makefile.am:
Auto merged
innobase/btr/btr0cur.c:
Auto merged
innobase/buf/buf0lru.c:
Auto merged
innobase/dict/dict0crea.c:
Auto merged
innobase/fil/fil0fil.c:
Auto merged
innobase/include/srv0srv.h:
Auto merged
innobase/rem/rem0cmp.c:
Auto merged
innobase/srv/srv0srv.c:
Auto merged
innobase/srv/srv0start.c:
Auto merged
innobase/trx/trx0purge.c:
Auto merged
myisam/myisampack.c:
Auto merged
mysql-test/mysql-test-run.sh:
Auto merged
mysql-test/t/join.test:
Auto merged
mysys/Makefile.am:
Auto merged
scripts/Makefile.am:
Auto merged
sql/ha_innodb.h:
Auto merged
sql/handler.cc:
Auto merged
sql/my_lock.c:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_table.cc:
Auto merged
support-files/my-huge.cnf.sh:
Auto merged
support-files/my-large.cnf.sh:
Auto merged
support-files/my-medium.cnf.sh:
Auto merged
support-files/my-small.cnf.sh:
Auto merged
configure.in:
merge
innobase/row/row0mysql.c:
merge
innobase/trx/trx0trx.c:
merge
mysql-test/r/innodb.result:
merge
mysql-test/r/join.result:
merge
sql/ha_innodb.cc:
merge
sql/slave.cc:
merge
Diffstat (limited to 'sql/sql_table.cc')
-rw-r--r-- | sql/sql_table.cc | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 0335c6f49cf..8013afa194b 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -825,7 +825,7 @@ bool close_cached_table(THD *thd,TABLE *table) /* Mark all tables that are in use as 'old' */ mysql_lock_abort(thd,table); // end threads waiting on lock -#ifdef REMOVE_LOCKS +#if defined(USING_TRANSACTIONS) || defined( __WIN__) || defined( __EMX__) || !defined(OS2) /* Wait until all there are no other threads that has this table open */ while (remove_table_from_cache(thd,table->table_cache_key, table->table_name)) @@ -1674,20 +1674,29 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, } } -#if defined( __WIN__) || defined( __EMX__) || defined( OS2) - // Win32 can't rename an open table, so we must close the org table! - table_name=thd->strdup(table_name); // must be saved - if (close_cached_table(thd,table)) - { // Aborted - VOID(quick_rm_table(new_db_type,new_db,tmp_name)); - VOID(pthread_mutex_unlock(&LOCK_open)); - goto err; +#if (!defined( __WIN__) && !defined( __EMX__) && !defined( OS2)) + if (table->file->has_transactions()) +#endif + { + /* + Win32 and InnoDB can't drop a table that is in use, so we must + close all the original table at before doing the rename + */ + table_name=thd->strdup(table_name); // must be saved + if (close_cached_table(thd,table)) + { // Aborted + VOID(quick_rm_table(new_db_type,new_db,tmp_name)); + VOID(pthread_mutex_unlock(&LOCK_open)); + goto err; + } + table=0; // Marker that table is closed } - table=0; // Marker for win32 version -#else - table->file->extra(HA_EXTRA_FORCE_REOPEN); // Don't use this file anymore +#if (!defined( __WIN__) && !defined( __EMX__) && !defined( OS2)) + else + table->file->extra(HA_EXTRA_FORCE_REOPEN); // Don't use this file anymore #endif + error=0; if (mysql_rename_table(old_db_type,db,table_name,db,old_name)) { |