diff options
author | unknown <istruewing@stella.local> | 2008-02-06 21:26:05 +0100 |
---|---|---|
committer | unknown <istruewing@stella.local> | 2008-02-06 21:26:05 +0100 |
commit | f134b62c563a7ea57694672254ff9948ec368586 (patch) | |
tree | 88af1d4bc9779c63819ace88d5823801766eaf45 /storage/myisam | |
parent | 629b355b4a2bc051e538244410edc1e3d0933a65 (diff) | |
download | mariadb-git-f134b62c563a7ea57694672254ff9948ec368586.tar.gz |
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.
storage/myisam/ha_myisam.cc:
Bug#31331 - MyISAM or Merge Table upgrade incompatibility with 5.1
Added relaxed check for blob prefix key part.
Diffstat (limited to 'storage/myisam')
-rw-r--r-- | storage/myisam/ha_myisam.cc | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc index dfb36700288..4486d317ae0 100644 --- a/storage/myisam/ha_myisam.cc +++ b/storage/myisam/ha_myisam.cc @@ -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) |