diff options
author | unknown <monty@hundin.mysql.fi> | 2002-01-16 23:02:26 +0200 |
---|---|---|
committer | unknown <monty@hundin.mysql.fi> | 2002-01-16 23:02:26 +0200 |
commit | 088582035efe96857e6453a72443ae1d8049fc3a (patch) | |
tree | 018279aec359563ce57663242828891f44489682 /sql/sql_delete.cc | |
parent | 40c146f6a22e7397d9e5d1880b29f2c88fb39eda (diff) | |
download | mariadb-git-088582035efe96857e6453a72443ae1d8049fc3a.tar.gz |
Move HA_EXTRA_NO_READCHECK to ha_open
Fixed bug in multi-table-delete
Docs/manual.texi:
Changelog
include/mysql_com.h:
Define MAX_CHAR_WIDTH
myisam/mi_extra.c:
Cleanup
mysql-test/r/bdb.result:
Bug test
mysql-test/r/group_by.result:
Bug test
mysql-test/t/bdb.test:
Bug test
mysql-test/t/group_by.test:
Bug test
sql/ha_berkeley.cc:
More debug statements
sql/handler.cc:
Move HA_EXTRA_NO_READCHECK to ha_open
sql/records.cc:
More DBUG statements
sql/sql_analyse.cc:
Cleanup
sql/sql_base.cc:
Move HA_EXTRA_NO_READCHECK to ha_open
sql/sql_delete.cc:
Fixed bug in multi-table-delete
Cleanup
sql/sql_select.cc:
Move HA_EXTRA_NO_READCHECK to ha_open
sql/sql_update.cc:
Move HA_EXTRA_NO_READCHECK to ha_open
Diffstat (limited to 'sql/sql_delete.cc')
-rw-r--r-- | sql/sql_delete.cc | 61 |
1 files changed, 18 insertions, 43 deletions
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index d9a7c4e5b55..2a7824eae68 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -98,7 +98,6 @@ int mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, ORDER *order, DBUG_RETURN(1); } } - (void) table->file->extra(HA_EXTRA_NO_READCHECK); if (options & OPTION_QUICK) (void) table->file->extra(HA_EXTRA_QUICK); @@ -157,8 +156,7 @@ int mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, ORDER *order, } thd->proc_info="end"; end_read_record(&info); - /* if (order) free_io_cache(table); */ /* QQ Should not be needed */ - (void) table->file->extra(HA_EXTRA_READCHECK); + free_io_cache(table); // Will not do any harm if (options & OPTION_QUICK) (void) table->file->extra(HA_EXTRA_NORMAL); @@ -219,15 +217,11 @@ multi_delete::multi_delete(THD *thd_arg, TABLE_LIST *dt, not_trans_safe=false; tempfiles = (Unique **) sql_calloc(sizeof(Unique *) * (num_of_tables-1)); - (void) dt->table->file->extra(HA_EXTRA_NO_READCHECK); /* Don't use key read with MULTI-TABLE-DELETE */ - (void) dt->table->file->extra(HA_EXTRA_NO_KEYREAD); dt->table->used_keys=0; for (dt=dt->next ; dt ; dt=dt->next,counter++) { TABLE *table=dt->table; - (void) table->file->extra(HA_EXTRA_NO_READCHECK); - (void) table->file->extra(HA_EXTRA_NO_KEYREAD); table->used_keys=0; tempfiles[counter] = new Unique (refposcmp2, (void *) &table->file->ref_length, @@ -291,13 +285,12 @@ multi_delete::initialize_tables(JOIN *join) multi_delete::~multi_delete() { - /* Add back EXTRA_READCHECK; In 4.0.1 we shouldn't need this anymore */ for (table_being_deleted=delete_tables ; table_being_deleted ; table_being_deleted=table_being_deleted->next) { TABLE *t=table_being_deleted->table; - (void) t->file->extra(HA_EXTRA_READCHECK); + free_io_cache(t); // Alloced by unique t->no_keyread=0; } @@ -353,19 +346,17 @@ void multi_delete::send_error(uint errcode,const char *err) /* First send error what ever it is ... */ ::send_error(&thd->net,errcode,err); - /* reset used flags */ -// delete_tables->table->no_keyread=0; - /* If nothing deleted return */ if (!deleted) return; + /* Below can happen when thread is killed early ... */ if (!table_being_deleted) table_being_deleted=delete_tables; /* - If rows from the first table only has been deleted and it is transactional, - just do rollback. + If rows from the first table only has been deleted and it is + transactional, just do rollback. The same if all tables are transactional, regardless of where we are. In all other cases do attempt deletes ... */ @@ -411,27 +402,6 @@ int multi_delete::do_deletes (bool from_send_error) break; } -#if USE_REGENERATE_TABLE - // nice little optimization .... - // but Monty has to fix generate_table... - // This will not work for transactional tables because for other types - // records is not absolute - if (num_of_positions == table->file->records) - { - TABLE_LIST table_list; - bzero((char*) &table_list,sizeof(table_list)); - table_list.name=table->table_name; - table_list.real_name=table_being_deleted->real_name; - table_list.table=table; - table_list.grant=table->grant; - table_list.db = table_being_deleted->db; - error=generate_table(thd,&table_list,(TABLE *)0); - if (error <= 0) {error = 1; break;} - deleted += num_of_positions; - continue; - } -#endif /* USE_REGENERATE_TABLE */ - READ_RECORD info; init_read_record(&info,thd,table,NULL,0,0); while (!(error=info.read_record(&info)) && @@ -452,15 +422,19 @@ int multi_delete::do_deletes (bool from_send_error) } +/* + return: 0 sucess + 1 error +*/ + bool multi_delete::send_eof() { - thd->proc_info="deleting from reference tables"; /* out: 1 if error, 0 if success */ + thd->proc_info="deleting from reference tables"; /* Does deletes for the last n - 1 tables, returns 0 if ok */ - int error = do_deletes(false); /* do_deletes returns 0 if success */ + int error = do_deletes(false); // returns 0 if success /* reset used flags */ -// delete_tables->table->no_keyread=0; // Will stay in comment until Monty approves changes thd->proc_info="end"; if (error) { @@ -468,11 +442,12 @@ bool multi_delete::send_eof() return 1; } - /* Write the SQL statement to the binlog if we deleted - rows and we succeeded, or also in an error case when there - was a non-transaction-safe table involved, since - modifications in it cannot be rolled back. */ - + /* + Write the SQL statement to the binlog if we deleted + rows and we succeeded, or also in an error case when there + was a non-transaction-safe table involved, since + modifications in it cannot be rolled back. + */ if (deleted || not_trans_safe) { mysql_update_log.write(thd,thd->query,thd->query_length); |