Hi,
Patch approved
OK to push.
Sergey Vojtovich wrote:
> Below is the list of changes that have just been committed into a local
> 6.0 repository of svoj. When svoj does a push these changes
> will be propagated to the main repository and, within 24 hours after the
> push, to the public repository.
> For information on how to access the public repository
> see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
>
> ChangeSet@stripped, 2008-04-23 11:54:13+05:00, svoj@stripped +4 -0
> BUG#33404 - Falcon ignores partition-level TABLESPACE option
>
> Creating partitioned table that supports tablespaces, ignores
> [sub]partition level tablespace option. It was only possible
> to specify table level tablespace option.
>
> With this fix tablespace option is handled as following:
> - If tablespace option was specified for subpartition, use it;
> otherwise inherit partition level tablespace option.
> - If tablespace option was specified for partition, use it;
> otherwise inherit table level tablespace option.
> - If tablespace option was specified for table, use it;
> otherwise use default tablespace.
>
> mysql-test/suite/falcon/r/falcon_bug_33404.result@stripped, 2008-04-23 11:54:11+05:00,
> svoj@stripped +96 -0
> A test case for BUG#33404.
>
> mysql-test/suite/falcon/r/falcon_bug_33404.result@stripped, 2008-04-23 11:54:11+05:00,
> svoj@stripped +0 -0
>
> mysql-test/suite/falcon/t/falcon_bug_33404.test@stripped, 2008-04-23 11:54:11+05:00,
> svoj@stripped +66 -0
> A test case for BUG#33404.
>
> mysql-test/suite/falcon/t/falcon_bug_33404.test@stripped, 2008-04-23 11:54:11+05:00,
> svoj@stripped +0 -0
>
> sql/ha_partition.cc@stripped, 2008-04-23 11:54:11+05:00, svoj@stripped +2 -0
> When creating partitions, use partition level tablespace option
> instead of table level tablespace option.
>
> sql/partition_info.cc@stripped, 2008-04-23 11:54:11+05:00, svoj@stripped +5 -0
> If tablespace option was not specified for partition/subpartition,
> inherit it from table (for partition) or from partition
> (for subpartition).
>
> diff -Nrup a/mysql-test/suite/falcon/r/falcon_bug_33404.result
> b/mysql-test/suite/falcon/r/falcon_bug_33404.result
> --- /dev/null Wed Dec 31 16:00:00 196900
> +++ b/mysql-test/suite/falcon/r/falcon_bug_33404.result 2008-04-23 11:54:11 +05:00
> @@ -0,0 +1,96 @@
> +CREATE TABLESPACE ts1 ADD DATAFILE 'ts1.fts' ENGINE=Falcon;
> +CREATE TABLESPACE ts2 ADD DATAFILE 'ts2.fts' ENGINE=Falcon;
> +CREATE TABLESPACE ts3 ADD DATAFILE 'ts3.fts' ENGINE=Falcon;
> +CREATE TABLE t1 (a INT) ENGINE=Falcon TABLESPACE ts1
> +PARTITION BY RANGE(a) SUBPARTITION BY HASH(a) (
> +PARTITION p1 VALUES LESS THAN (100) TABLESPACE ts2 (
> +SUBPARTITION p1s1 TABLESPACE ts3,
> +SUBPARTITION p1s2
> +),
> +PARTITION p2 VALUES LESS THAN MAXVALUE (
> +SUBPARTITION p2s1,
> +SUBPARTITION p2s2
> +)
> +);
> +SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE
> +TABLE_NAME = 't1' AND SCHEMA_NAME='test';
> +SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME
> +TEST T1 P1S1 ts3 T1#P#P1#SP#P1S1
> +TEST T1 P1S2 ts2 T1#P#P1#SP#P1S2
> +TEST T1 P2S1 ts1 T1#P#P2#SP#P2S1
> +TEST T1 P2S2 ts1 T1#P#P2#SP#P2S2
> +SHOW CREATE TABLE t1;
> +Table Create Table
> +t1 CREATE TABLE `t1` (
> + `a` int(11) DEFAULT NULL
> +) /*!50100 TABLESPACE `ts1` */ ENGINE=Falcon DEFAULT CHARSET=latin1 /*!50100
> PARTITION BY RANGE (a) SUBPARTITION BY HASH (a) (PARTITION p1 VALUES LESS THAN (100)
> (SUBPARTITION p1s1 TABLESPACE = ts3 ENGINE = Falcon, SUBPARTITION p1s2 TABLESPACE = ts2
> ENGINE = Falcon), PARTITION p2 VALUES LESS THAN MAXVALUE (SUBPARTITION p2s1 TABLESPACE =
> ts1 ENGINE = Falcon, SUBPARTITION p2s2 TABLESPACE = ts1 ENGINE = Falcon)) */
> +ALTER TABLE t1 REMOVE PARTITIONING;
> +SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE
> +TABLE_NAME = 't1' AND SCHEMA_NAME='test';
> +SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME
> +TEST T1 ts1 T1
> +ALTER TABLE t1 TABLESPACE ts1
> +PARTITION BY RANGE(a) SUBPARTITION BY HASH(a) (
> +PARTITION p1 VALUES LESS THAN (100) TABLESPACE ts2 (
> +SUBPARTITION p1s1 TABLESPACE ts3,
> +SUBPARTITION p1s2
> +),
> +PARTITION p2 VALUES LESS THAN (200) (
> +SUBPARTITION p2s1,
> +SUBPARTITION p2s2
> +)
> +);
> +SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE
> +TABLE_NAME = 't1' AND SCHEMA_NAME='test';
> +SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME
> +TEST T1 P1S1 ts3 T1#P#P1#SP#P1S1
> +TEST T1 P1S2 ts2 T1#P#P1#SP#P1S2
> +TEST T1 P2S1 ts1 T1#P#P2#SP#P2S1
> +TEST T1 P2S2 ts1 T1#P#P2#SP#P2S2
> +ALTER TABLE t1 ADD PARTITION (PARTITION p3 VALUES LESS THAN MAXVALUE);
> +SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE
> +TABLE_NAME = 't1' AND SCHEMA_NAME='test';
> +SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME
> +TEST T1 P1S1 ts3 T1#P#P1#SP#P1S1
> +TEST T1 P1S2 ts2 T1#P#P1#SP#P1S2
> +TEST T1 P2S1 ts1 T1#P#P2#SP#P2S1
> +TEST T1 P2S2 ts1 T1#P#P2#SP#P2S2
> +TEST T1 P3SP0 ts1 T1#P#P3#SP#P3SP0
> +TEST T1 P3SP1 ts1 T1#P#P3#SP#P3SP1
> +ALTER TABLE t1 REORGANIZE PARTITION p3 INTO (PARTITION p3 VALUES LESS THAN
> +MAXVALUE TABLESPACE ts1);
> +SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE
> +TABLE_NAME = 't1' AND SCHEMA_NAME='test';
> +SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME
> +TEST T1 P1S1 ts3 T1#P#P1#SP#P1S1
> +TEST T1 P1S2 ts2 T1#P#P1#SP#P1S2
> +TEST T1 P2S1 ts1 T1#P#P2#SP#P2S1
> +TEST T1 P2S2 ts1 T1#P#P2#SP#P2S2
> +TEST T1 P3SP0 ts1 T1#P#P3#SP#P3SP0
> +TEST T1 P3SP1 ts1 T1#P#P3#SP#P3SP1
> +ALTER TABLE t1 REORGANIZE PARTITION p3 INTO (PARTITION p3 VALUES LESS THAN
> +MAXVALUE TABLESPACE ts2);
> +SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE
> +TABLE_NAME = 't1' AND SCHEMA_NAME='test';
> +SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME
> +TEST T1 P1S1 ts3 T1#P#P1#SP#P1S1
> +TEST T1 P1S2 ts2 T1#P#P1#SP#P1S2
> +TEST T1 P2S1 ts1 T1#P#P2#SP#P2S1
> +TEST T1 P2S2 ts1 T1#P#P2#SP#P2S2
> +TEST T1 P3SP0 ts2 T1#P#P3#SP#P3SP0
> +TEST T1 P3SP1 ts2 T1#P#P3#SP#P3SP1
> +ALTER TABLE t1 REORGANIZE PARTITION p1 INTO (PARTITION p1 VALUES LESS THAN
> +(100) TABLESPACE ts2);
> +SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE
> +TABLE_NAME = 't1' AND SCHEMA_NAME='test';
> +SCHEMA_NAME TABLE_NAME PARTITION TABLESPACE INTERNAL_NAME
> +TEST T1 P2S1 ts1 T1#P#P2#SP#P2S1
> +TEST T1 P2S2 ts1 T1#P#P2#SP#P2S2
> +TEST T1 P3SP0 ts2 T1#P#P3#SP#P3SP0
> +TEST T1 P3SP1 ts2 T1#P#P3#SP#P3SP1
> +TEST T1 P1SP0 ts2 T1#P#P1#SP#P1SP0
> +TEST T1 P1SP1 ts2 T1#P#P1#SP#P1SP1
> +DROP TABLE t1;
> +DROP TABLESPACE ts1 ENGINE=Falcon;
> +DROP TABLESPACE ts2 ENGINE=Falcon;
> +DROP TABLESPACE ts3 ENGINE=Falcon;
> diff -Nrup a/mysql-test/suite/falcon/t/falcon_bug_33404.test
> b/mysql-test/suite/falcon/t/falcon_bug_33404.test
> --- /dev/null Wed Dec 31 16:00:00 196900
> +++ b/mysql-test/suite/falcon/t/falcon_bug_33404.test 2008-04-23 11:54:11 +05:00
> @@ -0,0 +1,66 @@
> +--source include/have_falcon.inc
> +--source include/have_partition.inc
> +
> +#
> +# BUG#33404 - Falcon ignores partition-level TABLESPACE option
> +#
> +CREATE TABLESPACE ts1 ADD DATAFILE 'ts1.fts' ENGINE=Falcon;
> +CREATE TABLESPACE ts2 ADD DATAFILE 'ts2.fts' ENGINE=Falcon;
> +CREATE TABLESPACE ts3 ADD DATAFILE 'ts3.fts' ENGINE=Falcon;
> +
> +CREATE TABLE t1 (a INT) ENGINE=Falcon TABLESPACE ts1
> +PARTITION BY RANGE(a) SUBPARTITION BY HASH(a) (
> + PARTITION p1 VALUES LESS THAN (100) TABLESPACE ts2 (
> + SUBPARTITION p1s1 TABLESPACE ts3,
> + SUBPARTITION p1s2
> + ),
> + PARTITION p2 VALUES LESS THAN MAXVALUE (
> + SUBPARTITION p2s1,
> + SUBPARTITION p2s2
> + )
> +);
> +SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE
> + TABLE_NAME = 't1' AND SCHEMA_NAME='test';
> +SHOW CREATE TABLE t1;
> +
> +ALTER TABLE t1 REMOVE PARTITIONING;
> +SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE
> + TABLE_NAME = 't1' AND SCHEMA_NAME='test';
> +
> +ALTER TABLE t1 TABLESPACE ts1
> +PARTITION BY RANGE(a) SUBPARTITION BY HASH(a) (
> + PARTITION p1 VALUES LESS THAN (100) TABLESPACE ts2 (
> + SUBPARTITION p1s1 TABLESPACE ts3,
> + SUBPARTITION p1s2
> + ),
> + PARTITION p2 VALUES LESS THAN (200) (
> + SUBPARTITION p2s1,
> + SUBPARTITION p2s2
> + )
> +);
> +SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE
> + TABLE_NAME = 't1' AND SCHEMA_NAME='test';
> +
> +ALTER TABLE t1 ADD PARTITION (PARTITION p3 VALUES LESS THAN MAXVALUE);
> +SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE
> + TABLE_NAME = 't1' AND SCHEMA_NAME='test';
> +
> +ALTER TABLE t1 REORGANIZE PARTITION p3 INTO (PARTITION p3 VALUES LESS THAN
> +MAXVALUE TABLESPACE ts1);
> +SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE
> + TABLE_NAME = 't1' AND SCHEMA_NAME='test';
> +
> +ALTER TABLE t1 REORGANIZE PARTITION p3 INTO (PARTITION p3 VALUES LESS THAN
> +MAXVALUE TABLESPACE ts2);
> +SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE
> + TABLE_NAME = 't1' AND SCHEMA_NAME='test';
> +
> +ALTER TABLE t1 REORGANIZE PARTITION p1 INTO (PARTITION p1 VALUES LESS THAN
> +(100) TABLESPACE ts2);
> +SELECT * FROM INFORMATION_SCHEMA.FALCON_TABLES WHERE
> + TABLE_NAME = 't1' AND SCHEMA_NAME='test';
> +
> +DROP TABLE t1;
> +DROP TABLESPACE ts1 ENGINE=Falcon;
> +DROP TABLESPACE ts2 ENGINE=Falcon;
> +DROP TABLESPACE ts3 ENGINE=Falcon;
> diff -Nrup a/sql/ha_partition.cc b/sql/ha_partition.cc
> --- a/sql/ha_partition.cc 2008-04-14 15:09:57 +05:00
> +++ b/sql/ha_partition.cc 2008-04-23 11:54:11 +05:00
> @@ -1646,6 +1646,7 @@ void ha_partition::update_create_info(HA
> create_info->auto_increment_value= stats.auto_increment_value;
>
> create_info->data_file_name= create_info->index_file_name = NULL;
> + create_info->tablespace= table_share->tablespace;
> return;
> }
>
> @@ -1866,6 +1867,7 @@ int ha_partition::set_up_table_before_cr
> }
> info->index_file_name= part_elem->index_file_name;
> info->data_file_name= part_elem->data_file_name;
> + info->tablespace= part_elem->tablespace_name;
> DBUG_RETURN(0);
> }
>
> diff -Nrup a/sql/partition_info.cc b/sql/partition_info.cc
> --- a/sql/partition_info.cc 2008-04-14 15:09:59 +05:00
> +++ b/sql/partition_info.cc 2008-04-23 11:54:11 +05:00
> @@ -963,6 +963,9 @@ bool partition_info::check_partition_inf
> "INDEX DIRECTORY option ignored");
> part_elem->data_file_name= part_elem->index_file_name= NULL;
> }
> + if (!part_elem->tablespace_name)
> + part_elem->tablespace_name= info ? (char *)info->tablespace :
> + (char *)file->get_tablespace_name();
> if (!is_sub_partitioned())
> {
> if (part_elem->engine_type == NULL)
> @@ -1004,6 +1007,8 @@ bool partition_info::check_partition_inf
> no_subparts_not_set++;
> }
> }
> + if (!sub_elem->tablespace_name)
> + sub_elem->tablespace_name= part_elem->tablespace_name;
> DBUG_PRINT("info", ("part = %d sub = %d engine = %s", i, j,
> ha_resolve_storage_engine_name(sub_elem->engine_type)));
> } while (++j < no_subparts);
>
--
Mattias Jonsson, Software Engineer
MySQL AB, www.mysql.com
Are you MySQL certified? www.mysql.com/certification