mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
Bug#31331 - MyISAM or Merge Table upgrade incompatibility with 5.1
A table with BLOB/TEXT prefix key part, created with version 4.1, could not be opened by a 5.1 server. The routine check at table open, if the frm file matches the MyISAM table, was too picky regarding old and new implementation of such keys. Added relaxed check for blob prefix key part. No test case. It requires to create a table in 4.1 and open it in 5.1.
This commit is contained in:
parent
6053cfc5e6
commit
c37d9d4cac
1 changed files with 20 additions and 1 deletions
|
@ -397,7 +397,26 @@ int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo,
|
|||
}
|
||||
for (j= t1_keyinfo[i].keysegs; j--;)
|
||||
{
|
||||
if (t1_keysegs[j].type != t2_keysegs[j].type ||
|
||||
uint8 t1_keysegs_j__type= t1_keysegs[j].type;
|
||||
|
||||
/*
|
||||
Table migration from 4.1 to 5.1. In 5.1 a *TEXT key part is
|
||||
always HA_KEYTYPE_VARTEXT2. In 4.1 we had only the equivalent of
|
||||
HA_KEYTYPE_VARTEXT1. Since we treat both the same on MyISAM
|
||||
level, we can ignore a mismatch between these types.
|
||||
*/
|
||||
if ((t1_keysegs[j].flag & HA_BLOB_PART) &&
|
||||
(t2_keysegs[j].flag & HA_BLOB_PART))
|
||||
{
|
||||
if ((t1_keysegs_j__type == HA_KEYTYPE_VARTEXT2) &&
|
||||
(t2_keysegs[j].type == HA_KEYTYPE_VARTEXT1))
|
||||
t1_keysegs_j__type= HA_KEYTYPE_VARTEXT1;
|
||||
else if ((t1_keysegs_j__type == HA_KEYTYPE_VARBINARY2) &&
|
||||
(t2_keysegs[j].type == HA_KEYTYPE_VARBINARY1))
|
||||
t1_keysegs_j__type= HA_KEYTYPE_VARBINARY1;
|
||||
}
|
||||
|
||||
if (t1_keysegs_j__type != t2_keysegs[j].type ||
|
||||
t1_keysegs[j].language != t2_keysegs[j].language ||
|
||||
t1_keysegs[j].null_bit != t2_keysegs[j].null_bit ||
|
||||
t1_keysegs[j].length != t2_keysegs[j].length)
|
||||
|
|
Loading…
Reference in a new issue