1. 05 Feb, 2011 2 commits
    • Dmitry Shulga's avatar
      Auto-merge from mysql-5.1 for bug#57450. · 6e6f9834
      Dmitry Shulga authored
      6e6f9834
    • Dmitry Shulga's avatar
      Fixed bug#57450 - mysql client enter in an infinite loop · a3bd7093
      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.
      a3bd7093
  2. 04 Feb, 2011 6 commits
    • Serge Kozlov's avatar
      Bug#43828, Bug#59494. · d09feeca
      Serge Kozlov authored
      After introducing new way of initialization of replication the setting different heartbeat periods for slaves was missed.
      Added asserts
      d09feeca
    • Marc Alff's avatar
      Bug#58740 Valgrind warning in PFS (pfs_setup_actor.cc) · dde73153
      Marc Alff authored
      Valgrind gets confused by the call stack generated with optimized
      builds, with inlined functions.
      Reduced the stack context for the suppression in lf_pinbox_get_pins.
      dde73153
    • Luis Soares's avatar
      0959be0a
    • Luis Soares's avatar
    • Dmitry Shulga's avatar
      Merge from mysql-5.1 for bug#58026. · 2004c252
      Dmitry Shulga authored
      2004c252
    • Dmitry Shulga's avatar
      Fixed bug#58026 - massive recursion and crash in regular expression · ae6b8ca0
      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.
      ae6b8ca0
  3. 03 Feb, 2011 1 commit
    • Luis Soares's avatar
      BUG#59147: rpl_circular_for_4_hosts fails sporadically · f3df9ccd
      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'.
      f3df9ccd
  4. 02 Feb, 2011 11 commits
    • Georgi Kodinov's avatar
      merge · fff46bb7
      Georgi Kodinov authored
      fff46bb7
    • Georgi Kodinov's avatar
      merge · ccbd29e6
      Georgi Kodinov authored
      ccbd29e6
    • Georgi Kodinov's avatar
      merge · 1a8d63ee
      Georgi Kodinov authored
      1a8d63ee
    • Georgi Kodinov's avatar
      43b383cb
    • Georgi Kodinov's avatar
      merge to 5.1. · 33606525
      Georgi Kodinov authored
      33606525
    • Georgi Kodinov's avatar
      Fixes for Bug #55755 and Bug #52315 part 2 · 7edb13af
      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.
      7edb13af
    • Dmitry Lenev's avatar
      Merged fix for bug #58650 "Failing assertion: · 5e1dad01
      Dmitry Lenev authored
      primary_key_no == -1 || primary_key_no == 0"
      with recent changes from mysql-5.5 tree.
      5e1dad01
    • Dmitry Lenev's avatar
      Merged fix for bug #58650 "Failing assertion: · 92a3b171
      Dmitry Lenev authored
      primary_key_no == -1 || primary_key_no == 0"
      into mysql-5.5 tree.
      92a3b171
    • Dmitry Lenev's avatar
      Fix for bug #58650 "Failing assertion: primary_key_no == -1 || · dafd7106
      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.
      dafd7106
    • Tor Didriksen's avatar
      Bug #36022 please log more information about "Sort aborted" queries · b5a44c76
      Tor Didriksen authored
      Write an additional warning message to the server log, 
      explaining why a sort operation is aborted.
      
      The output in mysqld.err will look something like:
      110127 15:07:54 [ERROR] mysqld: Sort aborted: Out of memory (Needed 24 bytes)
      110127 15:07:54 [ERROR] mysqld: Out of sort memory, consider increasing server sort buffer size
      110127 15:07:54 [ERROR] mysqld: Sort aborted: Out of sort memory, consider increasing server sort buffer size
      110127 15:07:54 [ERROR] mysqld: Sort aborted: Incorrect number of arguments for FUNCTION test.f1; expected 0, got 1
      
      If --log-warn=2 is enabled, we output information about host/user/query as well.
      
      
      include/my_sys.h:
        Update comment for ME_NOREFRESH
      mysql-test/include/mtr_warnings.sql:
        Remove global filtering of "Out of sort memory", let each individual test set it instead.
      mysql-test/r/filesort_debug.result:
        New test case.
      mysql-test/r/order_by.result:
        Ignore "Out of memory" for this test.
      mysql-test/t/filesort_debug.test:
        New test case.
      mysql-test/t/order_by.test:
        Ignore "Out of memory" for this test.
      sql/filesort.cc:
        Output an explanation using the error message from the THD Diagnostics_area.
      sql/protocol.cc:
        Do not DBUG_RETURN(function_call_with DBUG_RETURN)
        as it messes up the call stack in the debug output.
      sql/share/errmsg-utf8.txt:
        Change error message for "Out of sort memory"
      sql/unireg.h:
        Remove unused/confusing ERRMAPP macro.
      b5a44c76
    • Tor Didriksen's avatar
      Backport of fix for Bug#52123 · 2b4e3cde
      Tor Didriksen authored
      2b4e3cde
  5. 01 Feb, 2011 3 commits
    • Ole John Aske's avatar
      Fix for bug#58490, 'Incorrect result in multi level OUTER JOIN · cafb6e8a
      Ole John Aske authored
      in combination with IS NULL'
            
      As this bug is a duplicate of bug#49322, it also includes test cases
      covering this bugreport
            
      Qualifying an OUTER JOIN with the condition 'WHERE <column> IS NULL',
      where <column> is declared as 'NOT NULL' causes the
      'not_exists_optimize' to be enabled by the optimizer.
            
      In evaluate_join_record() the 'not_exists_optimize' caused
      'NESTED_LOOP_NO_MORE_ROWS' to be returned immediately
      when a matching row was found.
            
      However, as the 'not_exists_optimize' is derived from
      'JOIN_TAB::select_cond', the usual rules for condition guards
      also applies for 'not_exist_optimize'. It is therefore incorrect
      to check 'not_exists_optimize' without ensuring that all guards
      protecting it is 'open'.
            
      This fix uses the fact that 'not_exists_optimize' is derived from
      a 'is_null' predicate term in 'tab->select_cond'. Furthermore,
      'is_null' will evaluate to 'false' for any 'non-null' rows
      once all guards protecting the is_null is open.
            
      We can use this knowledge as an implicit guard check for the
      'not_exists_optimize' by moving 'if (...not_exists_optimize)'
      inside the handling of 'select_cond==false'. It will then
      not take effect before its guards are open.
            
      We also add an assert which requires that a
      'not_exists_optimize' always comes together with
      a select_cond. (containing 'is_null').
      cafb6e8a
    • Ole John Aske's avatar
      Merge · e2b9b074
      Ole John Aske authored
      e2b9b074
    • Ole John Aske's avatar
      Fix for bug#57030: ('BETWEEN' evaluation is incorrect') · 24cd59d6
      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.
      24cd59d6
  6. 31 Jan, 2011 9 commits
  7. 30 Jan, 2011 4 commits
  8. 29 Jan, 2011 4 commits