1. 17 Dec, 2010 3 commits
    • Sergey Vojtovich's avatar
      BUG#58948 - Valgrind warning in do_handle_one_connection() · cb2e57c7
      Sergey Vojtovich authored
      Fixed that proxy_user may be used uninitialized.
      cb2e57c7
    • Luis Soares's avatar
      BUG#46166 · 59fdd56d
      Luis Soares authored
      Automerge from mysql-5.1-bugteam.
      59fdd56d
    • Luis Soares's avatar
      BUG#46166 · 9e161d30
      Luis Soares authored
      Post-push fixes:
      
        - fixed platform dependent result files
        - appeasing valgrind warnings:
         
          Fault injection was also uncovering a previously existing 
          potential mem leaks. For BUG#46166 testing purposes, fixed 
          by forcing handling the leak when injecting faults.
      9e161d30
  2. 16 Dec, 2010 8 commits
    • Luis Soares's avatar
      empty merge from mysql-5.1-bugteam. · a7087d81
      Luis Soares authored
      a7087d81
    • Luis Soares's avatar
      BUG#46166 · 905e21a0
      Luis Soares authored
      Merging to latest mysql-5.5-bugteam.
      905e21a0
    • Luis Soares's avatar
      BUG#46166 · 60f65006
      Luis Soares authored
      Merging to latest mysql-5.1-bugteam.
      60f65006
    • Alexander Nozdrin's avatar
      Manual merge from mysql-5.5. · a7218610
      Alexander Nozdrin authored
      a7218610
    • Jorgen Loland's avatar
      BUG#58456 - Assertion 0 in QUICK_INDEX_MERGE_SELECT::need_sorted_output · 664f06de
      Jorgen Loland authored
                  in opt_range.h
      
      In this bug, there are two alternative access plans: 
       * Index merge range access
       * Const ref access
      
      best_access_path() decided that the ref access was preferrable, 
      but make_join_select() still decided to point 
      SQL_SELECT::quick to the index merge because the table had 
      type==JT_CONST which was not handled. 
      
      At the same time the table's ref.key still referred to the 
      index the ref access would use indicating that ref access 
      should be used. In this state, different parts of the 
      optimizer code have different perceptions of which access path
      is in use (ref or range).
      
      test_if_skip_sort_order() was called to check if the ref access
      needed ordering, but test_if_skip_sort_order() got confused and
      requested the index merge to return records in sorted order. 
      Index merge cannot do this, and fired an ASSERT.
      
      The fix is to take join_tab->type==JT_CONST into concideration
      when make_join_select() decides whether or not to use the 
      range access method.
      664f06de
    • Jonathan Perkin's avatar
      Merge from mysql-5.5.8-release · 3d799bdf
      Jonathan Perkin authored
      3d799bdf
    • Jon Olav Hauglid's avatar
      Bug #58730 Assertion failed: table->key_read == 0 in close_thread_table, · 28a5059a
      Jon Olav Hauglid authored
                 temptable views
      
      The TABLE::key_read field indicates if the optimizer has found that row
      retrieval only should access the index tree. The triggered assert
      inside close_thread_table() checks that this field has been reset when
      the table is about to be closed.
      
      During normal execution, these fields are reset right before tables are
      closed at the end of mysql_execute_command(). But in the case of errors,
      tables are closed earlier. The patch for Bug#52044 refactored the open
      tables code so that close_thread_tables() is called immediately if
      opening of tables fails. At this point in the execution, it could
      happend that all TABLE::key_read fields had not been properly reset,
      therefore triggering the assert.
      
      The problematic statement in this case was EXPLAIN where the query
      accessed two derived tables and where the first derived table was
      processed successfully while the second derived table was not.
      Since it was an EXPLAIN, TABLE::key_read fields were not reset after
      successful derived table processing since the state needs to be 
      accessible afterwards. When processing of the second derived table
      failed, it's corresponding SELECT_LEX_UNIT was cleaned, which caused
      it's TABLE::key_read fields to be reset. Since processing failed,
      the error path of open_and_lock_tables() was entered and
      close_thread_tables() was called. The assert was then triggered due
      to the TABLE::key_read fields set during processing of the first
      derived table.
      
      This patch fixes the problem by adding a new derived table processor,
      mysql_derived_cleanup() that is called after mysql_derived_filling().
      It causes cleanup of all SELECT_LEX_UNITs to be called, resetting
      all relevant TABLE::key_read fields.
      
      Test case added to derived.test.
      28a5059a
    • Jonathan Perkin's avatar
      bug#58955: Must -DBUILD_CONFIG=mysql_release require libaio on Linux · caebacaf
      Jonathan Perkin authored
      Allow users to build without aio if they really want to, by passing
      -DIGNORE_AIO_CHECK to cmake.
      caebacaf
  3. 15 Dec, 2010 6 commits
    • Davi Arnaut's avatar
      Bug#58136: Crash in vio_close at concurrent disconnect and KILL · 487f9bb2
      Davi Arnaut authored
      The problem is a race between a session closing its vio
      (i.e. after a COM_QUIT) at the same time it is being killed by
      another thread. This could trigger a assertion in vio_close()
      as the two threads could end up closing the same vio, at the
      same time. This could happen due to the implementation of
      SIGNAL_WITH_VIO_CLOSE, which closes the vio of the thread
      being killed.
      
      The solution is to serialize the close of the Vio under
      LOCK_thd_data, which protects THD data.
      
      No regression test is added as this is essentially a debug
      issue and the test case would be quite convoluted as we would
      need to synchronize a session that is being killed -- which
      is a bit difficult since debug sync points code does not
      synchronize killed sessions.
      487f9bb2
    • Davi Arnaut's avatar
      Bug#58953: 5.5 does not build with -DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=1 · eb5a21dd
      Davi Arnaut authored
      The MYSQL_LOG::open member function does not take a PSI
      key file argument when the PSI interface is not present.
      eb5a21dd
    • Davi Arnaut's avatar
      Add VERSION.dep to the bzr ignore list. The file is generated · 81605310
      Davi Arnaut authored
      automatically to place a dependency on the VERSION file.
      81605310
    • Davi Arnaut's avatar
      Bug#58871: Reorganize maintainer mode compiler flags to allow · 995ce0bb
      Davi Arnaut authored
                 option for specific compilers
      
      Reorganize the maintainer mode cmake code to allow options
      for specific compilers. For now, enable -Wcheck for ICC,
      but do not turn warnings into errors.
      995ce0bb
    • Davi Arnaut's avatar
      Cleanup my_win_init by moving time and registry related · 40d32fc8
      Davi Arnaut authored
      initialization to specific functions. Also, remove a large
      block of white space. There shouldn't be any functional
      change.
      40d32fc8
    • Alexander Barkov's avatar
      Bug#58321 No warning when characters outside BMP0 is converted to UCS2 · 7f0236de
      Alexander Barkov authored
      Problem: when inserting supplementary characters to an UCS2 column,
      character was silently shrinked to 16-bit value.
      
      Fix: produce a warning on attempt to insert a supplementary character,
      and convert to question mark.
      
        @ mysql-test/r/ctype_many.result
        @ mysql-test/t/ctype_many.test
        Adding tests
      
        @ strings/ctype-ucs2.c
        Check if wc is greater than the highest value supported (0xFFFF),
        return MY_CS_ILUNI if true.
      7f0236de
  4. 14 Dec, 2010 13 commits
    • Gleb Shchepa's avatar
      automerge 5.1-bugteam --> 5.5-bugteam · bdd4ab87
      Gleb Shchepa authored
      bdd4ab87
    • Gleb Shchepa's avatar
    • Gleb Shchepa's avatar
      backport of bug #54476 fix from 5.1-bugteam to 5.0-bugteam. · 01521a0a
      Gleb Shchepa authored
      Original revid: alexey.kopytov@sun.com-20100723115254-jjwmhq97b9wl932l
      
       > Bug #54476: crash when group_concat and 'with rollup' in
       >                      prepared statements
       >
       > Using GROUP_CONCAT() together with the WITH ROLLUP modifier
       > could crash the server.
       >
       > The reason was a combination of several facts:
       >
       > 1. The Item_func_group_concat class stores pointers to ORDER
       > objects representing the columns in the ORDER BY clause of
       > GROUP_CONCAT().
       >
       > 2. find_order_in_list() called from
       > Item_func_group_concat::setup() modifies the ORDER objects so
       > that their 'item' member points to the arguments list
       > allocated in the Item_func_group_concat constructor.
       >
       > 3. In some cases (e.g. in JOIN::rollup_make_fields) a copy of
       > the original Item_func_group_concat object could be created by
       > using the Item_func_group_concat::Item_func_group_concat(THD
       > *thd, Item_func_group_concat *item) copy constructor. The
       > latter essentially creates a shallow copy of the source
       > object. Memory for the arguments array is allocated on
       > thd->mem_root, but the pointers for arguments and ORDER are
       > copied verbatim.
       >
       > What happens in the test case is that when executing the query
       > for the first time, after a copy of the original
       > Item_func_group_concat object has been created by
       > JOIN::rollup_make_fields(), find_order_in_list() is called for
       > this new object. It then resolves ORDER BY by modifying the
       > ORDER objects so that they point to elements of the arguments
       > array which is local to the cloned object. When thd->mem_root
       > is freed upon completing the execution, pointers in the ORDER
       > objects become invalid. Those ORDER objects, however, are also
       > shared with the original Item_func_group_concat object which is
       > preserved between executions of a prepared statement. So the
       > first call to find_order_in_list() for the original object on
       > the second execution tries to dereference an invalid pointer.
       >
       > The solution is to create copies of the ORDER objects when
       > copying Item_func_group_concat to not leave any stale pointers
       > in other instances with different lifecycles.
      01521a0a
    • Luis Soares's avatar
      BUG 46697 · 1a5c17a4
      Luis Soares authored
      Automerging mysql-5.1-bugteam into mysql-5.5-bugteam.
      1a5c17a4
    • Luis Soares's avatar
      BUG#46697 · e4ad12dc
      Luis Soares authored
      Autmoerging into latest mysql-5.1-bugteam.
      e4ad12dc
    • Luis Soares's avatar
      BUG 46697 · 1d0eae6f
      Luis Soares authored
      Addressing review comments.
      1d0eae6f
    • Luis Soares's avatar
      089327bf
    • Sergey Glukhov's avatar
      21af8003
    • Sergey Glukhov's avatar
      Bug#57818 string conversion function died · 622ae418
      Sergey Glukhov authored
      Bug#57913 large negative number to string conversion functions crash
      String object which is used as result container of the item
      has uninitialized 'str_charset' field. This object
      might be used later to preform some internal operations
      and str_charset field is involved in these operations.
      It leads to crash.
      The fix is to intialize str_charset in my_decimal2string() func.
      622ae418
    • Mattias Jonsson's avatar
      merge · 6e3314b0
      Mattias Jonsson authored
      6e3314b0
    • Mattias Jonsson's avatar
      merge · c070dc57
      Mattias Jonsson authored
      c070dc57
    • Mattias Jonsson's avatar
      Bug#45717: A few test cases are disabled due to closed Bug#30577 · cd27e25d
      Mattias Jonsson authored
      Backport from 5.5. OK from Anitha G. to push to 5.1.
      
      Removed floor(float_col) tests, enabled floor(decimal_col) tests
      cd27e25d
    • Sergey Glukhov's avatar
      Fixed following problems: · cd36a6a5
      Sergey Glukhov authored
      --Bug#52157 various crashes and assertions with multi-table update, stored function
      --Bug#54475 improper error handling causes cascading crashing failures in innodb/ndb
      --Bug#57703 create view cause Assertion failed: 0, file .\item_subselect.cc, line 846
      --Bug#57352 valgrind warnings when creating view
      --Recently discovered problem when a nested materialized derived table is used
        before being populated and it leads to incorrect result
      
      We have several modes when we should disable subquery evaluation.
      The reasons for disabling are different. It could be
      uselessness of the evaluation as in case of 'CREATE VIEW'
      or 'PREPARE stmt', or we should disable subquery evaluation
      if tables are not locked yet as it happens in bug#54475, or
      too early evaluation of subqueries can lead to wrong result
      as it happened in Bug#19077.
      Main problem is that if subquery items are treated as const
      they are evaluated in ::fix_fields(), ::fix_length_and_dec()
      of the parental items as a lot of these methods have
      Item::val_...() calls inside.
      We have to make subqueries non-const to prevent unnecessary
      subquery evaluation. At the moment we have different methods
      for this. Here is a list of these modes:
      
      1. PREPARE stmt;
      We use UNCACHEABLE_PREPARE flag.
      It is set during parsing in sql_parse.cc, mysql_new_select() for
      each SELECT_LEX object and cleared at the end of PREPARE in
      sql_prepare.cc, init_stmt_after_parse(). If this flag is set
      subquery becomes non-const and evaluation does not happen.
      
      2. CREATE|ALTER VIEW, SHOW CREATE VIEW, I_S tables which
         process FRM files
      We use LEX::view_prepare_mode field. We set it before
      view preparation and check this flag in
      ::fix_fields(), ::fix_length_and_dec().
      Some bugs are fixed using this approach,
      some are not(Bug#57352, Bug#57703). The problem here is
      that we have a lot of ::fix_fields(), ::fix_length_and_dec()
      where we use Item::val_...() calls for const items.
      
      3. Derived tables with subquery = wrong result(Bug19077)
      The reason of this bug is too early subquery evaluation.
      It was fixed by adding Item::with_subselect field
      The check of this field in appropriate places prevents
      const item evaluation if the item have subquery.
      The fix for Bug19077 fixes only the problem with
      convert_constant_item() function and does not cover
      other places(::fix_fields(), ::fix_length_and_dec() again)
      where subqueries could be evaluated.
      
      Example:
      CREATE TABLE t1 (i INT, j BIGINT);
      INSERT INTO t1 VALUES (1, 2), (2, 2), (3, 2);
      SELECT * FROM (SELECT MIN(i) FROM t1
      WHERE j = SUBSTRING('12', (SELECT * FROM (SELECT MIN(j) FROM t1) t2))) t3;
      DROP TABLE t1;
      
      4. Derived tables with subquery where subquery
         is evaluated before table locking(Bug#54475, Bug#52157)
      
      Suggested solution is following:
      
      -Introduce new field LEX::context_analysis_only with the following
       possible flags:
       #define CONTEXT_ANALYSIS_ONLY_PREPARE 1
       #define CONTEXT_ANALYSIS_ONLY_VIEW    2
       #define CONTEXT_ANALYSIS_ONLY_DERIVED 4
      -Set/clean these flags when we perform
       context analysis operation
      -Item_subselect::const_item() returns
       result depending on LEX::context_analysis_only.
       If context_analysis_only is set then we return
       FALSE that means that subquery is non-const.
       As all subquery types are wrapped by Item_subselect
       it allow as to make subquery non-const when
       it's necessary.
      cd36a6a5
  5. 13 Dec, 2010 3 commits
  6. 09 Dec, 2010 2 commits
  7. 08 Dec, 2010 1 commit
  8. 14 Dec, 2010 3 commits
  9. 13 Dec, 2010 1 commit