mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
fixed bug in truncating temp tables
fixed compilation problem on FreeBSD added test for truncating temporary tables mysql-test/r/truncate.result: truncate test mysql-test/t/truncate.test: truncate test update mysys/safemalloc.c: fixed FreeBSD compilation problem sql/sql_delete.cc: fixed bug in truncating temporary tables
This commit is contained in:
@ -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;
|
|||||||
# 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 @@
|
|||||||
#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)
|
|||||||
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)
|
|||||||
*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)
|
||||||
|
Reference in New Issue
Block a user