Commit 29ffcad2 authored by bar@mysql.com's avatar bar@mysql.com

Fixed that LEFT OUTER JOIN was replaced with a regulat join

in some cases, because "charset(x) = 'string'" was considered
as "x is not null" due to incorrect not_null_tables().
parent bd74a139
...@@ -636,6 +636,26 @@ drop table t1; ...@@ -636,6 +636,26 @@ drop table t1;
select charset(null), collation(null), coercibility(null); select charset(null), collation(null), coercibility(null);
charset(null) collation(null) coercibility(null) charset(null) collation(null) coercibility(null)
binary binary 5 binary binary 5
CREATE TABLE t1 (a int, b int);
CREATE TABLE t2 (a int, b int);
INSERT INTO t1 VALUES (1,1),(2,2);
INSERT INTO t2 VALUES (2,2),(3,3);
select t1.*,t2.* from t1 left join t2 on (t1.b=t2.b)
where collation(t2.a) = _utf8'binary' order by t1.a,t2.a;
a b a b
1 1 NULL NULL
2 2 2 2
select t1.*,t2.* from t1 left join t2 on (t1.b=t2.b)
where charset(t2.a) = _utf8'binary' order by t1.a,t2.a;
a b a b
1 1 NULL NULL
2 2 2 2
select t1.*,t2.* from t1 left join t2 on (t1.b=t2.b)
where coercibility(t2.a) = 2 order by t1.a,t2.a;
a b a b
1 1 NULL NULL
2 2 2 2
DROP TABLE t1, t2;
select SUBSTR('abcdefg',3,2); select SUBSTR('abcdefg',3,2);
SUBSTR('abcdefg',3,2) SUBSTR('abcdefg',3,2)
cd cd
......
...@@ -376,6 +376,20 @@ insert into t1 values (null); ...@@ -376,6 +376,20 @@ insert into t1 values (null);
select charset(a), collation(a), coercibility(a) from t1; select charset(a), collation(a), coercibility(a) from t1;
drop table t1; drop table t1;
select charset(null), collation(null), coercibility(null); select charset(null), collation(null), coercibility(null);
#
# Make sure OUTER JOIN is not replaced with a regular joun
#
CREATE TABLE t1 (a int, b int);
CREATE TABLE t2 (a int, b int);
INSERT INTO t1 VALUES (1,1),(2,2);
INSERT INTO t2 VALUES (2,2),(3,3);
select t1.*,t2.* from t1 left join t2 on (t1.b=t2.b)
where collation(t2.a) = _utf8'binary' order by t1.a,t2.a;
select t1.*,t2.* from t1 left join t2 on (t1.b=t2.b)
where charset(t2.a) = _utf8'binary' order by t1.a,t2.a;
select t1.*,t2.* from t1 left join t2 on (t1.b=t2.b)
where coercibility(t2.a) = 2 order by t1.a,t2.a;
DROP TABLE t1, t2;
# #
# test for SUBSTR # test for SUBSTR
......
...@@ -616,7 +616,8 @@ public: ...@@ -616,7 +616,8 @@ public:
Item_func_coercibility(Item *a) :Item_int_func(a) {} Item_func_coercibility(Item *a) :Item_int_func(a) {}
longlong val_int(); longlong val_int();
const char *func_name() const { return "coercibility"; } const char *func_name() const { return "coercibility"; }
void fix_length_and_dec() { max_length=10; } void fix_length_and_dec() { max_length=10; maybe_null= 0; }
table_map not_null_tables() const { return 0; }
}; };
class Item_func_locate :public Item_int_func class Item_func_locate :public Item_int_func
......
...@@ -641,7 +641,9 @@ public: ...@@ -641,7 +641,9 @@ public:
{ {
collation.set(system_charset_info); collation.set(system_charset_info);
max_length= 64 * collation.collation->mbmaxlen; // should be enough max_length= 64 * collation.collation->mbmaxlen; // should be enough
maybe_null= 0;
}; };
table_map not_null_tables() const { return 0; }
}; };
class Item_func_collation :public Item_str_func class Item_func_collation :public Item_str_func
...@@ -654,7 +656,9 @@ public: ...@@ -654,7 +656,9 @@ public:
{ {
collation.set(system_charset_info); collation.set(system_charset_info);
max_length= 64 * collation.collation->mbmaxlen; // should be enough max_length= 64 * collation.collation->mbmaxlen; // should be enough
maybe_null= 0;
}; };
table_map not_null_tables() const { return 0; }
}; };
class Item_func_crc32 :public Item_int_func class Item_func_crc32 :public Item_int_func
......
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