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
|
2001 2001 2001 2001
|
||||||
DROP TABLE t1;
|
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
|
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;
|
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 #
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--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:
|
protected:
|
||||||
Item *example;
|
Item *example;
|
||||||
table_map used_table_map;
|
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
|
index-based subquery engines to detect and remove the equality injected
|
||||||
by IN->EXISTS transformation.
|
by IN->EXISTS transformation.
|
||||||
For all other uses of Item_cache, cached_field doesn't matter.
|
|
||||||
*/
|
*/
|
||||||
Field *cached_field;
|
Field *cached_field;
|
||||||
enum enum_field_types cached_field_type;
|
enum enum_field_types cached_field_type;
|
||||||
@@ -3275,6 +3274,14 @@ public:
|
|||||||
{
|
{
|
||||||
return (value_cached || cache_value()) && !null_value;
|
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 void store(Item *item);
|
||||||
virtual bool cache_value()= 0;
|
virtual bool cache_value()= 0;
|
||||||
bool basic_const_item() const
|
bool basic_const_item() const
|
||||||
|
@@ -1208,9 +1208,12 @@ get_year_value(THD *thd, Item ***item_arg, Item **cache_arg,
|
|||||||
value of 2000.
|
value of 2000.
|
||||||
*/
|
*/
|
||||||
Item *real_item= item->real_item();
|
Item *real_item= item->real_item();
|
||||||
if (!(real_item->type() == Item::FIELD_ITEM &&
|
Field *field= NULL;
|
||||||
((Item_field *)real_item)->field->type() == MYSQL_TYPE_YEAR &&
|
if (real_item->type() == Item::FIELD_ITEM)
|
||||||
((Item_field *)real_item)->field->field_length == 4))
|
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)
|
if (value < 70)
|
||||||
value+= 100;
|
value+= 100;
|
||||||
|
Reference in New Issue
Block a user