• konstantin@mysql.com's avatar
    - implement inheritance of sp_instr: public Query_arena. · 4c407943
    konstantin@mysql.com authored
      We need every instruction to have its own arena, because we want to
      track instruction's state (INITIALIZED_FOR_SP -> EXECUTED). Because of 
      `if' statements and other conditional instructions used in stored 
      procedures, not every instruction of a stored procedure gets executed 
      during the first (or even subsequent) execution of the procedure. 
      So it's better if we track the execution state of every instruction 
      independently.
      All instructions of a given procedure now also share sp_head's 
      mem_root, but keep their own free_list.
      This simplifies juggling with free Item lists in sp_head::execute.
    - free_items() moved to be a member of Query_arena. 
    - logic of 'backup_arena' debug member of Query_arena has been
      changed to support
      multi-backups. Until now, TRUE 'backup_arena' meant that there is
      exactly one active backup of the THD arena. Now it means simply that
      the arena is used for backup, so that we can't accidentally overwrite an 
      existing backup. This allows doing multiple backups, e.g. in
      sp_head::execute and Cursor::fetch, when THD arena is already backed up
      but we want to set yet another arena (usually the 'permanent' arena,
      to save permanent transformations/optimizations of a parsed tree).
    4c407943
sql_class.cc 45.2 KB