diff options
-rw-r--r-- | mysql-test/r/func_test.result | 6 | ||||
-rw-r--r-- | mysql-test/t/func_test.test | 8 | ||||
-rw-r--r-- | sql/item_func.cc | 2 |
3 files changed, 16 insertions, 0 deletions
diff --git a/mysql-test/r/func_test.result b/mysql-test/r/func_test.result index 4bb2e067f9c..7d0a76424fe 100644 --- a/mysql-test/r/func_test.result +++ b/mysql-test/r/func_test.result @@ -165,3 +165,9 @@ SELECT f_acc.rank, a1.rank, a2.rank FROM t1 LEFT JOIN t1 f1 ON (f1.access_id=1 rank rank rank 2 2 NULL DROP TABLE t1,t2; +CREATE TABLE t1 (d varchar(6), k int); +INSERT INTO t1 VALUES (NULL, 2); +SELECT GREATEST(d,d) FROM t1 WHERE k=2; +GREATEST(d,d) +NULL +DROP TABLE t1; diff --git a/mysql-test/t/func_test.test b/mysql-test/t/func_test.test index 1559fef7e6e..0d055549866 100644 --- a/mysql-test/t/func_test.test +++ b/mysql-test/t/func_test.test @@ -85,3 +85,11 @@ CREATE TABLE t2 ( access_id smallint(6) NOT NULL default '0', name varchar(20 INSERT INTO t2 VALUES (1,'Everyone',2),(2,'Help',3),(3,'Customer Support',1); SELECT f_acc.rank, a1.rank, a2.rank FROM t1 LEFT JOIN t1 f1 ON (f1.access_id=1 AND f1.faq_group_id = t1.faq_group_id) LEFT JOIN t2 a1 ON (a1.access_id = f1.access_id) LEFT JOIN t1 f2 ON (f2.access_id=3 AND f2.faq_group_id = t1.faq_group_id) LEFT JOIN t2 a2 ON (a2.access_id = f2.access_id), t2 f_acc WHERE LEAST(a1.rank,a2.rank) = f_acc.rank; DROP TABLE t1,t2; + +# +# Test for GREATEST() and LEAST() bug, which segfaulted 4.1.1 server +# +CREATE TABLE t1 (d varchar(6), k int); +INSERT INTO t1 VALUES (NULL, 2); +SELECT GREATEST(d,d) FROM t1 WHERE k=2; +DROP TABLE t1; diff --git a/sql/item_func.cc b/sql/item_func.cc index 4c3db4b3373..f90fcd5149e 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1068,6 +1068,8 @@ String *Item_func_min_max::val_str(String *str) } } } + if (!res) // If NULL + return 0; res->set_charset(collation.collation); return res; } |