1. 08 Sep, 2008 1 commit
    • Mattias Jonsson's avatar
      Bug#38804: Query deadlock causes all tables to be inaccessible. · 5b164964
      Mattias Jonsson authored
      Problem was a mutex added in bug n 27405 for solving a problem
      with auto_increment in partitioned innodb tables.
      (in ha_partition::write_row over partitions file->ha_write_row)
      
      Solution is to use the patch for bug#33479, which refines the
      usage of mutexes for auto_increment.
      
      Backport of bug-33479 from 6.0:
      
      Bug-33479: auto_increment failures in partitioning
      
      Several problems with auto_increment in partitioning
      (with MyISAM, InnoDB. Locking issues, not handling
      multi-row INSERTs properly etc.)
      
      Changed the auto_increment handling for partitioning:
      Added a ha_data variable in table_share for storage engine specific data
      such as auto_increment value handling in partitioning, also see WL 4305
      and using the ha_data->mutex to lock around read + update.
      
      The idea is this:
      Store the table's reserved auto_increment value in
      the TABLE_SHARE and use a mutex to, lock it for reading and updating it
      and unlocking it, in one block. Only accessing all partitions
      when it is not initialized.
      Also allow reservations of ranges, and if no one has done a reservation
      afterwards, lower the reservation to what was actually used after
      the statement is done (via release_auto_increment from WL 3146).
      The lock is kept from the first reservation if it is statement based
      replication and a multi-row INSERT statement where the number of
      candidate rows to insert is not known in advance (like INSERT SELECT,
      LOAD DATA, unlike INSERT VALUES (row1), (row2),,(rowN)).
      
      This should also lead to better concurrancy (no need to have a mutex
      protection around write_row in all cases)
      and work with any local storage engine.
      5b164964
  2. 01 Sep, 2008 12 commits
    • Vladislav Vaintroub's avatar
      null merge from bugteam-5.1 · 59edfa92
      Vladislav Vaintroub authored
      59edfa92
    • Vladislav Vaintroub's avatar
      Bug#37226 Explicit call of my_thread_init() on Windows for every new thread. · b2a49edd
      Vladislav Vaintroub authored
      Bug#33031 app linked to libmysql.lib crash if run as service in vista under 
      localsystem
        
      
      There are some problems using DllMain hook functions on Windows that 
      automatically do global and per-thread initialization for libmysqld.dll
      
      1)per-thread initialization(DLL_THREAD_ATTACH)
      MySQL internally counts number of active threads that and causes a delay in in 
      my_end() if not all threads are exited. But,there are threads that can be 
      started either by Windows internally (often in TCP/IP scenarios) or by user 
      himself - those threads are not necessarily using libmysql.dll functionality, 
      but nonetheless the contribute to the count of open threads.
      
      2)process-initialization (DLL_PROCESS_ATTACH)
      my_init() calls WSAStartup that itself loads DLLs and can lead to a deadlock in 
      Windows loader.
      
      Fix is to remove dll initialization code from libmysql.dll in general case. I
      still leave an environment variable LIBMYSQL_DLLINIT, which if set to any value 
      will cause the old behavior (DLL init hooks will be called). This env.variable 
      exists only to prevent breakage of existing Windows-only applications that 
      don't do mysql_thread_init() and work ok today. Use of LIBMYSQL_DLLINIT is 
      discouraged and it will be removed in 6.0
      b2a49edd
    • Vladislav Vaintroub's avatar
      36266fc0
    • Davi Arnaut's avatar
      Restore tree name after merge from main. · 7e8c1374
      Davi Arnaut authored
      7e8c1374
    • Vladislav Vaintroub's avatar
      Bug#37226 Explicit call of my_thread_init() on Windows for every new thread. · 6445c2de
      Vladislav Vaintroub authored
      Bug#33031 app linked to libmysql.lib crash if run as service in vista under 
      localsystem
        
      
      There are some problems using DllMain hook functions on Windows that 
      automatically do global and per-thread initialization for libmysqld.dll
      
      1)per-thread initialization(DLL_THREAD_ATTACH)
      MySQL internally counts number of active threads that and causes a delay in in 
      my_end() if not all threads are exited. But,there are threads that can be 
      started either by Windows internally (often in TCP/IP scenarios) or by user 
      himself - those threads are not necessarily using libmysql.dll functionality, 
      but nonetheless the contribute to the count of open threads.
      
      2)process-initialization (DLL_PROCESS_ATTACH)
      my_init() calls WSAStartup that itself loads DLLs and can lead to a deadlock in 
      Windows loader.
      
      Fix is to remove dll initialization code from libmysql.dll in general case. I
      still leave an environment variable LIBMYSQL_DLLINIT, which if set to any value 
      will cause the old behavior (DLL init hooks will be called). This env.variable 
      exists only to prevent breakage of existing Windows-only applications that 
      don't do mysql_thread_init() and work ok today. Use of LIBMYSQL_DLLINIT is 
      discouraged and it will be removed in 6.0
      6445c2de
    • Vladislav Vaintroub's avatar
      No commit message · 828f3cb0
      Vladislav Vaintroub authored
      No commit message
      828f3cb0
    • Vladislav Vaintroub's avatar
      merge · 5334e5ae
      Vladislav Vaintroub authored
      5334e5ae
    • Vladislav Vaintroub's avatar
      merge · c8d1e315
      Vladislav Vaintroub authored
      c8d1e315
    • Vladislav Vaintroub's avatar
      merge · 4e97988b
      Vladislav Vaintroub authored
      4e97988b
    • Mats Kindahl's avatar
      Post-merge fixes to update result files. · 76cf3409
      Mats Kindahl authored
      76cf3409
    • Mats Kindahl's avatar
      Merging 5.0-bugteam into 5.1-bugteam · bcec321d
      Mats Kindahl authored
      bcec321d
    • Mats Kindahl's avatar
      Merging in 5.0-rpl into 5.0-bugteam · 52141691
      Mats Kindahl authored
      52141691
  3. 29 Aug, 2008 1 commit
    • Andrei Elkin's avatar
      Bug #38798 Assertion mysql_bin_log.is_open() failed in binlog_trans_log_savepos() · 44b82b3e
      Andrei Elkin authored
            
      The assert is about binlogging must have been activated, but it was
      not actually according to the reported how-to-repeat instuctions.
      Analysis revealed that binlog_start_trans_and_stmt() was called
      without prior testing if binlogging is ON.
      
      Fixed with avoing entering binlog_start_trans_and_stmt() if binlog is
      not activated.
      44b82b3e
  4. 28 Aug, 2008 9 commits
  5. 27 Aug, 2008 11 commits
    • Gleb Shchepa's avatar
      Bug #37799: SELECT with a BIT column in WHERE clause · 2c53f109
      Gleb Shchepa authored
                  returns unexpected result
      
      If:
        1. a table has a not nullable BIT column c1 with a length
           shorter than 8 bits and some additional not nullable
           columns c2 etc, and
        2. the WHERE clause is like: (c1 = constant) AND c2 ...,
      the SELECT query returns unexpected result set.
      
      
      The server stores BIT columns in a tricky way to save disk
      space: if column's bit length is not divisible by 8, the
      server places reminder bits among the null bits at the start
      of a record. The rest bytes are stored in the record itself,
      and Field::ptr points to these rest bytes.
      
      However if a bit length of the whole column is less than 8,
      there are no remaining bytes, and there is nothing to store in
      the record at its regular place. In this case Field::ptr points
      to bytes actually occupied by the next column in a record.
      If both columns (BIT and the next column) are NOT NULL,
      the Field::eq function incorrectly deduces that this is the
      same column, so query transformation/equal item elimination
      code (see build_equal_items_for_cond) may mix these columns
      and damage conditions containing references to them.
      2c53f109
    • Mats Kindahl's avatar
      Merging 5.1 into 5.1-rpl-merge · 42339e0f
      Mats Kindahl authored
      42339e0f
    • Georgi Kodinov's avatar
      merged 5.1-bugteam into B37548 tree · a320e867
      Georgi Kodinov authored
      a320e867
    • Georgi Kodinov's avatar
      Bug#37548: result value erronously reported being NULL in certain subqueries · 3468f4b4
      Georgi Kodinov authored
            
      When switching to indexed ORDER BY we must be sure to reset the index read
      flag if we are switching from a covering index to non-covering.
      3468f4b4
    • Mats Kindahl's avatar
      Automerge · 4c30c091
      Mats Kindahl authored
      4c30c091
    • Mats Kindahl's avatar
      Result file change. · dd34cceb
      Mats Kindahl authored
      dd34cceb
    • Evgeny Potemkin's avatar
      Bug#38195: Incorrect handling of aggregate functions when loose index scan is · 1f28ee88
      Evgeny Potemkin authored
      used causes server crash.
            
      When the loose index scan access method is used values of aggregated functions
      are precomputed by it. Aggregation of such functions shouldn't be performed
      in this case and functions should be treated as normal ones.
      The create_tmp_table function wasn't taking this into account and this led to
      a crash if a query has MIN/MAX aggregate functions and employs temporary table
      and loose index scan.
      Now the JOIN::exec and the create_tmp_table functions treat MIN/MAX aggregate
      functions as normal ones when the loose index scan is used.
      1f28ee88
    • Mats Kindahl's avatar
      Automerge · 3b6195a7
      Mats Kindahl authored
      3b6195a7
    • Mats Kindahl's avatar
      f1b8441e
    • Mats Kindahl's avatar
      Bug #38773: DROP DATABASE cause switch to stmt-mode when there are temporary · 64610898
      Mats Kindahl authored
                  tables open
      
      When executing a DROP DATABASE statement in ROW mode and having temporary
      tables open at the same time, the existance of temporary tables prevent
      the server from switching back to row mode after temporarily switching to
      statement mode to handle the logging of the statement.
      
      Fixed the problem by removing the code to switch to statement mode and added
      code to temporarily disable the binary log while dropping the objects in the
      database.
      64610898
    • Davi Arnaut's avatar
      Merge of mysql-5.1 branch. · 88e3906a
      Davi Arnaut authored
      88e3906a
  6. 26 Aug, 2008 6 commits