mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into pcgem.rdg.cyberkinetica.com:/usr/home/acurtis/work/bug6031
This commit is contained in:
commit
e862a42d7f
6 changed files with 81 additions and 8 deletions
|
@ -400,6 +400,13 @@ b attr1
|
|||
9413 9412
|
||||
drop table test.t1, t2;
|
||||
drop database mysqltest;
|
||||
drop database if exists ndbtest1;
|
||||
create database ndbtest1;
|
||||
use ndbtest1;
|
||||
create table t1(id int) engine=ndbcluster;
|
||||
drop database ndbtest1;
|
||||
drop database ndbtest1;
|
||||
ERROR HY000: Can't drop database 'ndbtest1'; database doesn't exist
|
||||
use test;
|
||||
create table t1 (a int primary key, b char(0));
|
||||
insert into t1 values (1,"");
|
||||
|
|
|
@ -360,6 +360,21 @@ select b,test.t1.attr1 from test.t1, t2 where test.t1.pk1 < a;
|
|||
drop table test.t1, t2;
|
||||
drop database mysqltest;
|
||||
|
||||
#
|
||||
# BUG#6031 - DROP DATABASE doesn't drop database on first try
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop database if exists ndbtest1;
|
||||
--enable_warnings
|
||||
|
||||
create database ndbtest1;
|
||||
use ndbtest1;
|
||||
create table t1(id int) engine=ndbcluster;
|
||||
drop database ndbtest1;
|
||||
--error 1008
|
||||
drop database ndbtest1;
|
||||
|
||||
#
|
||||
# test support of char(0)
|
||||
#
|
||||
|
|
|
@ -2777,7 +2777,7 @@ int ha_ndbcluster::reset()
|
|||
|
||||
|
||||
const char **ha_ndbcluster::bas_ext() const
|
||||
{ static const char *ext[]= { ".ndb", NullS }; return ext; }
|
||||
{ static const char *ext[]= { ha_ndb_ext, NullS }; return ext; }
|
||||
|
||||
|
||||
/*
|
||||
|
|
|
@ -109,6 +109,8 @@ const char *tx_isolation_names[] =
|
|||
TYPELIB tx_isolation_typelib= {array_elements(tx_isolation_names)-1,"",
|
||||
tx_isolation_names, NULL};
|
||||
|
||||
static TYPELIB known_extensions= {0,"known_exts", NULL, NULL};
|
||||
|
||||
enum db_type ha_resolve_by_name(const char *name, uint namelen)
|
||||
{
|
||||
THD *thd=current_thd;
|
||||
|
@ -1633,3 +1635,57 @@ int handler::index_read_idx(byte * buf, uint index, const byte * key,
|
|||
return error;
|
||||
}
|
||||
|
||||
/*
|
||||
Returns a list of all known extensions.
|
||||
|
||||
SYNOPSIS
|
||||
ha_known_exts()
|
||||
|
||||
NOTES
|
||||
No mutexes, worst case race is a minor surplus memory allocation
|
||||
|
||||
RETURN VALUE
|
||||
pointer pointer to TYPELIB structure
|
||||
*/
|
||||
TYPELIB *ha_known_exts(void)
|
||||
{
|
||||
if (!known_extensions.type_names)
|
||||
{
|
||||
show_table_type_st *types;
|
||||
List<char> found_exts;
|
||||
List_iterator_fast<char> it(found_exts);
|
||||
const char *e, **ext;
|
||||
|
||||
found_exts.push_back(".db");
|
||||
for (types= sys_table_types; types->type; types++)
|
||||
{
|
||||
if (*types->value == SHOW_OPTION_YES)
|
||||
{
|
||||
handler *file= get_new_handler(0,(enum db_type) types->db_type);
|
||||
for (ext= file->bas_ext(); *ext; ext++)
|
||||
{
|
||||
while (e=it++)
|
||||
if (e == *ext)
|
||||
break;
|
||||
|
||||
if (!e)
|
||||
found_exts.push_back((char *)*ext);
|
||||
|
||||
it.rewind();
|
||||
}
|
||||
delete file;
|
||||
}
|
||||
}
|
||||
ext= (const char **)my_once_alloc(sizeof(char *)*
|
||||
(found_exts.elements+1), MYF(MY_WME));
|
||||
|
||||
DBUG_ASSERT(ext);
|
||||
for (uint i=0; e=it++; i++)
|
||||
ext[i]= e;
|
||||
ext[found_exts.elements]= 0;
|
||||
|
||||
known_extensions.count= found_exts.elements;
|
||||
known_extensions.type_names= ext;
|
||||
}
|
||||
return &known_extensions;
|
||||
}
|
||||
|
|
|
@ -567,5 +567,5 @@ int ha_discover(THD* thd, const char* dbname, const char* name,
|
|||
int ha_find_files(THD *thd,const char *db,const char *path,
|
||||
const char *wild, bool dir,List<char>* files);
|
||||
int ha_table_exists(THD* thd, const char* db, const char* name);
|
||||
|
||||
TYPELIB *ha_known_exts(void);
|
||||
|
||||
|
|
|
@ -30,11 +30,6 @@ const char *del_exts[]= {".frm", ".BAK", ".TMD",".opt", NullS};
|
|||
static TYPELIB deletable_extentions=
|
||||
{array_elements(del_exts)-1,"del_exts", del_exts, NULL};
|
||||
|
||||
const char *known_exts[]=
|
||||
{".ISM",".ISD",".ISM",".MRG",".MYI",".MYD",".db", ".ibd", NullS};
|
||||
static TYPELIB known_extentions=
|
||||
{array_elements(known_exts)-1,"known_exts", known_exts, NULL};
|
||||
|
||||
static long mysql_rm_known_files(THD *thd, MY_DIR *dirp,
|
||||
const char *db, const char *path,
|
||||
uint level);
|
||||
|
@ -737,7 +732,7 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *db,
|
|||
extension= fn_ext(file->name);
|
||||
if (find_type(extension, &deletable_extentions,1+2) <= 0)
|
||||
{
|
||||
if (find_type(extension, &known_extentions,1+2) <= 0)
|
||||
if (find_type(extension, ha_known_exts(),1+2) <= 0)
|
||||
found_other_files++;
|
||||
continue;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue