@@ -33,6 +33,7 @@ int heap_create(const char *name, HP_CREATE_INFO *create_info,
3333 uint keys = create_info -> keys ;
3434 ulong min_records = create_info -> min_records ;
3535 ulong max_records = create_info -> max_records ;
36+ uint visible_offset ;
3637 DBUG_ENTER ("heap_create" );
3738
3839 if (!create_info -> internal_table )
@@ -58,9 +59,9 @@ int heap_create(const char *name, HP_CREATE_INFO *create_info,
5859
5960 /*
6061 We have to store sometimes uchar* del_link in records,
61- so the record length should be at least sizeof(uchar*)
62+ so the visible_offset must be least at sizeof(uchar*)
6263 */
63- set_if_bigger (reclength , sizeof (uchar * ));
64+ visible_offset = max (reclength , sizeof (char * ));
6465
6566 for (i = key_segs = max_length = 0 , keyinfo = keydef ; i < keys ; i ++ , keyinfo ++ )
6667 {
@@ -152,7 +153,7 @@ int heap_create(const char *name, HP_CREATE_INFO *create_info,
152153 share -> keydef = (HP_KEYDEF * ) (share + 1 );
153154 share -> key_stat_version = 1 ;
154155 keyseg = (HA_KEYSEG * ) (share -> keydef + keys );
155- init_block (& share -> block , reclength + 1 , min_records , max_records );
156+ init_block (& share -> block , visible_offset + 1 , min_records , max_records );
156157/* Fix keys */
157158 memcpy (share -> keydef , keydef , (size_t ) (sizeof (keydef [0 ]) * keys ));
158159 for (i = 0 , keyinfo = share -> keydef ; i < keys ; i ++ , keyinfo ++ )
@@ -192,6 +193,7 @@ int heap_create(const char *name, HP_CREATE_INFO *create_info,
192193 share -> max_table_size = create_info -> max_table_size ;
193194 share -> data_length = share -> index_length = 0 ;
194195 share -> reclength = reclength ;
196+ share -> visible = visible_offset ;
195197 share -> blength = 1 ;
196198 share -> keys = keys ;
197199 share -> max_key_length = max_length ;
0 commit comments