mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
bug #702 - ALTER TABLE tm UNION=(t1,t2) doesn't work if t1.MYD is compressed
myisammrg/myrg_open.c: never mark merge table as readonly even if all underlying myisam tables are readonly, otherwise ALTER TABLE merge UNION=(t1,t2,t3,...) will not work sql/handler.cc: map EACCES to ER_OPEN_AS_READONLY. can only happen on modifying merge table that has (some) read-only myisam tables
This commit is contained in:
@@ -33,7 +33,7 @@
|
|||||||
MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
||||||
{
|
{
|
||||||
int save_errno,i,errpos;
|
int save_errno,i,errpos;
|
||||||
uint files,dir_length,length,options, key_parts;
|
uint files,dir_length,length,key_parts;
|
||||||
ulonglong file_offset;
|
ulonglong file_offset;
|
||||||
char name_buff[FN_REFLEN*2],buff[FN_REFLEN],*end;
|
char name_buff[FN_REFLEN*2],buff[FN_REFLEN],*end;
|
||||||
MYRG_INFO info,*m_info;
|
MYRG_INFO info,*m_info;
|
||||||
@@ -110,13 +110,11 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
|||||||
}
|
}
|
||||||
errpos=2;
|
errpos=2;
|
||||||
|
|
||||||
options= (uint) ~0;
|
|
||||||
for (i=files ; i-- > 0 ; )
|
for (i=files ; i-- > 0 ; )
|
||||||
{
|
{
|
||||||
uint j;
|
uint j;
|
||||||
m_info->open_tables[i].table=isam;
|
m_info->open_tables[i].table=isam;
|
||||||
m_info->options|=isam->s->options;
|
m_info->options|=isam->s->options;
|
||||||
options&=isam->s->options;
|
|
||||||
m_info->records+=isam->state->records;
|
m_info->records+=isam->state->records;
|
||||||
m_info->del+=isam->state->del;
|
m_info->del+=isam->state->del;
|
||||||
m_info->data_file_length+=isam->state->data_file_length;
|
m_info->data_file_length+=isam->state->data_file_length;
|
||||||
@@ -125,9 +123,8 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
|||||||
if (i)
|
if (i)
|
||||||
isam=(MI_INFO*) (isam->open_list.next->data);
|
isam=(MI_INFO*) (isam->open_list.next->data);
|
||||||
}
|
}
|
||||||
/* Don't force readonly if not all tables are readonly */
|
/* Don't mark table readonly, for ALTER TABLE ... UNION=(...) to work */
|
||||||
if (! (options & (HA_OPTION_COMPRESS_RECORD | HA_OPTION_READ_ONLY_DATA)))
|
m_info->options&= ~(HA_OPTION_COMPRESS_RECORD | HA_OPTION_READ_ONLY_DATA);
|
||||||
m_info->options&= ~(HA_OPTION_COMPRESS_RECORD | HA_OPTION_READ_ONLY_DATA);
|
|
||||||
|
|
||||||
/* Fix fileinfo for easyer debugging (actually set by rrnd) */
|
/* Fix fileinfo for easyer debugging (actually set by rrnd) */
|
||||||
file_offset=0;
|
file_offset=0;
|
||||||
|
@@ -801,6 +801,9 @@ void handler::print_error(int error, myf errflag)
|
|||||||
|
|
||||||
int textno=ER_GET_ERRNO;
|
int textno=ER_GET_ERRNO;
|
||||||
switch (error) {
|
switch (error) {
|
||||||
|
case EACCES:
|
||||||
|
textno=ER_OPEN_AS_READONLY;
|
||||||
|
break;
|
||||||
case EAGAIN:
|
case EAGAIN:
|
||||||
textno=ER_FILE_USED;
|
textno=ER_FILE_USED;
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user