#At file:///home/kgeorge/mysql/work/B46175-5.1-bugteam/ based on revid:satya.bn@stripped
3294 Georgi Kodinov 2009-12-23
Bug #46175: NULL read_view and consistent read assertion
The optimizer must not continue executing the current query
if e.g. the storage engine reports an error.
This is somewhat hard to implement with Item::val_xxx()
because they do not have means to return error code.
This is why we need to check the thread's error state after
a call to one of the Item::val_xxx() methods.
Fixed store_key_item::copy_inner() to return an error state
if an error happened during the call to Item::save_in_field()
because it calls Item::val_xxx().
modified:
sql/sql_select.h
=== modified file 'sql/sql_select.h'
--- a/sql/sql_select.h 2009-11-03 17:45:52 +0000
+++ b/sql/sql_select.h 2009-12-23 12:02:55 +0000
@@ -709,6 +709,12 @@ public:
my_bitmap_map *old_map= dbug_tmp_use_all_columns(table,
table->write_set);
int res= item->save_in_field(to_field, 1);
+ /*
+ Item::save_in_field() may call Item::val_xxx(). And if this is a subquery
+ we need to check for errors executing it and react accordingly
+ */
+ if (table->in_use->is_error())
+ res= 3;
dbug_tmp_restore_column_map(table->write_set, old_map);
null_key= to_field->is_null() || item->null_value;
return (err != 0 || res > 2 ? STORE_KEY_FATAL : (store_key_result) res);
Attachment: [text/bzr-bundle] bzr/joro@sun.com-20091223120255-wpmpx6akim1xoycw.bundle