1. 15 Jun, 2009 3 commits
    • Georgi Kodinov's avatar
      merged 5.1-main -> 5.1-bugteam · 8e624524
      Georgi Kodinov authored
      8e624524
    • Georgi Kodinov's avatar
      automerge · f2646970
      Georgi Kodinov authored
      f2646970
    • Georgi Kodinov's avatar
      Bug #44810: index merge and order by with low sort_buffer_size · 6df6c8ee
      Georgi Kodinov authored
      crashes server!
      
      The problem affects the scenario when index merge is followed by a filesort
      and the sort buffer is not big enough for all the sort keys.
      In this case the filesort function will read the data to the end through the 
      index merge quick access method (and thus closing the cursor etc), 
      but will leave the pointer to the quick select method in place.
      It will then create a temporary file to hold the results of the filesort and
      will add it as a sort output file (in sort.io_cache).
      Note that filesort will copy the original 'sort' structure in an automatic
      variable and restore it after it's done.
      As a result at exiting filesort() we have a sort.io_cache filled in and 
      nothing else (as a result of close of the cursors at end of reading data 
      through index merge).
      Now create_sort_index() will note that there is a select and will clean it up
      (as it's been used already by filesort() reading the data in). While doing that
      a special case in the index merge destructor will clean up the sort.io_cache,
      assuming it's an output of the index merge method and is not needed anymore.
      As a result the code that tries to read the data back from the filesort output 
      will get no data in both memory and disk and will crash.
            
      Fixed similarly to how filesort() does it : by copying the sort.io_cache structure
      to a local variable, removing the pointer to the io_cache (so that it's not freed 
      by QUICK_INDEX_MERGE_SELECT::~QUICK_INDEX_MERGE_SELECT) and restoring the original 
      structure (together with the valid pointer) after the cleanup is done.
      This is a safe thing to do because all the structures are already cleaned up by
      hitting the end of the index merge's read method (QUICK_INDEX_MERGE_SELECT::get_next()) 
      and the cleanup code being written in a way that tolerates repeating cleanups.
      
      mysql-test/r/index_merge.result:
        Bug #44810: test case
      mysql-test/t/index_merge.test:
        Bug #44810: test case
      sql/sql_select.cc:
        Bug #44810: preserve the io_cache produced by filesort while cleaning up
        the index merge quick access method (QUICK_INDEX_MERGE_SELECT).
      6df6c8ee
  2. 12 Jun, 2009 8 commits
    • Davi Arnaut's avatar
      Bug#45100: Incomplete DROP USER in case of SQL_MODE = 'PAD_CHAR_TO_FULL_LENGTH' · 66398a87
      Davi Arnaut authored
      The SQL-mode PAD_CHAR_TO_FULL_LENGTH could prevent a DROP USER
      statement from privileges associated with the user being dropped.
      What ocurred was that reading from the User and Host fields of
      the tables tables_priv or columns_priv would yield values padded
      with spaces, causing a failure to match a specified user or host 
      ('user' != 'user     ');
      
      The solution is to disregard the PAD_CHAR_TO_FULL_LENGTH mode
      when iterating over and matching values in the privileges tables
      for a DROP USER statement.
      
      mysql-test/r/sql_mode.result:
        Add test case result for Bug#45100.
      mysql-test/t/sql_mode.test:
        Add test case for Bug#45100.
      sql/sql_acl.cc:
        Clear MODE_PAD_CHAR_TO_FULL_LENGTH before dropping privileges.
      66398a87
    • Staale Smedseng's avatar
      Bug #45387 Information about statement id for prepared · 35cf6632
      Staale Smedseng authored
      statements missed from general log
      
      A refinement of the test in the previous patch to avoid
      using sleep as a means to ensure that timestamps are
      added to the log entries.
      
      mysql-test/t/log_tables_debug.test:
        New test file. A debug feature is used to ensure that
        log entries are prefixed with a timestamp.
      sql/log.cc:
        A debug feature is implemented to ensure that
        log entries are prefixed with a timestamp.
      35cf6632
    • Georgi Kodinov's avatar
      automerge · c4930f35
      Georgi Kodinov authored
      c4930f35
    • Georgi Kodinov's avatar
      fixed the build-tags command · dfb06c38
      Georgi Kodinov authored
      dfb06c38
    • Georgi Kodinov's avatar
      automerge · ed112a80
      Georgi Kodinov authored
      ed112a80
    • Georgi Kodinov's avatar
      automerge · 4228f437
      Georgi Kodinov authored
      4228f437
    • Patrick Crews's avatar
      Bug#44920: MTR2 is not processing master.opt input properly on Windows · 62a32540
      Patrick Crews authored
      Re-enabled tests main.init_connect and rpl.rpl_init_slave.test for non-Windows
      platforms.
      
      Please remove this code upon fixing the bug.
      62a32540
    • Georgi Kodinov's avatar
      Bug #45386: Wrong query result with MIN function in field list, · 3e82a86e
      Georgi Kodinov authored
      WHERE and GROUP BY clause
      
      Loose index scan may use range conditions on the argument of 
      the MIN/MAX aggregate functions to find the beginning/end of 
      the interval that satisfies the range conditions in a single go.
      These range conditions may have open or closed minimum/maximum 
      values. When the comparison returns 0 (equal) the code should 
      check the type of the min/max values of the current interval 
      and accept or reject the row based on whether the limit is 
      open or not.
      There was a wrong composite condition on checking this and it was
      not working in all cases.
      Fixed by simplifying the conditions and reversing the logic.
      
      mysql-test/r/group_min_max.result:
        Bug #45386: test case
      mysql-test/t/group_min_max.test:
        Bug #45386: test case
      sql/opt_range.cc:
        Bug #45386: fix the check whether to use the value if on the
        interval boundry
      3e82a86e
  3. 11 Jun, 2009 4 commits
  4. 10 Jun, 2009 3 commits
    • Davi Arnaut's avatar
      Merge from mysql-5.0-bugteam. · eac6619f
      Davi Arnaut authored
      eac6619f
    • Davi Arnaut's avatar
      Bug#41190: shared memory connections do not work in Vista, if server started from cmdline · afacea4d
      Davi Arnaut authored
      Backport to MySQL 5.0/1 fix by Vladislav Vaintroub:
      
      In Vista and later and also in when using terminal services, when
      server is started from  command line, client cannot connect to it
      via shared memory protocol.
      
      This is a regression introduced when  Bug#24731 was fixed.  The
      reason is that client is trying to attach to shared memory using
      global kernel object  namespace (all kernel objects are prefixed
      with Global\). However, server started from the command line in
      Vista and later will create shared memory and events using current
      session namespace. Thus, client is unable to find the server and
      connection fails.
      
      The fix for the client is to first try to find server using "local"
      names  (omitting Global\  prefix) and only if server is not found,
      trying global namespace.
      afacea4d
    • Philip Stoev's avatar
      Bug #29971 status.test fails · d98dee2c
      Philip Stoev authored
      This test uses SHOW STATUS and the like, which may be unstable in the face
      of logging to table, since the CSV handler is actively executing operations
      and thus incrementing the counters.
      
      Fixed by disabling logging to table for the duration of the test and restoring
      it afterwards. This causes various counters to properly start counting from zero
      and never advance due to CSV operations.
      d98dee2c
  5. 09 Jun, 2009 8 commits
  6. 08 Jun, 2009 5 commits
  7. 07 Jun, 2009 1 commit
    • Gleb Shchepa's avatar
      Bug #44886: SIGSEGV in test_if_skip_sort_order() - · ed7f0f30
      Gleb Shchepa authored
                  uninitialized variable used as subscript
      
      Grouping select from a "constant" InnoDB table (a table
      of a single row) joined with other tables caused a crash.
      
      
      mysql-test/r/innodb_mysql.result:
        Added test case for bug bug #44886.
      mysql-test/t/innodb_mysql.test:
        Added test case for bug bug #44886.
      sql/sql_select.cc:
        Bug #44886: SIGSEGV in test_if_skip_sort_order() -
                    uninitialized variable used as subscript
        
        1. The test_if_order_by_key function returned unitialized
           used_key_parts parameter in case of a "constant" InnoDB
           table. Calling function uses this parameter values as
           an array index, thus sometimes it caused a crash.
           The test_if_order_by_key function has been modified
           to set used_key_parts to 0 (no need for ordering).
        
        2. The test_if_skip_sort_order function has been
           modified to accept zero used_key_parts value and
           to prevent an array access by negative index.
      ed7f0f30
  8. 06 Jun, 2009 7 commits
  9. 05 Jun, 2009 1 commit
    • Davi Arnaut's avatar
      Bug#44672: Assertion failed: thd->transaction.xid_state.xid.is_null() · 12f91b1d
      Davi Arnaut authored
      The problem is that when a optimization of read-only transactions
      (bypass 2-phase commit) was implemented, it removed the code that
      reseted the XID once a transaction wasn't active anymore:
      
      sql/sql_parse.cc:
      
      -  bzero(&thd->transaction.stmt, sizeof(thd->transaction.stmt));
      -  if (!thd->active_transaction())
      -    thd->transaction.xid_state.xid.null();
      +  thd->transaction.stmt.reset();
      
      This mostly worked fine as the transaction commit and rollback
      functions (in handler.cc) reset the XID once the transaction is
      ended. But those functions wouldn't reset the XID in case of
      a empty transaction, leading to a assertion when a new starting
      a new XA transaction.
      
      The solution is to ensure that the XID state is reset when empty
      transactions are ended (by either commit or rollback). This is
      achieved by reorganizing the code so that the transaction cleanup
      routine is invoked whenever a transaction is ended.
      
      mysql-test/r/xa.result:
        Add test case result for Bug#44672
      mysql-test/t/xa.test:
        Add test case for Bug#44672
      sql/handler.cc:
        Invoke transaction cleanup function whenever a transaction is
        ended. Move XID state reset logic to the transaction cleanup
        function.
      sql/sql_class.h:
        Add XID state reset logic.
      12f91b1d