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 ...@@ -1251,3 +1251,10 @@ a
2 2
10 10
drop table t1,t2; 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); ...@@ -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); 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; 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) ...@@ -1704,7 +1704,7 @@ void Item_cache_str::store(Item *item)
str_value.copy(*value); str_value.copy(*value);
value= &str_value; value= &str_value;
} }
collation.set(item->collation);
} }
double Item_cache_str::val() double Item_cache_str::val()
{ {
......
...@@ -852,6 +852,7 @@ public: ...@@ -852,6 +852,7 @@ public:
{ {
value= item->val_int_result(); value= item->val_int_result();
null_value= item->null_value; null_value= item->null_value;
collation.set(item->collation);
} }
double val() { return (double) value; } double val() { return (double) value; }
longlong val_int() { return value; } longlong val_int() { return value; }
...@@ -869,6 +870,7 @@ public: ...@@ -869,6 +870,7 @@ public:
{ {
value= item->val_result(); value= item->val_result();
null_value= item->null_value; null_value= item->null_value;
collation.set(item->collation);
} }
double val() { return value; } double val() { return value; }
longlong val_int() { return (longlong) (value+(value > 0 ? 0.5 : -0.5)); } 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