1. 16 Jan, 2013 1 commit
  2. 15 Jan, 2013 4 commits
    • Nisha Gopalakrishnan's avatar
      Bug#11757464:SERVER CRASH IN RECURSIVE CALL WHEN OOM · d01b5c39
      Nisha Gopalakrishnan authored
      Analysis:
      ---------
      
      When the server is out of memory, an error is raised
      to indicate the same. Handling the error requires
      more memory to be allocated which fails, hence the
      error handling loops in a recursion and causes the
      server to crash.
      
      Fix:
      ---
      a) Prevents pushing the 'out of memory' error condition
      to the diagnostic area as it requires memory allocation.
      GET DIAGNOSTICS, SHOW WARNINGS and SHOW ERRORS statements
      will not show information about this error. However the
      'out of memory' error is returned to the client.
      b) It sets the ME_FATALERROR flag when 'out of memory' errors
      are reported (for places where the flag is not already set).
      This flag prevents activation of SP error handlers which also
      require memory allocation and therefore are likely to fail.
      d01b5c39
    • Neeraj Bisht's avatar
      Bug#11758009 - UNION EXECUTION ORDER WRONG ? · f7f21ee7
      Neeraj Bisht authored
      Problem:-
      In case of blob data field, UNION ALL doesn't give correct result.
      
      Analysis:-
      In MyISAM table, when we dont want to check for the distinct for particular 
      key, we set the key_map to zero.
      
      While writing record in MyISAM table, we check the distinct with the help 
      of keys, by checking whether that key is active in key_map and then writing 
      the record.
      
      In case of blob field, we are checking for distinct by unique constraint, 
      where we are not checking whether that unique key is active or not in key_map.
      
      Solution:
      Before checking for distinct, check whether any key is active in key_map.
      
      
      storage/myisam/mi_write.c:
        check whether key_map is active before checking distinct.
      f7f21ee7
    • Neeraj Bisht's avatar
      Bug#11758009 - UNION EXECUTION ORDER WRONG ? · 65af83f6
      Neeraj Bisht authored
      Problem:-
      In case of blob data field, UNION ALL doesn't give correct result.
      
      Analysis:-
      In MyISAM table, when we dont want to check for the distinct for particular 
      key, we set the key_map to zero.
      
      While writing record in MyISAM table, we check the distinct with the help 
      of keys, by checking whether that key is active in key_map and then writing 
      the record.
      
      In case of blob field, we are checking for distinct by unique constraint, 
      where we are not checking whether that unique key is active or not in key_map.
      
      Solution:-
      Before checking for distinct, check whether any key is active in key_map.
      
      storage/myisam/mi_write.c:
        check whether key_map is active before checking distinct.
      65af83f6
    • unknown's avatar
      No commit message · 5cf1a8c2
      unknown authored
      No commit message
      5cf1a8c2
  3. 14 Jan, 2013 5 commits
    • Neeraj Bisht's avatar
      · 84d798a1
      Neeraj Bisht authored
      BUG#14303860 - EXECUTING A SELECT QUERY WITH TOO 
      MANY WILDCARDS CAUSES A SEGFAULT
            Back port from 5.6 and trunk
      84d798a1
    • Olav Sandstaa's avatar
      Fix for Bug#14636211 WRONG RESULT (EXTRA ROW) ON A FROM SUBQUERY · fd5380b4
      Olav Sandstaa authored
                           WITH A VARIABLE AND ORDER BY
              Bug#16035412 MYSQL SERVER 5.5.29 WRONG SORTING USING COMPLEX INDEX
            
      This is a fix for a regression introduced by Bug#12667154:
      Bug#12667154 attempted to fix a performance problem with subqueries
      that did filesort. For doing filesort, the optimizer creates a quick
      select object to use when building the sort index. This quick select
      object was deleted after the first call to create_sort_index(). Thus,
      for queries where the subquery was executed multiple times, the quick
      object was only used for the first execution. For all later executions
      of the subquery, filesort used a complete table scan for building the
      sort index. The fix for Bug#12667154 tried to fix this by not deleting
      the quick object after the first execution of create_sort_index() so
      that it would be re-used for building the sort index by the following
      executions of the subquery.
            
      This regression introduced in Bug#12667154 is that due to not deleting
      the quick select object after building the sort index, the quick
      object could in some cases be used also during the second phase of the
      execution of the subquery instead of using the created sort
      index. This caused wrong results to be returned.
            
      The fix for this issue is to delete the reference to the select object
      after it has been used in create_sort_index(). In this way the select 
      and quick objects will not be available when doing the second phase
      of the execution of the select operation. To ensure that the select
      object can be re-used for the following executions of the subquery
      we make a copy of the select pointer. This is used for restoring the
      select object after the select operation is completed.
      
      
      mysql-test/suite/innodb/r/innodb_mysql.result:
        Changed explain output: The explain now contains "Using where" since we
        have restored the select pointer after doing the filesort operation.
      sql/sql_select.cc:
        Change create_sort_index() so that it always sets the pointer to
        the select object to NULL. This is done in order to avoid that the
        select->quick object can be used when execution the main part of
        the select operation.
      sql/sql_select.h:
        New member in JOIN_TAB: saved_select. Used by create_sort_index to
        make a backup copy of the select pointer.
      fd5380b4
    • Neeraj Bisht's avatar
      BUG#14303860 - EXECUTING A SELECT QUERY WITH TOO · 99645e5b
      Neeraj Bisht authored
      MANY WILDCARDS CAUSES A SEGFAULT
      
      Back port from 5.6 and trunk
      99645e5b
    • Krunal Bauskar krunal.bauskar@oracle.com's avatar
    • Krunal Bauskar krunal.bauskar@oracle.com's avatar
      - BUG#1608883: KILLING A QUERY INSIDE INNODB CAUSES IT TO EVENTUALLY CRASH · 54c47527
        WITH AN ASSERTION
      
        Recently we added check to handle kill query signal for long operating
        queries. 
        While the query interruption is reported it must to ensure cursor is restore
        to proper state for HANDLER interface to work correctly. 
        Normal select query will not face this problem, as on recieving interrupt,
        select query is aborted and new select query result in re-initialization
        (including cursor).
      
        rb://1836. Approved by Marko.
      
      54c47527
  4. 12 Jan, 2013 2 commits
    • Nisha Gopalakrishnan's avatar
      BUG#11757250: REPLACE(...) INSIDE A STORED PROCEDURE. · 0ac6c5fa
      Nisha Gopalakrishnan authored
      Merge from 5.1 to 5.5
      0ac6c5fa
    • Nisha Gopalakrishnan's avatar
      BUG#11757250: REPLACE(...) INSIDE A STORED PROCEDURE. · c4afaa42
      Nisha Gopalakrishnan authored
      Analysis:
      --------
      
      REPLACE operation provides incorrect output when
      user variable is supplied as an argument and there
      are multiple rows on which the operation is performed.
      
      Consider the example below:
      
      SET @var='(( 00000000 ++ 00000000 ))';
      SELECT REPLACE(@var, '00000000', table_name) AS a FROM
      INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='mysql';
      
      Invalid output:
        +---------------------------------------+
        | REPLACE(@var, '00000000', TABLE_NAME) |
        +---------------------------------------+
        | (( columns_priv ++ columns_priv ))    |
        | (( columns_priv ++ columns_priv ))    |
            ......
            ......
        | (( columns_priv ++ columns_priv ))    |
        | (( columns_priv ++ columns_priv ))    |
        | (( columns_priv ++ columns_priv ))    |
        +---------------------------------------+
      
      The user argument supplied as the string to REPLACE
      operation is overwritten after the first iteration
      to '(( columns_priv ++ columns_priv ))'.
      The overwritten string after the first iteration
      is used for the subsequent REPLACE iteration. Since
      the pattern string is not found, it returns invalid
      output as mentioned above.
      
      Fix:
      ---
      If the Alloced_length is zero, realloc() and create a
      copy of the string which is then used for the REPLACE
      operation for every iteration.
      c4afaa42
  5. 11 Jan, 2013 3 commits
    • Aditya A's avatar
      Bug#15843818 PARTITIONING BY RANGE WITH TO_DAYS ALWAYS · 3b4b050c
      Aditya A authored
                     INCLUDES FIRST PARTITION WHEN PRUNING
      
      [Merge from 5.1 to 5.5]
      3b4b050c
    • Aditya A's avatar
      Bug#15843818 PARTITIONING BY RANGE WITH TO_DAYS ALWAYS · 21bdf213
      Aditya A authored
                     INCLUDES FIRST PARTITION WHEN PRUNING
      
      
      PROBLEM
      -------
      
      TO_DAYS()/TO_SECONDS() can return NULL for invalid dates which 
      was stored in the first partition ,therefore the first partition 
      was always included for the scan when range was specified.
      
      
      FIX
      ---
      
      The fix is a small optimization which we have included ,which will
      prune the scanning of NULL/first partition if the dates specified 
      in the range are valid and in the same year and month . TO_SECONDS()
      function is not supported in 5.1 so removed it from the fix and test
      scripts for mysql-5.1 version.
      
      21bdf213
    • Chaithra Gopalareddy's avatar
      Merge from 5.1 to 5.5 · cb72ecbe
      Chaithra Gopalareddy authored
      cb72ecbe
  6. 10 Jan, 2013 6 commits
    • Venkata Sidagam's avatar
      Bug #14553380 MYSQL C API LIBRARY EXITS AT NET_CLEAR AT NET_SERV.CC:223 · 3fa76fd0
      Venkata Sidagam authored
      Problem description: When client loses the connection to the MySQL server or 
      if the server gets shutdown after mysql_stmt_prepare() then the next 
      mysql_stmt_prepare() will return an error(as expected) but consecutive call 
      mysql_stmt_execute(), will crash the client program. 
      The expected behavior would be, it should through an error.
      
      Analysis: The mysql_stmt_prepare() interns calls the function end_server() 
      and net->vio and net->buff are freed and set to NULL. Then the next call 
      mysql_stmt_execute() will interns call net_clear() where we are "net->vio" 
      with out validating it.
      
      Fix: we are validating the net->vio, before calling net_clear().
      3fa76fd0
    • Chaithra Gopalareddy's avatar
      Bug#11760726: LEFT JOIN OPTIMIZED INTO JOIN LEADS TO · 8b41f491
      Chaithra Gopalareddy authored
                    INCORRECT RESULTS
      
      This is a backport of fix for Bug#13068506.
      
      mysql-test/r/join_outer.result:
        Added test result for Bug#13068506
      mysql-test/t/join_outer.test:
        Added test case for Bug#13068506
      sql/item.h:
        Implement Item_outer_ref::not_null_tables()
      8b41f491
    • Praveenkumar Hulakund's avatar
      Merge from 5.1 to 5.5 · 6988c9cc
      Praveenkumar Hulakund authored
      6988c9cc
    • Praveenkumar Hulakund's avatar
      Bug#11749556: DEBUG ASSERTION WHEN ACCESSING A VIEW AND · 5e399d1c
      Praveenkumar Hulakund authored
                    AVAILABLE MEMORY IS TOO LOW 
      
      Analysis:
      ---------
      In function "mysql_make_view", "table->view" is initialized
      after parsing(using File_parser::parse) the view definition.
      If "::parse" function fails then control is moved to label 
      "err:". Here we have assert (table->view == thd->lex). 
      This assert fails if "::parse" function fails, as 
      table->view is not initialized yet.
      
      File_parser::parse fails if data being parsed is incorrect/
      corrupted or when memory allocation fails. In this scenario
      its failing because of failure in memory allocation.
      
      Fix:
      ---------
      In case of failure in function "File_parser::parse", moving
      to label "err:" is incorrect. Modified code to move
      to label "end:".
      5e399d1c
    • Annamalai Gurusami's avatar
      Bug #16004999 ASSERT STATE == TRX_STATE_NOT_STARTED, UNLOCK_ROW() · 9a0f3d3d
      Annamalai Gurusami authored
      Problem:
      
      During the index intersect access method, the SQL layer will access one row,
      that satisfies a set of conditions, using an index i1.  And then it will try to
      access the same row, with other set of conditions using the next index i2.  If
      the fetch from i2 fails (we are talking about an error situation here and not
      simply an unmatched row situation), then it will unlock the row accessed via
      i1.  This will work in all situations except deadlock error.
      
      When a deadlock happens, InnoDB will rollback the transaction.  InnoDB intimates
      the SQL layer about this through the THD::transaction_rollback_request member.
      But this is not currently used by the SQL layer.
      
      Solution:
      
      When an error happens, the SQL layer must check the 
      THD::transaction_rollback_request member, before calling handler::unlock_row().
      We have also added a debug assert in ha_innobase::unlock_row() checking that
      it must be called only when the transaction is in active state.
      
      rb#1773 approved by Marko and Sunny.
      9a0f3d3d
    • prabakaran thirumalai's avatar
      Bug#16064876 MAIN.KILL FAILS OCCASIONALLY ON SOL10 SPARC64 · f112ae8e
      prabakaran thirumalai authored
      Analysis:
      On solaris, killing a connection which waits on debug sync
      (waits on condition variable) is neglected. Subsequent kill
      connection to that thread succeeds. Debug sync code is not
      included in release build hence it is not an customer issue.
      Also verified that except this case, other cases succeed in
      main.kill test script. So moving this test to experimental
      state on solaris platform only in mysql-5.5 branch.
      f112ae8e
  7. 09 Jan, 2013 2 commits
  8. 08 Jan, 2013 3 commits
  9. 07 Jan, 2013 4 commits
  10. 04 Jan, 2013 5 commits
  11. 03 Jan, 2013 1 commit
  12. 02 Jan, 2013 4 commits
    • Venkatesh Duggirala's avatar
      BUG#11753923-SQL THREAD CRASHES ON DISK FULL · ce7e7a99
      Venkatesh Duggirala authored
      Merging fix from mysql-5.1
      ce7e7a99
    • Venkatesh Duggirala's avatar
      BUG#11753923-SQL THREAD CRASHES ON DISK FULL · 39323920
      Venkatesh Duggirala authored
      Problem:If Disk becomes full while writing into the binlog,
      then the server instance hangs till someone frees the space.
      After user frees up the disk space, mysql server crashes
      with an assert (m_status != DA_EMPTY)
      
      Analysis: wait_for_free_space is being called in an
      infinite loop i.e., server instance will hang until
      someone frees up the space. So there is no need to
      set status bit in diagnostic area.
      
      Fix: Replace my_error/my_printf_error with
      sql_print_warning() which prints the warning in error log.
      
      include/my_sys.h:
        Provision to call sql_print_warning from mysys files
      mysys/errors.c:
        Replace my_error/my_printf_error with
        sql_print_warning() which prints the warning in error log.
      mysys/my_error.c:
        implementation of my_printf_warning
      mysys/my_write.c:
        Adding logic to break infinite loop in the simulation
      sql/mysqld.cc:
        Provision to call sql_print_warning from mysys files
      39323920
    • Marc Alff's avatar
      Bug#16060864 SEGMENTATION FAULT IN PERFORMANCE_SCHEMA WITH HISTORY SIZE 0 · cc2df006
      Marc Alff authored
      Before this fix, configuring the server with:
      - performance_schema_events_waits_history_size=0
      - performance_schema_events_waits_history_long_size=0
      could cause a crash in the performance schema.
      
      These settings to 0 are intended to be valid and supported,
      and are in fact working properly in mysql 5.6 and up already.
      
      This fix backports the code fix and test cases from mysql 5.6
      to the mysql 5.5 release.
      cc2df006
    • Kent Boortz's avatar
      5ff0148e