Commit 02d2d70c authored by unknown's avatar unknown
Browse files

The automatic DROP TEMPORARY TABLE is now DROP TEMPORARY TABLE IF EXISTS,

this is better in this case:
- imagine user1 has created a temp table
- imagine user2 does FLUSH TABLES WITH READ LOCK, then takes a backup,
then RESET MASTER then UNLOCK TABLES, like mysqldump --first-slave
- then in the binlog you will finally have the DROP TEMPORARY TABLE,
but not the CREATE TEMPORARY TABLE, so when you later restore with
mysqlbinlog|mysql, mysql will complain that table does not exist.
Replication was already protected of this (it processes DROP TEMPORARY
TABLE as if there was a IF EXISTS), now I add it directly to the query
for mysqlbinlog|mysql to work.


mysql-test/r/drop_temp_table.result:
  result update (query changed)
parent 8b623739
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -13,6 +13,6 @@ Log_name Pos Event_type Server_id Orig_log_pos Info
master-bin.001	4	Start	1	4	Server ver: VERSION, Binlog ver: 3
master-bin.001	79	Query	1	79	use `test`; create database `drop-temp+table-test`
master-bin.001	152	Query	1	152	use `drop-temp+table-test`; create temporary table `table:name` (a int)
master-bin.001	246	Query	1	246	use `drop-temp+table-test`; DROP /*!40005 TEMPORARY */ TABLE `drop-temp+table-test`.`table:name`
master-bin.001	365	Query	1	365	use `drop-temp+table-test`; DO RELEASE_LOCK("a")
master-bin.001	246	Query	1	246	use `drop-temp+table-test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `drop-temp+table-test`.`table:name`
master-bin.001	375	Query	1	375	use `drop-temp+table-test`; DO RELEASE_LOCK("a")
drop database `drop-temp+table-test`;
+3 −2
Original line number Diff line number Diff line
@@ -547,7 +547,7 @@ void close_temporary_tables(THD *thd)
    return;
  
  LINT_INIT(end);
  query_buf_size= 50;   // Enough for DROP ... TABLE
  query_buf_size= 50;   // Enough for DROP ... TABLE IF EXISTS

  for (table=thd->temporary_tables ; table ; table=table->next)
    /*
@@ -558,7 +558,8 @@ void close_temporary_tables(THD *thd)
    query_buf_size+= table->key_length+1;

  if ((query = alloc_root(&thd->mem_root, query_buf_size)))
    end=strmov(query, "DROP /*!40005 TEMPORARY */ TABLE ");
    // Better add "if exists", in case a RESET MASTER has been done
    end=strmov(query, "DROP /*!40005 TEMPORARY */ TABLE IF EXISTS ");

  for (table=thd->temporary_tables ; table ; table=next)
  {