mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 14:02:32 +01:00
backport #42014, commit 65523
This commit is contained in:
parent
4c12499e06
commit
798c24110a
3 changed files with 33 additions and 6 deletions
|
@ -319,4 +319,9 @@ select @my_uuid_date - @my_uuid_synthetic;
|
||||||
@my_uuid_date - @my_uuid_synthetic
|
@my_uuid_date - @my_uuid_synthetic
|
||||||
0
|
0
|
||||||
set @@session.time_zone=@save_tz;
|
set @@session.time_zone=@save_tz;
|
||||||
|
CREATE TABLE t1 (a DATE);
|
||||||
|
SELECT * FROM t1 WHERE a = NAME_CONST('reportDate',
|
||||||
|
_binary'2009-01-09' COLLATE 'binary');
|
||||||
|
a
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
|
|
@ -436,5 +436,14 @@ select @my_uuid_date - @my_uuid_synthetic;
|
||||||
|
|
||||||
set @@session.time_zone=@save_tz;
|
set @@session.time_zone=@save_tz;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#42014: Crash, name_const with collate
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a DATE);
|
||||||
|
SELECT * FROM t1 WHERE a = NAME_CONST('reportDate',
|
||||||
|
_binary'2009-01-09' COLLATE 'binary');
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
|
|
25
sql/item.cc
25
sql/item.cc
|
@ -1243,13 +1243,26 @@ Item::Type Item_name_const::type() const
|
||||||
valid_args guarantees value_item->basic_const_item(); if type is
|
valid_args guarantees value_item->basic_const_item(); if type is
|
||||||
FUNC_ITEM, then we have a fudged item_func_neg() on our hands
|
FUNC_ITEM, then we have a fudged item_func_neg() on our hands
|
||||||
and return the underlying type.
|
and return the underlying type.
|
||||||
|
For Item_func_set_collation()
|
||||||
|
e.g. NAME_CONST('name', 'value' COLLATE collation) we return its
|
||||||
|
'value' argument type.
|
||||||
*/
|
*/
|
||||||
return valid_args ?
|
if (!valid_args)
|
||||||
(((value_item->type() == FUNC_ITEM) &&
|
return NULL_ITEM;
|
||||||
(((Item_func *) value_item)->functype() == Item_func::NEG_FUNC)) ?
|
Item::Type value_type= value_item->type();
|
||||||
((Item_func *) value_item)->key_item()->type() :
|
if (value_type == FUNC_ITEM)
|
||||||
value_item->type()) :
|
{
|
||||||
NULL_ITEM;
|
/*
|
||||||
|
The second argument of NAME_CONST('name', 'value') must be
|
||||||
|
a simple constant item or a NEG_FUNC/COLLATE_FUNC.
|
||||||
|
*/
|
||||||
|
DBUG_ASSERT(((Item_func *) value_item)->functype() ==
|
||||||
|
Item_func::NEG_FUNC ||
|
||||||
|
((Item_func *) value_item)->functype() ==
|
||||||
|
Item_func::COLLATE_FUNC);
|
||||||
|
return ((Item_func *) value_item)->key_item()->type();
|
||||||
|
}
|
||||||
|
return value_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue