~sergefp/mysql-server/mysql-6.0-opt

« back to all changes in this revision

Viewing changes to sql/sql_select.h

  • Committer: Igor Babaev
  • Date: 2009-06-02 21:58:56 UTC
  • Revision ID: igor@mysql.com-20090602215856-utdq548h030qjn3r
Fixed bug #45092.
When the descriptors of the data fields stored in a join buffer 
are created first the descriptors of the the fields used in
building access keys are constructed. The construction is done
with a call of the function add_table_data_fields_to_join_cache.
One of the parameters of this function, namely field_set, specifies
for what fields the descriptors are to be constructed. This function
is called once again for the remaining fields.
As the function adds new elements to the array of the field
descriptors it has to save the number of the descriptors that
has been already built in order to be able continue adding them
later. The same is true for the array of pointers to the field
descriptors that is created for blob fields.
However the length of this array was not been saved. As a result,
when the remaining blob fields were processed the pointers to
their field descriptors overwrote the pointers to the descriptors
of the blob fields used to build the access keys.

Show diffs side-by-side

added added

removed removed

Lines of Context:
476
476
  uint referenced_fields;
477
477
   
478
478
  /* 
479
 
    The current number of already created data field descriptors. This number 
480
 
    is can be useful for implementations of the init functions.  
 
479
    The current number of already created data field descriptors.
 
480
    This number can be useful for implementations of the init methods.  
481
481
  */
482
482
  uint data_field_count; 
483
483
 
484
484
  /* 
 
485
    The current number of already created pointers to the data field
 
486
    descriptors. This number can be useful for implementations of
 
487
    the init methods.  
 
488
  */
 
489
  uint data_field_ptr_count; 
 
490
  /* 
485
491
    Array of the descriptors of fields containing 'fields' elements.
486
492
    These are all fields that are stored for a record in the cache. 
487
493
  */