Commit 68f83391 authored by unknown's avatar unknown

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
parent 0960c3eb
......@@ -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