summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2017-01-14 21:23:00 +0100
committerSergei Golubchik <serg@mariadb.org>2017-01-15 00:12:16 +0100
commitb948b5f7c64c6430d98dc31b7e9f71d990b40ec1 (patch)
treeed698c6932c229d85d85c9cde10cdd218fec64d9
parent798fcb541698cbf51f1ee33f44b023c11dc2b784 (diff)
downloadmariadb-git-b948b5f7c64c6430d98dc31b7e9f71d990b40ec1.tar.gz
bugfix: Item_func_min_max stored thd internally
It was used for get_datetime_value() and for thd->is_error(). But in fact, get_datetime_value() never used thd argument, because the cache ptr argument was NULL. And thd->is_error() check was not needed at that place at all.
-rw-r--r--mysql-test/suite/vcol/r/wrong_arena.result15
-rw-r--r--mysql-test/suite/vcol/t/wrong_arena.test11
-rw-r--r--sql/item_func.cc7
-rw-r--r--sql/item_func.h1
4 files changed, 28 insertions, 6 deletions
diff --git a/mysql-test/suite/vcol/r/wrong_arena.result b/mysql-test/suite/vcol/r/wrong_arena.result
index af41ea89ab5..172b59d6c4c 100644
--- a/mysql-test/suite/vcol/r/wrong_arena.result
+++ b/mysql-test/suite/vcol/r/wrong_arena.result
@@ -44,3 +44,18 @@ Warning 1292 Incorrect datetime value: '1'
Warning 1292 Incorrect datetime value: '1'
Warning 1292 Incorrect datetime value: '2'
drop table t1;
+create table t1 (a datetime,
+b datetime as (least(a,1)) # Item_func_min_max::get_date
+);
+insert t1 (a) values ('2010-10-10 10:10:10');
+select * from t1;
+a b
+2010-10-10 10:10:10 0000-00-00 00:00:00
+Warnings:
+Warning 1292 Incorrect datetime value: '1'
+select * from t1;
+a b
+2010-10-10 10:10:10 0000-00-00 00:00:00
+Warnings:
+Warning 1292 Incorrect datetime value: '1'
+drop table t1;
diff --git a/mysql-test/suite/vcol/t/wrong_arena.test b/mysql-test/suite/vcol/t/wrong_arena.test
index 4276437f446..484f1fe685d 100644
--- a/mysql-test/suite/vcol/t/wrong_arena.test
+++ b/mysql-test/suite/vcol/t/wrong_arena.test
@@ -22,3 +22,14 @@ disconnect con1;
connection default;
select * from t1;
drop table t1;
+
+connect con1, localhost, root;
+create table t1 (a datetime,
+ b datetime as (least(a,1)) # Item_func_min_max::get_date
+);
+insert t1 (a) values ('2010-10-10 10:10:10');
+select * from t1;
+disconnect con1;
+connection default;
+select * from t1;
+drop table t1;
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 89d3cd9e32a..cfccd66ea8a 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -2856,7 +2856,6 @@ void Item_func_min_max::fix_length_and_dec()
decimals=0;
max_length=0;
maybe_null=0;
- thd= current_thd;
cmp_type=args[0]->result_type();
for (uint i=0 ; i < arg_count ; i++)
@@ -2929,13 +2928,11 @@ bool Item_func_min_max::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
{
Item **arg= args + i;
bool is_null;
- longlong res= get_datetime_value(thd, &arg, 0, compare_as_dates, &is_null);
+ longlong res= get_datetime_value(0, &arg, 0, compare_as_dates, &is_null);
/* Check if we need to stop (because of error or KILL) and stop the loop */
- if (thd->is_error() || args[i]->null_value)
- {
+ if (args[i]->null_value)
return (null_value= 1);
- }
if (i == 0 || (res < min_max ? cmp_sign : -cmp_sign) > 0)
min_max= res;
diff --git a/sql/item_func.h b/sql/item_func.h
index 0da38e22c7f..d60801745fe 100644
--- a/sql/item_func.h
+++ b/sql/item_func.h
@@ -1068,7 +1068,6 @@ class Item_func_min_max :public Item_func
int cmp_sign;
/* An item used for issuing warnings while string to DATETIME conversion. */
Item *compare_as_dates;
- THD *thd;
protected:
enum_field_types cached_field_type;
public: