btr0btr.c:

  Fix bug: if the user created a prefix column key on a fixed length char column, then InnoDB claimed in CHECK TABLE that the table is corrupt
dict0dict.c:
  Fix bug 1151: if the user created a prefix column primary key on a fixed length char column, then InnoDB crashed in a simple SELECT
parent 20a1226c
...@@ -2376,8 +2376,15 @@ btr_index_rec_validate( ...@@ -2376,8 +2376,15 @@ btr_index_rec_validate(
type = dict_index_get_nth_type(index, i); type = dict_index_get_nth_type(index, i);
if (len != UNIV_SQL_NULL && dtype_is_fixed_size(type) if ((dict_index_get_nth_field(index, i)->prefix_len == 0
&& len != dtype_get_fixed_size(type)) { && len != UNIV_SQL_NULL && dtype_is_fixed_size(type)
&& len != dtype_get_fixed_size(type))
||
(dict_index_get_nth_field(index, i)->prefix_len > 0
&& len != UNIV_SQL_NULL && dtype_is_fixed_size(type)
&& len !=
dict_index_get_nth_field(index, i)->prefix_len)) {
fprintf(stderr, fprintf(stderr,
"InnoDB: Record in index %s in table %s, page %lu, at offset %lu\n" "InnoDB: Record in index %s in table %s, page %lu, at offset %lu\n"
"InnoDB: field %lu len is %lu, should be %lu\n", "InnoDB: field %lu len is %lu, should be %lu\n",
......
...@@ -1596,6 +1596,13 @@ dict_index_build_internal_clust( ...@@ -1596,6 +1596,13 @@ dict_index_build_internal_clust(
break; break;
} }
if (dict_index_get_nth_field(new_index, i)->prefix_len
> 0) {
new_index->trx_id_offset = 0;
break;
}
new_index->trx_id_offset += fixed_size; new_index->trx_id_offset += fixed_size;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment