Commit c9e3fd31 authored by unknown's avatar unknown

Merge stella.local:/home2/mydev/mysql-5.1-ateam

into  stella.local:/home2/mydev/mysql-5.1-axmrg

parents 2fd9ece9 90133111
...@@ -2092,6 +2092,22 @@ sub environment_setup () { ...@@ -2092,6 +2092,22 @@ sub environment_setup () {
$ENV{'EXAMPLE_PLUGIN_OPT'}= $ENV{'EXAMPLE_PLUGIN_OPT'}=
($lib_example_plugin ? "--plugin_dir=" . dirname($lib_example_plugin) : ""); ($lib_example_plugin ? "--plugin_dir=" . dirname($lib_example_plugin) : "");
# ----------------------------------------------------
# Setup env so childs can execute myisampack and myisamchk
# ----------------------------------------------------
$ENV{'MYISAMCHK'}= mtr_native_path(mtr_exe_exists(
vs_config_dirs('storage/myisam', 'myisamchk'),
vs_config_dirs('myisam', 'myisamchk'),
"$path_client_bindir/myisamchk",
"$glob_basedir/storage/myisam/myisamchk",
"$glob_basedir/myisam/myisamchk"));
$ENV{'MYISAMPACK'}= mtr_native_path(mtr_exe_exists(
vs_config_dirs('storage/myisam', 'myisampack'),
vs_config_dirs('myisam', 'myisampack'),
"$path_client_bindir/myisampack",
"$glob_basedir/storage/myisam/myisampack",
"$glob_basedir/myisam/myisampack"));
# ---------------------------------------------------- # ----------------------------------------------------
# We are nice and report a bit about our settings # We are nice and report a bit about our settings
# ---------------------------------------------------- # ----------------------------------------------------
......
CREATE TABLE t1(c1 DOUBLE, c2 DOUBLE, c3 DOUBLE, c4 DOUBLE, c5 DOUBLE,
c6 DOUBLE, c7 DOUBLE, c8 DOUBLE, c9 DOUBLE, a INT PRIMARY KEY);
INSERT INTO t1 VALUES
(-3.31168791059336e-06,-3.19054655887874e-06,-1.06528081684847e-05,-1.227278240089e-06,-1.66718069164799e-06,-2.59038972510885e-06,-2.83145227805303e-06,-4.09678491270648e-07,-2.22610091291797e-06,6),
(0.0030743000272545,2.53222044316438e-05,2.78674650061845e-05,1.95914465544536e-05,1.7347572525984e-05,1.87513810069614e-05,1.69882826885005e-05,2.44449336987598e-05,1.89914629921774e-05,9),
(2.85229319423495e-05,3.05970988282259e-05,3.77161100113133e-05,2.3055238978766e-05,2.08241267364615e-05,2.28009504270553e-05,2.12070165658947e-05,2.84350091565409e-05,2.3366822910704e-05,3),
(0,0,0,0,0,0,0,0,0,12),
(3.24544577570754e-05,3.44619021870993e-05,4.37561613201124e-05,2.57556808726748e-05,2.3195354640561e-05,2.58532400758869e-05,2.34934241667179e-05,3.1621640063232e-05,2.58229982746189e-05,19),
(2.53222044316438e-05,0.00445071933455582,2.97447268116016e-05,2.12379514059868e-05,1.86777776502663e-05,2.0170058676712e-05,1.8946030385445e-05,2.66040037173511e-05,2.09161899668946e-05,20),
(3.03462382611645e-05,3.26517930083994e-05,3.5242025468662e-05,2.53219745106391e-05,2.24384532945004e-05,2.4052346047657e-05,2.23865572957053e-05,3.1634313969082e-05,2.48285463481801e-05,21),
(1.95914465544536e-05,2.12379514059868e-05,2.27808649037128e-05,0.000341724375366877,1.4512761275113e-05,1.56475828693953e-05,1.44372366441415e-05,2.07952121981765e-05,1.61488256935919e-05,28),
(1.7347572525984e-05,1.86777776502663e-05,2.04116907052727e-05,1.4512761275113e-05,0.000432162526082388,1.38116514014465e-05,1.2712914948904e-05,1.82503165178506e-05,1.43043075345922e-05,30),
(1.68339762136661e-05,1.77836497166611e-05,2.36328309295222e-05,1.30183423732016e-05,1.18674654241553e-05,1.32467273128652e-05,1.24581739117775e-05,1.55624190959406e-05,1.33010638508213e-05,31),
(1.89643062824415e-05,2.06997140070717e-05,2.29045490159364e-05,1.57918175731019e-05,1.39864987449492e-05,1.50580274578455e-05,1.45908734129609e-05,1.95329296993327e-05,1.5814709481221e-05,32),
(1.69882826885005e-05,1.8946030385445e-05,2.00820439721439e-05,1.44372366441415e-05,1.2712914948904e-05,1.35209686474184e-05,0.00261563314789896,1.78285095864627e-05,1.46699314500019e-05,34),
(2.0278186540684e-05,2.18923409729654e-05,2.39981539939738e-05,1.71774589459438e-05,1.54654355357383e-05,1.62731485707636e-05,1.49253140625051e-05,2.18229800160297e-05,1.71923561673718e-05,35),
(2.44449336987598e-05,2.66040037173511e-05,2.84860148925308e-05,2.07952121981765e-05,1.82503165178506e-05,1.97667730441441e-05,1.78285095864627e-05,0.00166478601822712,2.0299952103232e-05,36),
(1.89914629921774e-05,2.09161899668946e-05,2.26026841007872e-05,1.61488256935919e-05,1.43043075345922e-05,1.52609063290127e-05,1.46699314500019e-05,2.0299952103232e-05,0.00306670170971682,39),
(0,0,0,0,0,0,0,0,0,41),
(0,0,0,0,0,0,0,0,0,17),
(0,0,0,0,0,0,0,0,0,18),
(2.51880677333017e-05,2.63051795435778e-05,2.79874748974906e-05,2.02888886670845e-05,1.8178636318197e-05,1.91308527003585e-05,1.83260023644133e-05,2.4422300558171e-05,1.96411467520551e-05,44),
(2.22402118719591e-05,2.37546284320705e-05,2.58463051055541e-05,1.83391609130854e-05,1.6300720519646e-05,1.74559091886791e-05,1.63733785575587e-05,2.26616253279828e-05,1.79541237435621e-05,45),
(3.01092775359837e-05,3.23865212934412e-05,4.09444584045994e-05,0,2.15470966302776e-05,2.39082636344032e-05,2.28296706429177e-05,2.9007671511595e-05,2.44201138973326e-05,46);
FLUSH TABLES;
CHECK TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 check status OK
DROP TABLE t1;
#
# BUG#31277 - myisamchk --unpack corrupts a table
#
CREATE TABLE t1(c1 DOUBLE, c2 DOUBLE, c3 DOUBLE, c4 DOUBLE, c5 DOUBLE,
c6 DOUBLE, c7 DOUBLE, c8 DOUBLE, c9 DOUBLE, a INT PRIMARY KEY);
INSERT INTO t1 VALUES
(-3.31168791059336e-06,-3.19054655887874e-06,-1.06528081684847e-05,-1.227278240089e-06,-1.66718069164799e-06,-2.59038972510885e-06,-2.83145227805303e-06,-4.09678491270648e-07,-2.22610091291797e-06,6),
(0.0030743000272545,2.53222044316438e-05,2.78674650061845e-05,1.95914465544536e-05,1.7347572525984e-05,1.87513810069614e-05,1.69882826885005e-05,2.44449336987598e-05,1.89914629921774e-05,9),
(2.85229319423495e-05,3.05970988282259e-05,3.77161100113133e-05,2.3055238978766e-05,2.08241267364615e-05,2.28009504270553e-05,2.12070165658947e-05,2.84350091565409e-05,2.3366822910704e-05,3),
(0,0,0,0,0,0,0,0,0,12),
(3.24544577570754e-05,3.44619021870993e-05,4.37561613201124e-05,2.57556808726748e-05,2.3195354640561e-05,2.58532400758869e-05,2.34934241667179e-05,3.1621640063232e-05,2.58229982746189e-05,19),
(2.53222044316438e-05,0.00445071933455582,2.97447268116016e-05,2.12379514059868e-05,1.86777776502663e-05,2.0170058676712e-05,1.8946030385445e-05,2.66040037173511e-05,2.09161899668946e-05,20),
(3.03462382611645e-05,3.26517930083994e-05,3.5242025468662e-05,2.53219745106391e-05,2.24384532945004e-05,2.4052346047657e-05,2.23865572957053e-05,3.1634313969082e-05,2.48285463481801e-05,21),
(1.95914465544536e-05,2.12379514059868e-05,2.27808649037128e-05,0.000341724375366877,1.4512761275113e-05,1.56475828693953e-05,1.44372366441415e-05,2.07952121981765e-05,1.61488256935919e-05,28),
(1.7347572525984e-05,1.86777776502663e-05,2.04116907052727e-05,1.4512761275113e-05,0.000432162526082388,1.38116514014465e-05,1.2712914948904e-05,1.82503165178506e-05,1.43043075345922e-05,30),
(1.68339762136661e-05,1.77836497166611e-05,2.36328309295222e-05,1.30183423732016e-05,1.18674654241553e-05,1.32467273128652e-05,1.24581739117775e-05,1.55624190959406e-05,1.33010638508213e-05,31),
(1.89643062824415e-05,2.06997140070717e-05,2.29045490159364e-05,1.57918175731019e-05,1.39864987449492e-05,1.50580274578455e-05,1.45908734129609e-05,1.95329296993327e-05,1.5814709481221e-05,32),
(1.69882826885005e-05,1.8946030385445e-05,2.00820439721439e-05,1.44372366441415e-05,1.2712914948904e-05,1.35209686474184e-05,0.00261563314789896,1.78285095864627e-05,1.46699314500019e-05,34),
(2.0278186540684e-05,2.18923409729654e-05,2.39981539939738e-05,1.71774589459438e-05,1.54654355357383e-05,1.62731485707636e-05,1.49253140625051e-05,2.18229800160297e-05,1.71923561673718e-05,35),
(2.44449336987598e-05,2.66040037173511e-05,2.84860148925308e-05,2.07952121981765e-05,1.82503165178506e-05,1.97667730441441e-05,1.78285095864627e-05,0.00166478601822712,2.0299952103232e-05,36),
(1.89914629921774e-05,2.09161899668946e-05,2.26026841007872e-05,1.61488256935919e-05,1.43043075345922e-05,1.52609063290127e-05,1.46699314500019e-05,2.0299952103232e-05,0.00306670170971682,39),
(0,0,0,0,0,0,0,0,0,41),
(0,0,0,0,0,0,0,0,0,17),
(0,0,0,0,0,0,0,0,0,18),
(2.51880677333017e-05,2.63051795435778e-05,2.79874748974906e-05,2.02888886670845e-05,1.8178636318197e-05,1.91308527003585e-05,1.83260023644133e-05,2.4422300558171e-05,1.96411467520551e-05,44),
(2.22402118719591e-05,2.37546284320705e-05,2.58463051055541e-05,1.83391609130854e-05,1.6300720519646e-05,1.74559091886791e-05,1.63733785575587e-05,2.26616253279828e-05,1.79541237435621e-05,45),
(3.01092775359837e-05,3.23865212934412e-05,4.09444584045994e-05,0,2.15470966302776e-05,2.39082636344032e-05,2.28296706429177e-05,2.9007671511595e-05,2.44201138973326e-05,46);
FLUSH TABLES;
--exec $MYISAMPACK -s $MYSQLTEST_VARDIR/master-data/test/t1
--exec $MYISAMCHK -srq $MYSQLTEST_VARDIR/master-data/test/t1
--exec $MYISAMCHK -s --unpack $MYSQLTEST_VARDIR/master-data/test/t1
CHECK TABLE t1 EXTENDED;
DROP TABLE t1;
...@@ -941,7 +941,7 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend) ...@@ -941,7 +941,7 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
ha_rows records,del_blocks; ha_rows records,del_blocks;
my_off_t used,empty,pos,splits,start_recpos, my_off_t used,empty,pos,splits,start_recpos,
del_length,link_used,start_block; del_length,link_used,start_block;
uchar *record,*to; uchar *record= 0, *to;
char llbuff[22],llbuff2[22],llbuff3[22]; char llbuff[22],llbuff2[22],llbuff3[22];
ha_checksum intern_record_checksum; ha_checksum intern_record_checksum;
ha_checksum key_checksum[MI_MAX_POSSIBLE_KEY]; ha_checksum key_checksum[MI_MAX_POSSIBLE_KEY];
...@@ -958,7 +958,7 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend) ...@@ -958,7 +958,7 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
puts("- check record links"); puts("- check record links");
} }
if (!(record= (uchar*) my_malloc(info->s->base.pack_reclength,MYF(0)))) if (!mi_alloc_rec_buff(info, -1, &record))
{ {
mi_check_print_error(param,"Not enough memory for record"); mi_check_print_error(param,"Not enough memory for record");
DBUG_RETURN(-1); DBUG_RETURN(-1);
...@@ -1365,12 +1365,12 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend) ...@@ -1365,12 +1365,12 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
printf("Lost space: %12s Linkdata: %10s\n", printf("Lost space: %12s Linkdata: %10s\n",
llstr(empty,llbuff),llstr(link_used,llbuff2)); llstr(empty,llbuff),llstr(link_used,llbuff2));
} }
my_free((uchar*) record,MYF(0)); my_free(mi_get_rec_buff_ptr(info, record), MYF(0));
DBUG_RETURN (error); DBUG_RETURN (error);
err: err:
mi_check_print_error(param,"got error: %d when reading datafile at record: %s",my_errno, llstr(records,llbuff)); mi_check_print_error(param,"got error: %d when reading datafile at record: %s",my_errno, llstr(records,llbuff));
err2: err2:
my_free((uchar*) record,MYF(0)); my_free(mi_get_rec_buff_ptr(info, record), MYF(0));
param->testflag|=T_RETRY_WITHOUT_QUICK; param->testflag|=T_RETRY_WITHOUT_QUICK;
DBUG_RETURN(1); DBUG_RETURN(1);
} /* chk_data_link */ } /* chk_data_link */
...@@ -1561,8 +1561,7 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info, ...@@ -1561,8 +1561,7 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info,
MYF(MY_WME | MY_WAIT_IF_FULL))) MYF(MY_WME | MY_WAIT_IF_FULL)))
goto err; goto err;
info->opt_flag|=WRITE_CACHE_USED; info->opt_flag|=WRITE_CACHE_USED;
if (!(sort_param.record=(uchar*) my_malloc((uint) share->base.pack_reclength, if (!mi_alloc_rec_buff(info, -1, &sort_param.record) ||
MYF(0))) ||
!mi_alloc_rec_buff(info, -1, &sort_param.rec_buff)) !mi_alloc_rec_buff(info, -1, &sort_param.rec_buff))
{ {
mi_check_print_error(param, "Not enough memory for extra record"); mi_check_print_error(param, "Not enough memory for extra record");
...@@ -1754,7 +1753,8 @@ err: ...@@ -1754,7 +1753,8 @@ err:
} }
my_free(mi_get_rec_buff_ptr(info, sort_param.rec_buff), my_free(mi_get_rec_buff_ptr(info, sort_param.rec_buff),
MYF(MY_ALLOW_ZERO_PTR)); MYF(MY_ALLOW_ZERO_PTR));
my_free(sort_param.record,MYF(MY_ALLOW_ZERO_PTR)); my_free(mi_get_rec_buff_ptr(info, sort_param.record),
MYF(MY_ALLOW_ZERO_PTR));
my_free(sort_info.buff,MYF(MY_ALLOW_ZERO_PTR)); my_free(sort_info.buff,MYF(MY_ALLOW_ZERO_PTR));
VOID(end_io_cache(&param->read_cache)); VOID(end_io_cache(&param->read_cache));
info->opt_flag&= ~(READ_CACHE_USED | WRITE_CACHE_USED); info->opt_flag&= ~(READ_CACHE_USED | WRITE_CACHE_USED);
...@@ -2261,8 +2261,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, ...@@ -2261,8 +2261,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
info->opt_flag|=WRITE_CACHE_USED; info->opt_flag|=WRITE_CACHE_USED;
info->rec_cache.file=info->dfile; /* for sort_delete_record */ info->rec_cache.file=info->dfile; /* for sort_delete_record */
if (!(sort_param.record=(uchar*) my_malloc((uint) share->base.pack_reclength, if (!mi_alloc_rec_buff(info, -1, &sort_param.record) ||
MYF(0))) ||
!mi_alloc_rec_buff(info, -1, &sort_param.rec_buff)) !mi_alloc_rec_buff(info, -1, &sort_param.rec_buff))
{ {
mi_check_print_error(param, "Not enough memory for extra record"); mi_check_print_error(param, "Not enough memory for extra record");
...@@ -2571,7 +2570,8 @@ err: ...@@ -2571,7 +2570,8 @@ err:
my_free(mi_get_rec_buff_ptr(info, sort_param.rec_buff), my_free(mi_get_rec_buff_ptr(info, sort_param.rec_buff),
MYF(MY_ALLOW_ZERO_PTR)); MYF(MY_ALLOW_ZERO_PTR));
my_free(sort_param.record,MYF(MY_ALLOW_ZERO_PTR)); my_free(mi_get_rec_buff_ptr(info, sort_param.record),
MYF(MY_ALLOW_ZERO_PTR));
my_free((uchar*) sort_info.key_block,MYF(MY_ALLOW_ZERO_PTR)); my_free((uchar*) sort_info.key_block,MYF(MY_ALLOW_ZERO_PTR));
my_free((uchar*) sort_info.ft_buf, MYF(MY_ALLOW_ZERO_PTR)); my_free((uchar*) sort_info.ft_buf, MYF(MY_ALLOW_ZERO_PTR));
my_free(sort_info.buff,MYF(MY_ALLOW_ZERO_PTR)); my_free(sort_info.buff,MYF(MY_ALLOW_ZERO_PTR));
...@@ -2649,6 +2649,7 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info, ...@@ -2649,6 +2649,7 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
SORT_INFO sort_info; SORT_INFO sort_info;
ulonglong key_map; ulonglong key_map;
pthread_attr_t thr_attr; pthread_attr_t thr_attr;
ulong max_pack_reclength;
DBUG_ENTER("mi_repair_parallel"); DBUG_ENTER("mi_repair_parallel");
LINT_INIT(key_map); LINT_INIT(key_map);
...@@ -2795,10 +2796,13 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info, ...@@ -2795,10 +2796,13 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
del=info->state->del; del=info->state->del;
param->glob_crc=0; param->glob_crc=0;
/* for compressed tables */
max_pack_reclength= share->base.pack_reclength;
if (share->options & HA_OPTION_COMPRESS_RECORD)
set_if_bigger(max_pack_reclength, share->max_pack_length);
if (!(sort_param=(MI_SORT_PARAM *) if (!(sort_param=(MI_SORT_PARAM *)
my_malloc((uint) share->base.keys * my_malloc((uint) share->base.keys *
(sizeof(MI_SORT_PARAM) + share->base.pack_reclength), (sizeof(MI_SORT_PARAM) + max_pack_reclength),
MYF(MY_ZEROFILL)))) MYF(MY_ZEROFILL))))
{ {
mi_check_print_error(param,"Not enough memory for key!"); mi_check_print_error(param,"Not enough memory for key!");
...@@ -2854,7 +2858,7 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info, ...@@ -2854,7 +2858,7 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
sort_param[i].max_pos=sort_param[i].pos=share->pack.header_length; sort_param[i].max_pos=sort_param[i].pos=share->pack.header_length;
sort_param[i].record= (((uchar *)(sort_param+share->base.keys))+ sort_param[i].record= (((uchar *)(sort_param+share->base.keys))+
(share->base.pack_reclength * i)); (max_pack_reclength * i));
if (!mi_alloc_rec_buff(info, -1, &sort_param[i].rec_buff)) if (!mi_alloc_rec_buff(info, -1, &sort_param[i].rec_buff))
{ {
mi_check_print_error(param,"Not enough memory!"); mi_check_print_error(param,"Not enough memory!");
...@@ -4469,7 +4473,7 @@ err: ...@@ -4469,7 +4473,7 @@ err:
void update_auto_increment_key(MI_CHECK *param, MI_INFO *info, void update_auto_increment_key(MI_CHECK *param, MI_INFO *info,
my_bool repair_only) my_bool repair_only)
{ {
uchar *record; uchar *record= 0;
DBUG_ENTER("update_auto_increment_key"); DBUG_ENTER("update_auto_increment_key");
if (!info->s->base.auto_key || if (!info->s->base.auto_key ||
...@@ -4488,8 +4492,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info, ...@@ -4488,8 +4492,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info,
We have to use an allocated buffer instead of info->rec_buff as We have to use an allocated buffer instead of info->rec_buff as
_mi_put_key_in_record() may use info->rec_buff _mi_put_key_in_record() may use info->rec_buff
*/ */
if (!(record= (uchar*) my_malloc((uint) info->s->base.pack_reclength, if (!mi_alloc_rec_buff(info, -1, &record))
MYF(0))))
{ {
mi_check_print_error(param,"Not enough memory for extra record"); mi_check_print_error(param,"Not enough memory for extra record");
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
...@@ -4501,7 +4504,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info, ...@@ -4501,7 +4504,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info,
if (my_errno != HA_ERR_END_OF_FILE) if (my_errno != HA_ERR_END_OF_FILE)
{ {
mi_extra(info,HA_EXTRA_NO_KEYREAD,0); mi_extra(info,HA_EXTRA_NO_KEYREAD,0);
my_free((char*) record, MYF(0)); my_free(mi_get_rec_buff_ptr(info, record), MYF(0));
mi_check_print_error(param,"%d when reading last record",my_errno); mi_check_print_error(param,"%d when reading last record",my_errno);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
...@@ -4516,7 +4519,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info, ...@@ -4516,7 +4519,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info,
set_if_bigger(info->s->state.auto_increment, param->auto_increment_value); set_if_bigger(info->s->state.auto_increment, param->auto_increment_value);
} }
mi_extra(info,HA_EXTRA_NO_KEYREAD,0); mi_extra(info,HA_EXTRA_NO_KEYREAD,0);
my_free((char*) record, MYF(0)); my_free(mi_get_rec_buff_ptr(info, record), MYF(0));
update_state_info(param, info, UPDATE_AUTO_INC); update_state_info(param, info, UPDATE_AUTO_INC);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
......
...@@ -697,8 +697,11 @@ uchar *mi_alloc_rec_buff(MI_INFO *info, ulong length, uchar **buf) ...@@ -697,8 +697,11 @@ uchar *mi_alloc_rec_buff(MI_INFO *info, ulong length, uchar **buf)
/* to simplify initial init of info->rec_buf in mi_open and mi_extra */ /* to simplify initial init of info->rec_buf in mi_open and mi_extra */
if (length == (ulong) -1) if (length == (ulong) -1)
{ {
length= max(info->s->base.pack_reclength, if (info->s->options & HA_OPTION_COMPRESS_RECORD)
info->s->base.max_key_length); length= max(info->s->base.pack_reclength, info->s->max_pack_length);
else
length= info->s->base.pack_reclength;
length= max(length, info->s->base.max_key_length);
/* Avoid unnecessary realloc */ /* Avoid unnecessary realloc */
if (newptr && length == old_length) if (newptr && length == old_length)
return newptr; return newptr;
......
...@@ -166,7 +166,6 @@ my_bool _mi_read_pack_info(MI_INFO *info, pbool fix_keys) ...@@ -166,7 +166,6 @@ my_bool _mi_read_pack_info(MI_INFO *info, pbool fix_keys)
share->pack.header_length= uint4korr(header+4); share->pack.header_length= uint4korr(header+4);
share->min_pack_length=(uint) uint4korr(header+8); share->min_pack_length=(uint) uint4korr(header+8);
share->max_pack_length=(uint) uint4korr(header+12); share->max_pack_length=(uint) uint4korr(header+12);
set_if_bigger(share->base.pack_reclength,share->max_pack_length);
elements=uint4korr(header+16); elements=uint4korr(header+16);
intervall_length=uint4korr(header+20); intervall_length=uint4korr(header+20);
trees=uint2korr(header+24); trees=uint2korr(header+24);
......
...@@ -1536,8 +1536,8 @@ static int mi_sort_records(MI_CHECK *param, ...@@ -1536,8 +1536,8 @@ static int mi_sort_records(MI_CHECK *param,
mi_check_print_error(param,"Not enough memory for key block"); mi_check_print_error(param,"Not enough memory for key block");
goto err; goto err;
} }
if (!(sort_param.record=(uchar*) my_malloc((uint) share->base.pack_reclength,
MYF(0)))) if (!mi_alloc_rec_buff(info, -1, &sort_param.record))
{ {
mi_check_print_error(param,"Not enough memory for record"); mi_check_print_error(param,"Not enough memory for record");
goto err; goto err;
...@@ -1632,7 +1632,8 @@ err: ...@@ -1632,7 +1632,8 @@ err:
{ {
my_afree((uchar*) temp_buff); my_afree((uchar*) temp_buff);
} }
my_free(sort_param.record,MYF(MY_ALLOW_ZERO_PTR)); my_free(mi_get_rec_buff_ptr(info, sort_param.record),
MYF(MY_ALLOW_ZERO_PTR));
info->opt_flag&= ~(READ_CACHE_USED | WRITE_CACHE_USED); info->opt_flag&= ~(READ_CACHE_USED | WRITE_CACHE_USED);
VOID(end_io_cache(&info->rec_cache)); VOID(end_io_cache(&info->rec_cache));
my_free(sort_info.buff,MYF(MY_ALLOW_ZERO_PTR)); my_free(sort_info.buff,MYF(MY_ALLOW_ZERO_PTR));
......
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