• unknown's avatar
    Fix for bug#22338 "Valgrind warning: uninitialized variable in · 5d46e299
    unknown authored
    create_tmp_table()".
    
    The fix for bug 21787 "COUNT(*) + ORDER BY + LIMIT returns wrong
    result" introduced valgrind warnings which occured during execution
    of information_schema.test and sp-prelocking.test in version 5.0.
    There were no user visible effects.
    
    The latter fix made create_tmp_table() dependant on
    THD::lex::current_select value. Valgrind warnings occured when this
    function was executed and THD::lex::current_select member pointed
    to uninitialized SELECT_LEX instance.
    
    This fix tries to remove this dependancy by moving some logic
    outside of create_tmp_table() function.
    
    
    sql/sql_select.cc:
      create_tmp_table():
        Moved code which is responsible for determining if optimization
        which pushes down LIMIT clause to temporary table creation is
        applicable out of this function.
        Such move made this function independant of THD::lex::current_select
        value and removed valgrind warnings which occured in cases when this
        member pointed to uninitialized SELECT_LEX object (particularly these
        warnings occured in sp-prelocking.test and information_schema.test
        in 5.0). This seems like a better solution than trying to force this
        pointer always to point to relevant select because:
        - In some cases when we use create_tmp_table() there are no relevant
          SELECT_LEX object (we use it just to create temporary table/object).
        - There is only one place in code where we call this funciton and
          where this optimization can be enabled. And in this place we
          already have some logic which tries to determine if it is applicable.
    5d46e299
sql_select.cc 298 KB