Commit fc8b1385 authored by unknown's avatar unknown

Fix:

CREATE TABLE t1 (s1 CHAR(5) CHARACTER SET latin1 COLLATE latin1_german2_ci);
INSERT INTO t1 VALUES ('Ü');
INSERT INTO t1 VALUES ('ue');
SELECT DISTINCT s1 FROM t1;

The above returned two rows in error.
Now it returns one row, in latin1_german2_ci:  Ü == ue

parent 691b7584
......@@ -371,8 +371,9 @@ int hp_rec_key_cmp(HP_KEYDEF *keydef, const byte *rec1, const byte *rec2)
}
if (seg->type == HA_KEYTYPE_TEXT)
{
if (my_strnncoll(seg->charset,(uchar*) rec1+seg->start,seg->length,
(uchar*) rec2+seg->start,seg->length))
if (seg->charset->coll->strnncollsp(seg->charset,
(uchar*) rec1+seg->start,seg->length,
(uchar*) rec2+seg->start,seg->length))
return 1;
}
else
......@@ -404,8 +405,9 @@ int hp_key_cmp(HP_KEYDEF *keydef, const byte *rec, const byte *key)
}
if (seg->type == HA_KEYTYPE_TEXT)
{
if (my_strnncoll(seg->charset,(uchar*) rec+seg->start, seg->length,
(uchar*) key, seg->length))
if (seg->charset->coll->strnncollsp(seg->charset,
(uchar*) rec+seg->start, seg->length,
(uchar*) key, seg->length))
return 1;
}
else
......
......@@ -264,3 +264,18 @@ select * from t1 where word like CAST(0xDF as CHAR);
word word2
drop table t1;
CREATE TABLE t1 (
s1 CHAR(5) CHARACTER SET latin1 COLLATE latin1_german2_ci
);
INSERT INTO t1 VALUES ('');
INSERT INTO t1 VALUES ('ue');
SELECT DISTINCT s1 FROM t1;
s1
SELECT s1,COUNT(*) FROM t1 GROUP BY s1;
s1 COUNT(*)
2
SELECT COUNT(DISTINCT s1) FROM t1;
COUNT(DISTINCT s1)
1
DROP TABLE t1;
......@@ -73,3 +73,13 @@ select * from t1 where word like 'AE';
select * from t1 where word like binary 0xDF;
select * from t1 where word like CAST(0xDF as CHAR);
drop table t1;
CREATE TABLE t1 (
s1 CHAR(5) CHARACTER SET latin1 COLLATE latin1_german2_ci
);
INSERT INTO t1 VALUES ('');
INSERT INTO t1 VALUES ('ue');
SELECT DISTINCT s1 FROM t1;
SELECT s1,COUNT(*) FROM t1 GROUP BY s1;
SELECT COUNT(DISTINCT s1) FROM t1;
DROP TABLE t1;
......@@ -1023,7 +1023,9 @@ int simple_str_key_cmp(void* arg, byte* key1, byte* key2)
Item_sum_count_distinct* item = (Item_sum_count_distinct*)arg;
CHARSET_INFO *cs=item->key_charset;
uint len=item->key_length;
return my_strnncoll(cs, (const uchar*) key1, len, (const uchar*) key2, len);
return cs->coll->strnncollsp(cs,
(const uchar*) key1, len,
(const uchar*) key2, len);
}
/*
......
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