diff options
Diffstat (limited to 'sql/sql_delete.cc')
-rw-r--r-- | sql/sql_delete.cc | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 00ebef89fa5..8ba293c82f9 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -274,6 +274,8 @@ multi_delete::initialize_tables(JOIN *join) /* We are going to delete from this table */ walk->table=tab->table; walk=walk->next; + if (tab == join->join_tab) + tab->table->no_keyread=1; } } } @@ -309,7 +311,6 @@ bool multi_delete::send_data(List<Item> &values) continue; table->file->position(table->record[0]); - int rl = table->file->ref_length; if (secure_counter < 0) { @@ -354,6 +355,10 @@ void multi_delete::send_error(uint errcode,const char *err) { /* First send error what ever it is ... */ ::send_error(&thd->net,errcode,err); + + /* reset used flags */ + delete_tables->table->no_keyread=0; + /* If nothing deleted return */ if (!deleted) return; @@ -397,7 +402,6 @@ int multi_delete::do_deletes (bool from_send_error) table_being_deleted=table_being_deleted->next, counter++) { TABLE *table = table_being_deleted->table; - int rl = table->file->ref_length; if (tempfiles[counter]->get(table)) { error=1; @@ -453,6 +457,9 @@ bool multi_delete::send_eof() thd->proc_info="deleting from reference tables"; int error = do_deletes(false); + /* reset used flags */ + delete_tables->table->no_keyread=0; + thd->proc_info="end"; if (error && error != -1) { |