fixed bug in truncating temp tables

fixed compilation problem on FreeBSD
added test for truncating temporary tables
parent 24727366
...@@ -14,3 +14,9 @@ a b c1 ...@@ -14,3 +14,9 @@ a b c1
drop table t1; drop table t1;
select count(*) from t1; select count(*) from t1;
Table 'test.t1' doesn't exist Table 'test.t1' doesn't exist
create temporary table t1 (n int);
insert into t1 values (1),(2),(3);
truncate table t1;
select * from t1;
n
drop table t1;
...@@ -13,3 +13,8 @@ drop table t1; ...@@ -13,3 +13,8 @@ drop table t1;
# The following should fail # The following should fail
--error 1146 --error 1146
select count(*) from t1; select count(*) from t1;
create temporary table t1 (n int);
insert into t1 values (1),(2),(3);
truncate table t1;
select * from t1;
drop table t1;
...@@ -73,7 +73,10 @@ ...@@ -73,7 +73,10 @@
#include "mysys_err.h" #include "mysys_err.h"
ulonglong safemalloc_mem_limit = ~(ulonglong)0; ulonglong safemalloc_mem_limit = ~(ulonglong)0;
#ifdef THREAD
pthread_t shutdown_th,main_th,signal_th; pthread_t shutdown_th,main_th,signal_th;
#endif
#define pNext tInt._pNext #define pNext tInt._pNext
#define pPrev tInt._pPrev #define pPrev tInt._pPrev
......
...@@ -520,7 +520,11 @@ int mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok) ...@@ -520,7 +520,11 @@ int mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok)
if ((error= (int) !(open_temporary_table(thd, path, table_list->db, if ((error= (int) !(open_temporary_table(thd, path, table_list->db,
table_list->real_name, 1)))) table_list->real_name, 1))))
(void) rm_temporary_table(table_type, path); (void) rm_temporary_table(table_type, path);
DBUG_RETURN(error ? -1 : 0); /* Sasha: if we return here we will not have binloged the truncation and
we will not send_ok() to the client. Yes, we do need better coverage
testing, this bug has been here for a few months :-).
*/
goto end;
} }
(void) sprintf(path,"%s/%s/%s%s",mysql_data_home,table_list->db, (void) sprintf(path,"%s/%s/%s%s",mysql_data_home,table_list->db,
...@@ -549,7 +553,7 @@ int mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok) ...@@ -549,7 +553,7 @@ int mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok)
*fn_ext(path)=0; // Remove the .frm extension *fn_ext(path)=0; // Remove the .frm extension
error= ha_create_table(path,&create_info,1) ? -1 : 0; error= ha_create_table(path,&create_info,1) ? -1 : 0;
query_cache_invalidate3(thd, table_list, 0); query_cache_invalidate3(thd, table_list, 0);
end:
if (!dont_send_ok) if (!dont_send_ok)
{ {
if (!error) if (!error)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment