mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Some small portability fixes.
Added support for lower_case_table_names=2, which is to be used on case insensitive file systems. This tells MySQL to preserve the used case of filenames and database names to make it esier to move files between cases sensitive can case insensitive file systems (like Windows and Linux)
This commit is contained in:
@@ -584,14 +584,23 @@ bool ha_flush_logs()
|
||||
|
||||
int ha_delete_table(enum db_type table_type, const char *path)
|
||||
{
|
||||
char tmp_path[FN_REFLEN];
|
||||
handler *file=get_new_handler((TABLE*) 0, table_type);
|
||||
if (!file)
|
||||
return ENOENT;
|
||||
if (lower_case_table_names == 2 && !(file->table_flags() & HA_FILE_BASED))
|
||||
{
|
||||
/* Ensure that table handler get path in lower case */
|
||||
strmov(tmp_path, path);
|
||||
casedn_str(tmp_path);
|
||||
path= tmp_path;
|
||||
}
|
||||
int error=file->delete_table(path);
|
||||
delete file;
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
void ha_store_ptr(byte *buff, uint pack_length, my_off_t pos)
|
||||
{
|
||||
switch (pack_length) {
|
||||
@@ -1043,6 +1052,7 @@ int ha_create_table(const char *name, HA_CREATE_INFO *create_info,
|
||||
{
|
||||
int error;
|
||||
TABLE table;
|
||||
char name_buff[FN_REFLEN];
|
||||
DBUG_ENTER("ha_create_table");
|
||||
|
||||
if (openfrm(name,"",0,(uint) READ_ALL, 0, &table))
|
||||
@@ -1053,19 +1063,19 @@ int ha_create_table(const char *name, HA_CREATE_INFO *create_info,
|
||||
if (table.file->table_flags() & HA_DROP_BEFORE_CREATE)
|
||||
table.file->delete_table(name); // Needed for BDB tables
|
||||
}
|
||||
if (lower_case_table_names == 2 &&
|
||||
!(table.file->table_flags() & HA_FILE_BASED))
|
||||
{
|
||||
/* Ensure that handler gets name in lower case */
|
||||
strmov(name_buff, name);
|
||||
casedn_str(name_buff);
|
||||
name= name_buff;
|
||||
}
|
||||
|
||||
error=table.file->create(name,&table,create_info);
|
||||
VOID(closefrm(&table));
|
||||
if (error)
|
||||
{
|
||||
if (table.db_type == DB_TYPE_INNODB)
|
||||
{
|
||||
/* Creation of InnoDB table cannot fail because of an OS error:
|
||||
put error as the number */
|
||||
my_error(ER_CANT_CREATE_TABLE,MYF(ME_BELL+ME_WAITTANG),name,error);
|
||||
}
|
||||
else
|
||||
my_error(ER_CANT_CREATE_TABLE,MYF(ME_BELL+ME_WAITTANG),name,my_errno);
|
||||
}
|
||||
my_error(ER_CANT_CREATE_TABLE,MYF(ME_BELL+ME_WAITTANG),name,error);
|
||||
DBUG_RETURN(error != 0);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user