summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorserg@serg.mylan <>2005-09-27 20:11:09 +0200
committerserg@serg.mylan <>2005-09-27 20:11:09 +0200
commit6716d16bc7277ed63b1119acfd0e15f998ca3d67 (patch)
tree19c8405f528a0921b91d263dfad9866a2be0b38f
parentc794383e0997f93f4e63af420c1a58b8551952b0 (diff)
downloadmariadb-git-6716d16bc7277ed63b1119acfd0e15f998ca3d67.tar.gz
CHECKSUM TABLE now allows concurrent inserts
-rw-r--r--myisam/mi_check.c10
-rw-r--r--myisam/mi_delete.c2
-rw-r--r--myisam/mi_delete_all.c2
-rw-r--r--myisam/mi_open.c4
-rw-r--r--myisam/mi_update.c2
-rw-r--r--myisam/mi_write.c2
-rw-r--r--myisam/myisamchk.c4
-rw-r--r--myisam/myisamdef.h2
-rw-r--r--myisam/myisampack.c4
-rw-r--r--mysql-test/r/system_mysql_db.result2
-rw-r--r--sql/ha_myisam.cc2
-rw-r--r--sql/sql_table.cc2
12 files changed, 19 insertions, 19 deletions
diff --git a/myisam/mi_check.c b/myisam/mi_check.c
index 79fafd0cf5b..074a1b23686 100644
--- a/myisam/mi_check.c
+++ b/myisam/mi_check.c
@@ -1092,7 +1092,7 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
"Keypointers and record positions doesn't match");
error=1;
}
- else if (param->glob_crc != info->s->state.checksum &&
+ else if (param->glob_crc != info->state->checksum &&
(info->s->options &
(HA_OPTION_CHECKSUM | HA_OPTION_COMPRESS_RECORD)))
{
@@ -1388,7 +1388,7 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info,
info->state->data_file_length=sort_param.max_pos;
}
if (param->testflag & T_CALC_CHECKSUM)
- share->state.checksum=param->glob_crc;
+ info->state->checksum=param->glob_crc;
if (!(param->testflag & T_SILENT))
{
@@ -2156,7 +2156,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
my_errno);
}
if (param->testflag & T_CALC_CHECKSUM)
- share->state.checksum=param->glob_crc;
+ info->state->checksum=param->glob_crc;
if (my_chsize(share->kfile,info->state->key_file_length,0,MYF(0)))
mi_check_print_warning(param,
@@ -2577,7 +2577,7 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
my_errno);
}
if (param->testflag & T_CALC_CHECKSUM)
- share->state.checksum=param->glob_crc;
+ info->state->checksum=param->glob_crc;
if (my_chsize(share->kfile,info->state->key_file_length,0,MYF(0)))
mi_check_print_warning(param,
@@ -3808,7 +3808,7 @@ int recreate_table(MI_CHECK *param, MI_INFO **org_info, char *filename)
(*org_info)->s->state.create_time=share.state.create_time;
(*org_info)->s->state.unique=(*org_info)->this_unique=
share.state.unique;
- (*org_info)->s->state.checksum=share.state.checksum;
+ (*org_info)->state->checksum=info.state->checksum;
(*org_info)->state->del=info.state->del;
(*org_info)->s->state.dellink=share.state.dellink;
(*org_info)->state->empty=info.state->empty;
diff --git a/myisam/mi_delete.c b/myisam/mi_delete.c
index 60a07254e82..62ca7f8ff61 100644
--- a/myisam/mi_delete.c
+++ b/myisam/mi_delete.c
@@ -93,7 +93,7 @@ int mi_delete(MI_INFO *info,const byte *record)
if ((*share->delete_record)(info))
goto err; /* Remove record from database */
- info->s->state.checksum-=info->checksum;
+ info->state->checksum-=info->checksum;
info->update= HA_STATE_CHANGED+HA_STATE_DELETED+HA_STATE_ROW_CHANGED;
info->state->records--;
diff --git a/myisam/mi_delete_all.c b/myisam/mi_delete_all.c
index 3033249886f..a30abb95070 100644
--- a/myisam/mi_delete_all.c
+++ b/myisam/mi_delete_all.c
@@ -41,7 +41,7 @@ int mi_delete_all_rows(MI_INFO *info)
info->state->key_file_length=share->base.keystart;
info->state->data_file_length=0;
info->state->empty=info->state->key_empty=0;
- state->checksum=0;
+ info->state->checksum=0;
for (i=share->base.max_key_block_length/MI_MIN_KEY_BLOCK_LENGTH ; i-- ; )
state->key_del[i]= HA_OFFSET_ERROR;
diff --git a/myisam/mi_open.c b/myisam/mi_open.c
index 82663e0c318..1d99772eba6 100644
--- a/myisam/mi_open.c
+++ b/myisam/mi_open.c
@@ -822,7 +822,7 @@ uint mi_state_info_write(File file, MI_STATE_INFO *state, uint pWrite)
mi_sizestore(ptr,state->state.empty); ptr +=8;
mi_sizestore(ptr,state->state.key_empty); ptr +=8;
mi_int8store(ptr,state->auto_increment); ptr +=8;
- mi_int8store(ptr,(ulonglong) state->checksum);ptr +=8;
+ mi_int8store(ptr,(ulonglong) state->state.checksum);ptr +=8;
mi_int4store(ptr,state->process); ptr +=4;
mi_int4store(ptr,state->unique); ptr +=4;
mi_int4store(ptr,state->status); ptr +=4;
@@ -884,7 +884,7 @@ char *mi_state_info_read(uchar *ptr, MI_STATE_INFO *state)
state->state.empty = mi_sizekorr(ptr); ptr +=8;
state->state.key_empty= mi_sizekorr(ptr); ptr +=8;
state->auto_increment=mi_uint8korr(ptr); ptr +=8;
- state->checksum=(ha_checksum) mi_uint8korr(ptr); ptr +=8;
+ state->state.checksum=(ha_checksum) mi_uint8korr(ptr); ptr +=8;
state->process= mi_uint4korr(ptr); ptr +=4;
state->unique = mi_uint4korr(ptr); ptr +=4;
state->status = mi_uint4korr(ptr); ptr +=4;
diff --git a/myisam/mi_update.c b/myisam/mi_update.c
index ab23f2e6da9..86652996afe 100644
--- a/myisam/mi_update.c
+++ b/myisam/mi_update.c
@@ -162,7 +162,7 @@ int mi_update(register MI_INFO *info, const byte *oldrec, byte *newrec)
if (auto_key_changed)
update_auto_increment(info,newrec);
if (share->calc_checksum)
- share->state.checksum+=(info->checksum - old_checksum);
+ info->state->checksum+=(info->checksum - old_checksum);
info->update= (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED | HA_STATE_AKTIV |
key_changed);
diff --git a/myisam/mi_write.c b/myisam/mi_write.c
index c8f9aa84a41..8785adae9a2 100644
--- a/myisam/mi_write.c
+++ b/myisam/mi_write.c
@@ -142,7 +142,7 @@ int mi_write(MI_INFO *info, byte *record)
{
if ((*share->write_record)(info,record))
goto err;
- share->state.checksum+=info->checksum;
+ info->state->checksum+=info->checksum;
}
if (share->base.auto_key)
update_auto_increment(info,record);
diff --git a/myisam/myisamchk.c b/myisam/myisamchk.c
index 4fc0e560911..d1907af1a83 100644
--- a/myisam/myisamchk.c
+++ b/myisam/myisamchk.c
@@ -1261,7 +1261,7 @@ static void descript(MI_CHECK *param, register MI_INFO *info, my_string name)
share->base.raid_chunksize);
}
if (share->options & (HA_OPTION_CHECKSUM | HA_OPTION_COMPRESS_RECORD))
- printf("Checksum: %23s\n",llstr(info->s->state.checksum,llbuff));
+ printf("Checksum: %23s\n",llstr(info->state->checksum,llbuff));
;
if (share->options & HA_OPTION_DELAY_KEY_WRITE)
printf("Keys are only flushed at close\n");
@@ -1576,7 +1576,7 @@ static int mi_sort_records(MI_CHECK *param,
old_record_count=info->state->records;
info->state->records=0;
if (sort_info.new_data_file_type != COMPRESSED_RECORD)
- share->state.checksum=0;
+ info->state->checksum=0;
if (sort_record_index(&sort_param,info,keyinfo,share->state.key_root[sort_key],
temp_buff, sort_key,new_file,update_index) ||
diff --git a/myisam/myisamdef.h b/myisam/myisamdef.h
index 6b040f2ef0e..95ef20ed41d 100644
--- a/myisam/myisamdef.h
+++ b/myisam/myisamdef.h
@@ -38,6 +38,7 @@ typedef struct st_mi_status_info
my_off_t key_empty; /* lost space in indexfile */
my_off_t key_file_length;
my_off_t data_file_length;
+ ha_checksum checksum;
} MI_STATUS_INFO;
typedef struct st_mi_state_info
@@ -75,7 +76,6 @@ typedef struct st_mi_state_info
ulong sec_index_changed; /* Updated when new sec_index */
ulong sec_index_used; /* which extra index are in use */
ulonglong key_map; /* Which keys are in use */
- ha_checksum checksum;
ulong version; /* timestamp of create */
time_t create_time; /* Time when created database */
time_t recover_time; /* Time for last recover */
diff --git a/myisam/myisampack.c b/myisam/myisampack.c
index 3b091cd6ea2..c68968c83a3 100644
--- a/myisam/myisampack.c
+++ b/myisam/myisampack.c
@@ -2965,7 +2965,7 @@ static int save_state(MI_INFO *isam_file,PACK_MRG_INFO *mrg,my_off_t new_length,
share->state.key_root[key]= HA_OFFSET_ERROR;
for (key=0 ; key < share->state.header.max_block_size ; key++)
share->state.key_del[key]= HA_OFFSET_ERROR;
- share->state.checksum=crc; /* Save crc here */
+ isam_file->state->checksum=crc; /* Save crc here */
share->changed=1; /* Force write of header */
share->state.open_count=0;
share->global_changed=0;
@@ -3001,7 +3001,7 @@ static int save_state_mrg(File file,PACK_MRG_INFO *mrg,my_off_t new_length,
state.dellink= HA_OFFSET_ERROR;
state.version=(ulong) time((time_t*) 0);
mi_clear_all_keys_active(state.key_map);
- state.checksum=crc;
+ state.state.checksum=crc;
if (isam_file->s->base.keys)
isamchk_neaded=1;
state.changed=STATE_CHANGED | STATE_NOT_ANALYZED; /* Force check of table */
diff --git a/mysql-test/r/system_mysql_db.result b/mysql-test/r/system_mysql_db.result
index d2872878cb9..f68c4805d72 100644
--- a/mysql-test/r/system_mysql_db.result
+++ b/mysql-test/r/system_mysql_db.result
@@ -73,7 +73,7 @@ Table Create Table
user CREATE TABLE `user` (
`Host` char(60) collate utf8_bin NOT NULL default '',
`User` char(16) collate utf8_bin NOT NULL default '',
- `Password` char(41) collate utf8_bin NOT NULL default '',
+ `Password` binary(41) NOT NULL default '',
`Select_priv` enum('N','Y') character set utf8 NOT NULL default 'N',
`Insert_priv` enum('N','Y') character set utf8 NOT NULL default 'N',
`Update_priv` enum('N','Y') character set utf8 NOT NULL default 'N',
diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc
index 6b88656dd76..02769c1eb31 100644
--- a/sql/ha_myisam.cc
+++ b/sql/ha_myisam.cc
@@ -1703,6 +1703,6 @@ int ha_myisam::ft_read(byte * buf)
uint ha_myisam::checksum() const
{
- return (uint)file->s->state.checksum;
+ return (uint)file->state->checksum;
}
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 635b512fe23..dba4168343a 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -4074,7 +4074,7 @@ bool mysql_checksum_table(THD *thd, TABLE_LIST *tables, HA_CHECK_OPT *check_opt)
strxmov(table_name, table->db ,".", table->table_name, NullS);
- t= table->table= open_ltable(thd, table, TL_READ_NO_INSERT);
+ t= table->table= open_ltable(thd, table, TL_READ);
thd->clear_error(); // these errors shouldn't get client
protocol->prepare_for_resend();