mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
ctype_collate.result, ctype_collate.test, union.result, union.test:
fixing tests accordingly item.cc: Allow mixing non-binary collation and binary collation even if coercibility is the same. For easier 4.0 -> 4.1 migrating.
This commit is contained in:
@ -535,6 +535,19 @@ s2 CHAR(5) COLLATE latin1_swedish_ci);
|
||||
SELECT * FROM t1 WHERE s1 = s2;
|
||||
ERROR HY000: Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1
|
||||
(s1 CHAR(5) COLLATE latin1_german1_ci,
|
||||
s2 CHAR(5) COLLATE latin1_swedish_ci,
|
||||
s3 CHAR(5) COLLATE latin1_bin);
|
||||
INSERT INTO t1 VALUES ('a','A','A');
|
||||
SELECT * FROM t1 WHERE s1 = s2;
|
||||
ERROR HY000: Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='
|
||||
SELECT * FROM t1 WHERE s1 = s3;
|
||||
s1 s2 s3
|
||||
SELECT * FROM t1 WHERE s2 = s3;
|
||||
s1 s2 s3
|
||||
a A A
|
||||
DROP TABLE t1;
|
||||
SET NAMES latin1;
|
||||
CREATE TABLE t1
|
||||
(s1 char(10) COLLATE latin1_german1_ci,
|
||||
|
@ -1103,7 +1103,7 @@ count(*)
|
||||
drop table t1;
|
||||
create table t2 (
|
||||
a char character set latin1 collate latin1_swedish_ci,
|
||||
b char character set latin1 collate latin1_bin);
|
||||
b char character set latin1 collate latin1_german1_ci);
|
||||
create table t1 as
|
||||
(select a from t2) union
|
||||
(select b from t2);
|
||||
|
@ -158,6 +158,18 @@ SELECT * FROM t1 WHERE s1 = s2;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
CREATE TABLE t1
|
||||
(s1 CHAR(5) COLLATE latin1_german1_ci,
|
||||
s2 CHAR(5) COLLATE latin1_swedish_ci,
|
||||
s3 CHAR(5) COLLATE latin1_bin);
|
||||
INSERT INTO t1 VALUES ('a','A','A');
|
||||
--error 1267
|
||||
SELECT * FROM t1 WHERE s1 = s2;
|
||||
SELECT * FROM t1 WHERE s1 = s3;
|
||||
SELECT * FROM t1 WHERE s2 = s3;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
#
|
||||
# Test that optimizer doesn't use indexes with wrong collation
|
||||
#
|
||||
|
@ -641,7 +641,7 @@ drop table t1;
|
||||
|
||||
create table t2 (
|
||||
a char character set latin1 collate latin1_swedish_ci,
|
||||
b char character set latin1 collate latin1_bin);
|
||||
b char character set latin1 collate latin1_german1_ci);
|
||||
--error 1271
|
||||
create table t1 as
|
||||
(select a from t2) union
|
||||
|
11
sql/item.cc
11
sql/item.cc
@ -474,8 +474,17 @@ bool DTCollation::aggregate(DTCollation &dt, uint flags)
|
||||
set(0, DERIVATION_NONE);
|
||||
return 1;
|
||||
}
|
||||
if (collation->state & MY_CS_BINSORT)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if (dt.collation->state & MY_CS_BINSORT)
|
||||
{
|
||||
set(dt);
|
||||
return 0;
|
||||
}
|
||||
CHARSET_INFO *bin= get_charset_by_csname(collation->csname,
|
||||
MY_CS_BINSORT,MYF(0));
|
||||
MY_CS_BINSORT,MYF(0));
|
||||
set(bin, DERIVATION_NONE);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user