Loading mysql-test/r/rpl_drop_db.result +17 −17 Original line number Diff line number Diff line Loading @@ -4,29 +4,29 @@ reset master; reset slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; start slave; drop database if exists mysqltest; create database mysqltest; create table mysqltest.t1 (n int); insert into mysqltest.t1 values (1); select * from mysqltest.t1 into outfile 'mysqltest/f1.txt'; create table mysqltest.t2 (n int); create table mysqltest.t3 (n int); drop database mysqltest; ERROR HY000: Error dropping database (can't rmdir './mysqltest/', errno: 17) use mysqltest; drop database if exists mysqltest1; create database mysqltest1; create table mysqltest1.t1 (n int); insert into mysqltest1.t1 values (1); select * from mysqltest1.t1 into outfile 'mysqltest1/f1.txt'; create table mysqltest1.t2 (n int); create table mysqltest1.t3 (n int); drop database mysqltest1; ERROR HY000: Error dropping database (can't rmdir './mysqltest1/', errno: 17) use mysqltest1; show tables; Tables_in_mysqltest drop database mysqltest; ERROR HY000: Error dropping database (can't rmdir './mysqltest/', errno: 17) use mysqltest; Tables_in_mysqltest1 drop database mysqltest1; ERROR HY000: Error dropping database (can't rmdir './mysqltest1/', errno: 17) use mysqltest1; show tables; Tables_in_mysqltest Tables_in_mysqltest1 use test; create table t1 (n int); insert into t1 values (1234); use mysqltest; use mysqltest1; show tables; Tables_in_mysqltest Tables_in_mysqltest1 use test; select * from t1; n Loading mysql-test/t/rpl_drop_db.test +18 −19 Original line number Diff line number Diff line Loading @@ -5,32 +5,33 @@ connection master; --disable_warnings drop database if exists mysqltest; drop database if exists mysqltest1; --enable_warnings create database mysqltest; create table mysqltest.t1 (n int); insert into mysqltest.t1 values (1); select * from mysqltest.t1 into outfile 'mysqltest/f1.txt'; create table mysqltest.t2 (n int); create table mysqltest.t3 (n int); create database mysqltest1; create table mysqltest1.t1 (n int); insert into mysqltest1.t1 values (1); select * from mysqltest1.t1 into outfile 'mysqltest1/f1.txt'; create table mysqltest1.t2 (n int); create table mysqltest1.t3 (n int); --error 1010 drop database mysqltest; use mysqltest; drop database mysqltest1; use mysqltest1; show tables; # test the branch of the code that deals with the query buffer overflow disable_query_log; let $1=50; --disable_query_log let $1=1000; while ($1) { eval create table mysqltest.mysql_test_long_table_name$1 (n int); eval create table mysqltest1.t$1(n int); dec $1; } enable_query_log; --enable_query_log --error 1010 drop database mysqltest; use mysqltest; drop database mysqltest1; use mysqltest1; show tables; use test; create table t1 (n int); Loading @@ -38,7 +39,7 @@ insert into t1 values (1234); sync_slave_with_master; connection slave; use mysqltest; use mysqltest1; show tables; use test; select * from t1; Loading @@ -50,7 +51,5 @@ sync_slave_with_master; #cleanup connection slave; stop slave; system rm -rf var/master-data/mysqltest; # End of 4.1 tests system rm -rf var/master-data/mysqltest1; mysys/my_alloc.c +14 −1 Original line number Diff line number Diff line Loading @@ -221,6 +221,12 @@ gptr alloc_root(MEM_ROOT *mem_root,unsigned int Size) #endif } #ifdef SAFEMALLOC #define TRASH(X) bfill(((char*)(X) + ((X)->size-(X)->left)), (X)->left, 0xa5) #else #define TRASH /* no-op */ #endif /* Mark all data in blocks free for reusage */ static inline void mark_blocks_free(MEM_ROOT* root) Loading @@ -231,14 +237,20 @@ static inline void mark_blocks_free(MEM_ROOT* root) /* iterate through (partially) free blocks, mark them free */ last= &root->free; for (next= root->free; next; next= *(last= &next->next)) { next->left= next->size - ALIGN_SIZE(sizeof(USED_MEM)); TRASH(next); } /* Combine the free and the used list */ *last= next=root->used; /* now go through the used blocks and mark them free */ for (; next; next= next->next) { next->left= next->size - ALIGN_SIZE(sizeof(USED_MEM)); TRASH(next); } /* Now everything is set; Indicate that nothing is used anymore */ root->used= 0; Loading Loading @@ -298,6 +310,7 @@ void free_root(MEM_ROOT *root, myf MyFlags) { root->free=root->pre_alloc; root->free->left=root->pre_alloc->size-ALIGN_SIZE(sizeof(USED_MEM)); TRASH(root->pre_alloc); root->free->next=0; } root->block_num= 4; Loading sql/sql_db.cc +8 −10 Original line number Diff line number Diff line Loading @@ -709,11 +709,9 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent) for (tbl= dropped_tables; tbl; tbl= tbl->next_local) { uint tbl_name_len; if (!tbl->was_dropped) continue; /* 3 for the quotes and the comma*/ tbl_name_len= strlen(tbl->table_name) + 3; tbl_name_len= strlen(tbl->real_name) + 3; if (query_pos + tbl_name_len + 1 >= query_end) { write_to_binlog(thd, query, query_pos -1 - query, db, db_len); Loading sql/sql_table.cc +0 −3 Original line number Diff line number Diff line Loading @@ -229,7 +229,6 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists, for (table= tables; table; table= table->next_local) { char *db=table->db; table->was_dropped= 0; mysql_ha_flush(thd, table, MYSQL_HA_CLOSE_FINAL); if (!close_temporary_table(thd, db, table->table_name)) { Loading Loading @@ -301,8 +300,6 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists, wrong_tables.append(','); wrong_tables.append(String(table->table_name,system_charset_info)); } else table->was_dropped= 1; } thd->tmp_table_used= tmp_table_deleted; error= 0; Loading Loading
mysql-test/r/rpl_drop_db.result +17 −17 Original line number Diff line number Diff line Loading @@ -4,29 +4,29 @@ reset master; reset slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; start slave; drop database if exists mysqltest; create database mysqltest; create table mysqltest.t1 (n int); insert into mysqltest.t1 values (1); select * from mysqltest.t1 into outfile 'mysqltest/f1.txt'; create table mysqltest.t2 (n int); create table mysqltest.t3 (n int); drop database mysqltest; ERROR HY000: Error dropping database (can't rmdir './mysqltest/', errno: 17) use mysqltest; drop database if exists mysqltest1; create database mysqltest1; create table mysqltest1.t1 (n int); insert into mysqltest1.t1 values (1); select * from mysqltest1.t1 into outfile 'mysqltest1/f1.txt'; create table mysqltest1.t2 (n int); create table mysqltest1.t3 (n int); drop database mysqltest1; ERROR HY000: Error dropping database (can't rmdir './mysqltest1/', errno: 17) use mysqltest1; show tables; Tables_in_mysqltest drop database mysqltest; ERROR HY000: Error dropping database (can't rmdir './mysqltest/', errno: 17) use mysqltest; Tables_in_mysqltest1 drop database mysqltest1; ERROR HY000: Error dropping database (can't rmdir './mysqltest1/', errno: 17) use mysqltest1; show tables; Tables_in_mysqltest Tables_in_mysqltest1 use test; create table t1 (n int); insert into t1 values (1234); use mysqltest; use mysqltest1; show tables; Tables_in_mysqltest Tables_in_mysqltest1 use test; select * from t1; n Loading
mysql-test/t/rpl_drop_db.test +18 −19 Original line number Diff line number Diff line Loading @@ -5,32 +5,33 @@ connection master; --disable_warnings drop database if exists mysqltest; drop database if exists mysqltest1; --enable_warnings create database mysqltest; create table mysqltest.t1 (n int); insert into mysqltest.t1 values (1); select * from mysqltest.t1 into outfile 'mysqltest/f1.txt'; create table mysqltest.t2 (n int); create table mysqltest.t3 (n int); create database mysqltest1; create table mysqltest1.t1 (n int); insert into mysqltest1.t1 values (1); select * from mysqltest1.t1 into outfile 'mysqltest1/f1.txt'; create table mysqltest1.t2 (n int); create table mysqltest1.t3 (n int); --error 1010 drop database mysqltest; use mysqltest; drop database mysqltest1; use mysqltest1; show tables; # test the branch of the code that deals with the query buffer overflow disable_query_log; let $1=50; --disable_query_log let $1=1000; while ($1) { eval create table mysqltest.mysql_test_long_table_name$1 (n int); eval create table mysqltest1.t$1(n int); dec $1; } enable_query_log; --enable_query_log --error 1010 drop database mysqltest; use mysqltest; drop database mysqltest1; use mysqltest1; show tables; use test; create table t1 (n int); Loading @@ -38,7 +39,7 @@ insert into t1 values (1234); sync_slave_with_master; connection slave; use mysqltest; use mysqltest1; show tables; use test; select * from t1; Loading @@ -50,7 +51,5 @@ sync_slave_with_master; #cleanup connection slave; stop slave; system rm -rf var/master-data/mysqltest; # End of 4.1 tests system rm -rf var/master-data/mysqltest1;
mysys/my_alloc.c +14 −1 Original line number Diff line number Diff line Loading @@ -221,6 +221,12 @@ gptr alloc_root(MEM_ROOT *mem_root,unsigned int Size) #endif } #ifdef SAFEMALLOC #define TRASH(X) bfill(((char*)(X) + ((X)->size-(X)->left)), (X)->left, 0xa5) #else #define TRASH /* no-op */ #endif /* Mark all data in blocks free for reusage */ static inline void mark_blocks_free(MEM_ROOT* root) Loading @@ -231,14 +237,20 @@ static inline void mark_blocks_free(MEM_ROOT* root) /* iterate through (partially) free blocks, mark them free */ last= &root->free; for (next= root->free; next; next= *(last= &next->next)) { next->left= next->size - ALIGN_SIZE(sizeof(USED_MEM)); TRASH(next); } /* Combine the free and the used list */ *last= next=root->used; /* now go through the used blocks and mark them free */ for (; next; next= next->next) { next->left= next->size - ALIGN_SIZE(sizeof(USED_MEM)); TRASH(next); } /* Now everything is set; Indicate that nothing is used anymore */ root->used= 0; Loading Loading @@ -298,6 +310,7 @@ void free_root(MEM_ROOT *root, myf MyFlags) { root->free=root->pre_alloc; root->free->left=root->pre_alloc->size-ALIGN_SIZE(sizeof(USED_MEM)); TRASH(root->pre_alloc); root->free->next=0; } root->block_num= 4; Loading
sql/sql_db.cc +8 −10 Original line number Diff line number Diff line Loading @@ -709,11 +709,9 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent) for (tbl= dropped_tables; tbl; tbl= tbl->next_local) { uint tbl_name_len; if (!tbl->was_dropped) continue; /* 3 for the quotes and the comma*/ tbl_name_len= strlen(tbl->table_name) + 3; tbl_name_len= strlen(tbl->real_name) + 3; if (query_pos + tbl_name_len + 1 >= query_end) { write_to_binlog(thd, query, query_pos -1 - query, db, db_len); Loading
sql/sql_table.cc +0 −3 Original line number Diff line number Diff line Loading @@ -229,7 +229,6 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists, for (table= tables; table; table= table->next_local) { char *db=table->db; table->was_dropped= 0; mysql_ha_flush(thd, table, MYSQL_HA_CLOSE_FINAL); if (!close_temporary_table(thd, db, table->table_name)) { Loading Loading @@ -301,8 +300,6 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists, wrong_tables.append(','); wrong_tables.append(String(table->table_name,system_charset_info)); } else table->was_dropped= 1; } thd->tmp_table_used= tmp_table_deleted; error= 0; Loading