mirror of
https://github.com/MariaDB/server.git
synced 2025-08-05 13:16:09 +03:00
fixed collation of Item_cache family (BUG#951)
mysql-test/r/subselect.result: test of collation mysql-test/t/subselect.test: test of collation sql/item.cc: coping collation in the cache sql/item.h: coping collation in the cache
This commit is contained in:
@@ -1251,3 +1251,10 @@ a
|
||||
2
|
||||
10
|
||||
drop table t1,t2;
|
||||
CREATE TABLE t1 (s1 CHAR(5) COLLATE latin1_german1_ci,
|
||||
s2 CHAR(5) COLLATE latin1_swedish_ci);
|
||||
INSERT INTO t1 VALUES ('z','?');
|
||||
select * from t1 where s1 > (select max(s2) from t1);
|
||||
ERROR HY000: Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '>'
|
||||
select * from t1 where s1 > any (select max(s2) from t1);
|
||||
drop table t1;
|
||||
|
@@ -853,3 +853,14 @@ insert into t3 values (1),(2),(10),(50);
|
||||
select a from t3 where t3.a in (select a from t1 where a <= 3 union select * from t2 where a <= 30);
|
||||
drop table t1,t2;
|
||||
|
||||
#
|
||||
# collation test
|
||||
#
|
||||
CREATE TABLE t1 (s1 CHAR(5) COLLATE latin1_german1_ci,
|
||||
s2 CHAR(5) COLLATE latin1_swedish_ci);
|
||||
INSERT INTO t1 VALUES ('z','?');
|
||||
-- error 1265
|
||||
select * from t1 where s1 > (select max(s2) from t1);
|
||||
-- error 1265
|
||||
select * from t1 where s1 > any (select max(s2) from t1);
|
||||
drop table t1;
|
||||
|
@@ -1704,7 +1704,7 @@ void Item_cache_str::store(Item *item)
|
||||
str_value.copy(*value);
|
||||
value= &str_value;
|
||||
}
|
||||
|
||||
collation.set(item->collation);
|
||||
}
|
||||
double Item_cache_str::val()
|
||||
{
|
||||
|
@@ -852,6 +852,7 @@ public:
|
||||
{
|
||||
value= item->val_int_result();
|
||||
null_value= item->null_value;
|
||||
collation.set(item->collation);
|
||||
}
|
||||
double val() { return (double) value; }
|
||||
longlong val_int() { return value; }
|
||||
@@ -869,6 +870,7 @@ public:
|
||||
{
|
||||
value= item->val_result();
|
||||
null_value= item->null_value;
|
||||
collation.set(item->collation);
|
||||
}
|
||||
double val() { return value; }
|
||||
longlong val_int() { return (longlong) (value+(value > 0 ? 0.5 : -0.5)); }
|
||||
|
Reference in New Issue
Block a user