1. 06 Oct, 2008 1 commit
    • Guilhem Bichot's avatar
      Fix for BUG#31612 · 84c1fffa
      Guilhem Bichot authored
      "Trigger fired multiple times leads to gaps in auto_increment sequence".
      The bug was that if a trigger fired multiple times inside a top
      statement (for example top-statement is a multi-row INSERT,
      and trigger is ON INSERT), and that trigger inserted into an auto_increment
      column, then gaps could be observed in the auto_increment sequence,
      even if there were no other users of the database (no concurrency).
      It was wrong usage of THD::auto_inc_intervals_in_cur_stmt_for_binlog.
      Note that the fix changes "class handler", I'll tell the Storage Engine API team.
      
      mysql-test/r/trigger-trans.result:
        result; before the bugfix, the sequence was 1,2,4,6,8,10,12...
      mysql-test/t/trigger-trans.test:
        test for BUG#31612
      sql/handler.cc:
        See revision comment of handler.h.
        As THD::auto_inc_intervals_in_cur_stmt_for_binlog is cumulative
        over all trigger invokations by the top statement, the
        second invokation of the trigger arrived in handler::update_auto_increment()
        with already one interval in
        THD::auto_inc_intervals_in_cur_stmt_for_binlog. The method thus
        believed it had already reserved one interval for that invokation,
        thus reserved a twice larger interval (heuristic when we don't know
        how large the interval should be: we grow by powers of two). InnoDB
        thus increased its internal per-table auto_increment counter by 2
        while only one row was to be inserted. Hence a gap in the sequence.
        The fix is to use the new handler::auto_inc_intervals_count.
        Note that the trigger's statement knows how many rows it is going
        to insert, but provides estimation_rows_to_insert == 0 (see comments
        in sql_insert.cc why triggers don't call handler::ha_start_bulk_insert()).
        * removing white space at end of line
        * we don't need to maintain THD::auto_inc_intervals_in_cur_stmt_for_binlog
        if no binlogging or if row-based binlogging. Using auto_inc_intervals_count in
        the heuristic makes the heuristic independent of binary logging, which is good.
      sql/handler.h:
        THD::auto_inc_intervals_in_cur_stmt_for_binlog served
         - for binlogging
         - as a heuristic when we have no estimation of how many records the
           statement will insert.
        But the first goal needs to be cumulative over all statements which
        form a binlog event, while the second one needs to be attached to each
        statement. THD::auto_inc_intervals_in_cur_stmt_for_binlog is cumulative,
        leading to BUG#31612. So we introduce handler::auto_inc_intervals_count
        for the second goal. See the revision comment of handler.cc.
        A smaller issue was that, even when the binlog event was only one
        statement (no triggers, no stored functions),
        THD::auto_inc_intervals_in_cur_stmt.nb_elements() could be lower than
        the number of reserved intervals (fooling the heuristic), because its
        append() method collapses two contiguous intervals in one.
        Note that as auto_inc_intervals_count is in class 'handler' and not
        in class 'THD', it does not need to be handled in
        THD::reset|restore_sub_statement_state().
      sql/log.cc:
        Comment is wrong: if auto_increment is second, in handler::update_auto_increment()
        'append' is false and so auto_inc_intervals_in_cur_stmt_for_binlog
        is empty, we do not come here.
      sql/sql_class.h:
        comment
      84c1fffa
  2. 03 Oct, 2008 8 commits
  3. 02 Oct, 2008 6 commits
    • Mats Kindahl's avatar
      Bug #38360: BLACKHOLE replication with RBR is broken · 690fd28a
      Mats Kindahl authored
      Incremental patch to add comments to test cases.
      690fd28a
    • Georgi Kodinov's avatar
      Bug #37348: Crash in or immediately after JOIN::make_sum_func_list · a18639b6
      Georgi Kodinov authored
            
      The optimizer pulls up aggregate functions which should be aggregated in
      an outer select. At some point it may substitute such a function for a field
      in the temporary table. The setup_copy_fields function doesn't take this
      into account and may overrun the copy_field buffer.
            
      Fixed by filtering out the fields referenced through the specialized
      reference for aggregates (Item_aggregate_ref).
      Added an assertion to make sure bugs that cause similar discrepancy 
      don't go undetected.
      
      mysql-test/r/func_group.result:
        Bug #37348: test case
      mysql-test/t/func_group.test:
        Bug #37348: test case
      sql/item.cc:
        Bug #37348: Added a way to distinguish Item_aggregate_ref from the other types of refs
      sql/item.h:
        Bug #37348: Added a way to distinguish Item_aggregate_ref from the other types of refs
      sql/sql_select.cc:
        Bug #37348: 
         - Don't consider copying field references
            seen through Item_aggregate_ref
         - check for discrepancies between the number of expected 
           fields that need copying and the actual fields copied.
      a18639b6
    • Mats Kindahl's avatar
      Bug #38360: BLACKHOLE replication with RBR is broken · 8d9cf89e
      Mats Kindahl authored
      The Blackhole engine did not support row-based replication
      since the delete_row(), update_row(), and the index and range
      searching functions were not implemented.
      
      This patch adds row-based replication support for the
      Blackhole engine by implementing the two functions mentioned
      above, and making the engine pretend that it has found the
      correct row to delete or update when executed from the slave
      SQL thread by implementing index and range searching functions.
      
      It is necessary to only pretend this for the SQL thread, since
      a SELECT executed on the Blackhole engine will otherwise never
      return EOF, causing a livelock.
      
      
      mysql-test/extra/binlog_tests/blackhole.test:
        Blackhole now handles row-based replication.
      mysql-test/extra/rpl_tests/rpl_blackhole.test:
        Test helper file for testing that blackhole actually
        writes something to the binary log on the slave.
      mysql-test/suite/binlog/t/binlog_multi_engine.test:
        Replication now handles row-based replcation.
      mysql-test/suite/rpl/t/rpl_blackhole.test:
        Test that Blackhole works with primary key, index, or none.
      sql/log_event.cc:
        Correcting code to only touch filler bits and leave
        all other bits alone. It is necessary since there is
        no guarantee that the engine will be able to fill in
        the bits correctly (e.g., the blackhole engine).
      storage/blackhole/ha_blackhole.cc:
        Adding definitions for update_row() and delete_row() to return OK
        when executed from the slave SQL thread with thd->query == NULL
        (indicating that row-based replication events are being processed).
        
        Changing rnd_next(), index_read(), index_read_idx(), and
        index_read_last() to return OK when executed from the slave SQL
        thread (faking that the row has been found so that processing
        proceeds to update/delete the row).
      storage/blackhole/ha_blackhole.h:
        Enabling row capabilities for engine.
        Defining write_row(), update_row(), and delete_row().
        Making write_row() private (as it should be).
      8d9cf89e
    • Andrei Elkin's avatar
      45a78d00
    • Andrei Elkin's avatar
      Bug #36968 rpl_temporary_errors.test produces warning in pushbuild · 64accb36
      Andrei Elkin authored
      backporting a part of the bug patch to 5.1.29 tree which uses an older version of mtr.
      
      mysql-test/lib/mtr_report.pl:
        refining a suppression rule.
      64accb36
    • Ramil Kalimullin's avatar
      Merge · 6037e8ec
      Ramil Kalimullin authored
      6037e8ec
  4. 01 Oct, 2008 16 commits
  5. 30 Sep, 2008 9 commits
    • Davi Arnaut's avatar
      Merge from main branch. · 37a6be75
      Davi Arnaut authored
      37a6be75
    • Davi Arnaut's avatar
      Bug#38727: BUILD/compile-solaris-* scripts should compile MySQL with libmtmalloc · 36d8535a
      Davi Arnaut authored
      Link with mtmalloc on Solaris as it is done in our release builds.
      Replace deprecated flag with the newer option as already done in
      other scripts.
      
      BUILD/compile-solaris-amd64-forte:
        Link to mtmalloc and replace deprecated flag.
      BUILD/compile-solaris-amd64-forte-debug:
        Replace deprecated flag.
      BUILD/compile-solaris-sparc:
        Link to mtmalloc.
      BUILD/compile-solaris-sparc-forte:
        Link to mtmalloc
      36d8535a
    • Patrick Crews's avatar
      automerge · e97a45fd
      Patrick Crews authored
      e97a45fd
    • Patrick Crews's avatar
      Merge 5.0 -> 5.1 · 446fd504
      Patrick Crews authored
      446fd504
    • Patrick Crews's avatar
      Automerge · 8c33da07
      Patrick Crews authored
      8c33da07
    • Davi Arnaut's avatar
      Bug#34306: Can't make copy of log tables when server binary log is enabled · 6816cf6a
      Davi Arnaut authored
      Post-merge bug fix: lock_type is a enumeration type and not a bit mask.
      
      sql/sql_cache.cc:
        Check for lock type explicitly. Also err on the safe side and
        invalidate the query cache for any write lock.
      6816cf6a
    • Gleb Shchepa's avatar
      manual merge 5.0-bugteam --> 5.1-bugteam · 0d243986
      Gleb Shchepa authored
      0d243986
    • Gleb Shchepa's avatar
      Fixed bug #17823: 'arc' directories inside database directories. · 3c9d4ea8
      Gleb Shchepa authored
      Server created "arc" directories inside database directories and
      maintained there useless copies of .frm files.
      
      Creation and renaming procedures of those copies as well as
      creation of "arc" directories has been discontinued.
      Removal procedure has been kept untouched to be able to
      cleanup existent database directories by the DROP DATABASE
      query. Also view renaming procedure has been updated to remove
      these directories.
      
      
      sql/parse_file.cc:
        Fixed bug #17823: 'arc' directories inside database directories.
        View/table creation and renaming procedures maintained
        backup copies of .frm files. Those copies are unused yet,
        so this feature was incomplete and unnecessary.
        
        1. Unwanted code has been hidden by FRM_ARCHIVE ifdefs
        (the FRM_ARCHIVE macro is not defined).
        
        2. Renaming procedure has been modified to remove obsolete
        "arc" directories.
      sql/parse_file.h:
        Fixed bug #17823: 'arc' directories inside database directories.
        The "thd" parameter has been added to the rename_in_schema_file()
        function.
      sql/sql_db.cc:
        Fixed bug #17823: 'arc' directories inside database directories.
        Scope of the mysql_rm_arc_files() function has been changed to
        global for use from the parse_file.cc file.
      sql/sql_view.cc:
        Fixed bug #17823: 'arc' directories inside database directories.
        Added the "thd" argument to rename_in_schema_file() calls.
      3c9d4ea8
    • Alexey Botchkov's avatar
      merging · b8734a1c
      Alexey Botchkov authored
      b8734a1c