From aa451a0e07254dfd1f7e1229018d05fc895e312d Mon Sep 17 00:00:00 2001 From: unknown <mikael@zim.(none)> Date: Mon, 13 Mar 2006 02:36:02 -0800 Subject: [PATCH] BUG#15407: Crash if error in subpartition definition mysql-test/r/partition.result: New test cases mysql-test/t/partition.test: New test cases sql/sql_yacc.yy: New error checks --- mysql-test/r/partition.result | 12 ++++++++++++ mysql-test/t/partition.test | 17 +++++++++++++++++ sql/sql_yacc.yy | 15 ++++++++++++++- 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result index 5a956379a4..33f4399d58 100644 --- a/mysql-test/r/partition.result +++ b/mysql-test/r/partition.result @@ -464,4 +464,16 @@ 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 End of 5.1 tests diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test index 764ef78899..bb551a46ca 100644 --- a/mysql-test/t/partition.test +++ b/mysql-test/t/partition.test @@ -588,4 +588,21 @@ 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)); + --echo End of 5.1 tests diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 47852212b8..cae9bb168c 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; -- 2.30.9