summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <mikael@zim.(none)>2006-03-14 02:39:24 -0800
committerunknown <mikael@zim.(none)>2006-03-14 02:39:24 -0800
commit9d651ab13ecf4e48a251941e39cbb5cc6d79ff99 (patch)
treec4969750ab2c9f590fc12bafe26c65ea747019b1
parent0430352bdbb938e9d9a4d0cf159fb073ffcabc75 (diff)
parent06dde3aae826358d3b1b53fb8fb0ef7d3c0a38aa (diff)
downloadmariadb-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.result13
-rw-r--r--mysql-test/r/partition.result51
-rw-r--r--mysql-test/r/partition_mgm_err.result4
-rw-r--r--mysql-test/t/ndb_partition_key.test29
-rw-r--r--mysql-test/t/partition.test61
-rw-r--r--mysql-test/t/partition_mgm_err.test4
-rw-r--r--sql/share/errmsg.txt4
-rw-r--r--sql/sql_partition.cc17
-rw-r--r--sql/sql_yacc.yy15
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;