Commit d72f05fc authored by Sergei Golubchik's avatar Sergei Golubchik

lp:736791 Crash in make_truncated_value_warningwith LEAST()/GREATEST/COALESCE

and a test case for lp:736370 Datetime functions in subquery context cause wrong result
parent 1cda2654
...@@ -1476,3 +1476,21 @@ Warning 1292 Truncated incorrect time value: '-596523:14:07' ...@@ -1476,3 +1476,21 @@ Warning 1292 Truncated incorrect time value: '-596523:14:07'
select convert_tz(timediff('0000-00-00 00:00:00', cast('2008-03-26 07:09:06' as datetime)), 'UTC', 'Europe/Moscow'); select convert_tz(timediff('0000-00-00 00:00:00', cast('2008-03-26 07:09:06' as datetime)), 'UTC', 'Europe/Moscow');
convert_tz(timediff('0000-00-00 00:00:00', cast('2008-03-26 07:09:06' as datetime)), 'UTC', 'Europe/Moscow') convert_tz(timediff('0000-00-00 00:00:00', cast('2008-03-26 07:09:06' as datetime)), 'UTC', 'Europe/Moscow')
NULL NULL
create table t1 (f1 integer, f2 date);
insert into t1 values (1,'2011-05-05'),(2,'2011-05-05'),(3,'2011-05-05'),(4,'2011-05-05'),(5,'2011-05-05');
select * from t1 where (f1, f2) in (select f1, makedate(2011 , 125) from t1);
f1 f2
1 2011-05-05
2 2011-05-05
3 2011-05-05
4 2011-05-05
5 2011-05-05
drop table t1;
create table t1 (f1 timestamp);
insert into t1 values ('0000-00-00 00:00:00');
select least(1, f1) from t1;
least(1, f1)
0000-00-00 00:00:00
Warnings:
Warning 1292 Incorrect datetime value: '1' for column 'f1' at row 1
drop table t1;
...@@ -916,3 +916,19 @@ drop table t1; ...@@ -916,3 +916,19 @@ drop table t1;
# #
select timediff('0000-00-00 00:00:00', cast('2008-03-26 07:09:06' as datetime)); select timediff('0000-00-00 00:00:00', cast('2008-03-26 07:09:06' as datetime));
select convert_tz(timediff('0000-00-00 00:00:00', cast('2008-03-26 07:09:06' as datetime)), 'UTC', 'Europe/Moscow'); select convert_tz(timediff('0000-00-00 00:00:00', cast('2008-03-26 07:09:06' as datetime)), 'UTC', 'Europe/Moscow');
#
# lp:736370 Datetime functions in subquery context cause wrong result and bogus warnings in mysql-5.1-micr
#
create table t1 (f1 integer, f2 date);
insert into t1 values (1,'2011-05-05'),(2,'2011-05-05'),(3,'2011-05-05'),(4,'2011-05-05'),(5,'2011-05-05');
select * from t1 where (f1, f2) in (select f1, makedate(2011 , 125) from t1);
drop table t1;
#
# lp:736791 Crash in make_truncated_value_warningwith LEAST()/GREATEST/COALESCE
#
create table t1 (f1 timestamp);
insert into t1 values ('0000-00-00 00:00:00');
select least(1, f1) from t1;
drop table t1;
...@@ -2221,6 +2221,7 @@ void Item_func_min_max::fix_length_and_dec() ...@@ -2221,6 +2221,7 @@ void Item_func_min_max::fix_length_and_dec()
decimals=0; decimals=0;
max_length=0; max_length=0;
maybe_null=0; maybe_null=0;
thd= current_thd;
cmp_type=args[0]->result_type(); cmp_type=args[0]->result_type();
for (uint i=0 ; i < arg_count ; i++) for (uint i=0 ; i < arg_count ; i++)
...@@ -2240,8 +2241,6 @@ void Item_func_min_max::fix_length_and_dec() ...@@ -2240,8 +2241,6 @@ void Item_func_min_max::fix_length_and_dec()
if (cmp_type == STRING_RESULT) if (cmp_type == STRING_RESULT)
{ {
agg_arg_charsets(collation, args, arg_count, MY_COLL_CMP_CONV, 1); agg_arg_charsets(collation, args, arg_count, MY_COLL_CMP_CONV, 1);
if (compare_as_dates)
thd= current_thd;
} }
else if ((cmp_type == DECIMAL_RESULT) || (cmp_type == INT_RESULT)) else if ((cmp_type == DECIMAL_RESULT) || (cmp_type == INT_RESULT))
max_length= my_decimal_precision_to_length_no_truncation(max_int_part + max_length= my_decimal_precision_to_length_no_truncation(max_int_part +
......
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