diff options
author | monty@hundin.mysql.fi <> | 2001-10-04 21:52:41 +0300 |
---|---|---|
committer | monty@hundin.mysql.fi <> | 2001-10-04 21:52:41 +0300 |
commit | e80123501939a6e19dcc33efa837c15f5ca60641 (patch) | |
tree | ce2737a2cb7f8b0c9ce7fc646f448b1fc1a1bc92 /sql | |
parent | f0ae1dbb70cdf908aea201d56ee9bf0e10062a78 (diff) | |
download | mariadb-git-e80123501939a6e19dcc33efa837c15f5ca60641.tar.gz |
New script: explain_log.sh
Portability fixes.
Handle cleanup when we get an error before the message file is read.
Fix bug in multi-table delete
Diffstat (limited to 'sql')
-rw-r--r-- | sql/derror.cc | 1 | ||||
-rw-r--r-- | sql/mysqld.cc | 4 | ||||
-rw-r--r-- | sql/sql_delete.cc | 9 | ||||
-rw-r--r-- | sql/sql_select.cc | 34 | ||||
-rw-r--r-- | sql/table.h | 1 |
5 files changed, 33 insertions, 16 deletions
diff --git a/sql/derror.cc b/sql/derror.cc index 697d363b86b..bda0690ae7d 100644 --- a/sql/derror.cc +++ b/sql/derror.cc @@ -51,6 +51,7 @@ static void read_texts(const char *file_name,const char ***point, uchar head[32],*pos; DBUG_ENTER("read_texts"); + *point=0; // If something goes wrong LINT_INIT(buff); funktpos=0; if ((file=my_open(fn_format(name,file_name,language,"",4), diff --git a/sql/mysqld.cc b/sql/mysqld.cc index a4421bc139c..8854f6b46d2 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -741,7 +741,7 @@ void clean_up(bool print_message) if (!opt_bootstrap) (void) my_delete(pidfile_name,MYF(0)); // This may not always exist #endif - if (print_message) + if (print_message && errmesg) sql_print_error(ER(ER_SHUTDOWN_COMPLETE),my_progname); x_free((gptr) my_errmsg[ERRMAPP]); /* Free messages */ @@ -3688,7 +3688,7 @@ static void get_options(int argc,char **argv) opt_specialflag|= SPECIAL_NO_HOST_CACHE; break; case (int) OPT_ENABLE_LOCK: - my_disable_locking=0; + my_disable_locking=myisam_single_user=0; break; case (int) OPT_USE_LOCKING: my_disable_locking=0; diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 1103e5590d8..8ba293c82f9 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -274,6 +274,8 @@ multi_delete::initialize_tables(JOIN *join) /* We are going to delete from this table */ walk->table=tab->table; walk=walk->next; + if (tab == join->join_tab) + tab->table->no_keyread=1; } } } @@ -353,6 +355,10 @@ 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; @@ -451,6 +457,9 @@ bool multi_delete::send_eof() thd->proc_info="deleting from reference tables"; int error = do_deletes(false); + /* reset used flags */ + delete_tables->table->no_keyread=0; + thd->proc_info="end"; if (error && error != -1) { diff --git a/sql/sql_select.cc b/sql/sql_select.cc index c2bb282a624..14bdd3d7d66 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -2489,7 +2489,8 @@ make_join_readinfo(JOIN *join,uint options) table->file->index_init(tab->ref.key); tab->read_first_record= join_read_key; tab->read_record.read_record= join_no_more_records; - if (table->used_keys & ((key_map) 1 << tab->ref.key)) + if (table->used_keys & ((key_map) 1 << tab->ref.key) && + !table->no_keyread) { table->key_read=1; table->file->extra(HA_EXTRA_KEYREAD); @@ -2507,7 +2508,8 @@ make_join_readinfo(JOIN *join,uint options) table->file->index_init(tab->ref.key); tab->read_first_record= join_read_always_key; tab->read_record.read_record= join_read_next; - if (table->used_keys & ((key_map) 1 << tab->ref.key)) + if (table->used_keys & ((key_map) 1 << tab->ref.key) && + !table->no_keyread) { table->key_read=1; table->file->extra(HA_EXTRA_KEYREAD); @@ -2568,18 +2570,21 @@ make_join_readinfo(JOIN *join,uint options) statistic_increment(select_full_join_count, &LOCK_status); } } - if (tab->select && tab->select->quick && - table->used_keys & ((key_map) 1 << tab->select->quick->index)) + if (!table->no_keyread) { - table->key_read=1; - table->file->extra(HA_EXTRA_KEYREAD); - } - else if (table->used_keys && ! (tab->select && tab->select->quick)) - { // Only read index tree - tab->index=find_shortest_key(table, table->used_keys); - tab->table->file->index_init(tab->index); - tab->read_first_record= join_init_read_first_with_key; - tab->type=JT_NEXT; // Read with index_first / index_next + if (tab->select && tab->select->quick && + table->used_keys & ((key_map) 1 << tab->select->quick->index)) + { + table->key_read=1; + table->file->extra(HA_EXTRA_KEYREAD); + } + else if (table->used_keys && ! (tab->select && tab->select->quick)) + { // Only read index tree + tab->index=find_shortest_key(table, table->used_keys); + tab->table->file->index_init(tab->index); + tab->read_first_record= join_init_read_first_with_key; + tab->type=JT_NEXT; // Read with index_first / index_next + } } } break; @@ -4556,7 +4561,8 @@ join_init_read_first_with_key(JOIN_TAB *tab) { int error; TABLE *table=tab->table; - if (!table->key_read && (table->used_keys & ((key_map) 1 << tab->index))) + if (!table->key_read && (table->used_keys & ((key_map) 1 << tab->index)) && + !table->no_keyread) { table->key_read=1; table->file->extra(HA_EXTRA_KEYREAD); diff --git a/sql/table.h b/sql/table.h index 1eead0decb1..071c447e660 100644 --- a/sql/table.h +++ b/sql/table.h @@ -97,6 +97,7 @@ struct st_table { my_bool locked_by_name; my_bool crashed; my_bool is_view; + my_bool no_keyread; Field *next_number_field, /* Set if next_number is activated */ *found_next_number_field, /* Set on open */ *rowid_field; |