Commit 2abf030a authored by Mattias Jonsson's avatar Mattias Jonsson

merge

parents c99e6287 b183e7c5
drop table if exists t1; drop table if exists t1;
# #
# Bug#42954: SQL MODE 'NO_DIR_IN_CREATE' does not work with
# subpartitions
SET @org_mode=@@sql_mode;
SET @@sql_mode='NO_DIR_IN_CREATE';
SELECT @@sql_mode;
@@sql_mode
NO_DIR_IN_CREATE
CREATE TABLE t1 (id INT, purchased DATE)
PARTITION BY RANGE(YEAR(purchased))
SUBPARTITION BY HASH(TO_DAYS(purchased))
(PARTITION p0 VALUES LESS THAN MAXVALUE
DATA DIRECTORY = '/tmp/not-existing'
INDEX DIRECTORY = '/tmp/not-existing');
Warnings:
Warning 1618 <DATA DIRECTORY> option ignored
Warning 1618 <INDEX DIRECTORY> option ignored
Warning 1618 <DATA DIRECTORY> option ignored
Warning 1618 <INDEX DIRECTORY> option ignored
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL,
`purchased` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
/*!50100 PARTITION BY RANGE (YEAR(purchased))
SUBPARTITION BY HASH (TO_DAYS(purchased))
(PARTITION p0 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
DROP TABLE t1;
CREATE TABLE t1 (id INT, purchased DATE)
PARTITION BY RANGE(YEAR(purchased))
SUBPARTITION BY HASH(TO_DAYS(purchased)) SUBPARTITIONS 2
(PARTITION p0 VALUES LESS THAN MAXVALUE
(SUBPARTITION sp0
DATA DIRECTORY = '/tmp/not-existing'
INDEX DIRECTORY = '/tmp/not-existing',
SUBPARTITION sp1));
Warnings:
Warning 1618 <DATA DIRECTORY> option ignored
Warning 1618 <INDEX DIRECTORY> option ignored
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL,
`purchased` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
/*!50100 PARTITION BY RANGE (YEAR(purchased))
SUBPARTITION BY HASH (TO_DAYS(purchased))
(PARTITION p0 VALUES LESS THAN MAXVALUE
(SUBPARTITION sp0 ENGINE = MyISAM,
SUBPARTITION sp1 ENGINE = MyISAM)) */
DROP TABLE t1;
CREATE TABLE t1 (id INT, purchased DATE)
PARTITION BY RANGE(YEAR(purchased))
(PARTITION p0 VALUES LESS THAN MAXVALUE
DATA DIRECTORY = '/tmp/not-existing'
INDEX DIRECTORY = '/tmp/not-existing');
Warnings:
Warning 1618 <DATA DIRECTORY> option ignored
Warning 1618 <INDEX DIRECTORY> option ignored
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL,
`purchased` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
/*!50100 PARTITION BY RANGE (YEAR(purchased))
(PARTITION p0 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
DROP TABLE t1;
SET @@sql_mode= @org_mode;
#
# Bug#50392: insert_id is not reset for partitioned tables # Bug#50392: insert_id is not reset for partitioned tables
# auto_increment on duplicate entry # auto_increment on duplicate entry
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY); CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY);
......
...@@ -7,7 +7,40 @@ ...@@ -7,7 +7,40 @@
--disable_warnings --disable_warnings
drop table if exists t1; drop table if exists t1;
--enable_warnings --enable_warnings
--echo #
--echo # Bug#42954: SQL MODE 'NO_DIR_IN_CREATE' does not work with
--echo # subpartitions
SET @org_mode=@@sql_mode;
SET @@sql_mode='NO_DIR_IN_CREATE';
SELECT @@sql_mode;
CREATE TABLE t1 (id INT, purchased DATE)
PARTITION BY RANGE(YEAR(purchased))
SUBPARTITION BY HASH(TO_DAYS(purchased))
(PARTITION p0 VALUES LESS THAN MAXVALUE
DATA DIRECTORY = '/tmp/not-existing'
INDEX DIRECTORY = '/tmp/not-existing');
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (id INT, purchased DATE)
PARTITION BY RANGE(YEAR(purchased))
SUBPARTITION BY HASH(TO_DAYS(purchased)) SUBPARTITIONS 2
(PARTITION p0 VALUES LESS THAN MAXVALUE
(SUBPARTITION sp0
DATA DIRECTORY = '/tmp/not-existing'
INDEX DIRECTORY = '/tmp/not-existing',
SUBPARTITION sp1));
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (id INT, purchased DATE)
PARTITION BY RANGE(YEAR(purchased))
(PARTITION p0 VALUES LESS THAN MAXVALUE
DATA DIRECTORY = '/tmp/not-existing'
INDEX DIRECTORY = '/tmp/not-existing');
SHOW CREATE TABLE t1;
DROP TABLE t1;
SET @@sql_mode= @org_mode;
--echo # --echo #
--echo # Bug#50392: insert_id is not reset for partitioned tables --echo # Bug#50392: insert_id is not reset for partitioned tables
--echo # auto_increment on duplicate entry --echo # auto_increment on duplicate entry
......
...@@ -1032,6 +1032,30 @@ bool partition_info::check_list_constants(THD *thd) ...@@ -1032,6 +1032,30 @@ bool partition_info::check_list_constants(THD *thd)
DBUG_RETURN(result); DBUG_RETURN(result);
} }
/**
Check if we allow DATA/INDEX DIRECTORY, if not warn and set them to NULL.
@param thd THD also containing sql_mode (looks from MODE_NO_DIR_IN_CREATE).
@param part_elem partition_element to check.
*/
static void warn_if_dir_in_part_elem(THD *thd, partition_element *part_elem)
{
#ifdef HAVE_READLINK
if (!my_use_symdir || (thd->variables.sql_mode & MODE_NO_DIR_IN_CREATE))
#endif
{
if (part_elem->data_file_name)
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
WARN_OPTION_IGNORED, ER(WARN_OPTION_IGNORED),
"DATA DIRECTORY");
if (part_elem->index_file_name)
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
WARN_OPTION_IGNORED, ER(WARN_OPTION_IGNORED),
"INDEX DIRECTORY");
part_elem->data_file_name= part_elem->index_file_name= NULL;
}
}
/* /*
This code is used early in the CREATE TABLE and ALTER TABLE process. This code is used early in the CREATE TABLE and ALTER TABLE process.
...@@ -1169,20 +1193,7 @@ bool partition_info::check_partition_info(THD *thd, handlerton **eng_type, ...@@ -1169,20 +1193,7 @@ bool partition_info::check_partition_info(THD *thd, handlerton **eng_type,
do do
{ {
partition_element *part_elem= part_it++; partition_element *part_elem= part_it++;
#ifdef HAVE_READLINK warn_if_dir_in_part_elem(thd, part_elem);
if (!my_use_symdir || (thd->variables.sql_mode & MODE_NO_DIR_IN_CREATE))
#endif
{
if (part_elem->data_file_name)
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
WARN_OPTION_IGNORED, ER(WARN_OPTION_IGNORED),
"DATA DIRECTORY");
if (part_elem->index_file_name)
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
WARN_OPTION_IGNORED, ER(WARN_OPTION_IGNORED),
"INDEX DIRECTORY");
part_elem->data_file_name= part_elem->index_file_name= NULL;
}
if (!is_sub_partitioned()) if (!is_sub_partitioned())
{ {
if (part_elem->engine_type == NULL) if (part_elem->engine_type == NULL)
...@@ -1208,6 +1219,7 @@ bool partition_info::check_partition_info(THD *thd, handlerton **eng_type, ...@@ -1208,6 +1219,7 @@ bool partition_info::check_partition_info(THD *thd, handlerton **eng_type,
do do
{ {
sub_elem= sub_it++; sub_elem= sub_it++;
warn_if_dir_in_part_elem(thd, sub_elem);
if (check_table_name(sub_elem->partition_name, if (check_table_name(sub_elem->partition_name,
strlen(sub_elem->partition_name))) strlen(sub_elem->partition_name)))
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment