Commit 20bd61a6 authored by Sergey Glukhov's avatar Sergey Glukhov

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
parent 6f55a810
...@@ -120,3 +120,17 @@ SET sql_quote_show_create= _utf8 x'5452C39C45'; ...@@ -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' 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'; 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' 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;
...@@ -47,7 +47,7 @@ create table t1 (s1 binary(2) primary key); ...@@ -47,7 +47,7 @@ create table t1 (s1 binary(2) primary key);
insert into t1 values (0x01); insert into t1 values (0x01);
insert into t1 values (0x0120); insert into t1 values (0x0120);
insert into t1 values (0x0100); 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; select hex(s1) from t1 order by s1;
hex(s1) hex(s1)
0100 0100
......
...@@ -140,3 +140,18 @@ SET sql_quote_show_create= _utf8 x'5452C39C45'; ...@@ -140,3 +140,18 @@ SET sql_quote_show_create= _utf8 x'5452C39C45';
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
SET sql_quote_show_create=_latin1 x'5452DC45'; 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;
...@@ -354,6 +354,16 @@ void key_unpack(String *to,TABLE *table,uint idx) ...@@ -354,6 +354,16 @@ void key_unpack(String *to,TABLE *table,uint idx)
{ {
CHARSET_INFO *cs= field->charset(); CHARSET_INFO *cs= field->charset();
field->val_str(&tmp); 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 && if (cs->mbmaxlen > 1 &&
table->field[key_part->fieldnr - 1]->field_length != table->field[key_part->fieldnr - 1]->field_length !=
key_part->length) key_part->length)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment