diff options
author | Sergei Golubchik <sergii@pisem.net> | 2012-05-02 15:22:47 +0200 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2012-05-02 15:22:47 +0200 |
commit | beec2a2b1d79eb7f689ee083fe68d08682b14300 (patch) | |
tree | 27b220f4a99673f17901d874f138f9bcde91f061 | |
parent | 6920491587b9ef4c1e46b0401038244c3bb64c7a (diff) | |
download | mariadb-git-beec2a2b1d79eb7f689ee083fe68d08682b14300.tar.gz |
MDEV-241 lp:992722 - Server crashes in get_datetime_value
Create an Item_cache based on item's cmp_type, not result_type in
subselect_engine.
Use result_field in Item_cache_temporal::cache_value(),
just like all other Item_cache*::cache_value() do.
-rw-r--r-- | mysql-test/r/in_datetime_241.result | 5 | ||||
-rw-r--r-- | mysql-test/t/in_datetime_241.test | 9 | ||||
-rw-r--r-- | sql/item.cc | 2 | ||||
-rw-r--r-- | sql/item_subselect.cc | 2 |
4 files changed, 16 insertions, 2 deletions
diff --git a/mysql-test/r/in_datetime_241.result b/mysql-test/r/in_datetime_241.result new file mode 100644 index 00000000000..2c5b4bd8db1 --- /dev/null +++ b/mysql-test/r/in_datetime_241.result @@ -0,0 +1,5 @@ +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( a DATE ); +SELECT * FROM t1 WHERE ( SELECT a FROM t1 ) IN ('2012-04-25','2012-04-26'); +a +DROP TABLE t1; diff --git a/mysql-test/t/in_datetime_241.test b/mysql-test/t/in_datetime_241.test new file mode 100644 index 00000000000..f95a456f5e2 --- /dev/null +++ b/mysql-test/t/in_datetime_241.test @@ -0,0 +1,9 @@ +# +# MDEV-241 lp:992722 - Server crashes in get_datetime_value +# +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings +CREATE TABLE t1 ( a DATE ); +SELECT * FROM t1 WHERE ( SELECT a FROM t1 ) IN ('2012-04-25','2012-04-26'); +DROP TABLE t1; diff --git a/sql/item.cc b/sql/item.cc index 70c5798eb6c..4e57221c0a6 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -8329,7 +8329,7 @@ bool Item_cache_temporal::cache_value() value_cached= true; MYSQL_TIME ltime; - if (example->get_date(<ime, TIME_FUZZY_DATE)) + if (example->get_date_result(<ime, TIME_FUZZY_DATE)) value=0; else value= pack_time(<ime); diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index 1ca3e5ceda7..d6a77d6ff41 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -2893,7 +2893,7 @@ void subselect_engine::set_row(List<Item> &item_list, Item_cache **row) item->decimals= sel_item->decimals; item->unsigned_flag= sel_item->unsigned_flag; maybe_null= sel_item->maybe_null; - if (!(row[i]= Item_cache::get_cache(sel_item))) + if (!(row[i]= Item_cache::get_cache(sel_item, sel_item->cmp_type()))) return; row[i]->setup(sel_item); //psergey-backport-timours: row[i]->store(sel_item); |