diff options
author | unknown <monty@donna.mysql.fi> | 2001-04-25 22:44:57 +0300 |
---|---|---|
committer | unknown <monty@donna.mysql.fi> | 2001-04-25 22:44:57 +0300 |
commit | 287b05d431d19bd57376fd30432d23f00f3a9329 (patch) | |
tree | 423d50939ffecb0332aa31928804fc8a06a5dd45 /sql | |
parent | d01c22d92a5713ae4574e1e877dd286e712ca05d (diff) | |
parent | 6052a1955c030dc1716bed82fb45af84030e3f55 (diff) | |
download | mariadb-git-287b05d431d19bd57376fd30432d23f00f3a9329.tar.gz |
Merge work:/home/bk/mysql into donna.mysql.fi:/home/my/bk/mysql
Docs/manual.texi:
Auto merged
client/mysqltest.c:
Auto merged
mysql-test/mysql-test-run.sh:
Auto merged
sql/log.cc:
Auto merged
sql/mysqlbinlog.cc:
Auto merged
sql/sql_class.h:
Auto merged
Diffstat (limited to 'sql')
-rw-r--r-- | sql/filesort.cc | 10 | ||||
-rw-r--r-- | sql/log.cc | 7 | ||||
-rw-r--r-- | sql/mysql_priv.h | 3 | ||||
-rw-r--r-- | sql/mysqlbinlog.cc | 1 | ||||
-rw-r--r-- | sql/mysqld.cc | 2 | ||||
-rw-r--r-- | sql/sql_base.cc | 5 | ||||
-rw-r--r-- | sql/sql_class.h | 2 | ||||
-rw-r--r-- | sql/sql_parse.cc | 2 | ||||
-rw-r--r-- | sql/sql_select.cc | 15 | ||||
-rw-r--r-- | sql/sql_select.h | 3 | ||||
-rw-r--r-- | sql/sql_show.cc | 5 | ||||
-rw-r--r-- | sql/sql_table.cc | 4 |
12 files changed, 40 insertions, 19 deletions
diff --git a/sql/filesort.cc b/sql/filesort.cc index e116e2b68e6..610fe2e966f 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -49,7 +49,7 @@ typedef struct st_sort_param { uint sort_length; /* Length of sortarg */ uint keys; /* Max antal nycklar / buffert */ uint ref_length; /* Length of record ref. */ - ha_rows max_rows; + ha_rows max_rows,examined_rows; TABLE *sort_form; /* For quicker make_sortkey */ SORT_FIELD *local_sortorder; SORT_FIELD *end; @@ -91,7 +91,8 @@ static uint sortlength(SORT_FIELD *sortorder,uint length); open a new file is opened */ ha_rows filesort(TABLE **table, SORT_FIELD *sortorder, uint s_length, - SQL_SELECT *select, ha_rows special, ha_rows max_rows) + SQL_SELECT *select, ha_rows special, ha_rows max_rows, + ha_rows *examined_rows) { int error; uint memavl,old_memavl,maxbuffer,skr; @@ -113,6 +114,7 @@ ha_rows filesort(TABLE **table, SORT_FIELD *sortorder, uint s_length, param.ref_length= table[0]->file->ref_length; param.sort_length=sortlength(sortorder,s_length)+ param.ref_length; param.max_rows= max_rows; + param.examined_rows=0; if (select && select->quick) { @@ -259,7 +261,7 @@ ha_rows filesort(TABLE **table, SORT_FIELD *sortorder, uint s_length, my_error(ER_FILSORT_ABORT,MYF(ME_ERROR+ME_WAITTANG)); else statistic_add(filesort_rows, records, &LOCK_status); - + *examined_rows= param.examined_rows; #ifdef SKIPP_DBUG_IN_FILESORT DBUG_POP(); /* Ok to DBUG */ #endif @@ -367,6 +369,8 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, file->rnd_end(); DBUG_RETURN(HA_POS_ERROR); /* purecov: inspected */ } + if (error == 0) + param->examined_rows++; if (error == 0 && (!select || select->skipp_record() == 0)) { if (idx == param->keys) diff --git a/sql/log.cc b/sql/log.cc index 3e8be76aacb..4cd93261973 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -841,11 +841,12 @@ bool MYSQL_LOG::write(THD *thd,const char *query, uint query_length, { /* For slow query log */ if (my_b_printf(&log_file, - "# Time: %lu Lock_time: %lu Rows_sent: %lu\n", + "# Time: %lu Lock_time: %lu Rows_sent: %lu Rows_examined: %lu\n", (ulong) (current_time - query_start), (ulong) (thd->time_after_lock - query_start), - (ulong) thd->sent_row_count) == (uint) -1) - tmp_errno=errno; + (ulong) thd->sent_row_count, + (ulong) thd->examined_row_count) == (uint) -1) + tmp_errno=errno; } if (thd->db && strcmp(thd->db,db)) { // Database changed diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 78e9db5652f..9c134183fdd 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -602,7 +602,8 @@ void init_read_record(READ_RECORD *info, THD *thd, TABLE *reg_form, int use_record_cache, bool print_errors); void end_read_record(READ_RECORD *info); ha_rows filesort(TABLE **form,struct st_sort_field *sortorder, uint s_length, - SQL_SELECT *select, ha_rows special,ha_rows max_rows); + SQL_SELECT *select, ha_rows special,ha_rows max_rows, + ha_rows *examined_rows); void change_double_for_sort(double nr,byte *to); int get_quick_record(SQL_SELECT *select); int calc_weekday(long daynr,bool sunday_first_day_of_week); diff --git a/sql/mysqlbinlog.cc b/sql/mysqlbinlog.cc index 1ad6a430710..05ff166cd49 100644 --- a/sql/mysqlbinlog.cc +++ b/sql/mysqlbinlog.cc @@ -58,6 +58,7 @@ static struct option long_options[] = {"table", required_argument, 0, 't'}, {"user", required_argument, 0, 'u'}, {"version", no_argument, 0, 'V'}, + {0, 0, 0, 0} }; void sql_print_error(const char *format,...); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 48484aa168c..931a21c9191 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -1388,7 +1388,7 @@ static void *signal_hand(void *arg __attribute__((unused))) if (!(opt_specialflag & SPECIAL_NO_PRIOR)) my_pthread_attr_setprio(&connection_attrib,INTERRUPT_PRIOR); if (pthread_create(&tmp,&connection_attrib, kill_server_thread, - (void*) sig)) + (void*) 0)) sql_print_error("Error: Can't create thread to kill server"); #else kill_server((void*) sig); // MIT THREAD has a alarm thread diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 134449fd20a..afff01e9a16 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1508,8 +1508,9 @@ TABLE *open_temporary_table(THD *thd, const char *path, const char *db, tmp_table->reginfo.lock_type=TL_WRITE; // Simulate locked tmp_table->tmp_table = 1; tmp_table->table_cache_key=(char*) (tmp_table+1); - tmp_table->key_length= (uint) (strmov(strmov(tmp_table->table_cache_key,db) - +1, table_name) + tmp_table->key_length= (uint) (strmov((tmp_table->real_name= + strmov(tmp_table->table_cache_key,db) + +1), table_name) - tmp_table->table_cache_key)+1; int4store(tmp_table->table_cache_key + tmp_table->key_length, thd->slave_proxy_id); diff --git a/sql/sql_class.h b/sql/sql_class.h index f7dc799113e..438898ca294 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -268,7 +268,7 @@ public: #endif ulonglong next_insert_id,last_insert_id,current_insert_id; ha_rows select_limit,offset_limit,default_select_limit,cuted_fields, - max_join_size,sent_row_count; + max_join_size, sent_row_count, examined_row_count; table_map used_tables; ulong query_id,version, inactive_timeout,options,thread_id; ulong gemini_spin_retries; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index f0cc3f9c42a..7a94dc32997 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2266,7 +2266,7 @@ mysql_init_query(THD *thd) thd->lex.table_list.next= (byte**) &thd->lex.table_list.first; thd->fatal_error=0; // Safety thd->last_insert_id_used=thd->query_start_used=thd->insert_id_used=0; - thd->sent_row_count=0; + thd->sent_row_count=thd->examined_row_count=0; DBUG_VOID_RETURN; } diff --git a/sql/sql_select.cc b/sql/sql_select.cc index a418af81187..be1444c52e4 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -265,7 +265,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds, join.join_tab=0; join.tmp_table_param.copy_field=0; join.sum_funcs=0; - join.send_records=join.found_records=0; + join.send_records=join.found_records=join.examined_rows=0; join.tmp_table_param.end_write_records= HA_POS_ERROR; join.first_record=join.sort_and_group=0; join.select_options=select_options; @@ -784,6 +784,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds, error=do_select(&join,&fields,NULL,procedure); err: + thd->examined_row_count=join.examined_rows; thd->proc_info="end"; join.lock=0; // It's faster to unlock later join_free(&join); @@ -867,6 +868,7 @@ make_join_statistics(JOIN *join,TABLE_LIST *tables,COND *conds, table->reginfo.not_exists_optimize=0; bzero((char*) table->const_key_parts, sizeof(key_part_map)*table->keys); all_table_map|= table->map; + s->join=join; if ((s->on_expr=tables->on_expr)) { // table->maybe_null=table->outer_join=1; // Mark for send fields @@ -2219,6 +2221,7 @@ make_simple_join(JOIN *join,TABLE *tmp_table) join_tab->ref.key = -1; join_tab->not_used_in_distinct=0; join_tab->read_first_record= join_init_read_record; + join_tab->join=join; bzero((char*) &join_tab->read_record,sizeof(join_tab->read_record)); tmp_table->status=0; tmp_table->null_row=0; @@ -3915,8 +3918,8 @@ bool create_myisam_from_heap(TABLE *table, TMP_TABLE_PARAM *param, int error, table->file=0; *table =new_table; table->file->change_table_ptr(table); - - thd->proc_info=save_proc_info; + thd->proc_info= (!strcmp(save_proc_info,"Copying to tmp table") ? + "Copying to tmp table on disk" : save_proc_info); DBUG_RETURN(0); err: @@ -4096,6 +4099,7 @@ sub_select(JOIN *join,JOIN_TAB *join_tab,bool end_of_records) bool not_used_in_distinct=join_tab->not_used_in_distinct; ha_rows found_records=join->found_records; READ_RECORD *info= &join_tab->read_record; + join->examined_rows++; do { @@ -4483,6 +4487,7 @@ join_init_read_next_with_key(READ_RECORD *info) return 0; } + static int join_init_read_last_with_key(JOIN_TAB *tab) { @@ -5204,6 +5209,7 @@ create_sort_index(JOIN_TAB *tab,ORDER *order,ha_rows select_limit) { SORT_FIELD *sortorder; uint length; + ha_rows examined_rows; TABLE *table=tab->table; SQL_SELECT *select=tab->select; DBUG_ENTER("create_sort_index"); @@ -5242,12 +5248,13 @@ create_sort_index(JOIN_TAB *tab,ORDER *order,ha_rows select_limit) } } table->found_records=filesort(&table,sortorder,length, - select, 0L, select_limit); + select, 0L, select_limit, &examined_rows); delete select; // filesort did select tab->select=0; tab->select_cond=0; tab->type=JT_ALL; // Read with normal read_record tab->read_first_record= join_init_read_record; + tab->join->examined_rows+=examined_rows; if (table->key_read) // Restore if we used indexes { table->key_read=0; diff --git a/sql/sql_select.h b/sql/sql_select.h index 2f7454e4059..bb97a10128f 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -102,6 +102,7 @@ typedef struct st_join_table { bool cached_eq_ref_table,eq_ref_table,not_used_in_distinct; TABLE_REF ref; JOIN_CACHE cache; + JOIN *join; } JOIN_TAB; @@ -151,7 +152,7 @@ class JOIN { uint send_group_parts; bool sort_and_group,first_record,full_join,group, no_field_update; table_map const_table_map,outer_join; - ha_rows send_records,found_records; + ha_rows send_records,found_records,examined_rows,row_limit; POSITION positions[MAX_TABLES+1],best_positions[MAX_TABLES+1]; double best_read; List<Item> *fields; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 38c068d35c3..39ddb79e9de 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -781,7 +781,10 @@ store_create_info(THD *thd, TABLE *table, String *packet) List<Item> field_list; char tmp[MAX_FIELD_WIDTH]; String type(tmp, sizeof(tmp)); - packet->append("CREATE TABLE ", 13); + if (table->tmp_table) + packet->append("CREATE TEMPORARY TABLE ", 23); + else + packet->append("CREATE TABLE ", 13); append_identifier(thd,packet,table->real_name); packet->append(" (\n", 3); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 77aaf1edae4..78721c3e8f9 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1633,6 +1633,7 @@ copy_data_between_tables(TABLE *from,TABLE *to, TABLE_LIST tables; List<Item> fields; List<Item> all_fields; + ha_rows examined_rows; DBUG_ENTER("copy_data_between_tables"); if (!(copy= new Copy_field[to->fields])) @@ -1668,7 +1669,8 @@ copy_data_between_tables(TABLE *from,TABLE *to, if (setup_order(thd, &tables, fields, all_fields, order) || !(sortorder=make_unireg_sortorder(order, &length)) || (from->found_records = filesort(&from, sortorder, length, - (SQL_SELECT *) 0, 0L, HA_POS_ERROR)) + (SQL_SELECT *) 0, 0L, HA_POS_ERROR, + &examined_rows)) == HA_POS_ERROR) goto err; }; |