mirror of
https://github.com/MariaDB/server.git
synced 2026-04-26 10:15:29 +02:00
Changed DB_TYPE_INNOBASE to DB_TYPE_INNODB
Fix that DROP DATABASE works with all table types Use BULK_INSERT when inserting more than one row Better TRUNCATE TABLE BitKeeper/deleted/.del-compilation_finished.au.gz~70bd14095a918139: Delete: sounds/compilation_finished.au.gz BUILD/FINISH.sh: Removed 'finished' sound as this isn't a general solution. Docs/manual.texi: Added upgrading from 3.23 configure.in: Fixed version number sql/ha_innobase.cc: Default creation of InnoDB tables. sql/ha_myisam.cc: Disable BULK_INSERT of using safe mode sql/handler.cc: Changed DB_TYPE_INNOBASE to DB_TYPE_INNODB sql/handler.h: Changed DB_TYPE_INNOBASE to DB_TYPE_INNODB sql/lock.cc: Added lock_and_wait_for_table_name sql/mysql_priv.h: Better TRUNCATE TABLE sql/sql_db.cc: Fix that DROP DATABASE works with all table types sql/sql_delete.cc: Better TRUNCATE TABLE sql/sql_insert.cc: Use BULK_INSERT when inserting more than one row sql/sql_load.cc: Small bug fix. sql/sql_parse.cc: Better TRUNCATE TABLE sql/sql_select.cc: Change INNOBASE -> INNODB sql/sql_table.cc: Better TRUNCATE TABLE sql/sql_yacc.yy: INNOBASE -> INNODB sql/thr_malloc.cc: Fix for replication
This commit is contained in:
parent
fc14066488
commit
b67d11e17c
19 changed files with 365 additions and 257 deletions
105
sql/sql_db.cc
105
sql/sql_db.cc
|
|
@ -25,7 +25,8 @@
|
|||
#include <direct.h>
|
||||
#endif
|
||||
|
||||
static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *path,
|
||||
static long mysql_rm_known_files(THD *thd, MY_DIR *dirp,
|
||||
const char *db, const char *path,
|
||||
uint level);
|
||||
|
||||
/* db-name is already validated when we come here */
|
||||
|
|
@ -121,17 +122,20 @@ exit:
|
|||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
const char *del_exts[]=
|
||||
{".frm",".ISM",".ISD",".ISM",".HSH",".DAT",".MRG",".MYI",".MYD", ".db", ".BAK", NullS};
|
||||
const char *del_exts[]= {".frm", ".BAK", NullS};
|
||||
static TYPELIB deletable_extentions=
|
||||
{array_elements(del_exts)-1,"del_exts", del_exts};
|
||||
|
||||
|
||||
/* db-name is already validated when we come here */
|
||||
/* If thd == 0, do not write any messages
|
||||
This is useful in replication when we want to remove
|
||||
a stale database before replacing it with the new one
|
||||
/*
|
||||
Drop all tables in a database.
|
||||
|
||||
db-name is already validated when we come here
|
||||
If thd == 0, do not write any messages; This is useful in replication
|
||||
when we want to remove a stale database before replacing it with the new one
|
||||
*/
|
||||
|
||||
|
||||
int mysql_rm_db(THD *thd,char *db,bool if_exists)
|
||||
{
|
||||
long deleted=0;
|
||||
|
|
@ -144,31 +148,15 @@ int mysql_rm_db(THD *thd,char *db,bool if_exists)
|
|||
VOID(pthread_mutex_lock(&LOCK_open));
|
||||
|
||||
// do not drop database if another thread is holding read lock
|
||||
if (global_read_lock)
|
||||
{
|
||||
if (thd->global_read_lock)
|
||||
{
|
||||
net_printf(&thd->net, ER_DROP_DB_WITH_READ_LOCK);
|
||||
goto exit;
|
||||
}
|
||||
while (global_read_lock && ! thd->killed)
|
||||
{
|
||||
(void) pthread_cond_wait(&COND_refresh,&LOCK_open);
|
||||
}
|
||||
|
||||
if (thd->killed)
|
||||
{
|
||||
net_printf(&thd->net, ER_SERVER_SHUTDOWN);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
if (wait_if_global_read_lock(thd,0))
|
||||
goto exit;
|
||||
|
||||
(void) sprintf(path,"%s/%s",mysql_data_home,db);
|
||||
unpack_dirname(path,path); // Convert if not unix
|
||||
/* See if the directory exists */
|
||||
if (!(dirp = my_dir(path,MYF(MY_WME | MY_DONT_SORT))))
|
||||
{
|
||||
if(thd)
|
||||
if (thd)
|
||||
{
|
||||
if (!if_exists)
|
||||
net_printf(&thd->net,ER_DB_DROP_EXISTS,db);
|
||||
|
|
@ -180,7 +168,8 @@ int mysql_rm_db(THD *thd,char *db,bool if_exists)
|
|||
}
|
||||
remove_db_from_cache(db);
|
||||
|
||||
if ((deleted=mysql_rm_known_files(thd, dirp, path,0)) >= 0 && thd)
|
||||
error = -1;
|
||||
if ((deleted=mysql_rm_known_files(thd, dirp, db, path,0)) >= 0 && thd)
|
||||
{
|
||||
if (!thd->query)
|
||||
{
|
||||
|
|
@ -206,27 +195,31 @@ int mysql_rm_db(THD *thd,char *db,bool if_exists)
|
|||
exit:
|
||||
VOID(pthread_mutex_unlock(&LOCK_open));
|
||||
VOID(pthread_mutex_unlock(&LOCK_mysql_create_db));
|
||||
start_waiting_global_read_lock(thd);
|
||||
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
/*
|
||||
Removes files with known extensions plus all found subdirectories that
|
||||
are 2 digits (raid directories).
|
||||
thd MUST be set when calling this function!
|
||||
*/
|
||||
|
||||
/* This one also needs to work with thd == 0 for replication */
|
||||
static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *org_path,
|
||||
uint level)
|
||||
static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *db,
|
||||
const char *org_path, uint level)
|
||||
{
|
||||
long deleted=0;
|
||||
ulong found_other_files=0;
|
||||
char filePath[FN_REFLEN];
|
||||
TABLE_LIST *tot_list=0, **tot_list_next;
|
||||
DBUG_ENTER("mysql_rm_known_files");
|
||||
DBUG_PRINT("enter",("path: %s", org_path));
|
||||
/* remove all files with known extensions */
|
||||
|
||||
tot_list_next= &tot_list;
|
||||
|
||||
for (uint idx=2 ;
|
||||
idx < (uint) dirp->number_off_files && (!thd || !thd->killed) ;
|
||||
idx < (uint) dirp->number_off_files && !thd->killed ;
|
||||
idx++)
|
||||
{
|
||||
FILEINFO *file=dirp->dir_entry+idx;
|
||||
|
|
@ -243,7 +236,7 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *org_path,
|
|||
if ((new_dirp = my_dir(newpath,MYF(MY_DONT_SORT))))
|
||||
{
|
||||
DBUG_PRINT("my",("New subdir found: %s", newpath));
|
||||
if ((mysql_rm_known_files(thd,new_dirp,newpath,1)) < 0)
|
||||
if ((mysql_rm_known_files(thd, new_dirp, NullS, newpath,1)) < 0)
|
||||
{
|
||||
my_dirend(dirp);
|
||||
DBUG_RETURN(-1);
|
||||
|
|
@ -257,24 +250,39 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *org_path,
|
|||
continue;
|
||||
}
|
||||
strxmov(filePath,org_path,"/",file->name,NullS);
|
||||
unpack_filename(filePath,filePath);
|
||||
if (my_delete_with_symlink(filePath,MYF(MY_WME)))
|
||||
if (db && !strcasecmp(fn_ext(file->name), reg_ext))
|
||||
{
|
||||
if(thd)
|
||||
net_printf(&thd->net,ER_DB_DROP_DELETE,filePath,my_error);
|
||||
my_dirend(dirp);
|
||||
DBUG_RETURN(-1);
|
||||
/* Drop the table nicely */
|
||||
*fn_ext(file->name)=0; // Remove extension
|
||||
TABLE_LIST *table_list=(TABLE_LIST*)
|
||||
thd->calloc(sizeof(*table_list)+ strlen(db)+strlen(file->name)+1);
|
||||
if (!table_list)
|
||||
{
|
||||
my_dirend(dirp);
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
table_list->db= (char*) (table_list+1);
|
||||
strmov(table_list->real_name=strmov(table_list->db,db)+1,
|
||||
file->name);
|
||||
/* Link into list */
|
||||
(*tot_list_next)= table_list;
|
||||
tot_list_next= &table_list->next;
|
||||
}
|
||||
deleted++;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if (my_delete_with_symlink(filePath,MYF(MY_WME)))
|
||||
{
|
||||
my_dirend(dirp);
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
deleted++;
|
||||
}
|
||||
}
|
||||
my_dirend(dirp);
|
||||
|
||||
if (thd && thd->killed)
|
||||
{
|
||||
send_error(&thd->net,ER_SERVER_SHUTDOWN);
|
||||
if (thd->killed || (tot_list && mysql_rm_table_part2(thd, tot_list, 1, 1)))
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
/*
|
||||
If the directory is a symbolic link, remove the link first, then
|
||||
|
|
@ -294,22 +302,19 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *org_path,
|
|||
/* Don't give errors if we can't delete 'RAID' directory */
|
||||
if (level)
|
||||
DBUG_RETURN(deleted);
|
||||
if(thd)
|
||||
send_error(&thd->net);
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
path=filePath;
|
||||
}
|
||||
#endif
|
||||
/* Remove last FN_LIBCHAR to not cause a probelm on OS/2 */
|
||||
/* Remove last FN_LIBCHAR to not cause a problem on OS/2 */
|
||||
char *pos=strend(path);
|
||||
if (pos > path && pos[-1] == FN_LIBCHAR)
|
||||
*--pos=0;
|
||||
/* Don't give errors if we can't delete 'RAID' directory */
|
||||
if (rmdir(path) < 0 && !level)
|
||||
{
|
||||
if(thd)
|
||||
net_printf(&thd->net,ER_DB_DROP_RMDIR, path,errno);
|
||||
my_error(ER_DB_DROP_RMDIR, MYF(0), path, errno);
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue