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)
|
||||
{
|
||||
int save_errno,i,errpos;
|
||||
uint files,dir_length,length,options, key_parts;
|
||||
uint files,dir_length,length,key_parts;
|
||||
ulonglong file_offset;
|
||||
char name_buff[FN_REFLEN*2],buff[FN_REFLEN],*end;
|
||||
MYRG_INFO info,*m_info;
|
||||
@@ -110,13 +110,11 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
||||
}
|
||||
errpos=2;
|
||||
|
||||
options= (uint) ~0;
|
||||
for (i=files ; i-- > 0 ; )
|
||||
{
|
||||
uint j;
|
||||
m_info->open_tables[i].table=isam;
|
||||
m_info->options|=isam->s->options;
|
||||
options&=isam->s->options;
|
||||
m_info->records+=isam->state->records;
|
||||
m_info->del+=isam->state->del;
|
||||
m_info->data_file_length+=isam->state->data_file_length;
|
||||
@@ -125,8 +123,7 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
||||
if (i)
|
||||
isam=(MI_INFO*) (isam->open_list.next->data);
|
||||
}
|
||||
/* Don't force readonly if not all tables are readonly */
|
||||
if (! (options & (HA_OPTION_COMPRESS_RECORD | HA_OPTION_READ_ONLY_DATA)))
|
||||
/* Don't mark table readonly, for ALTER TABLE ... UNION=(...) to work */
|
||||
m_info->options&= ~(HA_OPTION_COMPRESS_RECORD | HA_OPTION_READ_ONLY_DATA);
|
||||
|
||||
/* Fix fileinfo for easyer debugging (actually set by rrnd) */
|
||||
|
@@ -801,6 +801,9 @@ void handler::print_error(int error, myf errflag)
|
||||
|
||||
int textno=ER_GET_ERRNO;
|
||||
switch (error) {
|
||||
case EACCES:
|
||||
textno=ER_OPEN_AS_READONLY;
|
||||
break;
|
||||
case EAGAIN:
|
||||
textno=ER_FILE_USED;
|
||||
break;
|
||||
|
Reference in New Issue
Block a user