Commit 270832b0 authored by unknown's avatar unknown
Browse files

Merge mysql.com:/home/my/mysql-4.0 into mysql.com:/home/my/mysql-4.1


BitKeeper/etc/logging_ok:
  auto-union
myisam/mi_check.c:
  Auto merged
parents 01a5d650 93722fde
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -3870,6 +3870,14 @@ int update_state_info(MI_CHECK *param, MI_INFO *info,uint update)
      if (!share->state.create_time)
	share->state.create_time=share->state.check_time;
    }
    /*
      When tables are locked we haven't synched the share state and the
      real state for a while so we better do it here before synching
      the share state to disk. Only when table is write locked is it
      necessary to perform this synch.
    */
    if (info->lock_type == F_WRLCK)
      share->state.state= *info->state;
    if (mi_state_info_write(share->kfile,&share->state,1+2))
      goto err;
    share->changed=0;
+32 −0
Original line number Diff line number Diff line
create table t1 (a bigint);
lock tables t1 write;
insert into t1 values(0);
analyze table t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	OK
unlock tables;
check table t1;
Table	Op	Msg_type	Msg_text
test.t1	check	status	OK
drop table t1;
create table t1 (a bigint);
insert into t1 values(0);
lock tables t1 write;
delete from t1;
analyze table t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	OK
unlock tables;
check table t1;
Table	Op	Msg_type	Msg_text
test.t1	check	status	OK
drop table t1;
create table t1 (a bigint);
insert into t1 values(0);
analyze table t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	OK
check table t1;
Table	Op	Msg_type	Msg_text
test.t1	check	status	OK
drop table t1;
+39 −0
Original line number Diff line number Diff line
#
# Bug #10901 Analyze Table on new table destroys table
# This is minimal test case to get error
# The problem was that analyze table wrote the shared state to the file and this
# didn't include the inserts while locked. A check was needed to ensure that
# state information was not updated when executing analyze table for a locked table.
# The analyze table had to be within locks and check table had to be after unlocking
# since then it brings the wrong state from disk rather than from the currently
# correct internal state. The insert is needed since it changes the file state,
# number of records.
# The fix is to synchronise the state of the shared state and the current state before
# calling mi_state_info_write
#
create table t1 (a bigint);
lock tables t1 write;
insert into t1 values(0);
analyze table t1;
unlock tables;
check table t1;

drop table t1;

create table t1 (a bigint);
insert into t1 values(0);
lock tables t1 write;
delete from t1;
analyze table t1;
unlock tables;
check table t1;

drop table t1;

create table t1 (a bigint);
insert into t1 values(0);
analyze table t1;
check table t1;

drop table t1;