1. 18 Aug, 2011 1 commit
    • Sergey Vojtovich's avatar
      BUG#11763712 - 56458: KILLING A FLUSH TABLE FOR A MERGE/CHILD · a8ee6e48
      Sergey Vojtovich authored
                            CRASHES SERVER
      
      Flushing of MERGE table or one of its child tables, which was
      locked by flushing thread using LOCK TABLES, might have caused
      crashes or assertion failures if the thread failed to reopen
      child or parent table.
      Particularly, this might have happened when another connection
      killed this FLUSH TABLE statement/connection.
      Also this problem might have occurred when we failed to reopen
      MERGE table or one of its children when executing DDL statement
      under LOCK TABLES.
      
      The problem was caused by the fact that reopen_tables() might
      have failed to reopen child table but still tried to reopen,
      reattach children for and re-lock its parent. Vice versa it
      might have failed to reopen parent but kept references from
      children to parent around. Since reopen_tables() closes table
      it has failed to reopen and therefore frees all associated
      memory such dangling references led to crashes when followed.
      
      This patch solves this problem by ensuring that we always close
      parent table and all its children if we fail to reopen this
      table or one of its children. Same happens if we fail to reattach
      children to parent.
      
      Affects 5.1 only.
      
      mysql-test/r/merge.result:
        A test case for BUG#11763712.
      mysql-test/t/merge.test:
        A test case for BUG#11763712.
      sql/sql_base.cc:
        When flushing tables under LOCK TABLES, all locked
        and flushed tables are released and then reopened.
        It may happen that we failed to reopen some tables,
        in this case we reopen as much tables as possible.
        
        If it was not possible to reopen MERGE child, MERGE
        parent is unusable and must be removed from thread
        open tables list.
        
        If it was not possible to reopen MERGE parent, all
        MERGE child table objects are unusable as well, at
        least because their locks are handled by MERGE parent.
        They must also be removed from thread open tables
        list.
        
        In other words if it was impossible to reopen any
        object of a MERGE table or reattach child tables,
        all objects of this MERGE table must be considered
        unusable and closed.
      a8ee6e48
  2. 04 May, 2011 1 commit
    • Alexander Nozdrin's avatar
      Patch for Bug#12394306: the sever may crash if mysql.event is corrupted. · 16f26d2a
      Alexander Nozdrin authored
      The problem was that wrong structure of mysql.event was not detected and
      the server continued to use wrongly-structured data.
      
      The fix is to check the structure of mysql.event after opening before
      any use. That makes operations with events more strict -- some operations
      that might work before throw errors now. That seems to be Ok.
      
      Another side-effect of the patch is that if mysql.event is corrupted,
      unrelated DROP DATABASE statements issue an SQL warning about inability
      to open mysql.event table. 
      16f26d2a
  3. 03 May, 2011 1 commit
  4. 02 May, 2011 1 commit
  5. 29 Apr, 2011 5 commits
    • Nirbhay Choubey's avatar
      Bug#11757855 - 49967: built-in libedit doesn't read · 8843aea7
      Nirbhay Choubey authored
                            .editrc on linux.
      
      MySQL client when build with libedit support ignores
      .editrc at startup.
      
      The reason for this regression was the incluison of a
      safety check, issetugid(), which is not available on
      some linux platforms.
      
      Fixed by adding an equivalent check for platforms which
      have get[e][u|g]id() set of functions.
      
      
      cmd-line-utils/libedit/el.c:
        Bug#11757855 - 49967: built-in libedit doesn't read
                              .editrc on linux.
        
        Added function calls to check user/group IDs on linux
        systems which does not have issetugid() function.
      configure.in:
        Bug#11757855 - 49967: built-in libedit doesn't read
                              .editrc on linux.
        
        Added check for getuid, geteuid, getgid, getegid
        functions.
      8843aea7
    • Bjorn Munch's avatar
      merge from 5.1-mtr · 1e7b79a5
      Bjorn Munch authored
      1e7b79a5
    • Vasil Dimov's avatar
      Sync 5.1 .inc file with 5.5 due to a missing changeset · 6f7d0f18
      Vasil Dimov authored
      Add extra codes to wait_until_disconnected.inc that are present in 5.5,
      but not in 5.1. The missing codes cause innodb_bug59641 to fail in 5.1 on
      Windows PB2 runs. The addition of those codes in 5.5 was done in
      luis.soares@sun.com-20090930233215-aup3kxy4j6ltvjfp
      6f7d0f18
    • Bjorn Munch's avatar
      merge from 5.1 main · 0e1819a4
      Bjorn Munch authored
      0e1819a4
    • Mattias Jonsson's avatar
      removed dead obsolete code · 54c1da00
      Mattias Jonsson authored
      54c1da00
  6. 27 Apr, 2011 3 commits
    • Mattias Jonsson's avatar
      Post push fix for bug#11766249 bug#59316 · 401941c2
      Mattias Jonsson authored
      Partitions can have different ref_length (position data length).
      Removed DBUG_ASSERT which crashed debug builds when using
      MAX_ROWS on some partitions.
      401941c2
    • Nirbhay Choubey's avatar
      BUG#12329909 - BUILDING MYSQL WITH DEBUG SUPPORT · a1f7ceb2
      Nirbhay Choubey authored
                     FAILS WITH LIBEDIT
      
      Fixed by checking the return value of the write()
      function calls and handling the open files and fd
      appropriately.
      
      
      cmd-line-utils/libedit/vi.c:
        BUG#12329909 - BUILDING MYSQL WITH DEBUG SUPPORT
                       FAILS WITH LIBEDIT
        
        Added a check on the return value of the write()
        function calls.
      a1f7ceb2
    • Sergey Glukhov's avatar
      Bug#11889186 60503: CRASH IN MAKE_DATE_TIME WITH DATE_FORMAT / STR_TO_DATE COMBINATION · a60c39a2
      Sergey Glukhov authored
      calc_daynr() function returns negative result
      if malformed date with zero year and month is used.
      Attempt to calculate week day on negative value
      leads to crash. The fix is return NULL for
      'W', 'a', 'w' specifiers if zero year and month is used.
      Additional fix for calc_daynr():
      --added assertion that result can not be negative
      --return 0 if zero year and month is used
      
      
      mysql-test/r/func_time.result:
        test case
      mysql-test/t/func_time.test:
        test case
      sql-common/my_time.c:
        --added assertion that result can not be negative
        --return 0 if zero year and month is used
      sql/item_timefunc.cc:
        eturn NULL for 'W', 'a', 'w' specifiers
        if zero year and month is used.
      a60c39a2
  7. 26 Apr, 2011 3 commits
  8. 25 Apr, 2011 1 commit
  9. 23 Apr, 2011 1 commit
  10. 22 Apr, 2011 1 commit
    • Sergey Glukhov's avatar
      Bug#11756928 48916: SERVER INCORRECTLY PROCESSING HAVING CLAUSES WITH AN ORDER BY CLAUSE · a5e8d902
      Sergey Glukhov authored
      Before sorting HAVING condition is split into two parts,
      first part is a table related condition and the rest of is
      HAVING part. Extraction of HAVING part does not take into account
      the fact that some of conditions might be non-const but
      have 'used_tables' == 0 (independent subqueries)
      and because of that these conditions are cut off by
      make_cond_for_table() function.
      The fix is to use (table_map) 0 instead of used_tables in
      third argument for make_cond_for_table() function.
      It allows to extract elements which belong to sorted
      table and in addition elements which are independend
      subqueries.
      
      
      mysql-test/r/having.result:
        test case
      mysql-test/t/having.test:
        test case
      sql/sql_select.cc:
        The fix is to use (table_map) 0 instead of used_tables in
        third argument for make_cond_for_table() function.
        It allows to extract elements which belong to sorted
        table and in addition elements which are independend
        subqueries.
      a5e8d902
  11. 21 Apr, 2011 1 commit
  12. 20 Apr, 2011 6 commits
  13. 18 Apr, 2011 4 commits
  14. 16 Apr, 2011 1 commit
  15. 15 Apr, 2011 3 commits
  16. 14 Apr, 2011 4 commits
    • Tor Didriksen's avatar
      Bug#11765713 58705: OPTIMIZER LET ENGINE DEPEND ON UNINITIALIZED VALUES CREATED BY OPT_SUM_QU · dd3d9477
      Tor Didriksen authored
      Valgrind warnings were caused by comparing index values to an un-initialized field.
      
      
      mysql-test/r/subselect.result:
        New test cases.
      mysql-test/t/subselect.test:
        New test cases.
      sql/opt_sum.cc:
        Add thd to opt_sum_query enabling it to test for errors.
        If we have a non-nullable index, we cannot use it to match null values,
        since set_null() will be ignored, and we might compare uninitialized data.
      sql/sql_select.cc:
        Add thd to opt_sum_query, enabling it to test for errors.
      sql/sql_select.h:
        Add thd to opt_sum_query, enabling it to test for errors.
      dd3d9477
    • Bjorn Munch's avatar
      Bug #12351213 MTR --VS-CONFIG DOES NOT WORK LIKE MTR_VS_CONFIG · e675ed06
      Bjorn Munch authored
      Fix for --vs-config applied
      Find.pm incorrectly tested an unitialized local variable instead
        of the global, corrected.
      Find.pm is also wrong in 5.5: uses a non-existent global variable. Fix when
        merging up.
      e675ed06
    • Serge Kozlov's avatar
      WL#5867, postfix for binlog_bug23533 · 7634e724
      Serge Kozlov authored
      7634e724
    • Sergey Glukhov's avatar
      Bug#11756242 48137: PROCEDURE ANALYSE() LEAKS MEMORY WHEN RETURNING NULL · 3abe56f3
      Sergey Glukhov authored
      There are two problems with ANALYSE():
      
      1. Memory leak 
         it happens because do_select() can overwrite
         JOIN::procedure field(with zero value in our case) and
         JOIN destructor don't free the memory allocated for
         JOIN::procedure. The fix is to save original JOIN::procedure
         before do_select() call and restore it after do_select
         execution.
      
      2. Wrong result
         If ANALYSE() procedure is used for the statement with LIMIT clause
         it could retrun empty result set. It happens because of missing 
         analyse::end_of_records() call. First end_send() function call
         returns NESTED_LOOP_QUERY_LIMIT and second call of end_send() with
         end_of_records flag enabled does not happen. The fix is to return
         NESTED_LOOP_OK from end_send() if procedure is active.
      
      
      mysql-test/r/analyse.result:
        test case
      mysql-test/t/analyse.test:
        test case
      sql/sql_select.cc:
        --save original JOIN::procedure before do_select() call and
          restore it after do_select execution.
        --return NESTED_LOOP_OK from end_send() if procedure is active
      3abe56f3
  17. 13 Apr, 2011 1 commit
  18. 12 Apr, 2011 2 commits