mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
[pb problem]: ha_heap->clone() fails on windows because of mess with
'/' and '\' in path delimiters: - Fix this by creating new handler with exactly the same path line as was passed to ha_create/ha_open. sql/opt_range.cc: Set thd->net.report_error on handler::clone() failure
This commit is contained in:
@ -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
|
|||||||
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)
|
|||||||
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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user