From 3d0497297422d7305e24874d084b9d9fd4677154 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 20 Jun 2006 13:24:30 -0400 Subject: [PATCH 1/2] BUG#16000: .par file not removed plus errors to error log for normal errors sql/table.cc: Remove error printouts when error occurs during open frm as part of CREATE/ALTER TABLE sql/unireg.cc: Ensure .par file is removed after error --- sql/table.cc | 11 +++++++++++ sql/unireg.cc | 1 + 2 files changed, 12 insertions(+) diff --git a/sql/table.cc b/sql/table.cc index ab1bd49ba48..a96ca0da881 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1484,7 +1484,18 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias, tmp= fix_partition_func(thd, outparam, is_create_table); *root_ptr= old_root; if (tmp) + { + if (is_create_table) + { + /* + During CREATE/ALTER TABLE it is ok to receive errors here. + It is not ok if it happens during the opening of an frm + file as part of a normal query. + */ + error_reported= TRUE; + } goto err; + } } #endif diff --git a/sql/unireg.cc b/sql/unireg.cc index 11aa73bb502..42518e7b9b7 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -339,6 +339,7 @@ int rea_create_table(THD *thd, const char *path, DBUG_RETURN(0); err_handler: + VOID(file->create_handler_files(path, NULL, CHF_DELETE_FLAG, create_info)); my_delete(frm_name, MYF(0)); DBUG_RETURN(1); } /* rea_create_table */ From ed7dd45ffcf412545497a33a534858014fe73e19 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 20 Jun 2006 16:38:42 -0400 Subject: [PATCH 2/2] BUG#16000: .par file left behind plus unnecessary messages to error.log New test cases mysql-test/r/partition_error.result: New test cases mysql-test/r/partition_mgm.result: New test cases mysql-test/t/partition_error.test: New test cases mysql-test/t/partition_mgm.test: New test cases --- mysql-test/r/partition_error.result | 39 +++++++++++++++++++++++++++++ mysql-test/r/partition_mgm.result | 10 ++++++++ mysql-test/t/partition_error.test | 14 +++++++++++ mysql-test/t/partition_mgm.test | 6 +++-- 4 files changed, 67 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/partition_error.result b/mysql-test/r/partition_error.result index 39f0cf9ca55..f6134c08221 100644 --- a/mysql-test/r/partition_error.result +++ b/mysql-test/r/partition_error.result @@ -89,6 +89,9 @@ partitions 3 partition x2 tablespace ts2, partition x3 tablespace ts3); ERROR HY000: Field in list of fields for partition function not found in table +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); +load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par') +NULL CREATE TABLE t1 ( a int not null, b int not null, @@ -163,6 +166,9 @@ partitions 2 (partition x1 values less than (4), partition x2 values less than (5)); ERROR HY000: Only RANGE PARTITIONING can use VALUES LESS THAN in partition definition +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); +load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par') +NULL CREATE TABLE t1 ( a int not null, b int not null, @@ -173,6 +179,9 @@ partitions 2 (partition x1 values in (4), partition x2 values in (5)); ERROR HY000: Only LIST PARTITIONING can use VALUES IN in partition definition +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); +load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par') +NULL CREATE TABLE t1 ( a int not null, b int not null, @@ -183,6 +192,9 @@ partitions 2 (partition x1 values in (4,6), partition x2 values in (5,7)); ERROR HY000: Only LIST PARTITIONING can use VALUES IN in partition definition +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); +load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par') +NULL CREATE TABLE t1 ( a int not null, b int not null, @@ -191,6 +203,9 @@ primary key (a,b)) partition by key (a) subpartition by key (b); ERROR HY000: It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); +load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par') +NULL CREATE TABLE t1 ( a int not null, b int not null, @@ -199,6 +214,9 @@ primary key (a,b)) partition by key (a) subpartition by key (a, b); ERROR HY000: It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); +load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par') +NULL CREATE TABLE t1 ( a int not null, b int not null, @@ -207,6 +225,9 @@ primary key (a,b)) partition by key (a) subpartition by hash (a+b); ERROR HY000: It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); +load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par') +NULL CREATE TABLE t1 ( a int not null, b int not null, @@ -215,6 +236,9 @@ primary key (a,b)) partition by key (a) subpartition by key (b); ERROR HY000: It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); +load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par') +NULL CREATE TABLE t1 ( a int not null, b int not null, @@ -223,6 +247,9 @@ primary key (a,b)) partition by key (a) subpartition by key (a, b); ERROR HY000: It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); +load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par') +NULL CREATE TABLE t1 ( a int not null, b int not null, @@ -231,6 +258,9 @@ primary key (a,b)) partition by key (a) subpartition by hash (a+b); ERROR HY000: It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); +load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par') +NULL CREATE TABLE t1 ( a int not null, b int not null, @@ -249,6 +279,9 @@ subpartition by hash (sin(a+b)) (partition x1 (subpartition x11, subpartition x12), partition x2 (subpartition x21, subpartition x22)); ERROR HY000: It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); +load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par') +NULL CREATE TABLE t1 ( a int not null, b int not null, @@ -271,6 +304,9 @@ subpartition by key (a,d) (partition x1 values less than (1) (subpartition x11, subpartition x12), partition x2 values less than (2) (subpartition x21, subpartition x22)); ERROR HY000: Field in list of fields for partition function not found in table +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); +load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par') +NULL CREATE TABLE t1 ( a int not null, b int not null, @@ -296,6 +332,9 @@ c int not null, primary key(a,b)) partition by range (a); ERROR HY000: For RANGE partitions each partition must be defined +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); +load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par') +NULL CREATE TABLE t1 ( a int not null, b int not null, diff --git a/mysql-test/r/partition_mgm.result b/mysql-test/r/partition_mgm.result index 48bbdf57b93..5b815f52cbe 100644 --- a/mysql-test/r/partition_mgm.result +++ b/mysql-test/r/partition_mgm.result @@ -7,6 +7,12 @@ t1 CREATE TABLE `t1` ( `f_date` date DEFAULT NULL, `f_varchar` varchar(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 PARTITION BY HASH (CAST(YEAR(f_date) AS SIGNED INTEGER)) PARTITIONS 2 +hello/master-data/test/t1#P#p0.MYD +hello/master-data/test/t1#P#p0.MYI +hello/master-data/test/t1#P#p1.MYD +hello/master-data/test/t1#P#p1.MYI +hello/master-data/test/t1.frm +hello/master-data/test/t1.par ALTER TABLE t1 COALESCE PARTITION 1; SHOW CREATE TABLE t1; Table Create Table @@ -14,3 +20,7 @@ t1 CREATE TABLE `t1` ( `f_date` date DEFAULT NULL, `f_varchar` varchar(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 PARTITION BY HASH (CAST(YEAR(f_date) AS SIGNED INTEGER)) PARTITIONS 1 +hello/master-data/test/t1#P#p0.MYD +hello/master-data/test/t1#P#p0.MYI +hello/master-data/test/t1.frm +hello/master-data/test/t1.par diff --git a/mysql-test/t/partition_error.test b/mysql-test/t/partition_error.test index 076c5c5773b..d0e3f355292 100644 --- a/mysql-test/t/partition_error.test +++ b/mysql-test/t/partition_error.test @@ -107,6 +107,8 @@ partitions 3 (partition x1 tablespace ts1, partition x2 tablespace ts2, partition x3 tablespace ts3); + +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); # # Partition by hash, invalid field in function # @@ -202,6 +204,7 @@ partition by hash (a) partitions 2 (partition x1 values less than (4), partition x2 values less than (5)); +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); # # Partition by hash, values in error @@ -216,6 +219,7 @@ partition by hash (a) partitions 2 (partition x1 values in (4), partition x2 values in (5)); +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); # # Partition by hash, values in error @@ -230,6 +234,7 @@ partition by hash (a) partitions 2 (partition x1 values in (4,6), partition x2 values in (5,7)); +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); # # Subpartition by key, no partitions defined, single field @@ -242,6 +247,7 @@ c int not null, primary key (a,b)) partition by key (a) subpartition by key (b); +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); # # Subpartition by key, no partitions defined, list of fields @@ -254,6 +260,7 @@ c int not null, primary key (a,b)) partition by key (a) subpartition by key (a, b); +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); # # Subpartition by hash, no partitions defined @@ -266,6 +273,7 @@ c int not null, primary key (a,b)) partition by key (a) subpartition by hash (a+b); +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); # # Subpartition by key, no partitions defined, single field @@ -278,6 +286,7 @@ c int not null, primary key (a,b)) partition by key (a) subpartition by key (b); +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); # # Subpartition by key, no partitions defined, list of fields @@ -290,6 +299,7 @@ c int not null, primary key (a,b)) partition by key (a) subpartition by key (a, b); +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); # # Subpartition by hash, no partitions defined @@ -302,6 +312,7 @@ c int not null, primary key (a,b)) partition by key (a) subpartition by hash (a+b); +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); # # Subpartition by hash, no partitions defined, wrong subpartition function @@ -328,6 +339,7 @@ partition by key (a) subpartition by hash (sin(a+b)) (partition x1 (subpartition x11, subpartition x12), partition x2 (subpartition x21, subpartition x22)); +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); # # Subpartition by hash, no partitions defined, wrong subpartition function @@ -356,6 +368,7 @@ partition by range (a) subpartition by key (a,d) (partition x1 values less than (1) (subpartition x11, subpartition x12), partition x2 values less than (2) (subpartition x21, subpartition x22)); +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); # # Subpartition by hash, no partitions defined, wrong subpartition function @@ -393,6 +406,7 @@ b int not null, c int not null, primary key(a,b)) partition by range (a); +select load_file('$MYSQLTEST_VARDIR/master-data/test/t1.par'); # # Partition by range, invalid field in function diff --git a/mysql-test/t/partition_mgm.test b/mysql-test/t/partition_mgm.test index 67c0619f28c..dd9290a97a0 100644 --- a/mysql-test/t/partition_mgm.test +++ b/mysql-test/t/partition_mgm.test @@ -5,10 +5,12 @@ CREATE TABLE t1 (f_date DATE, f_varchar VARCHAR(30)) PARTITION BY HASH(CAST(YEAR(f_date) AS SIGNED INTEGER)) PARTITIONS 2; SHOW CREATE TABLE t1; -#--exec ls $MYSQLTEST_VARDIR/master-data/test/t1* +--replace_result $MYSQLTEST_VARDIR "hello" +--exec ls $MYSQLTEST_VARDIR/master-data/test/t1* ALTER TABLE t1 COALESCE PARTITION 1; SHOW CREATE TABLE t1; -#--exec ls $MYSQLTEST_VARDIR/master-data/test/t1* +--replace_result $MYSQLTEST_VARDIR "hello" +--exec ls $MYSQLTEST_VARDIR/master-data/test/t1*