diff --git a/mysql-test/r/key.result b/mysql-test/r/key.result index e3b341fcaf8..e74bda23da9 100644 --- a/mysql-test/r/key.result +++ b/mysql-test/r/key.result @@ -305,3 +305,5 @@ check table t1; Table Op Msg_type Msg_text test.t1 check status OK drop table t1; +create table t1 (c char(10), index (c(0))); +ERROR HY000: Key part 'c' length cannot be 0 diff --git a/mysql-test/t/key.test b/mysql-test/t/key.test index 662baa5ea9d..4be34cac30e 100644 --- a/mysql-test/t/key.test +++ b/mysql-test/t/key.test @@ -285,3 +285,14 @@ check table t1; drop table t1; +# +# Bug 6166: index prefix length of 0 not rejected +# +# this test should fail in 5.0 +# to fix it, remove #ifdef in +# file sql_yacc.yy(key_part) +# create dedicated error code for this and +# and change my_printf_error() to my_error + +--error 1105 +create table t1 (c char(10), index (c(0))); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 426f6d4d057..8aad067944a 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1817,7 +1817,19 @@ key_list: key_part: ident { $$=new key_part_spec($1.str); } - | ident '(' NUM ')' { $$=new key_part_spec($1.str,(uint) atoi($3.str)); }; + | ident '(' NUM ')' + { + int key_part_len= atoi($3.str); +#ifdef MYSQL_VERSION_ID < 50000 + if (!key_part_len) + { + my_printf_error(ER_UNKNOWN_ERROR, + "Key part '%s' length cannot be 0", + MYF(0), $1.str); + } +#endif + $$=new key_part_spec($1.str,(uint) key_part_len); + }; opt_ident: /* empty */ { $$=(char*) 0; } /* Defaultlength */