1. 07 Oct, 2010 19 commits
    • Davi Arnaut's avatar
      Bug#56822: Add a thread state for sessions waiting on the query cache lock · 76643a46
      Davi Arnaut authored
      The problem was that threads waiting on the query cache lock
      are not easily seen due to the lack of a state indicating that
      the thread is waiting on the said lock. This made it difficult
      for users to quickly spot (for example, via SHOW PROCESSLIST)
      a query cache contention problem.
      
      The solution is to update the thread state when the query cache
      lock needs to be acquired. Whenever the lock is to be acquired,
      the thread state is updated to "Waiting for query cache lock"
      and is reset once the lock is granted or the wait is interrupted.
      The intention is to make query cache related hangs more evident.
      
      To further investigate query cache related locking problems, one
      may use PERFORMANCE_SCHEMA to track the overhead associated with
      the locking bits and determine which particular lock is being a
      contention point.
      76643a46
    • Evgeny Potemkin's avatar
      Auto-merged. · 8fceaa38
      Evgeny Potemkin authored
      8fceaa38
    • Evgeny Potemkin's avatar
      Bug#57095: Wrongly chosen expression cache type led to a wrong result. · 2fd0bc63
      Evgeny Potemkin authored
      The coalesce function returned DATETIME type due to a DATETIME argument, but
      since it's not a date/time function it can't return correct int value for
      it. Nevertheless Item_datetime_cache was chosen to cache coalesce's result
      and that led to a wrong result.
      
      Now Item_datetime_cache is used only for those function that could return
      correct int representation of DATETIME values.
      2fd0bc63
    • Sergey Vojtovich's avatar
      818e848d
    • Georgi Kodinov's avatar
      null-merge to 5.5-bugteam · a041d958
      Georgi Kodinov authored
      a041d958
    • Georgi Kodinov's avatar
      merge · a25b6902
      Georgi Kodinov authored
      a25b6902
    • Georgi Kodinov's avatar
      bumped the version to 5.1.53 · bf488324
      Georgi Kodinov authored
      bf488324
    • Jon Olav Hauglid's avatar
      Merge from mysql-5.5-runtime to mysql-5.5-bugteam · ee1ea445
      Jon Olav Hauglid authored
      No conflicts
      ee1ea445
    • Dmitry Shulga's avatar
      Fixed bug#45445 - cannot execute procedures with thread_stack · eec581e0
      Dmitry Shulga authored
      set to 128k.
      eec581e0
    • Vasil Dimov's avatar
      Merge mysql-5.5-innodb -> mysql-5.5-bugteam · 8bdbfe6a
      Vasil Dimov authored
      8bdbfe6a
    • Calvin Sun's avatar
      bug#56318: adjust the result files. · 2913b025
      Calvin Sun authored
      2913b025
    • Martin Hansson's avatar
      Bug#56423: Different count with SELECT and CREATE SELECT queries · d6ee2ecf
      Martin Hansson authored
      This is the 5.5 version of the fix. The 5.1 version was too complicated to
      merge and was null merged.
      
      This is a regression from the fix for bug no 38999. A storage engine capable
      of reading only a subset of a table's columns updates corresponding bits in
      the read buffer to signal that it has read NULL values for the corresponding
      columns. It cannot, and should not, update any other bits. Bug no 38999
      occurred because the implementation of UPDATE statements compare the NULL bits
      using memcmp, inadvertently comparing bits that were never requested from the
      storage engine. The regression was caused by the storage engine trying to
      alleviate the situation by writing to all NULL bits, even those that it had no
      knowledge of. This has devastating effects for the index merge algorithm,
      which relies on all NULL bits, except those explicitly requested, being left
      unchanged.
      
      The fix reverts the fix for bug no 38999 in both InnoDB and InnoDB plugin and
      changes the server's method of comparing records. For engines that always read
      entire rows, we proceed as usual. For engines capable of reading only select
      columns, the record buffers are now compared on a column by column basis. An
      assertion was also added so that non comparable buffers are never read. Some
      relevant copy-pasted code was also consolidated in a new function.
      d6ee2ecf
    • Magnus Blåudd's avatar
      Bug#56397 The version of NDB in MySQL Server should be constant · ef7300b8
      Magnus Blåudd authored
       - Fix the version of NDB in MySQL Server to 5.5.7(although it's actually 6.2.18)
      ef7300b8
    • Magnus Blåudd's avatar
      WL#5503 SEAGULL: Move config/ac-macros/ha_ndbcluster.m4 to storage/ndb/ · 455d1f6a
      Magnus Blåudd authored
       - Move file ha_ndbcluster.m4
       - Move "sinclude" directive from configure.in to storag/ndb/plug.in
      455d1f6a
    • Evgeny Potemkin's avatar
      Auto-merged. · 893b89d9
      Evgeny Potemkin authored
      893b89d9
    • Martin Hansson's avatar
      8cf992dc
    • Evgeny Potemkin's avatar
      Auto-merged. · 28af216c
      Evgeny Potemkin authored
      28af216c
    • Martin Hansson's avatar
      Bug#56423: Different count with SELECT and CREATE SELECT queries · 9c82ecec
      Martin Hansson authored
      This is a regression from the fix for bug no 38999. A storage engine capable
      of reading only a subset of a table's columns updates corresponding bits in
      the read buffer to signal that it has read NULL values for the corresponding
      columns. It cannot, and should not, update any other bits. Bug no 38999
      occurred because the implementation of UPDATE statements compare the NULL bits
      using memcmp, inadvertently comparing bits that were never requested from the
      storage engine. The regression was caused by the storage engine trying to
      alleviate the situation by writing to all NULL bits, even those that it had no
      knowledge of. This has devastating effects for the index merge algorithm,
      which relies on all NULL bits, except those explicitly requested, being left
      unchanged.
      
      The fix reverts the fix for bug no 38999 in both InnoDB and InnoDB plugin and
      changes the server's method of comparing records. For engines that always read
      entire rows, we proceed as usual. For engines capable of reading only select
      columns, the record buffers are now compared on a column by column basis. An
      assertion was also added so that non comparable buffers are never read. Some
      relevant copy-pasted code was also consolidated in a new function.
      9c82ecec
    • Evgeny Potemkin's avatar
      Bug#57039: constant subtime expression returns incorrect result. · 4bfec573
      Evgeny Potemkin authored
      The subtime function wasn't able to produce correct int representation of
      its result. For constant expressions the Item_datetime_cache is used to
      speedup evaluation and Item_datetime_cache expects underlying item to return
      correct int representation of DATETIME value. These two factors combined led
      to a wrong query result.
      
      Now the Item_func_add_time has function val_datetime which performs the
      calculation and saves result into given MYSQL_TIME struct, it also sets
      null_value to appropriate value. val_int and val_str member functions
      convert the result obtained from val_datetime to int or string respectively
      and returns it.
      4bfec573
  2. 06 Oct, 2010 8 commits
    • Alexander Nozdrin's avatar
      Fix for Bug#57094 (Copyright notice incorrect?). · f79f6e0c
      Alexander Nozdrin authored
      The fix is to:
        - introduce ORACLE_WELCOME_COPYRIGHT_NOTICE define to have a single place
          to specify copyright notice;
        - replace custom copyright notices with ORACLE_WELCOME_COPYRIGHT_NOTICE
          in programs.
      f79f6e0c
    • Davi Arnaut's avatar
      Bug#49938: Failing assertion: inode or deadlock in fsp/fsp0fsp.c · 5f911fa8
      Davi Arnaut authored
      Bug#54678: InnoDB, TRUNCATE, ALTER, I_S SELECT, crash or deadlock
      
      - Incompatible change: truncate no longer resorts to a row by
      row delete if the storage engine does not support the truncate
      method. Consequently, the count of affected rows does not, in
      any case, reflect the actual number of rows.
      
      - Incompatible change: it is no longer possible to truncate a
      table that participates as a parent in a foreign key constraint,
      unless it is a self-referencing constraint (both parent and child
      are in the same table). To work around this incompatible change
      and still be able to truncate such tables, disable foreign checks
      with SET foreign_key_checks=0 before truncate. Alternatively, if
      foreign key checks are necessary, please use a DELETE statement
      without a WHERE condition.
      
      Problem description:
      
      The problem was that for storage engines that do not support
      truncate table via a external drop and recreate, such as InnoDB
      which implements truncate via a internal drop and recreate, the
      delete_all_rows method could be invoked with a shared metadata
      lock, causing problems if the engine needed exclusive access
      to some internal metadata. This problem originated with the
      fact that there is no truncate specific handler method, which
      ended up leading to a abuse of the delete_all_rows method that
      is primarily used for delete operations without a condition.
      
      Solution:
      
      The solution is to introduce a truncate handler method that is
      invoked when the engine does not support truncation via a table
      drop and recreate. This method is invoked under a exclusive
      metadata lock, so that there is only a single instance of the
      table when the method is invoked.
      
      Also, the method is not invoked and a error is thrown if
      the table is a parent in a non-self-referencing foreign key
      relationship. This was necessary to avoid inconsistency as
      some integrity checks are bypassed. This is inline with the
      fact that truncate is primarily a DDL operation that was
      designed to quickly remove all data from a table.
      5f911fa8
    • Alexander Barkov's avatar
      Bug#55744 GROUP_CONCAT + CASE + ucs return garbage · ab15833a
      Alexander Barkov authored
      Problem: CASE didn't work with a mixture of different character
      sets in THEN/ELSE in some cases.
      This happened because after character set aggregation
      newly created Item_func_conv_charset items corresponding
      to THEN/ELSE arguments were not put back to args[] array.
      
      Fix:
      put all Item_func_conv_charset back to args[].
      
      
        @ mysql-test/include/ctype_numconv.inc
        @ mysql-test/r/ctype_ucs.result
        Adding tests
      
        @ sql/item_cmpfunc.cc
        Put "agg" back to args[] after character set aggregation.
      ab15833a
    • Vladislav Vaintroub's avatar
      merge · 817f02fd
      Vladislav Vaintroub authored
      817f02fd
    • Luis Soares's avatar
      BUG#52202: mysqlbinlog_row* fail in daily-trunk on Sol10 · d09c19f7
      Luis Soares authored
                 x86_64 debug_max
            
      Removed test cases affected by this bug from experimental 
      list.
      d09c19f7
    • Jon Olav Hauglid's avatar
      38194bf7
    • Magne Mahre's avatar
      Bug#56452 Assertion failed: thd->transaction.stmt.is_empty() || · 623ed194
      Magne Mahre authored
                thd->in_sub_stmt
            
      In a precursor patch for Bug#52044 
      (revid:bzr/kostja@stripped), a
      number of reorganizations of code was made. In addition some
      assertions were added to ensure the correct transactional state.
            
      The reorganization had a small glitch so statements that was
      active in the query cache was not followed by a
      statement commit/rollback (this code was removed). A section
      in the trans_commit_stmt/trans_rollback_stmt code is to
      clear the thd->transaction.stmt list of affected storage
      engines.  When a new statement is initiated, an assert
      introduced by the 523044 patch checks if this list is cleared.
      When the query cache is accessed, this list may be populated,
      and since it's not committed it will not be cleared.
            
      This fix adds explicit statement commit or rollback for
      statements that is contained in the query cache.
      623ed194
    • Jon Olav Hauglid's avatar
      Bug #57002 Assert in upgrade_shared_lock_to_exclusive() · fd7dd37e
      Jon Olav Hauglid authored
                 for ALTER TABLE + MERGE tables
      
      The patch for Bug#56292 changed how metadata locks are taken for MERGE
      tables. After the patch, locking the MERGE table will also lock the
      children tables with the same metadata lock type. This means that 
      LOCK TABLES on a MERGE table also will implicitly do LOCK TABLES on
      the children tables.
      
      A consequence of this change, is that it is possible to do LOCK TABLES
      on a child table both explicitly and implicitly with the same statement
      and that these two locks can be of different strength. For example,
      LOCK TABLES child READ, merge WRITE.
      
      In LOCK TABLES mode, we are not allowed to take new locks and each
      statement must therefore try to find an existing TABLE instance with
      a suitable lock. The code that searched for a suitable TABLE instance,
      only considered table level locks. If a child table was locked twice,
      it was therefore possible for this code to find a TABLE instance with
      suitable table level locks but without suitable metadata lock.
      
      This problem caused the assert in upgrade_shared_lock_to_exclusive()
      to be triggered as it tried to upgrade a MDL_SHARED lock to
      EXCLUSIVE. The problem was a regression caused by the patch for
      Bug#56292.
      
      This patch fixes the problem by partially reverting the changes
      done by Bug#56292. Now, the children tables will only use the
      same metadata lock as the MERGE table for MDL_SHARED_NO_WRITE
      when not in locked tables mode. This means that LOCK TABLE
      on a MERGE table will not implicitly lock the children tables.
      This still fixes the original problem in Bug#56292 without
      causing a regression.
      
      Test case added to merge.test.
      fd7dd37e
  3. 05 Oct, 2010 13 commits