Commit 82973c72 authored by sergefp@pylon64.mylan's avatar sergefp@pylon64.mylan

Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-5.0-opt

into  mysql.com:/home/psergey/mysql-5.0-bug29740
parents 17654758 651e6ffa
...@@ -114,6 +114,26 @@ int ha_heap::close(void) ...@@ -114,6 +114,26 @@ int ha_heap::close(void)
} }
/*
Create a copy of this table
DESCRIPTION
Do same as default implementation but use file->s->name instead of
table->s->path. This is needed by Windows where the clone() call sees
'/'-delimited path in table->s->path, while ha_peap::open() was called
with '\'-delimited path.
*/
handler *ha_heap::clone(MEM_ROOT *mem_root)
{
handler *new_handler= get_new_handler(table, mem_root, table->s->db_type);
if (new_handler && !new_handler->ha_open(file->s->name, table->db_stat,
HA_OPEN_IGNORE_IF_LOCKED))
return new_handler;
return NULL;
}
/* /*
Compute which keys to use for scanning Compute which keys to use for scanning
......
...@@ -32,6 +32,7 @@ class ha_heap: public handler ...@@ -32,6 +32,7 @@ class ha_heap: public handler
public: public:
ha_heap(TABLE *table); ha_heap(TABLE *table);
~ha_heap() {} ~ha_heap() {}
handler *clone(MEM_ROOT *mem_root);
const char *table_type() const const char *table_type() const
{ {
return (table->in_use->variables.sql_mode & MODE_MYSQL323) ? return (table->in_use->variables.sql_mode & MODE_MYSQL323) ?
......
...@@ -1131,6 +1131,14 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler) ...@@ -1131,6 +1131,14 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler)
THD *thd= current_thd; THD *thd= current_thd;
if (!(file= head->file->clone(thd->mem_root))) if (!(file= head->file->clone(thd->mem_root)))
{ {
/*
Manually set the error flag. Note: there seems to be quite a few
places where a failure could cause the server to "hang" the client by
sending no response to a query. ATM those are not real errors because
the storage engine calls in question happen to never fail with the
existing storage engines.
*/
thd->net.report_error= 1;
/* Caller will free the memory */ /* Caller will free the memory */
goto failure; goto failure;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment