diff options
-rw-r--r-- | mysql-test/r/func_math.result | 6 | ||||
-rw-r--r-- | mysql-test/t/func_math.test | 10 | ||||
-rw-r--r-- | sql/item_func.cc | 1 |
3 files changed, 17 insertions, 0 deletions
diff --git a/mysql-test/r/func_math.result b/mysql-test/r/func_math.result index b7ba2273956..fba274b9bb1 100644 --- a/mysql-test/r/func_math.result +++ b/mysql-test/r/func_math.result @@ -170,6 +170,12 @@ insert into t1 values (1); select rand(i) from t1; ERROR HY000: Incorrect arguments to RAND drop table t1; +create table t1 (a varchar(90), ts datetime not null, index (a)) engine=innodb default charset=utf8; +insert into t1 values ('http://www.foo.com/', now()); +select a from t1 where a='http://www.foo.com/' order by abs(timediff(ts, 0)); +a +http://www.foo.com/ +drop table t1; set sql_mode='traditional'; select ln(-1); ln(-1) diff --git a/mysql-test/t/func_math.test b/mysql-test/t/func_math.test index 2935f24f2d7..24dd18daab1 100644 --- a/mysql-test/t/func_math.test +++ b/mysql-test/t/func_math.test @@ -116,6 +116,16 @@ insert into t1 values (1); select rand(i) from t1; drop table t1; +# +# Bug #14009: use of abs() on null value causes problems with filesort +# +# InnoDB is required to reproduce the fault, but it is okay if we default to +# MyISAM when testing. +create table t1 (a varchar(90), ts datetime not null, index (a)) engine=innodb default charset=utf8; +insert into t1 values ('http://www.foo.com/', now()); +select a from t1 where a='http://www.foo.com/' order by abs(timediff(ts, 0)); +drop table t1; + # End of 4.1 tests # diff --git a/sql/item_func.cc b/sql/item_func.cc index a5e1c37cd18..255bfcae4ca 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -636,6 +636,7 @@ void Item_func_num1::fix_num_length_and_dec() { decimals= args[0]->decimals; max_length= args[0]->max_length; + maybe_null= 1; } |