summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Glukhov <Sergey.Glukhov@sun.com>2010-05-27 20:01:43 +0400
committerSergey Glukhov <Sergey.Glukhov@sun.com>2010-05-27 20:01:43 +0400
commitf1e1d1bd005f7b5d732c560f04e1f05608e2671f (patch)
tree74ba6d5c624ff12b86aa5a763515ad02800307a8
parent8fa381fda36f3386a7116ff57dc93329891611df (diff)
downloadmariadb-git-f1e1d1bd005f7b5d732c560f04e1f05608e2671f.tar.gz
Bug#52430 Incorrect key in the error message for duplicate key error involving BINARY type
For BINARY(N) strip trailing zeroes to make the error message nice-looking mysql-test/r/errors.result: test case mysql-test/r/type_binary.result: result fix mysql-test/t/errors.test: test case sql/key.cc: For BINARY(N) strip trailing zeroes to make the error message nice-looking
-rw-r--r--mysql-test/r/errors.result14
-rw-r--r--mysql-test/r/type_binary.result2
-rw-r--r--mysql-test/t/errors.test15
-rw-r--r--sql/key.cc10
4 files changed, 40 insertions, 1 deletions
diff --git a/mysql-test/r/errors.result b/mysql-test/r/errors.result
index a3a8fe0b147..3d247a242a3 100644
--- a/mysql-test/r/errors.result
+++ b/mysql-test/r/errors.result
@@ -120,3 +120,17 @@ SET sql_quote_show_create= _utf8 x'5452C39C45';
ERROR 42000: Variable 'sql_quote_show_create' can't be set to the value of 'TRÜE'
SET sql_quote_show_create=_latin1 x'5452DC45';
ERROR 42000: Variable 'sql_quote_show_create' can't be set to the value of 'TRÜE'
+#
+# Bug#52430 Incorrect key in the error message for duplicate key error involving BINARY type
+#
+CREATE TABLE t1(c1 BINARY(10), c2 BINARY(10), c3 BINARY(10),
+PRIMARY KEY(c1,c2,c3));
+INSERT INTO t1 (c1,c2,c3) VALUES('abc','abc','abc');
+INSERT INTO t1 (c1,c2,c3) VALUES('abc','abc','abc');
+ERROR 23000: Duplicate entry 'abc-abc-abc' for key 'PRIMARY'
+DROP TABLE t1;
+CREATE TABLE t1 (f1 VARBINARY(19) PRIMARY KEY);
+INSERT INTO t1 VALUES ('abc\0\0');
+INSERT INTO t1 VALUES ('abc\0\0');
+ERROR 23000: Duplicate entry 'abc\x00\x00' for key 'PRIMARY'
+DROP TABLE t1;
diff --git a/mysql-test/r/type_binary.result b/mysql-test/r/type_binary.result
index 01841bf27fc..b00d1585b29 100644
--- a/mysql-test/r/type_binary.result
+++ b/mysql-test/r/type_binary.result
@@ -47,7 +47,7 @@ create table t1 (s1 binary(2) primary key);
insert into t1 values (0x01);
insert into t1 values (0x0120);
insert into t1 values (0x0100);
-ERROR 23000: Duplicate entry '\x01\x00' for key 'PRIMARY'
+ERROR 23000: Duplicate entry '\x01' for key 'PRIMARY'
select hex(s1) from t1 order by s1;
hex(s1)
0100
diff --git a/mysql-test/t/errors.test b/mysql-test/t/errors.test
index 5e53eaf0a52..f308c340645 100644
--- a/mysql-test/t/errors.test
+++ b/mysql-test/t/errors.test
@@ -140,3 +140,18 @@ SET sql_quote_show_create= _utf8 x'5452C39C45';
--error ER_WRONG_VALUE_FOR_VAR
SET sql_quote_show_create=_latin1 x'5452DC45';
+--echo #
+--echo # Bug#52430 Incorrect key in the error message for duplicate key error involving BINARY type
+--echo #
+CREATE TABLE t1(c1 BINARY(10), c2 BINARY(10), c3 BINARY(10),
+PRIMARY KEY(c1,c2,c3));
+INSERT INTO t1 (c1,c2,c3) VALUES('abc','abc','abc');
+--error ER_DUP_ENTRY
+INSERT INTO t1 (c1,c2,c3) VALUES('abc','abc','abc');
+DROP TABLE t1;
+
+CREATE TABLE t1 (f1 VARBINARY(19) PRIMARY KEY);
+INSERT INTO t1 VALUES ('abc\0\0');
+--error ER_DUP_ENTRY
+INSERT INTO t1 VALUES ('abc\0\0');
+DROP TABLE t1;
diff --git a/sql/key.cc b/sql/key.cc
index d593850ca10..582334620ad 100644
--- a/sql/key.cc
+++ b/sql/key.cc
@@ -354,6 +354,16 @@ void key_unpack(String *to,TABLE *table,uint idx)
{
CHARSET_INFO *cs= field->charset();
field->val_str(&tmp);
+ /*
+ For BINARY(N) strip trailing zeroes to make
+ the error message nice-looking
+ */
+ if (field->binary() && field->type() == MYSQL_TYPE_STRING && tmp.length())
+ {
+ const char *tmp_end= tmp.ptr() + tmp.length();
+ while (tmp_end > tmp.ptr() && !*--tmp_end);
+ tmp.length(tmp_end - tmp.ptr() + 1);
+ }
if (cs->mbmaxlen > 1 &&
table->field[key_part->fieldnr - 1]->field_length !=
key_part->length)