#At file:///home/ram/mysql/mysql-5.1-bugteam/ based on revid:chad@stripped
2770 Ramil Kalimullin 2009-02-05 [merge]
Auto-merge
modified:
mysql-test/r/func_misc.result
mysql-test/t/func_misc.test
sql/item.cc
=== modified file 'mysql-test/r/func_misc.result'
--- a/mysql-test/r/func_misc.result 2008-07-10 03:24:46 +0000
+++ b/mysql-test/r/func_misc.result 2009-02-05 07:45:30 +0000
@@ -324,6 +324,11 @@ select @my_uuid_date - @my_uuid_syntheti
@my_uuid_date - @my_uuid_synthetic
0
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
select connection_id() > 0;
connection_id() > 0
=== modified file 'mysql-test/t/func_misc.test'
--- a/mysql-test/t/func_misc.test 2008-07-10 03:24:46 +0000
+++ b/mysql-test/t/func_misc.test 2009-02-05 07:45:30 +0000
@@ -445,6 +445,15 @@ select @my_uuid_date - @my_uuid_syntheti
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
#
=== modified file 'sql/item.cc'
--- a/sql/item.cc 2009-01-31 01:08:41 +0000
+++ b/sql/item.cc 2009-02-05 07:45:30 +0000
@@ -1274,13 +1274,26 @@ Item::Type Item_name_const::type() const
valid_args guarantees value_item->basic_const_item(); if type is
FUNC_ITEM, then we have a fudged item_func_neg() on our hands
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 ?
- (((value_item->type() == FUNC_ITEM) &&
- (((Item_func *) value_item)->functype() == Item_func::NEG_FUNC)) ?
- ((Item_func *) value_item)->key_item()->type() :
- value_item->type()) :
- NULL_ITEM;
+ if (!valid_args)
+ return NULL_ITEM;
+ Item::Type value_type= value_item->type();
+ if (value_type == FUNC_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;
}
| Thread |
|---|
| • bzr commit into mysql-5.1-bugteam branch (ramil:2770) | Ramil Kalimullin | 5 Feb |