mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge rburnett@bk-internal.mysql.com:/home/bk/mysql-5.1-new
into linux.site:/home/reggie/work/mysql-5.1-bug14354 mysql-test/r/partition_mgm_err.result: Auto merged sql/ha_partition.cc: Auto merged sql/ha_partition.h: Auto merged sql/mysql_priv.h: Auto merged sql/sql_parse.cc: Auto merged sql/sql_partition.cc: Auto merged mysql-test/t/partition_mgm_err.test: SCCS merged
This commit is contained in:
@@ -168,6 +168,22 @@ ALTER TABLE t1 DROP PARTITION x0;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG: 14354 Partitions: data directory clause fails
|
||||||
|
#
|
||||||
|
--exec rm -rf $MYSQL_TEST_DIR/var/tmp/bug14354
|
||||||
|
--exec mkdir $MYSQL_TEST_DIR/var/tmp/bug14354
|
||||||
|
disable_query_log;
|
||||||
|
eval CREATE TABLE t1 (id int) PARTITION BY RANGE(id) (
|
||||||
|
PARTITION p1 VALUES LESS THAN (20) ENGINE=myiasm
|
||||||
|
DATA DIRECTORY="$MYSQL_TEST_DIR/var/tmp/bug14354"
|
||||||
|
INDEX DIRECTORY="$MYSQL_TEST_DIR/var/tmp/bug14354");
|
||||||
|
enable_query_log;
|
||||||
|
--exec test -f $MYSQL_TEST_DIR/var/tmp/bug14354/t1_p1.MYD
|
||||||
|
--exec test -f $MYSQL_TEST_DIR/var/tmp/bug14354/t1_p1.MYI
|
||||||
|
DROP TABLE t1;
|
||||||
|
--exec rm -rf $MYSQL_TEST_DIR/var/tmp/bug14354
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug# 16534 - Trying to add multiple partitions crashes server
|
# Bug# 16534 - Trying to add multiple partitions crashes server
|
||||||
#
|
#
|
||||||
|
@@ -1696,7 +1696,7 @@ uint ha_partition::del_ren_cre_table(const char *from,
|
|||||||
error= (*file)->delete_table((const char*) from_buff);
|
error= (*file)->delete_table((const char*) from_buff);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
set_up_table_before_create(table_arg, create_info, i);
|
set_up_table_before_create(table_arg, from_buff, create_info, i);
|
||||||
error= (*file)->create(from_buff, table_arg, create_info);
|
error= (*file)->create(from_buff, table_arg, create_info);
|
||||||
}
|
}
|
||||||
name_buffer_ptr= strend(name_buffer_ptr) + 1;
|
name_buffer_ptr= strend(name_buffer_ptr) + 1;
|
||||||
@@ -1770,8 +1770,9 @@ partition_element *ha_partition::find_partition_element(uint part_id)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void ha_partition::set_up_table_before_create(TABLE *table,
|
void ha_partition::set_up_table_before_create(TABLE *table,
|
||||||
HA_CREATE_INFO *info,
|
const char *partition_name_with_path,
|
||||||
uint part_id)
|
HA_CREATE_INFO *info,
|
||||||
|
uint part_id)
|
||||||
{
|
{
|
||||||
partition_element *part_elem= find_partition_element(part_id);
|
partition_element *part_elem= find_partition_element(part_id);
|
||||||
|
|
||||||
@@ -1779,6 +1780,15 @@ void ha_partition::set_up_table_before_create(TABLE *table,
|
|||||||
return; // Fatal error
|
return; // Fatal error
|
||||||
table->s->max_rows= part_elem->part_max_rows;
|
table->s->max_rows= part_elem->part_max_rows;
|
||||||
table->s->min_rows= part_elem->part_min_rows;
|
table->s->min_rows= part_elem->part_min_rows;
|
||||||
|
char *partition_name= strrchr(partition_name_with_path, FN_LIBCHAR);
|
||||||
|
if (part_elem->index_file_name)
|
||||||
|
append_file_to_dir(current_thd,
|
||||||
|
(const char**)&part_elem->index_file_name,
|
||||||
|
partition_name+1);
|
||||||
|
if (part_elem->data_file_name)
|
||||||
|
append_file_to_dir(current_thd,
|
||||||
|
(const char**)&part_elem->data_file_name,
|
||||||
|
partition_name+1);
|
||||||
info->index_file_name= part_elem->index_file_name;
|
info->index_file_name= part_elem->index_file_name;
|
||||||
info->data_file_name= part_elem->data_file_name;
|
info->data_file_name= part_elem->data_file_name;
|
||||||
}
|
}
|
||||||
|
@@ -220,8 +220,10 @@ private:
|
|||||||
bool new_handlers_from_part_info();
|
bool new_handlers_from_part_info();
|
||||||
bool create_handlers();
|
bool create_handlers();
|
||||||
void clear_handler_file();
|
void clear_handler_file();
|
||||||
void set_up_table_before_create(TABLE * table_arg, HA_CREATE_INFO * info,
|
void set_up_table_before_create(TABLE *table_arg,
|
||||||
uint part_id);
|
const char *partition_name_with_path,
|
||||||
|
HA_CREATE_INFO *info,
|
||||||
|
uint part_id);
|
||||||
partition_element *find_partition_element(uint part_id);
|
partition_element *find_partition_element(uint part_id);
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@@ -649,6 +649,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||||||
char* packet, uint packet_length);
|
char* packet, uint packet_length);
|
||||||
void log_slow_statement(THD *thd);
|
void log_slow_statement(THD *thd);
|
||||||
bool check_dup(const char *db, const char *name, TABLE_LIST *tables);
|
bool check_dup(const char *db, const char *name, TABLE_LIST *tables);
|
||||||
|
bool append_file_to_dir(THD *thd, const char **filename_ptr,
|
||||||
|
const char *table_name);
|
||||||
|
|
||||||
bool table_cache_init(void);
|
bool table_cache_init(void);
|
||||||
void table_cache_free(void);
|
void table_cache_free(void);
|
||||||
|
@@ -68,8 +68,6 @@ static bool check_db_used(THD *thd,TABLE_LIST *tables);
|
|||||||
static bool check_multi_update_lock(THD *thd);
|
static bool check_multi_update_lock(THD *thd);
|
||||||
static void remove_escape(char *name);
|
static void remove_escape(char *name);
|
||||||
static void refresh_status(THD *thd);
|
static void refresh_status(THD *thd);
|
||||||
static bool append_file_to_dir(THD *thd, const char **filename_ptr,
|
|
||||||
const char *table_name);
|
|
||||||
|
|
||||||
const char *any_db="*any*"; // Special symbol for check_access
|
const char *any_db="*any*"; // Special symbol for check_access
|
||||||
|
|
||||||
@@ -6729,8 +6727,8 @@ static void refresh_status(THD *thd)
|
|||||||
|
|
||||||
/* If pointer is not a null pointer, append filename to it */
|
/* If pointer is not a null pointer, append filename to it */
|
||||||
|
|
||||||
static bool append_file_to_dir(THD *thd, const char **filename_ptr,
|
bool append_file_to_dir(THD *thd, const char **filename_ptr,
|
||||||
const char *table_name)
|
const char *table_name)
|
||||||
{
|
{
|
||||||
char buff[FN_REFLEN],*ptr, *end;
|
char buff[FN_REFLEN],*ptr, *end;
|
||||||
if (!*filename_ptr)
|
if (!*filename_ptr)
|
||||||
|
@@ -2243,6 +2243,7 @@ static int add_int(File fptr, longlong number)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int add_keyword_string(File fptr, const char *keyword,
|
static int add_keyword_string(File fptr, const char *keyword,
|
||||||
|
bool should_use_quotes,
|
||||||
const char *keystr)
|
const char *keystr)
|
||||||
{
|
{
|
||||||
int err= add_string(fptr, keyword);
|
int err= add_string(fptr, keyword);
|
||||||
@@ -2250,7 +2251,11 @@ static int add_keyword_string(File fptr, const char *keyword,
|
|||||||
err+= add_space(fptr);
|
err+= add_space(fptr);
|
||||||
err+= add_equal(fptr);
|
err+= add_equal(fptr);
|
||||||
err+= add_space(fptr);
|
err+= add_space(fptr);
|
||||||
|
if (should_use_quotes)
|
||||||
|
err+= add_string(fptr, "'");
|
||||||
err+= add_string(fptr, keystr);
|
err+= add_string(fptr, keystr);
|
||||||
|
if (should_use_quotes)
|
||||||
|
err+= add_string(fptr, "'");
|
||||||
return err + add_space(fptr);
|
return err + add_space(fptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2278,7 +2283,8 @@ static int add_partition_options(File fptr, partition_element *p_elem)
|
|||||||
int err= 0;
|
int err= 0;
|
||||||
|
|
||||||
if (p_elem->tablespace_name)
|
if (p_elem->tablespace_name)
|
||||||
err+= add_keyword_string(fptr,"TABLESPACE",p_elem->tablespace_name);
|
err+= add_keyword_string(fptr,"TABLESPACE", FALSE,
|
||||||
|
p_elem->tablespace_name);
|
||||||
if (p_elem->nodegroup_id != UNDEF_NODEGROUP)
|
if (p_elem->nodegroup_id != UNDEF_NODEGROUP)
|
||||||
err+= add_keyword_int(fptr,"NODEGROUP",(longlong)p_elem->nodegroup_id);
|
err+= add_keyword_int(fptr,"NODEGROUP",(longlong)p_elem->nodegroup_id);
|
||||||
if (p_elem->part_max_rows)
|
if (p_elem->part_max_rows)
|
||||||
@@ -2286,11 +2292,13 @@ static int add_partition_options(File fptr, partition_element *p_elem)
|
|||||||
if (p_elem->part_min_rows)
|
if (p_elem->part_min_rows)
|
||||||
err+= add_keyword_int(fptr,"MIN_ROWS",(longlong)p_elem->part_min_rows);
|
err+= add_keyword_int(fptr,"MIN_ROWS",(longlong)p_elem->part_min_rows);
|
||||||
if (p_elem->data_file_name)
|
if (p_elem->data_file_name)
|
||||||
err+= add_keyword_string(fptr,"DATA DIRECTORY",p_elem->data_file_name);
|
err+= add_keyword_string(fptr, "DATA DIRECTORY", TRUE,
|
||||||
|
p_elem->data_file_name);
|
||||||
if (p_elem->index_file_name)
|
if (p_elem->index_file_name)
|
||||||
err+= add_keyword_string(fptr,"INDEX DIRECTORY",p_elem->index_file_name);
|
err+= add_keyword_string(fptr, "INDEX DIRECTORY", TRUE,
|
||||||
|
p_elem->index_file_name);
|
||||||
if (p_elem->part_comment)
|
if (p_elem->part_comment)
|
||||||
err+= add_keyword_string(fptr, "COMMENT",p_elem->part_comment);
|
err+= add_keyword_string(fptr, "COMMENT", FALSE, p_elem->part_comment);
|
||||||
return err + add_engine(fptr,p_elem->engine_type);
|
return err + add_engine(fptr,p_elem->engine_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user