1. 21 Dec, 2010 3 commits
    • Marko Mäkelä's avatar
      1cd9368f
    • Marko Mäkelä's avatar
      Bug #55284 Double BLOB free due to lock wait while updating PRIMARY KEY · 20bfda19
      Marko Mäkelä authored
      This bug fix requires that Bug #58912 be fixed as well (bzr revision id
      marko.makela@oracle.com-20101221093919-mcmmgd4zpse9567d). Otherwise,
      another double BLOB free could occur when InnoDB would try to perform
      an update-in-place as delete-and-insert-by-update-in-place.
      
      row_upd_clust_rec_by_insert(): Do not disown the externally stored
      columns from the old record (btr_cur_mark_extern_inherited_fields())
      until after checking the foreign key constraints and successfully
      inserting the updated record. If a lock wait timeout occurs between
      the delete-marking of the old record and the insertion of the updated
      record, mark the columns inherited before retrying the insert.
      Distinguish the state UPD_NODE_INSERT_BLOB from
      UPD_NODE_INSERT_CLUSTERED.
      
      btr_cur_del_mark_set_clust_rec(): Replace the cursor with
      block,rec,index,offsets so that the offsets need not be recalculated.
      Assert that rec is on a clustered index leaf page.
      
      btr_cur_disown_inherited_fields(): Renamed from
      btr_cur_mark_extern_inherited_fields(). Use
      upd_get_field_by_field_no(). Assert that there are externally stored
      columns. Assert that a mini-transaction is passed. Remove the return
      status. (The only caller, row_upd_clust_rec_by_insert(), will have
      determined that some fields have changed ownership.)
      
      btr_cur_mark_dtuple_inherited_extern(): Rename to
      row_upd_clust_rec_by_insert_inherit_func() and declare as static. Add
      the debug parameters rec, offsets. When rec is given, assert that the
      off-page columns match those in the inesrt tuple and that the off-page
      columns are owned by the record. Assert that the non-updated off-page
      columns in the insert tuple are owned, and mark them inherited.
      
      row_upd_clust_rec_by_insert_inherit(): A wrapper macro for
      row_upd_clust_rec_by_insert_inherit_func().
      
      row_undo_mod_upd_exist_sec(): Adjust a comment about
      row_upd_clust_rec_by_insert().
      
      rb:508 approved by Jimmy Yang
      20bfda19
    • Marko Mäkelä's avatar
      Bug#58912 InnoDB unnecessarily avoids update-in-place on column prefix indexes · d0c5c8f5
      Marko Mäkelä authored
      row_upd_changes_ord_field_binary(): Do not return TRUE if the update
      vector changes a column that is covered by a prefix index, but does
      not change the column prefix. Add the row_ext_t parameter for
      determining whether the prefixes of externally stored columns match.
      
      dfield_datas_are_binary_equal(): Add the parameter len, for comparing
      column prefixes when len > 0.
      
      innodb.test: Add a test case where the patch of Bug #55284 failed
      without this fix.
      
      rb:537 approved by Jimmy Yang
      d0c5c8f5
  2. 17 Dec, 2010 1 commit
  3. 16 Dec, 2010 1 commit
  4. 14 Dec, 2010 2 commits
  5. 12 Dec, 2010 3 commits
  6. 10 Dec, 2010 3 commits
    • Davi Arnaut's avatar
      0b711595
    • Dmitry Shulga's avatar
      80b9ee66
    • Dmitry Shulga's avatar
      Fixed bug#54486 - assert in my_seek, concurrent · d3ea2409
      Dmitry Shulga authored
      DROP/CREATE SCHEMA, CREATE TABLE, REPAIR.
      
      The cause of assert was concurrent execution of
      DROP DATABASE and REPAIR TABLE where first statement
      deleted table's file .TMD at the same time as
      REPAIR TABLE tried to read file details from the old file
      that was just removed.
      
      Additionally was fixed trouble when DROP TABLE try delete
      all files belong to table being dropped at the same time
      when REPAIR TABLE statement has just deleted .TMD file.
      
      No regression test added because this would require adding a
      sync point to mysys/my_redel.c. Since this bug is not present in
      5.5+, adding test coverage was considered unnecessary.
      The patch has been verified using RQG testing.
      
      
      sql/sql_db.cc:
        mysql_rm_known_files() modified: ignore possible ENOENT error
        when trying delete all table's files. Such aggressive 
        algorithm permits skip already deleted (in another thread)
        files.
        
        Installation of Drop_table_error_handler as internal error handler
        moved from mysql_rm_db() to mysql_rm_knowns_files() near to place
        where source of possible errors (call to mysql_rm_table_part2) located.
      storage/myisam/mi_check.c:
        mi_repair() was modified: set param->retry_repair= 0
        in order to don't call following failover procedure
        in ha_myisam::repair().
      d3ea2409
  7. 09 Dec, 2010 16 commits
  8. 08 Dec, 2010 2 commits
    • Georgi Kodinov's avatar
      Bug #57954: BIT_AND function returns incorrect results · 88478879
      Georgi Kodinov authored
       when semijoin=on
      
      When setting the aggregate function as having no rows to report
      the function no_rows_in_result() was calling Item_sum::reset().
      However this function in addition to cleaning up the aggregate 
      value by calling aggregator_clear() was also adding the current
      value to the aggregate value by calling aggregator_add().
      Fixed by making no_rows_in_result() to call aggregator_clear()
      directly.
      Renamed Item_sum::reset to Item_sum::reset_and_add() to
      and added a comment to avoid misinterpretation of what the
      function does.
      88478879
    • Sergey Vojtovich's avatar
      Merge fix for BUG58205 to 5.5-bugteam. · cdf723aa
      Sergey Vojtovich authored
      cdf723aa
  9. 07 Dec, 2010 9 commits
    • Marc Alff's avatar
      Bug#58798 SHOW ENGINE PERFORMANCE_SCHEMA STATUS: incorrect table lettercase · cf24716c
      Marc Alff authored
      Before this fix, the output of SHOW ENGINE PERFORMANCE_SCHEMA STATUS
      used uppercase to name performance schema tables.
      
      This is inconsistent since performance schema tables have been renamed to lowercase.
      
      Also, an old table 'PROCESSLIST' was still visible, 
      even after this table got renamed to 'threads'.
      
      This fix:
      - correctly uses lowercases in the output, to match the current naming.
      - replaced 'PROCESSLIST' with 'threads'.
      
      Tested the output of SHOW ENGINE PERFORMANCE_SCHEMA STATUS manually.
      No automated test cases can be written for this, 
      since the output is too platform dependent (sizes).
      cf24716c
    • Ramil Kalimullin's avatar
      Fix for bug #58669: read_only not enforced on 5.5.x · f026469a
      Ramil Kalimullin authored
      merged from mysql-5.5.8-release tree,
      revision: ramil@mysql.com-20101203174908-217tdkn150vieha9
      f026469a
    • Guilhem Bichot's avatar
      merge from latest 5.5-bugteam · 4bd4374b
      Guilhem Bichot authored
      4bd4374b
    • Guilhem Bichot's avatar
      Fix for Bug#57932 "query with avg returns incorrect results": · c1a40554
      Guilhem Bichot authored
      when there was one NULL value, AVG(DISTINCT) could forget about other values.
      See commit comment of item_sum.cc.
      
      mysql-test/r/func_group.result:
        before the code fix, both SELECTs would return NULL
      sql/item_sum.cc:
        Assume we are executing "SELECT AVG([DISTINCT] some_field) FROM some_table".
        and some_field is the single field of some_table for simplicity.
        Each time a row is processed (evaluate_join_record()->
        end_send_group()->update_sum_func()) an aggregator is notified,
        which itself notifies an Item_sum_avg.
        Without DISTINCT, this Item_sum_avg immediately increments its
        internal "sum of values" and "count of values" (the latter being
        Item_sum_avg::count). The count is incremented only if the row's value
        is not NULL (in Item_sum_avg::add()), per AVG() semantices. This row's value
        is available in args[0] of Item_sum_avg ("args[0]" stands for
        "the first argument of the item": it's an Item_field which automatically
        receives the row's value when a row is read from the table).
        bool Item_sum_avg::add()
        {
          if (Item_sum_sum::add()) << calculates the sum (ignores NULL)
            return TRUE;
          if (!args[0]->null_value)<<if added value is not NULL
            count++;       <<increment "count"
          return FALSE;
        }
        and everything works.
        With DISTINCT, when a row is processed by evaluate_join_record(),
        Item_sum_avg does no immediate computation, rather stores
        the row's value in a tree (to throw the value away if it is a duplicate
        of previous value, otherwise to remember all
        distinct values). It's only when it's time to send the average to the
        user (at end of the query:
        sub_select(end_of_records=true)->end_send_group()->
        select_send->send_data()->Protocol::send_result_set_row()->
        Item::send()->Item_sum_avg->val_str()), that we iterate over the tree,
        compute the sum and count: for this, for each element of the tree,
        Item_sum_avg::add() is called and has the same two steps as before:
        * Item_sum_sum::add() updates the sum (finding the tree element's value
        correctly, and determining correctly its NULLness - look for "arg_is_null"
        in that function)
        * the "if (!args[0]->null_value)" test right after, breaks: it uses args[0],
        which isn't the tree's element but rather the value for the last row
        processed by evaluate_join_record(). So if that last row was NULL,
        "count" stays 0 for each row, and AVG() then returns NULL (count==0 =>
        NULL, per AVG() semantics).
        The fix is to let the aggregator tell whether the value
        it just saw was NULL. The aggregator knows where to get the info
        thanks to virtual functions. Item_sum_sum::add() now asks
        the aggregator. Item_sum_avg() also asks the aggregator
        and then knows it shouldn't increment "count".
      sql/item_sum.h:
        Aggregator can now tell about value/NULLness of just-aggregated value
      c1a40554
    • Nirbhay Choubey's avatar
      dfe47780
    • Davi Arnaut's avatar
      Bug#57991: Compiler flag change build error : adler32.c · 1948e7af
      Davi Arnaut authored
      Do not use the same maintainer mode flags for both GCC and ICC.
      The -Wall option for ICC enables more warnings than its GCC
      counterpart.
      1948e7af
    • Luis Soares's avatar
      BUG#58416 · b99fcd10
      Luis Soares authored
      Null merge to from mysql-5.1-bugteam to mysql-5.5-bugteam.
      Test case does not exist in 5.5 tree.
      b99fcd10
    • Luis Soares's avatar
      BUG#58416 · 1151e0fc
      Luis Soares authored
      Automerging bzr bundle from bug report into latest 
      mysql-5.1-bugteam.
      1151e0fc
    • Marc Alff's avatar
      Valgrind 3.5.0 cleanup, continued · 3e1aa4fc
      Marc Alff authored
      3e1aa4fc