summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/key.result2
-rw-r--r--mysql-test/t/key.test11
-rw-r--r--sql/sql_yacc.yy14
3 files changed, 26 insertions, 1 deletions
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 */