summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authormonty@hundin.mysql.fi <>2001-10-04 21:52:41 +0300
committermonty@hundin.mysql.fi <>2001-10-04 21:52:41 +0300
commite80123501939a6e19dcc33efa837c15f5ca60641 (patch)
treece2737a2cb7f8b0c9ce7fc646f448b1fc1a1bc92 /sql
parentf0ae1dbb70cdf908aea201d56ee9bf0e10062a78 (diff)
downloadmariadb-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.cc1
-rw-r--r--sql/mysqld.cc4
-rw-r--r--sql/sql_delete.cc9
-rw-r--r--sql/sql_select.cc34
-rw-r--r--sql/table.h1
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;