mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
merge into mysql-5.1-bugteam
sql/ha_partition.cc: Bug#49477, added safety that a partitioned table cannot be temporary.
This commit is contained in:
commit
6ef03ea37c
4 changed files with 40 additions and 8 deletions
|
@ -1,5 +1,13 @@
|
|||
drop table if exists t1;
|
||||
#
|
||||
# Bug#49477: Assertion `0' failed in ha_partition.cc:5530
|
||||
# with temporary table and partitions
|
||||
#
|
||||
CREATE TABLE t1 (a INT) PARTITION BY HASH(a);
|
||||
CREATE TEMPORARY TABLE tmp_t1 LIKE t1;
|
||||
ERROR HY000: Cannot create temporary table with partitions
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#50392: insert_id is not reset for partitioned tables
|
||||
# auto_increment on duplicate entry
|
||||
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY);
|
||||
|
|
|
@ -8,6 +8,15 @@
|
|||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
--echo #
|
||||
--echo # Bug#49477: Assertion `0' failed in ha_partition.cc:5530
|
||||
--echo # with temporary table and partitions
|
||||
--echo #
|
||||
CREATE TABLE t1 (a INT) PARTITION BY HASH(a);
|
||||
--error ER_PARTITION_NO_TEMPORARY
|
||||
CREATE TEMPORARY TABLE tmp_t1 LIKE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#50392: insert_id is not reset for partitioned tables
|
||||
--echo # auto_increment on duplicate entry
|
||||
|
|
|
@ -88,7 +88,9 @@ static int partition_initialize(void *p)
|
|||
partition_hton->create= partition_create_handler;
|
||||
partition_hton->partition_flags= partition_flags;
|
||||
partition_hton->alter_table_flags= alter_table_flags;
|
||||
partition_hton->flags= HTON_NOT_USER_SELECTABLE | HTON_HIDDEN;
|
||||
partition_hton->flags= HTON_NOT_USER_SELECTABLE |
|
||||
HTON_HIDDEN |
|
||||
HTON_TEMPORARY_NOT_SUPPORTED;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1837,6 +1839,13 @@ uint ha_partition::del_ren_cre_table(const char *from,
|
|||
handler **file, **abort_file;
|
||||
DBUG_ENTER("del_ren_cre_table()");
|
||||
|
||||
/* Not allowed to create temporary partitioned tables */
|
||||
if (create_info && create_info->options & HA_LEX_CREATE_TMP_TABLE)
|
||||
{
|
||||
my_error(ER_PARTITION_NO_TEMPORARY, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
if (get_from_handler_file(from, ha_thd()->mem_root))
|
||||
DBUG_RETURN(TRUE);
|
||||
DBUG_ASSERT(m_file_buffer);
|
||||
|
|
|
@ -5288,6 +5288,11 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, TABLE_LIST* src_table,
|
|||
*/
|
||||
if (create_info->options & HA_LEX_CREATE_TMP_TABLE)
|
||||
{
|
||||
if (src_table->table->file->ht == partition_hton)
|
||||
{
|
||||
my_error(ER_PARTITION_NO_TEMPORARY, MYF(0));
|
||||
goto err;
|
||||
}
|
||||
if (find_temporary_table(thd, db, table_name))
|
||||
goto table_exists;
|
||||
dst_path_length= build_tmptable_filename(thd, dst_path, sizeof(dst_path));
|
||||
|
@ -5352,14 +5357,15 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, TABLE_LIST* src_table,
|
|||
/*
|
||||
For partitioned tables we need to copy the .par file as well since
|
||||
it is used in open_table_def to even be able to create a new handler.
|
||||
There is no way to find out here if the original table is a
|
||||
partitioned table so we copy the file and ignore any errors.
|
||||
*/
|
||||
fn_format(tmp_path, dst_path, reg_ext, ".par", MYF(MY_REPLACE_EXT));
|
||||
strmov(dst_path, tmp_path);
|
||||
fn_format(tmp_path, src_path, reg_ext, ".par", MYF(MY_REPLACE_EXT));
|
||||
strmov(src_path, tmp_path);
|
||||
my_copy(src_path, dst_path, MYF(MY_DONT_OVERWRITE_FILE));
|
||||
if (src_table->table->file->ht == partition_hton)
|
||||
{
|
||||
fn_format(tmp_path, dst_path, reg_ext, ".par", MYF(MY_REPLACE_EXT));
|
||||
strmov(dst_path, tmp_path);
|
||||
fn_format(tmp_path, src_path, reg_ext, ".par", MYF(MY_REPLACE_EXT));
|
||||
strmov(src_path, tmp_path);
|
||||
my_copy(src_path, dst_path, MYF(MY_DONT_OVERWRITE_FILE));
|
||||
}
|
||||
#endif
|
||||
|
||||
DBUG_EXECUTE_IF("sleep_create_like_before_ha_create", my_sleep(6000000););
|
||||
|
|
Loading…
Add table
Reference in a new issue