Commit b518e93b authored by bell@sanja.is.com.ua's avatar bell@sanja.is.com.ua

fixed collation of Item_cache family (BUG#951)

parent 786af341
......@@ -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 @@ class Item_cache_int: public Item_cache
{
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 @@ class Item_cache_real: public Item_cache
{
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)); }
......
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