Commit 2f450e4f authored by monty@donna.mysql.com's avatar monty@donna.mysql.com

Delayed keys + portability fixes

parent 1777d4db
...@@ -41,3 +41,6 @@ DEFS = -DUNDEF_THREADS_HACK ...@@ -41,3 +41,6 @@ DEFS = -DUNDEF_THREADS_HACK
thread_test.o: thread_test.c thread_test.o: thread_test.c
$(COMPILE) -c @MT_INCLUDES@ $(INCLUDES) $< $(COMPILE) -c @MT_INCLUDES@ $(INCLUDES) $<
# Don't update the files from bitkeeper
%::SCCS/s.%
...@@ -211,6 +211,7 @@ AC_MSG_RESULT($mysql_cv_sys_os) ...@@ -211,6 +211,7 @@ AC_MSG_RESULT($mysql_cv_sys_os)
case "$target_os" in case "$target_os" in
sco3.2v5*) sco3.2v5*)
CFLAGS="$CFLAGS -DSCO" CFLAGS="$CFLAGS -DSCO"
CXXFLAGS="$CXXFLAGS -DSCO"
LD='$(CC) $(CFLAGS)' LD='$(CC) $(CFLAGS)'
case "$CFLAGS" in case "$CFLAGS" in
*-belf*) *-belf*)
......
...@@ -51,3 +51,6 @@ my_global.h: global.h ...@@ -51,3 +51,6 @@ my_global.h: global.h
# generated by configure from the .h.in files # generated by configure from the .h.in files
dist-hook: dist-hook:
rm -f $(distdir)/mysql_version.h $(distdir)/my_config.h rm -f $(distdir)/mysql_version.h $(distdir)/my_config.h
# Don't update the files from bitkeeper
%::SCCS/s.%
...@@ -147,3 +147,6 @@ do-lib-dist: ...@@ -147,3 +147,6 @@ do-lib-dist:
echo ' $$(AR) r $$@ $$?' >>$$dir/Makefile; \ echo ' $$(AR) r $$@ $$?' >>$$dir/Makefile; \
gtar cvzf $$dir.tar.gz $$dir; \ gtar cvzf $$dir.tar.gz $$dir; \
cd $$dir; gmake cd $$dir; gmake
# Don't update the files from bitkeeper
%::SCCS/s.%
...@@ -1600,7 +1600,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, ...@@ -1600,7 +1600,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
char llbuff[22]; char llbuff[22];
SORT_INFO *sort_info= &param->sort_info; SORT_INFO *sort_info= &param->sort_info;
ulonglong key_map=share->state.key_map; ulonglong key_map=share->state.key_map;
DBUG_ENTER("rep_by_sort"); DBUG_ENTER("mi_repair_by_sort");
start_records=info->state->records; start_records=info->state->records;
got_error=1; got_error=1;
...@@ -1630,9 +1630,6 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, ...@@ -1630,9 +1630,6 @@ 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 */
/* Flush key cache for this file if we are calling this outside myisamchk */
flush_key_blocks(share->kfile, FLUSH_IGNORE_CHANGED);
if (!(sort_info->record=(byte*) my_malloc((uint) share->base.pack_reclength, if (!(sort_info->record=(byte*) my_malloc((uint) share->base.pack_reclength,
MYF(0)))) MYF(0))))
{ {
...@@ -1669,15 +1666,24 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, ...@@ -1669,15 +1666,24 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
info->update= (short) (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED); info->update= (short) (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED);
if (!(param->testflag & T_CREATE_MISSING_KEYS)) if (!(param->testflag & T_CREATE_MISSING_KEYS))
{ {
/*
Flush key cache for this file if we are calling this outside
myisamchk
*/
flush_key_blocks(share->kfile, FLUSH_IGNORE_CHANGED);
/* Clear the pointers to the given rows */
for (i=0 ; i < share->base.keys ; i++) for (i=0 ; i < share->base.keys ; i++)
share->state.key_root[i]= HA_OFFSET_ERROR; share->state.key_root[i]= HA_OFFSET_ERROR;
for (i=0 ; i < share->state.header.max_block_size ; i++) for (i=0 ; i < share->state.header.max_block_size ; i++)
share->state.key_del[i]= HA_OFFSET_ERROR; share->state.key_del[i]= HA_OFFSET_ERROR;
info->state->key_file_length=share->base.keystart;
} }
else else
{
if (flush_key_blocks(share->kfile, FLUSH_FORCE_WRITE))
goto err;
key_map= ~key_map; /* Create the missing keys */ key_map= ~key_map; /* Create the missing keys */
}
info->state->key_file_length=share->base.keystart;
sort_info->info=info; sort_info->info=info;
sort_info->param = param; sort_info->param = param;
...@@ -1758,6 +1764,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, ...@@ -1758,6 +1764,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
if (param->testflag & T_STATISTICS) if (param->testflag & T_STATISTICS)
update_key_parts(sort_info->keyinfo, rec_per_key_part, sort_info->unique, update_key_parts(sort_info->keyinfo, rec_per_key_part, sort_info->unique,
(ulonglong) info->state->records); (ulonglong) info->state->records);
share->state.key_map|=(ulonglong) 1 << sort_info->key;
if (sort_info->fix_datafile) if (sort_info->fix_datafile)
{ {
...@@ -2933,7 +2940,8 @@ void mi_dectivate_non_unique_index(MI_INFO *info, ha_rows rows) ...@@ -2933,7 +2940,8 @@ void mi_dectivate_non_unique_index(MI_INFO *info, ha_rows rows)
MI_KEYDEF *key=share->keyinfo; MI_KEYDEF *key=share->keyinfo;
for (i=0 ; i < share->base.keys ; i++,key++) for (i=0 ; i < share->base.keys ; i++,key++)
{ {
if (!(key->flag & HA_NOSAME) && ! mi_too_big_key_for_sort(key,rows)) if (!(key->flag & HA_NOSAME) && ! mi_too_big_key_for_sort(key,rows) &&
info->s->base.auto_key != i+1)
{ {
share->state.key_map&= ~ ((ulonglong) 1 << i); share->state.key_map&= ~ ((ulonglong) 1 << i);
info->update|= HA_STATE_CHANGED; info->update|= HA_STATE_CHANGED;
......
...@@ -77,3 +77,6 @@ SUFFIXES = .sh ...@@ -77,3 +77,6 @@ SUFFIXES = .sh
$< > $@-t $< > $@-t
@CHMOD@ +x $@-t @CHMOD@ +x $@-t
@MV@ $@-t $@ @MV@ $@-t $@
# Don't update the files from bitkeeper
%::SCCS/s.%
...@@ -124,3 +124,6 @@ sql_lex.o: lex_hash.h ...@@ -124,3 +124,6 @@ sql_lex.o: lex_hash.h
#distclean: #distclean:
# rm -f lex_hash.h # rm -f lex_hash.h
# Don't update the files from bitkeeper
%::SCCS/s.%
...@@ -1154,7 +1154,6 @@ bool delayed_insert::handle_inserts(void) ...@@ -1154,7 +1154,6 @@ bool delayed_insert::handle_inserts(void)
int int
select_insert::prepare(List<Item> &values) select_insert::prepare(List<Item> &values)
{ {
TABLE *form=table;
DBUG_ENTER("select_insert::prepare"); DBUG_ENTER("select_insert::prepare");
save_time_stamp=table->time_stamp; save_time_stamp=table->time_stamp;
...@@ -1163,15 +1162,16 @@ select_insert::prepare(List<Item> &values) ...@@ -1163,15 +1162,16 @@ select_insert::prepare(List<Item> &values)
if (fields->elements) if (fields->elements)
{ {
restore_record(form,2); // Get empty record restore_record(table,2); // Get empty record
} }
else else
form->record[0][0]=form->record[2][0]; // Fix delete marker table->record[0][0]=table->record[2][0]; // Fix delete marker
form->next_number_field=form->found_next_number_field; table->next_number_field=table->found_next_number_field;
thd->count_cuted_fields=1; /* calc cuted fields */ thd->count_cuted_fields=1; /* calc cuted fields */
thd->cuted_fields=0; thd->cuted_fields=0;
if (info.handle_duplicates != DUP_REPLACE) if (info.handle_duplicates != DUP_REPLACE)
form->file->extra(HA_EXTRA_WRITE_CACHE); table->file->extra(HA_EXTRA_WRITE_CACHE);
table->file->deactivate_non_unique_index((ha_rows) 0);
DBUG_RETURN(0); DBUG_RETURN(0);
} }
...@@ -1213,14 +1213,16 @@ bool select_insert::send_data(List<Item> &values) ...@@ -1213,14 +1213,16 @@ bool select_insert::send_data(List<Item> &values)
void select_insert::send_error(uint errcode,const char *err) void select_insert::send_error(uint errcode,const char *err)
{ {
::send_error(&thd->net,errcode,err); ::send_error(&thd->net,errcode,err);
VOID(table->file->extra(HA_EXTRA_NO_CACHE)); table->file->extra(HA_EXTRA_NO_CACHE);
table->file->activate_all_index(thd);
} }
bool select_insert::send_eof() bool select_insert::send_eof()
{ {
int error; int error;
if ((error=table->file->extra(HA_EXTRA_NO_CACHE))) if ((error=table->file->extra(HA_EXTRA_NO_CACHE)) ||
(error=table->file->activate_all_index(thd)))
{ {
table->file->print_error(error,MYF(0)); table->file->print_error(error,MYF(0));
::send_error(&thd->net); ::send_error(&thd->net);
......
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