mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge fix for Bug#59211 to mysql-5.5-security
This commit is contained in:
@@ -341,4 +341,18 @@ ta_y s tb_y s
|
||||
2001 2001 2001 2001
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #59211: Select Returns Different Value for min(year) Function
|
||||
#
|
||||
CREATE TABLE t1(c1 YEAR(4));
|
||||
INSERT INTO t1 VALUES (1901),(2155),(0000);
|
||||
SELECT * FROM t1;
|
||||
c1
|
||||
1901
|
||||
2155
|
||||
0000
|
||||
SELECT COUNT(*) AS total_rows, MIN(c1) AS min_value, MAX(c1) FROM t1;
|
||||
total_rows min_value MAX(c1)
|
||||
3 0 2155
|
||||
DROP TABLE t1;
|
||||
#
|
||||
End of 5.1 tests
|
||||
|
@@ -149,6 +149,16 @@ SELECT ta.y AS ta_y, ta.s, tb.y AS tb_y, tb.s FROM t1 ta, t1 tb HAVING ta_y = tb
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug #59211: Select Returns Different Value for min(year) Function
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1(c1 YEAR(4));
|
||||
INSERT INTO t1 VALUES (1901),(2155),(0000);
|
||||
SELECT * FROM t1;
|
||||
SELECT COUNT(*) AS total_rows, MIN(c1) AS min_value, MAX(c1) FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
13
sql/item.h
13
sql/item.h
@@ -3203,11 +3203,10 @@ class Item_cache: public Item_basic_constant
|
||||
protected:
|
||||
Item *example;
|
||||
table_map used_table_map;
|
||||
/*
|
||||
Field that this object will get value from. This is set/used by
|
||||
/**
|
||||
Field that this object will get value from. This is used by
|
||||
index-based subquery engines to detect and remove the equality injected
|
||||
by IN->EXISTS transformation.
|
||||
For all other uses of Item_cache, cached_field doesn't matter.
|
||||
*/
|
||||
Field *cached_field;
|
||||
enum enum_field_types cached_field_type;
|
||||
@@ -3275,6 +3274,14 @@ public:
|
||||
{
|
||||
return (value_cached || cache_value()) && !null_value;
|
||||
}
|
||||
|
||||
/**
|
||||
If this item caches a field value, return pointer to underlying field.
|
||||
|
||||
@return Pointer to field, or NULL if this is not a cache for a field value.
|
||||
*/
|
||||
Field* field() { return cached_field; }
|
||||
|
||||
virtual void store(Item *item);
|
||||
virtual bool cache_value()= 0;
|
||||
bool basic_const_item() const
|
||||
|
@@ -1208,9 +1208,12 @@ get_year_value(THD *thd, Item ***item_arg, Item **cache_arg,
|
||||
value of 2000.
|
||||
*/
|
||||
Item *real_item= item->real_item();
|
||||
if (!(real_item->type() == Item::FIELD_ITEM &&
|
||||
((Item_field *)real_item)->field->type() == MYSQL_TYPE_YEAR &&
|
||||
((Item_field *)real_item)->field->field_length == 4))
|
||||
Field *field= NULL;
|
||||
if (real_item->type() == Item::FIELD_ITEM)
|
||||
field= ((Item_field *)real_item)->field;
|
||||
else if (real_item->type() == Item::CACHE_ITEM)
|
||||
field= ((Item_cache *)real_item)->field();
|
||||
if (!(field && field->type() == MYSQL_TYPE_YEAR && field->field_length == 4))
|
||||
{
|
||||
if (value < 70)
|
||||
value+= 100;
|
||||
|
Reference in New Issue
Block a user