Loading sql/event_db_repository.cc +2 −2 Original line number Diff line number Diff line Loading @@ -452,7 +452,7 @@ Event_db_repository::table_scan_all_for_i_s(THD *thd, TABLE *schema_table, READ_RECORD read_record_info; DBUG_ENTER("Event_db_repository::table_scan_all_for_i_s"); init_read_record(&read_record_info, thd, event_table, NULL, 1, 0); init_read_record(&read_record_info, thd, event_table, NULL, 1, 0, FALSE); /* rr_sequential, in read_record(), returns 137==HA_ERR_END_OF_FILE, Loading Loading @@ -925,7 +925,7 @@ Event_db_repository::drop_events_by_field(THD *thd, DBUG_VOID_RETURN; /* only enabled events are in memory, so we go now and delete the rest */ init_read_record(&read_record_info, thd, table, NULL, 1, 0); init_read_record(&read_record_info, thd, table, NULL, 1, 0, FALSE); while (!ret && !(read_record_info.read_record(&read_record_info)) ) { char *et_field= get_field(thd->mem_root, table->field[field]); Loading sql/events.cc +1 −1 Original line number Diff line number Diff line Loading @@ -1149,7 +1149,7 @@ Events::load_events_from_db(THD *thd) DBUG_RETURN(TRUE); } init_read_record(&read_record_info, thd, table, NULL, 0, 1); init_read_record(&read_record_info, thd, table, NULL, 0, 1, FALSE); while (!(read_record_info.read_record(&read_record_info))) { Event_queue_element *et; Loading sql/filesort.cc +53 −13 Original line number Diff line number Diff line Loading @@ -410,6 +410,56 @@ static uchar *read_buffpek_from_file(IO_CACHE *buffpek_pointers, uint count, DBUG_RETURN(tmp); } #ifndef DBUG_OFF /* Print a text, SQL-like record representation into dbug trace. Note: this function is a work in progress: at the moment - column read bitmap is ignored (can print garbage for unused columns) - there is no quoting */ static void dbug_print_record(TABLE *table, bool print_rowid) { char buff[1024]; Field **pfield; String tmp(buff,sizeof(buff),&my_charset_bin); DBUG_LOCK_FILE; fprintf(DBUG_FILE, "record ("); for (pfield= table->field; *pfield ; pfield++) fprintf(DBUG_FILE, "%s%s", (*pfield)->field_name, (pfield[1])? ", ":""); fprintf(DBUG_FILE, ") = "); fprintf(DBUG_FILE, "("); for (pfield= table->field; *pfield ; pfield++) { Field *field= *pfield; if (field->is_null()) fwrite("NULL", sizeof(char), 4, DBUG_FILE); if (field->type() == MYSQL_TYPE_BIT) (void) field->val_int_as_str(&tmp, 1); else field->val_str(&tmp); fwrite(tmp.ptr(),sizeof(char),tmp.length(),DBUG_FILE); if (pfield[1]) fwrite(", ", sizeof(char), 2, DBUG_FILE); } fprintf(DBUG_FILE, ")"); if (print_rowid) { fprintf(DBUG_FILE, " rowid "); for (uint i=0; i < table->file->ref_length; i++) { fprintf(DBUG_FILE, "%x", (uchar)table->file->ref[i]); } } fprintf(DBUG_FILE, "\n"); DBUG_UNLOCK_FILE; } #endif /** Search after sort_keys and write them into tempfile. Loading Loading @@ -488,13 +538,10 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, current_thd->variables.read_buff_size); } READ_RECORD read_record_info; if (quick_select) { if (select->quick->reset()) DBUG_RETURN(HA_POS_ERROR); init_read_record(&read_record_info, current_thd, select->quick->head, select, 1, 1); } /* Remember original bitmaps */ Loading @@ -514,12 +561,13 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, { if (quick_select) { if ((error= read_record_info.read_record(&read_record_info))) if ((error= select->quick->get_next())) { error= HA_ERR_END_OF_FILE; break; } file->position(sort_form->record[0]); DBUG_EXECUTE_IF("debug_filesort", dbug_print_record(sort_form, TRUE);); } else /* Not quick-select */ { Loading Loading @@ -576,15 +624,7 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, if (thd->is_error()) break; } if (quick_select) { /* index_merge quick select uses table->sort when retrieving rows, so free resoures it has allocated. */ end_read_record(&read_record_info); } else if (!quick_select) { (void) file->extra(HA_EXTRA_NO_CACHE); /* End cacheing of records */ if (!next_pos) Loading sql/mysql_priv.h +2 −2 Original line number Diff line number Diff line Loading @@ -2175,8 +2175,8 @@ ulonglong get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg, int test_if_number(char *str,int *res,bool allow_wildcards); void change_byte(uchar *,uint,char,char); void init_read_record(READ_RECORD *info, THD *thd, TABLE *reg_form, SQL_SELECT *select, int use_record_cache, bool print_errors); SQL_SELECT *select, int use_record_cache, bool print_errors, bool disable_rr_cache); void init_read_record_idx(READ_RECORD *info, THD *thd, TABLE *table, bool print_error, uint idx); void end_read_record(READ_RECORD *info); Loading sql/opt_range.cc +8 −4 Original line number Diff line number Diff line Loading @@ -7936,6 +7936,7 @@ int QUICK_INDEX_MERGE_SELECT::read_keys_and_merge() handler *file= head->file; DBUG_ENTER("QUICK_INDEX_MERGE_SELECT::read_keys_and_merge"); file->extra(HA_EXTRA_KEYREAD); head->prepare_for_position(); Loading Loading @@ -7994,15 +7995,17 @@ int QUICK_INDEX_MERGE_SELECT::read_keys_and_merge() } DBUG_PRINT("info", ("ok")); /* ok, all row ids are in Unique */ /* Ok all rowids are in the Unique now. The next call will initialize head->sort structure so it can be used to iterate through the rowids sequence. */ result= unique->get(head); delete unique; doing_pk_scan= FALSE; /* index_merge currently doesn't support "using index" at all */ file->extra(HA_EXTRA_NO_KEYREAD); /* start table scan */ init_read_record(&read_record, thd, head, (SQL_SELECT*) 0, 1, 1); init_read_record(&read_record, thd, head, (SQL_SELECT*) 0, 1 , 1, TRUE); DBUG_RETURN(result); } Loading @@ -8028,6 +8031,7 @@ int QUICK_INDEX_MERGE_SELECT::get_next() { result= HA_ERR_END_OF_FILE; end_read_record(&read_record); free_io_cache(head); /* All rows from Unique have been retrieved, do a clustered PK scan */ if (pk_quick_select) { Loading Loading
sql/event_db_repository.cc +2 −2 Original line number Diff line number Diff line Loading @@ -452,7 +452,7 @@ Event_db_repository::table_scan_all_for_i_s(THD *thd, TABLE *schema_table, READ_RECORD read_record_info; DBUG_ENTER("Event_db_repository::table_scan_all_for_i_s"); init_read_record(&read_record_info, thd, event_table, NULL, 1, 0); init_read_record(&read_record_info, thd, event_table, NULL, 1, 0, FALSE); /* rr_sequential, in read_record(), returns 137==HA_ERR_END_OF_FILE, Loading Loading @@ -925,7 +925,7 @@ Event_db_repository::drop_events_by_field(THD *thd, DBUG_VOID_RETURN; /* only enabled events are in memory, so we go now and delete the rest */ init_read_record(&read_record_info, thd, table, NULL, 1, 0); init_read_record(&read_record_info, thd, table, NULL, 1, 0, FALSE); while (!ret && !(read_record_info.read_record(&read_record_info)) ) { char *et_field= get_field(thd->mem_root, table->field[field]); Loading
sql/events.cc +1 −1 Original line number Diff line number Diff line Loading @@ -1149,7 +1149,7 @@ Events::load_events_from_db(THD *thd) DBUG_RETURN(TRUE); } init_read_record(&read_record_info, thd, table, NULL, 0, 1); init_read_record(&read_record_info, thd, table, NULL, 0, 1, FALSE); while (!(read_record_info.read_record(&read_record_info))) { Event_queue_element *et; Loading
sql/filesort.cc +53 −13 Original line number Diff line number Diff line Loading @@ -410,6 +410,56 @@ static uchar *read_buffpek_from_file(IO_CACHE *buffpek_pointers, uint count, DBUG_RETURN(tmp); } #ifndef DBUG_OFF /* Print a text, SQL-like record representation into dbug trace. Note: this function is a work in progress: at the moment - column read bitmap is ignored (can print garbage for unused columns) - there is no quoting */ static void dbug_print_record(TABLE *table, bool print_rowid) { char buff[1024]; Field **pfield; String tmp(buff,sizeof(buff),&my_charset_bin); DBUG_LOCK_FILE; fprintf(DBUG_FILE, "record ("); for (pfield= table->field; *pfield ; pfield++) fprintf(DBUG_FILE, "%s%s", (*pfield)->field_name, (pfield[1])? ", ":""); fprintf(DBUG_FILE, ") = "); fprintf(DBUG_FILE, "("); for (pfield= table->field; *pfield ; pfield++) { Field *field= *pfield; if (field->is_null()) fwrite("NULL", sizeof(char), 4, DBUG_FILE); if (field->type() == MYSQL_TYPE_BIT) (void) field->val_int_as_str(&tmp, 1); else field->val_str(&tmp); fwrite(tmp.ptr(),sizeof(char),tmp.length(),DBUG_FILE); if (pfield[1]) fwrite(", ", sizeof(char), 2, DBUG_FILE); } fprintf(DBUG_FILE, ")"); if (print_rowid) { fprintf(DBUG_FILE, " rowid "); for (uint i=0; i < table->file->ref_length; i++) { fprintf(DBUG_FILE, "%x", (uchar)table->file->ref[i]); } } fprintf(DBUG_FILE, "\n"); DBUG_UNLOCK_FILE; } #endif /** Search after sort_keys and write them into tempfile. Loading Loading @@ -488,13 +538,10 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, current_thd->variables.read_buff_size); } READ_RECORD read_record_info; if (quick_select) { if (select->quick->reset()) DBUG_RETURN(HA_POS_ERROR); init_read_record(&read_record_info, current_thd, select->quick->head, select, 1, 1); } /* Remember original bitmaps */ Loading @@ -514,12 +561,13 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, { if (quick_select) { if ((error= read_record_info.read_record(&read_record_info))) if ((error= select->quick->get_next())) { error= HA_ERR_END_OF_FILE; break; } file->position(sort_form->record[0]); DBUG_EXECUTE_IF("debug_filesort", dbug_print_record(sort_form, TRUE);); } else /* Not quick-select */ { Loading Loading @@ -576,15 +624,7 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, if (thd->is_error()) break; } if (quick_select) { /* index_merge quick select uses table->sort when retrieving rows, so free resoures it has allocated. */ end_read_record(&read_record_info); } else if (!quick_select) { (void) file->extra(HA_EXTRA_NO_CACHE); /* End cacheing of records */ if (!next_pos) Loading
sql/mysql_priv.h +2 −2 Original line number Diff line number Diff line Loading @@ -2175,8 +2175,8 @@ ulonglong get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg, int test_if_number(char *str,int *res,bool allow_wildcards); void change_byte(uchar *,uint,char,char); void init_read_record(READ_RECORD *info, THD *thd, TABLE *reg_form, SQL_SELECT *select, int use_record_cache, bool print_errors); SQL_SELECT *select, int use_record_cache, bool print_errors, bool disable_rr_cache); void init_read_record_idx(READ_RECORD *info, THD *thd, TABLE *table, bool print_error, uint idx); void end_read_record(READ_RECORD *info); Loading
sql/opt_range.cc +8 −4 Original line number Diff line number Diff line Loading @@ -7936,6 +7936,7 @@ int QUICK_INDEX_MERGE_SELECT::read_keys_and_merge() handler *file= head->file; DBUG_ENTER("QUICK_INDEX_MERGE_SELECT::read_keys_and_merge"); file->extra(HA_EXTRA_KEYREAD); head->prepare_for_position(); Loading Loading @@ -7994,15 +7995,17 @@ int QUICK_INDEX_MERGE_SELECT::read_keys_and_merge() } DBUG_PRINT("info", ("ok")); /* ok, all row ids are in Unique */ /* Ok all rowids are in the Unique now. The next call will initialize head->sort structure so it can be used to iterate through the rowids sequence. */ result= unique->get(head); delete unique; doing_pk_scan= FALSE; /* index_merge currently doesn't support "using index" at all */ file->extra(HA_EXTRA_NO_KEYREAD); /* start table scan */ init_read_record(&read_record, thd, head, (SQL_SELECT*) 0, 1, 1); init_read_record(&read_record, thd, head, (SQL_SELECT*) 0, 1 , 1, TRUE); DBUG_RETURN(result); } Loading @@ -8028,6 +8031,7 @@ int QUICK_INDEX_MERGE_SELECT::get_next() { result= HA_ERR_END_OF_FILE; end_read_record(&read_record); free_io_cache(head); /* All rows from Unique have been retrieved, do a clustered PK scan */ if (pk_quick_select) { Loading