diff options
author | unknown <mikael@zim.(none)> | 2006-03-14 02:39:24 -0800 |
---|---|---|
committer | unknown <mikael@zim.(none)> | 2006-03-14 02:39:24 -0800 |
commit | 9d651ab13ecf4e48a251941e39cbb5cc6d79ff99 (patch) | |
tree | c4969750ab2c9f590fc12bafe26c65ea747019b1 | |
parent | 0430352bdbb938e9d9a4d0cf159fb073ffcabc75 (diff) | |
parent | 06dde3aae826358d3b1b53fb8fb0ef7d3c0a38aa (diff) | |
download | mariadb-git-9d651ab13ecf4e48a251941e39cbb5cc6d79ff99.tar.gz |
Merge mronstrom@bk-internal.mysql.com:/home/bk/mysql-5.1-new
into zim.(none):/home/mikael/bug16370
sql/sql_yacc.yy:
Auto merged
-rw-r--r-- | mysql-test/r/ndb_partition_key.result | 13 | ||||
-rw-r--r-- | mysql-test/r/partition.result | 51 | ||||
-rw-r--r-- | mysql-test/r/partition_mgm_err.result | 4 | ||||
-rw-r--r-- | mysql-test/t/ndb_partition_key.test | 29 | ||||
-rw-r--r-- | mysql-test/t/partition.test | 61 | ||||
-rw-r--r-- | mysql-test/t/partition_mgm_err.test | 4 | ||||
-rw-r--r-- | sql/share/errmsg.txt | 4 | ||||
-rw-r--r-- | sql/sql_partition.cc | 17 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 15 |
9 files changed, 193 insertions, 5 deletions
diff --git a/mysql-test/r/ndb_partition_key.result b/mysql-test/r/ndb_partition_key.result index 8842a6e1398..90ecde51e9f 100644 --- a/mysql-test/r/ndb_partition_key.result +++ b/mysql-test/r/ndb_partition_key.result @@ -89,3 +89,16 @@ ALTER TABLE t1 PARTITION BY KEY(a) (PARTITION p0 ENGINE = NDB, PARTITION p1 ENGINE = NDB); drop table t1; +CREATE TABLE t1 ( +c1 MEDIUMINT NOT NULL AUTO_INCREMENT, +c2 TEXT NOT NULL, +c3 INT NOT NULL, +c4 BIT NOT NULL, +c5 FLOAT, +c6 VARCHAR(255), +c7 TIMESTAMP, +PRIMARY KEY(c1,c3)) +ENGINE=NDB +PARTITION BY KEY(c3) PARTITIONS 5; +ALTER TABLE t1 COALESCE PARTITION 4; +DROP TABLE t1; diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result index d84d8e25ef1..465858325d1 100644 --- a/mysql-test/r/partition.result +++ b/mysql-test/r/partition.result @@ -428,6 +428,57 @@ partition by list (a) alter table t1 rebuild partition; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 drop table t1; +create table t1 (a int) +partition by list (a) +(partition p0 values in (5)); +insert into t1 values (0); +ERROR HY000: Table has no partition for value 0 +drop table t1; +create table t1 (a int) +partition by range (a) subpartition by hash (a) +(partition p0 values less than (100)); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 PARTITION BY RANGE (a) SUBPARTITION BY HASH (a) (PARTITION p0 VALUES LESS THAN (100) ) +alter table t1 add partition (partition p1 values less than (200) +(subpartition subpart21)); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 PARTITION BY RANGE (a) SUBPARTITION BY HASH (a) (PARTITION p0 VALUES LESS THAN (100) (SUBPARTITION p0sp0 ENGINE = MyISAM), PARTITION p1 VALUES LESS THAN (200) (SUBPARTITION subpart21 ENGINE = MyISAM)) +drop table t1; +create table t1 (a int) +partition by key (a); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 PARTITION BY KEY (a) +alter table t1 add partition (partition p1); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 PARTITION BY KEY (a) (PARTITION p0 ENGINE = MyISAM, PARTITION p1 ENGINE = MyISAM) +drop table t1; +create table t1 (a int, b int) +partition by range (a) +subpartition by hash(a) +(partition p0 values less than (0) (subpartition sp0), +partition p1 values less than (1)); +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near ')' at line 5 +create table t1 (a int, b int) +partition by range (a) +subpartition by hash(a) +(partition p0 values less than (0), +partition p1 values less than (1) (subpartition sp0)); +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near '))' at line 5 +partition by hash (a) +(partition p0 (subpartition sp0)); +ERROR HY000: It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning create table t1 (a int) engine=innodb partition by hash(a) ; show table status like 't1'; Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment diff --git a/mysql-test/r/partition_mgm_err.result b/mysql-test/r/partition_mgm_err.result index c7003c6e14c..f899801e7cd 100644 --- a/mysql-test/r/partition_mgm_err.result +++ b/mysql-test/r/partition_mgm_err.result @@ -141,7 +141,9 @@ DROP TABLE t1; CREATE TABLE t1 (a INT) PARTITION BY HASH(a); ALTER TABLE t1 ADD PARTITION PARTITIONS 4; DROP TABLE t1; -CREATE TABLE t1 (s1 int, s2 int) PARTITION BY LIST (s1) ( +CREATE TABLE t1 (s1 int, s2 int) +PARTITION BY LIST (s1) +SUBPARTITION BY KEY (s2) ( PARTITION p1 VALUES IN (0) (SUBPARTITION p1b), PARTITION p2 VALUES IN (2) (SUBPARTITION p1b) ); diff --git a/mysql-test/t/ndb_partition_key.test b/mysql-test/t/ndb_partition_key.test index 7f6120fe094..22c84bf132e 100644 --- a/mysql-test/t/ndb_partition_key.test +++ b/mysql-test/t/ndb_partition_key.test @@ -79,3 +79,32 @@ PARTITION BY KEY(a) (PARTITION p0 ENGINE = NDB, PARTITION p1 ENGINE = NDB); drop table t1; + +# +# BUG 16810 Out of memory when coalesce partition +# +CREATE TABLE t1 ( + c1 MEDIUMINT NOT NULL AUTO_INCREMENT, + c2 TEXT NOT NULL, + c3 INT NOT NULL, + c4 BIT NOT NULL, + c5 FLOAT, + c6 VARCHAR(255), + c7 TIMESTAMP, + PRIMARY KEY(c1,c3)) + ENGINE=NDB + PARTITION BY KEY(c3) PARTITIONS 5; + +let $j= 11; +--disable_query_log +while ($j) +{ + eval INSERT INTO t1 VALUES (NULL, "Tested Remotely from Texas, USA", $j, +b'0', + $j.00,"By JBM $j","2006-01-26"); + dec $j; +} +--enable_query_log +ALTER TABLE t1 COALESCE PARTITION 4; + +DROP TABLE t1; diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test index 9ee2bbd36b3..ef4ae988414 100644 --- a/mysql-test/t/partition.test +++ b/mysql-test/t/partition.test @@ -553,6 +553,67 @@ alter table t1 rebuild partition; drop table t1; # +# BUG 15253 Insert that should fail doesn't +# +create table t1 (a int) +partition by list (a) +(partition p0 values in (5)); + +--error ER_NO_PARTITION_FOR_GIVEN_VALUE +insert into t1 values (0); + +drop table t1; + +# +# BUG #16370 Subpartitions names not shown in SHOW CREATE TABLE output +# +create table t1 (a int) +partition by range (a) subpartition by hash (a) +(partition p0 values less than (100)); + +show create table t1; +alter table t1 add partition (partition p1 values less than (200) +(subpartition subpart21)); + +show create table t1; + +drop table t1; + +create table t1 (a int) +partition by key (a); + +show create table t1; +alter table t1 add partition (partition p1); +show create table t1; + +drop table t1; + +# +# BUG 15407 Crash with subpartition +# +--error 1064 +create table t1 (a int, b int) +partition by range (a) +subpartition by hash(a) +(partition p0 values less than (0) (subpartition sp0), + partition p1 values less than (1)); + +--error 1064 +create table t1 (a int, b int) +partition by range (a) +subpartition by hash(a) +(partition p0 values less than (0), + partition p1 values less than (1) (subpartition sp0)); + +# +# BUG 15961 No error when subpartition defined without subpartition by clause +# +--error ER_SUBPARTITION_ERROR +create table t1 (a int) +partition by hash (a) +(partition p0 (subpartition sp0)); + +# # Bug #14673: Wrong InnoDB default row format # create table t1 (a int) engine=innodb partition by hash(a) ; diff --git a/mysql-test/t/partition_mgm_err.test b/mysql-test/t/partition_mgm_err.test index f72222feadd..8573fd59f2f 100644 --- a/mysql-test/t/partition_mgm_err.test +++ b/mysql-test/t/partition_mgm_err.test @@ -205,7 +205,9 @@ DROP TABLE t1; #BUG 15408: Partitions: subpartition names are not unique # --error ER_SAME_NAME_PARTITION -CREATE TABLE t1 (s1 int, s2 int) PARTITION BY LIST (s1) ( +CREATE TABLE t1 (s1 int, s2 int) +PARTITION BY LIST (s1) +SUBPARTITION BY KEY (s2) ( PARTITION p1 VALUES IN (0) (SUBPARTITION p1b), PARTITION p2 VALUES IN (2) (SUBPARTITION p1b) ); diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt index 4255504e98f..e8766b3d882 100644 --- a/sql/share/errmsg.txt +++ b/sql/share/errmsg.txt @@ -5614,6 +5614,10 @@ ER_PARTITION_MAXVALUE_ERROR ER_PARTITION_SUBPARTITION_ERROR eng "Subpartitions can only be hash partitions and by key" swe "Subpartitioner kan bara vara hash och key partitioner" +ER_PARTITION_SUBPART_MIX_ERROR + eng "Must define subpartitions on all partitions if on one partition" + swe "Subpartitioner mÃ¥ste definieras pÃ¥ alla partitioner om pÃ¥ en" + ER_PARTITION_WRONG_NO_PART_ERROR eng "Wrong number of partitions defined, mismatch with previous setting" swe "Antal partitioner definierade och antal partitioner är inte lika" diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index a27e5b1979f..468dc37c9af 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -692,12 +692,19 @@ bool check_partition_info(partition_info *part_info,handlerton **eng_type, char *same_name; DBUG_ENTER("check_partition_info"); + if (unlikely(!part_info->is_sub_partitioned() && + !(part_info->use_default_subpartitions && + part_info->use_default_no_subpartitions))) + { + my_error(ER_SUBPARTITION_ERROR, MYF(0)); + goto end; + } if (unlikely(part_info->is_sub_partitioned() && (!(part_info->part_type == RANGE_PARTITION || part_info->part_type == LIST_PARTITION)))) { /* Only RANGE and LIST partitioning can be subpartitioned */ - my_error(ER_SUBPARTITION_ERROR, MYF(0)); + my_error(ER_PARTITION_SUBPART_MIX_ERROR, MYF(0)); goto end; } if (unlikely(part_info->set_up_defaults_for_partitioning(file, @@ -4078,6 +4085,7 @@ uint prep_alter_part_table(THD *thd, TABLE *table, ALTER_INFO *alter_info, ALTER_REPAIR_PARTITION | ALTER_REBUILD_PARTITION)) { partition_info *tab_part_info= table->part_info; + partition_info *alt_part_info= thd->lex->part_info; uint flags= 0; if (!tab_part_info) { @@ -4143,7 +4151,6 @@ uint prep_alter_part_table(THD *thd, TABLE *table, ALTER_INFO *alter_info, partitioning scheme as currently set-up. Partitions are always added at the end in ADD PARTITION. */ - partition_info *alt_part_info= thd->lex->part_info; uint no_new_partitions= alt_part_info->no_parts; uint no_orig_partitions= tab_part_info->no_parts; uint check_total_partitions= no_new_partitions + no_orig_partitions; @@ -4738,6 +4745,12 @@ the generated partition syntax in a correct manner. if (alter_info->flags == ALTER_ADD_PARTITION || alter_info->flags == ALTER_REORGANIZE_PARTITION) { + if (tab_part_info->use_default_subpartitions && + !alt_part_info->use_default_subpartitions) + { + tab_part_info->use_default_subpartitions= FALSE; + tab_part_info->use_default_no_subpartitions= FALSE; + } if (check_partition_info(tab_part_info, (handlerton**)NULL, table->file, ULL(0))) { diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index d654020ebd9..3ea9eb046ae 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -3793,7 +3793,15 @@ part_bit_expr: ; opt_sub_partition: - /* empty */ {} + /* empty */ + { + if (Lex->part_info->no_subparts != 0 && + !Lex->part_info->use_default_subpartitions) + { + yyerror(ER(ER_PARTITION_WRONG_NO_SUBPART_ERROR)); + YYABORT; + } + } | '(' sub_part_list ')' { LEX *lex= Lex; @@ -3809,6 +3817,11 @@ opt_sub_partition: } else if (part_info->count_curr_subparts > 0) { + if (part_info->partitions.elements > 1) + { + yyerror(ER(ER_PARTITION_WRONG_NO_SUBPART_ERROR)); + YYABORT; + } part_info->no_subparts= part_info->count_curr_subparts; } part_info->count_curr_subparts= 0; |