• Tor Didriksen's avatar
    Patch for Bug#13805127: Stored program cache produces wrong result in same THD. · ed418461
    Tor Didriksen authored
    Background:
    
      - as described in MySQL Internals Prepared Stored
        (http://forge.mysql.com/wiki/MySQL_Internals_Prepared_Stored),
        the Optimizer sometimes does destructive changes to the parsed
        LEX-object (Item-tree), which makes it impossible to re-use
        that tree for PS/SP re-execution.
    
      - in order to be able to re-use the Item-tree, the destructive
        changes are remembered and rolled back after the statement execution.
    
    The problem, discovered by this bug, was that the objects representing
    GROUP-BY clause did not restored after query execution. So, the GROUP-BY
    part of the statement could not be properly re-initialized for re-execution
    after destructive changes.
    
    Those objects do not take part in the Item-tree, so they can not be saved
    using the approach for Item-tree.
    
    The fix is as follows:
    
      - introduce a new array in st_select_lex to store the original
        ORDER pointers, representing the GROUP-BY clause;
    
      - Initialize this array in fix_prepare_information().
    
      - restore the list of GROUP-BY items in reinit_stmt_before_use().
    ed418461
mem_root_array.h 4.91 KB