1. 09 Feb, 2011 2 commits
  2. 08 Feb, 2011 7 commits
  3. 07 Feb, 2011 8 commits
    • Bjorn Munch's avatar
      merge 47141,59979 · 285c7d04
      Bjorn Munch authored
      285c7d04
    • Vasil Dimov's avatar
      Backport the fix for Bug#59875 Valgrind warning in buf0buddy.c from 5.5 · fe403949
      Vasil Dimov authored
      This warning also happens in 5.1 with a slightly different codepath.
      fe403949
    • Dmitry Lenev's avatar
      Merged fix for bug #36544 "DROP USER does not remove stored · f74fd118
      Dmitry Lenev authored
      function privileges" into 5.5 tree. Did after-merge fixes.
      f74fd118
    • Bjorn Munch's avatar
      Bug #59979 Add mtr option to run debug server, but without turning on debug · 114ac525
      Bjorn Munch authored
      Added --debug-server and use $opt_debug_server where appropriate
      Let --debug imply --debug-server
      When merging to 5.5, must adapt fix for 59148
      Oops, set debug => debug-server too late, fixed
      114ac525
    • Dmitry Lenev's avatar
      Fix for bug#36544 "DROP USER does not remove stored function · b169b8d8
      Dmitry Lenev authored
      privileges".
      
      The first problem was that DROP USER didn't properly remove privileges 
      on stored functions from in-memory structures. So the dropped user
      could have called stored functions on which he had privileges before
      being dropped while his connection was still around.
      Even worse if a new user with the same name was created he would
      inherit privileges on stored functions from the dropped user.
      Similar thing happened with old user name and function privileges
      during RENAME USER.
      
      This problem stemmed from the fact that the handle_grant_data() function
      which handled DROP/RENAME USER didn't take any measures to update
      in-memory hash with information about function privileges after
      updating them on disk.
      
      This patch solves this problem by adding code doing just that.
      
      The second problem was that RENAME USER didn't properly update in-memory
      structures describing table-level privileges and privileges on stored 
      procedures. As result such privileges could have been lost after a rename
      (i.e. not associated with the new name of user) and inherited by a new
      user with the same name as the old name of the original user.
      
      This problem was caused by code handling RENAME USER in
      handle_grant_struct() which [sic!]:
      a) tried to update wrong (tables) hash when updating stored procedure
         privileges for new user name.
      b) passed wrong arguments to function performing the hash update and
         didn't take into account the way in which such update could have
         changed the order of the hash elements.
      
      This patch solves this problem by ensuring that a) the correct hash
      is updated, b) correct arguments are used for the hash_update()
      function and c) we take into account possible changes in the order
      of hash elements.
      
      mysql-test/r/grant.result:
        Added test coverage for bug#36544 "DROP USER does not remove stored
        function privileges".
      mysql-test/suite/funcs_1/r/innodb_storedproc_06.result:
        Since after fixing bug#36544 "DROP USER does not remove stored function
        privileges" in-memory structures are correctly updated by DROP USER,
        DROP FUNCTION performed after DROP USER for its definer no longer
        produces unwarranted warning/error messages.
      mysql-test/suite/funcs_1/r/memory_storedproc_06.result:
        Since after fixing bug#36544 "DROP USER does not remove stored function
        privileges" in-memory structures are correctly updated by DROP USER,
        DROP FUNCTION performed after DROP USER for its definer no longer
        produces unwarranted warning/error messages.
      mysql-test/suite/funcs_1/r/myisam_storedproc_06.result:
        Since after fixing bug#36544 "DROP USER does not remove stored function
        privileges" in-memory structures are correctly updated by DROP USER,
        DROP FUNCTION performed after DROP USER for its definer no longer
        produces unwarranted warning/error messages.
      mysql-test/t/grant.test:
        Added test coverage for bug#36544 "DROP USER does not remove stored
        function privileges".
      sql/sql_acl.cc:
        Changed handle_grant_data() to also update hash with function 
        privileges. This allows DROP/RENAME USER correctly keep this 
        in-memory structure up-to-date.
        
        To do this extended handle_grant_struct() to support updating of this
        hash. In addition fixed code in this function which is responsible for 
        handling of column and routine hashes during RENAME USER, ensured that
        we correctly update these hashes after changing user name and that we
        don't skip elements while iterating through the hash and doing updates.
      b169b8d8
    • Ole John Aske's avatar
      Fix for bug#59308: Incorrect result for SELECT DISTINCT <col>... ORDER BY <col> DESC. · 221ce922
      Ole John Aske authored
            
      Also fix bug#59110: Memory leak of QUICK_SELECT_I allocated memory.
      Includes Jørgen Lølands review comments.
            
      Root cause of these bugs are that test_if_skip_sort_order() decided to
      revert the 'skip_sort_order' descision (and use filesort) after the
      query plan has been updated to reflect a 'skip' of the sort order.
            
      This might happen in 'check_reverse_order:' if we have a 
      select->quick which could not be made descending by appending 
      a QUICK_SELECT_DESC. ().
            
      The original 'save_quick' was then restored after the QEP has been modified,
      which caused:
            
        - An incorrect 'precomputed_group_by= TRUE' may have been set, 
          and not reverted, as part of the already modifified QEP (Bug#59308)
        - A 'select->quick' might have been created which we fail to delete (bug#59110).
            
      This fix is a refactorication of test_if_skip_sort_order() where all logic
      related to modification of QEP (controlled by argument 'bool no_changes'), is
      moved to the end of test_if_skip_sort_order(), and done after *all* 'test_if_skip'
      checks has been performed - including the 'check_reverse_order:' checks.
            
      The refactorication above contains now intentional changes to the logic which 
      has been moved to the end of the function.
            
      Furthermore, a smaller part of the fix address the handling of the 
      select->quick objects which may already exists when we call 
      'test_if_skip_sort_order()' (save_quick) -and
      new select->quick's created during test_if_skip_sort_order():
            
        - Before new select->quick may be created by calling ::test_quick_select(), we
          set 'select->quick= 0' to avoid that ::test_quick_select() prematurely
          delete the save_quick's. (After this call we may have both a 'save_quick' 
          and 'select->quick')
            
        - All returns from ::test_if_skip_sort_order() where we may have both a
          'save_quick' and a 'select->quick' has been changed to goto's to the
          exit points 'skiped_sort_order:' or 'need_filesort:' where we
          decide which of the QUICK_SELECT's to keep, and delete the other.
      221ce922
    • Vasil Dimov's avatar
      Use fun:* instead of obj:*/libz.so* because when the bundled zlib is · 165ed4f1
      Vasil Dimov authored
      used (--with-zlib-dir=bundled) then there is no libz.so involved.
      165ed4f1
    • Vinay Fisrekar's avatar
      Bug#59955 - engines/funcs/ps_string_not_null test needs better cleanup · e29b40f8
      Vinay Fisrekar authored
      Correcting clean up command at the start of test.
      e29b40f8
  4. 05 Feb, 2011 1 commit
    • Dmitry Shulga's avatar
      Fixed bug#57450 - mysql client enter in an infinite loop · 980868eb
      Dmitry Shulga authored
      if the standard input is a directory.
      
      The problem is that mysql monitor try to read from stdin without
      checking input source type.
      
      The solution is to stop reading data from standard input if a call
      to read(2) failed.
      
      A new test case was added into mysql.test.
      
      client/my_readline.h:
        Data members error and truncated was added to LINE_BUFFER structure.
        These data members used instead of out parameters in functions
        batch_readline, intern_read_line.
      client/mysql.cc:
        read_and_execute() was modified: set status.exit_status to 1
        when the error occured while reading the next command line in
        non-interactive mode. Also the value of the truncated attribute
        of structure LINE_BUFF is taken into account only for non-iteractive mode.
      client/readline.cc:
        intern_read_line() was modified: cancel reading from input if
        fill_buffer() returns -1, e.g. if call to read failed.
        batch_readline was modified: set the error data member of LINE_BUFFER
        structure to value of my_errno when system error happened during call
        to my_read/my_realloc.
      mysql-test/t/mysql.test:
        Test for bug#57450 was added.
      980868eb
  5. 04 Feb, 2011 5 commits
    • Luis Soares's avatar
    • Bjorn Munch's avatar
      merge from 5.1 main · bb3e48c2
      Bjorn Munch authored
      bb3e48c2
    • Bjorn Munch's avatar
      Bug #47141 "mysqltest" breaks because it tries to act on a debug option which is disabled · cd51cbf1
      Bjorn Munch authored
      Replace --debug with --loose-debug to prevent failure exit
      Update: added workaround for 50627, skip all debugging of mysqlbinlog
      cd51cbf1
    • Vasil Dimov's avatar
      Fix Bug#59874 Valgrind warning in InnoDB compression code · 5082c4d1
      Vasil Dimov authored
      Add suppressions for a bogus valgrind warnings.
      5082c4d1
    • Dmitry Shulga's avatar
      Fixed bug#58026 - massive recursion and crash in regular expression · 378091e4
      Dmitry Shulga authored
      handling.
      
      The problem was that parsing of nested regular expression involved
      recursive calls. Such recursion didn't take into account the amount of
      available stack space, which ended up leading to stack overflow crashes.
      
      mysql-test/t/not_embedded_server.test:
        Added test for bug#58026.
      regex/my_regex.h:
        added pointer to function as last argument of my_regex_init() for check
        enough memory in stack.
      regex/regcomp.c:
        p_ere() was modified: added call to function for check enough memory
        in stack. Function for check available stack space specified by
        global variable my_regex_enough_mem_in_stack. This variable set to
        NULL for embedded mysqld and to a pointer to function
        check_enough_stack_size otherwise.
      regex/reginit.c:
        my_regex_init was modified: pass a pointer to a function for check
        enough memory in stack space. Reset this pointer to NULL in my_regex_end.
      sql/mysqld.cc:
        Added function check_enough_stack_size() for check enough memory in stack.
        Passed this function as second argument to my_regex_init. For embedded 
        mysqld passed NULL as second argument.
      378091e4
  6. 03 Feb, 2011 1 commit
    • Luis Soares's avatar
      BUG#59147: rpl_circular_for_4_hosts fails sporadically · cb10771f
      Luis Soares authored
            
      There is one part of the test case that needs to break
      and re-establish the circular topology. For this the test
      stops the slave threads on a couple of servers and restarts
      them with START SLAVE. However, no check is done on the
      status of the IO or SQL threads before proceeding with
      the subsequent commands.
            
      Because rpl_only_running_threads is set to 1 this can lead
      to silently not syncing all slave threads as expected, 
      ultimately resulting in unexpected results (and consequently
      on a failing test run).
            
      We fix this by replacing the START SLAVE instructions with
      calls to --source include/start_slave.inc, which will wait
      for the slave threads to be running (show 'Yes' in 
      Slave_IO|SQL_Running fields of SHOW SLAVE STATUS) before 
      proceeding. Additionally, we change rpl_sync.inc to make the
      IO thread report that it is running when its running status
      is any other than 'No'.
      cb10771f
  7. 02 Feb, 2011 9 commits
    • Georgi Kodinov's avatar
      merge · a265fde6
      Georgi Kodinov authored
      a265fde6
    • Georgi Kodinov's avatar
      0a8419df
    • Georgi Kodinov's avatar
      merge to 5.1. · 72ae1d65
      Georgi Kodinov authored
      72ae1d65
    • Georgi Kodinov's avatar
      Fixes for Bug #55755 and Bug #52315 part 2 · a70c34bf
      Georgi Kodinov authored
      Bug #55755 : Date STD variable signness breaks server on FreeBSD and OpenBSD
      
      * Added a check to configure on the size of time_t
      * Created a macro to check for a valid time_t that is safe to use with datetime 
        functions and store in TIMESTAMP columns.
      * Used the macro consistently instead of the ad-hoc checks introduced by 52315
      * Fixed compliation warnings on platforms where the size of time_t is smaller than
        the size of a long (e.g. OpenBSD 4.8 64 amd64).
      
      Bug #52315: utc_date() crashes when system time > year 2037
      
      * Added a correct check for the timestamp range instead of just variable size check to
      SET TIMESTAMP.
      * Added overflow checking before converting to time_t. 
      * Using a correct localized error message in this case instead of the generic error.
      * Added a test suite.
      * fixed the checks so that they check for unsigned time_t as well. Used the checks 
        consistently across the source code.
      * fixed the original test case to expect the new error code.
      a70c34bf
    • Marko Mäkelä's avatar
      Bug #55284 diagnostics: Introduce UNIV_BLOB_LIGHT_DEBUG, enabled by UNIV_DEBUG · 5adf2313
      Marko Mäkelä authored
      btr_rec_get_field_ref_offs(), btr_rec_get_field_ref(): New functions.
      Get the pointer to an externally stored field.
      
      btr_cur_set_ownership_of_extern_field(): Assert that the BLOB has not
      already been disowned.
      
      btr_store_big_rec_extern_fields(): Rename to
      btr_store_big_rec_extern_fields_func() and add the debug parameter
      update_in_place. All pointers to externally stored columns in the
      record must either be zero or they must be pointers to inherited
      columns, owned by this record or an earlier record version. For any
      BLOB that is stored, the BLOB pointer must previously have been
      zero. When the function completes, all BLOB pointers must be nonzero
      and owned by the record.
      
      rb://549 approved by Jimmy Yang
      5adf2313
    • Dmitry Lenev's avatar
      Fix for bug #58650 "Failing assertion: primary_key_no == -1 || · e805a0fd
      Dmitry Lenev authored
      primary_key_no == 0".
      
      Attempt to create InnoDB table with non-nullable column of
      geometry type having an unique key with length 12 on it and
      with some other candidate key led to server crash due to
      assertion failure in both non-debug and debug builds.
      
      The problem was that such a non-candidate key could have
      been sorted as the first key in table/.FRM, before any legit
      candidate keys. This resulted in assertion failure in InnoDB
      engine which assumes that primary key should either be the
      first key in table/.FRM or should not exist at all.
      
      The reason behind such an incorrect sorting was an wrong
      value of Create_field::key_length member for geometry field
      (which was set to its pack_length == 12) which confused code
      in mysql_prepare_create_table(), so it would skip marking
      such key as a key with partial segments.
      
      This patch fixes the problem by ensuring that this member
      gets the same value of Create_field::key_length member as 
      for other blob fields (from which geometry field class is
      inherited), and as result unique keys on geometry fields
      are correctly marked as having partial segments.
      
      
      mysql-test/include/gis_keys.inc:
        Added test case for bug #58650 "Failing assertion:
        primary_key_no == -1 || primary_key_no == 0".
      mysql-test/r/gis.result:
        Added test case for bug #58650 "Failing assertion:
        primary_key_no == -1 || primary_key_no == 0".
      mysql-test/suite/innodb/r/innodb_gis.result:
        Added test case for bug #58650 "Failing assertion:
        primary_key_no == -1 || primary_key_no == 0".
      mysql-test/suite/innodb_plugin/r/innodb_gis.result:
        Added test case for bug #58650 "Failing assertion:
        primary_key_no == -1 || primary_key_no == 0".
      sql/field.cc:
        Changed Create_field::create_length_to_internal_length() to
        correctly set Create_field::key_length member for geometry
        fields. Similar to the blob types key_length for such fields
        should be the same as length and not field's packed length
        (which is always 12 for geometry).
        
        As result of this change code handling table creation now
        always correctly identifies btree/unique keys on geometry
        fields as partial keys, so such keys can't be erroneously
        treated as candidate keys and sorted in keys array in .FRM
        before legit candidate keys.
        
        This fixes bug #58650 "Failing assertion: primary_key_no ==
        -1 || primary_key_no == 0" in which incorrect candidate key
        sorting led to assertion failure in InnoDB code.
      e805a0fd
    • Marko Mäkelä's avatar
      Non-functional changes (cleanup) made while narrowing down Bug #55284: · 7c45708f
      Marko Mäkelä authored
      row_purge(): Change the return type to void. (The return value always
      was DB_SUCCESS.) Remove some local variables.
      
      row_undo_mod_remove_clust_low(): Remove some local variables.
      
      rb://547 approved by Jimmy Yang
      7c45708f
    • Marko Mäkelä's avatar
      Bug #55284 diagnostics: When UNIV_DEBUG, do not tolerate garbage in · f2eacde4
      Marko Mäkelä authored
      Antelope files in btr_check_blob_fil_page_type(). Unfortunately, we
      must keep the check in production builds, because InnoDB wrote
      uninitialized garbage to FIL_PAGE_TYPE until fairly recently (5.1.x).
      
      rb://546 approved by Jimmy Yang
      f2eacde4
    • Marko Mäkelä's avatar
      Bug #55284 diagnostics: Enable UNIV_DEBUG_FILE_ACCESSES by UNIV_DEBUG · 1f796c2b
      Marko Mäkelä authored
      It was the enabling of UNIV_DEBUG_FILE_ACCESSES that caught Bug #55284
      in the first place. This is a very light piece of of debug code, and
      there really is no reason why it is not enabled in all debug builds.
      
      rb://551 approved by Jimmy Yang
      1f796c2b
  8. 01 Feb, 2011 1 commit
    • Ole John Aske's avatar
      Fix for bug#57030: ('BETWEEN' evaluation is incorrect') · 59269b1d
      Ole John Aske authored
                  
      Root cause for this bug is that the optimizer try to detect&
      optimize the special case:
            
      '<field>  BETWEEN c1 AND c1' and handle this as the condition '<field>  = c1'
                  
      This was implemented inside add_key_field(.. *field, *value[]...)
      which assumed field to refer key Field, and value[] to refer a [low...high]
      constant pair. value[0] and value[1] was then compared for equality.
                  
      In a 'normal' BETWEEN condition of the form '<field>  BETWEEN val1 and val2' the
      BETWEEN operation is represented with an argementlist containing the
      values [<field>, val1, val2] - add_key_field() is then called with
      parameters field=<field>, *value=val1.
                  
      However, if the BETWEEN predicate specified:
                  
       1)  '<const1>  BETWEEN<const2>  AND<field>
                  
      the 'field' and 'value' arguments to add_key_field() had to be swapped.
      This was implemented by trying to cheat add_key_field() to handle it like:
                  
       2) '<const1>  GE<const2>  AND<const1>  LE<field>'
                  
      As we didn't really replace the BETWEEN operation with 'ge' and 'le',
      add_key_field() still handled it as a 'BETWEEN' and compared the (swapped)
      arguments<const1>  and<const2>  for equality. If they was equal, the
      condition 1) was incorrectly 'optimized' to:
                  
       3) '<field>  EQ <const1>'
                  
      This fix moves this optimization of '<field>  BETWEEN c1 AND c1' into
      add_key_fields() which then calls add_key_equal_fields() to collect 
      key equality / comparison for the key fields in the BETWEEN condition.
      59269b1d
  9. 31 Jan, 2011 5 commits
    • Alfranio Correia's avatar
      Post-fix for BUG#59338. · 2d2f80e0
      Alfranio Correia authored
      2d2f80e0
    • Alfranio Correia's avatar
      merge mysql-5.1 (local) --> mysql-5.1 · 54c58cea
      Alfranio Correia authored
      54c58cea
    • Alfranio Correia's avatar
      merge mysql-5.1 (local) --> mysql-5.1 · ee36bd7f
      Alfranio Correia authored
      ee36bd7f
    • Marko Mäkelä's avatar
      Bug#59230 assert 0 row_upd_changes_ord_field_binary() in post-crash · e952ee11
      Marko Mäkelä authored
      trx rollback or purge
      
      This patch does not relax the failing debug assertion during purge.
      That will be revisited once we have managed to repeat the assertion failure.
      
      row_upd_changes_ord_field_binary_func(): Renamed from
      row_upd_changes_ord_field_binary(). Add the parameter que_thr_t* in
      UNIV_DEBUG builds. When the off-page column cannot be retrieved,
      assert that the current transaction is a recovered one and that it is
      the one that is currently being rolled back.
      
      row_upd_changes_ord_field_binary(): A wrapper macro for
      row_upd_changes_ord_field_binary_func() that discards the que_thr_t*
      parameter unless UNIV_DEBUG is defined.
      
      row_purge_upd_exist_or_extern_func(): Renamed from
      row_purge_upd_exist_or_extern(). Add the parameter que_thr_t* in
      UNIV_DEBUG builds.
      
      row_purge_upd_exist_or_extern(): A wrapper macro for
      row_purge_upd_exist_or_extern_func() that discards the que_thr_t*
      parameter unless UNIV_DEBUG is defined.
      
      Make trx_roll_crash_recv_trx const. If there were a 'do not
      dereference' attribute, it would be appropriate as well.
      
      rb://588 approved by Jimmy Yang
      e952ee11
    • Sandeep Doddaballapur's avatar
      automerge · f6258063
      Sandeep Doddaballapur authored
      f6258063
  10. 30 Jan, 2011 1 commit