1. 06 Feb, 2010 1 commit
    • Gleb Shchepa's avatar
      Bug #45640: optimizer bug produces wrong results · ccac0a6e
      Gleb Shchepa authored
      Grouping by a subquery in a query with a distinct aggregate
      function lead to a wrong result (wrong and unordered
      grouping values).
      
      There are two related problems:
      
      1) The query like this:
      
         SELECT (SELECT t1.a) aa, COUNT(DISTINCT b) c
         FROM t1 GROUP BY aa
      
      returned wrong result, because the outer reference "t1.a"
      in the subquery was substituted with the Item_ref item.
      
      The Item_ref item obtains data from the result_field object
      that refreshes once after the end of each group. This data
      is not applicable to filesort since filesort() doesn't care
      about groups (and doesn't update result_field objects with
      copy_fields() and so on). Also that data is not applicable
      to group separation algorithm: end_send_group() checks every
      record with test_if_group_changed() that evaluates Item_ref
      items, but it refreshes those Item_ref-s only after the end
      of group, that is a vicious circle and the grouped column
      values in the output are shifted.
      
      Fix: if
             a) we grouping by a subquery and
             b) that subquery has outer references to FROM list
                of the grouping query,
           then we substitute these outer references with
           Item_direct_ref like references under aggregate
           functions: Item_direct_ref obtains data directly
           from the current record.
      
      2) The query with a non-trivial grouping expression like:
      
         SELECT (SELECT t1.a) aa, COUNT(DISTINCT b) c
         FROM t1 GROUP BY aa+0
      
      also returned wrong result, since JOIN::exec() substitutes
      references to top-level aliases in SELECT list with Item_copy
      caching items. Item_copy items have same refreshing policy
      as Item_ref items, so the whole groping expression with
      Item_copy inside returns wrong result in filesort() and
      end_send_group().
      
      Fix: include aliased items into GROUP BY item tree instead
           of Item_ref references to them.
      
      
      
      mysql-test/r/group_by.result:
        Test case for bug #45640
      mysql-test/t/group_by.test:
        Test case for bug #45640
      sql/item.cc:
        Bug #45640: optimizer bug produces wrong results
        
        Item_field::fix_fields() has been modified to resolve
        aliases in GROUP BY item trees into aliased items instead
        of Item_ref items.
      sql/item.h:
        Bug #45640: optimizer bug produces wrong results
        
        - Item::find_item_processor() has been introduced.
        - Item_ref::walk() has been modified to apply processors
          to itself too (not only to referenced item).
      sql/mysql_priv.h:
        Bug #45640: optimizer bug produces wrong results
        
        fix_inner_refs() has been modified to accept group_list
        parameter.
      sql/sql_lex.cc:
        Bug #45640: optimizer bug produces wrong results
        
        Initialization of st_select_lex::group_fix_field has
        been added.
      sql/sql_lex.h:
        Bug #45640: optimizer bug produces wrong results
        
        The st_select_lex::group_fix_field field has been introduced
        to control alias resolution in Itef_fied::fix_fields.
      sql/sql_select.cc:
        Bug #45640: optimizer bug produces wrong results
        
        - The fix_inner_refs function has been modified to treat
          subquery outer references like outer fields under aggregate
          functions, if they are included in GROUP BY item tree.
        
        - The find_order_in_list function has been modified to
          fix Item_field alias fields included in the GROUP BY item
          trees in a special manner.
      ccac0a6e
  2. 05 Feb, 2010 3 commits
    • Luis Soares's avatar
      BUG#50780: 'show binary logs' debug assertion when binary · fd10dda9
      Luis Soares authored
      logging is disabled
            
      The server would hit an assertion because of a DBUG violation.
      There was a missing DBUG_RETURN and instead a plain return
      was used.
            
      This patch replaces the return with DBUG_RETURN.
      fd10dda9
    • Luis Soares's avatar
      BUG#50620: Adding an index to a table prevents slave from logging · e66904a5
      Luis Soares authored
      into slow log
            
      While processing a statement, down the mysql_parse execution
      stack, the thd->enable_slow_log can be assigned to
      opt_log_slow_admin_statements, depending whether one is executing
      administrative statements, such as ALTER TABLE, OPTIMIZE,
      ANALYZE, etc, or not. This can have an impact on slow logging for
      statements that are executed after an administrative statement
      execution is completed.
            
      When executing statements directly from the user this is fine
      because, the thd->enable_slow_log is reset right at the beginning
      of the dispatch_command function, ie, everytime a new statement
      is set is set to execute.
            
      On the other hand, for slave SQL thread (sql_thd) the story is a
      bit different. When in SBR the sql_thd applies statements by
      calling mysql_parse. Right after, it calls log_slow_statement
      function to log them if they take too long. Calling mysql_parse
      directly is fine, but also means that dispatch_command function
      is bypassed. As a consequence, thd->enable_slow_log does not get
      a chance to be reset before the next statement to be executed by
      the sql_thd. If the statement just executed by the sql_thd was an
      administrative statement and logging of admin statements was
      disabled, this means that sql_thd->enable_slow_log will be set to
      0 (disabled) from that moment on. End result: sql_thd stops
      logging slow statements.
            
      We fix this by resetting the value of sql_thd->enable_slow_log to
      the value of opt_log_slow_slave_statements right after
      log_slow_stement is called by the sql_thd.
      e66904a5
    • Luis Soares's avatar
      BUG#48632: Fix for Bug #23300 Has Not Been Backported · c3f7a25d
      Luis Soares authored
      To 5.x Release
            
      Notes
      =====
            
      This is a backport of BUG#23300 into 5.1 GA.
            
      Original cset revid (in betony):
      luis.soares@sun.com-20090929140901-s4kjtl3iiyy4ls2h
      
      Description
      ===========
            
      When using replication, the slave will not log any slow query
      logs queries replicated from the master, even if the
      option "--log-slow-slave-statements" is set and these take more
      than "log_query_time" to execute.
                          
      In order to log slow queries in replicated thread one needs to
      set the --log-slow-slave-statements, so that the SQL thread is
      initialized with the correct switch. Although setting this flag
      correctly configures the slave thread option to log slow queries,
      there is an issue with the condition that is used to check
      whether to log the slow query or not. When replaying binlog
      events the statement contains the SET TIMESTAMP clause which will
      force the slow logging condition check to fail. Consequently, the
      slow query logging will not take place.
                          
      This patch addresses this issue by removing the second condition
      from the log_slow_statements as it prevents slow queries to be
      binlogged and seems to be deprecated.
      c3f7a25d
  3. 29 Jan, 2010 1 commit
    • Georgi Kodinov's avatar
      Bug #49324: more valgrind errors in test_if_skip_sort_order · a8f57c3d
      Georgi Kodinov authored
      Fixed 2 problems :
      1. test_if_order_by_key() was continuing on the primary key
      as if it has a primary key suffix (as the secondary keys do).
      This leads to crashes in ORDER BY <pk>,<pk>.
      Fixed by not treating the primary key as the secondary one
      and not depending on it being clustered with a primary key.
      2. The cost calculation was trying to read the records 
      per key when operating on ORDER BYs that order on all of the 
      secondary key + some of the primary key.
      This leads to crashes because of out-of-bounds array access.
      Fixed by assuming we'll find 1 record per key in such cases.
      a8f57c3d
  4. 05 Feb, 2010 1 commit
    • Davi Arnaut's avatar
      Bug#49025: mysqld-debug: missing DBUG_RETURN or DBUG_VOID_RETURN macro in function "?func" · 072fc3b0
      Davi Arnaut authored
      The problem was that the dbug facility was being used after the
      per-thread dbug state had already been finalized. The was present
      in a few functions which invoked decrement_handler_count, which
      in turn invokes my_thread_end on Windows. In my_thread_end, the
      per-thread dbug state is finalized. Any use after the state is
      finalized ends up creating a new state.
      
      The solution is to process the exit of a function before the
      decrement_handler_count function is called.
      
      
      sql/mysqld.cc:
        Process the function exit before decrement_handler_count is
        called, as it can end the per-thread dbug state on Windows.
      072fc3b0
  5. 23 Dec, 2009 1 commit
    • Georgi Kodinov's avatar
      Bug #39022: Mysql randomly crashing in lock_sec_rec_cons_read_sees · bb0df37c
      Georgi Kodinov authored
      flush_cached_records() was not correctly checking for errors after calling
      Item::val_xxx() methods. The expressions may contain subqueries
      or stored procedures that cause errors that should stop the statement.
      Fixed by correctly checking for errors and propagating them up the call stack.
      bb0df37c
  6. 05 Feb, 2010 2 commits
    • Sergey Glukhov's avatar
      Bug#47736 killing a select from a view when the view is processing a function, asserts · 0e106865
      Sergey Glukhov authored
      hide_view_error() does not take into account that thread query may be killed.
      Added a check for thd->killed.
      Addon: backported bug32140 fix from 6.0
      
      
      mysql-test/r/sp_notembedded.result:
        test case
      mysql-test/t/sp_notembedded.test:
        test case
      sql/sp.cc:
        backported bug32140 fix from 6.0
      sql/table.cc:
        Added a check for thd->killed.
      0e106865
    • unknown's avatar
      Bug #50061 Test "rpl_loaddata_symlink" uses a Unix-specific "run-slave" script · 614a8506
      unknown authored
      Bug #49984  	Test 'rpl_loaddata_symlink' fails with "Could not find target log"
      
      Sometimes the symbolic link is available on Windows if
      you have some Unix (emulation) layer installed like
      Cygwin, MKS or other. But symbolic link is not always
      available. It depends on versions, file volume and
      system environment of Windows. And the symbolic link
      is not typically used on Windows, at least not in the
      degree and style they are used on Unix. We can not 
      change the test case to do without symbolic link,
      because the test case is used to test that if the
      symbolic link works fine.
      
      To fix the problem, skip the test on windows.
      
      
      mysql-test/suite/rpl/t/rpl_loaddata_symlink.test:
        Added code to skip the test on windows.
      614a8506
  7. 04 Feb, 2010 8 commits
  8. 03 Feb, 2010 5 commits
  9. 02 Feb, 2010 2 commits
    • Kent Boortz's avatar
      Changes to be able to create source TAR packages with longer · 5458c143
      Kent Boortz authored
      path names than 99 characters, using the USTAR format of the
      resulting source TAR.
      
      To be able to specify the use of USTAR when creating the source
      TAR, we needed both to update the GNU autotools version requirements
      slightly, and update the initiation of the tools to use more
      modern constructs.
      5458c143
    • Georgi Kodinov's avatar
      Bug #45989 take 2 : memory leak after explain encounters an · 927ad9ef
      Georgi Kodinov authored
      error in the query.
      
      Fixes a leak after materializing a GROUP BY subquery to a 
      temp table when the subquery has a blob column in the SELECT
      list.
      Fixed by correctly destructing temporary buffers for re-usable
      queries
      927ad9ef
  10. 04 Feb, 2010 1 commit
  11. 02 Feb, 2010 1 commit
    • Luis Soares's avatar
      BUG#47639: The rpl_binlog_corruption test fails on Windows · 19062099
      Luis Soares authored
      The test case rpl_binlog_corruption fails on windows because when
      adding a line to the binary log index file it gets terminated
      with a CR+LF (which btw, is the normal case in windows, but not on
      Unixes - LF). This causes mismatch between the relay log names,
      causing mysqld to report that it cannot find the log file.
      
      We fix this by creating the instrumented index file through
      mysql, ie, using SELECT ... INTO DUMPFILE ..., as opposed on
      relying on ultimatly OS commands like: -- echo "..." >
      index. These changes go into the file and make the procedure
      platform independent:
      
        include/setup_fake_relay_log.inc
      
      Side note: when using SELECT ... INTO DUMPFILE ..., one needs to
      check if mysqld is running with secure_file_priv. If it is, we do
      it in two steps: 1. create the file on the allowed location;
      2. move it to the datadir. If it is not, then we just create the
      file directly on the datadir (so previous step 2. is not needed).
      19062099
  12. 01 Feb, 2010 3 commits
  13. 30 Jan, 2010 1 commit
    • unknown's avatar
      Bug #48321 CURRENT_USER() incorrectly replicated for DROP/RENAME USER; · 35eb14cd
      unknown authored
                  REVOKE/GRANT; ALTER EVENT.
      
      The following statements support the CURRENT_USER() where a user is needed.
        DROP USER 
        RENAME USER CURRENT_USER() ...
        GRANT ... TO CURRENT_USER()
        REVOKE ... FROM CURRENT_USER()
        ALTER DEFINER = CURRENT_USER() EVENT
      but, When these statements are binlogged, CURRENT_USER() just is binlogged
      as 'CURRENT_USER()', it is not expanded to the real user name. When slave 
      executes the log event, 'CURRENT_USER()' is expand to the user of slave 
      SQL thread, but SQL thread's user name always NULL. This breaks the replication.
      
      After this patch, All above statements are rewritten when they are binlogged.
      The CURRENT_USER() is expanded to the real user's name and host.
      35eb14cd
  14. 29 Jan, 2010 3 commits
    • Georgi Kodinov's avatar
      merge · a28fd124
      Georgi Kodinov authored
      a28fd124
    • Georgi Kodinov's avatar
      Bug #50642 : ssl certs in test suite are expiring soon. · a9e65862
      Georgi Kodinov authored
      Updated the certs to expire on 2015. 
      Made sure they work with both yassl and openssl.
      a9e65862
    • Ramil Kalimullin's avatar
      Fix for bug#49897: crash in ptr_compare when char(0) NOT NULL · 57f9915f
      Ramil Kalimullin authored
      column is used for ORDER BY
      
      Problem: filesort isn't meant for null length sort data
      (e.g. char(0)), that leads to a server crash.
      
      Fix: disregard sort order if sort data record length is 0 (nothing
      to sort).
      
      
      mysql-test/r/select.result:
        Fix for bug#49897: crash in ptr_compare when char(0) NOT NULL 
        column is used for ORDER BY
          - test result.
      mysql-test/t/select.test:
        Fix for bug#49897: crash in ptr_compare when char(0) NOT NULL 
        column is used for ORDER BY
          - test case.
      sql/filesort.cc:
        Fix for bug#49897: crash in ptr_compare when char(0) NOT NULL 
        column is used for ORDER BY
          - assert added as filesort cannot handle null length sort data.
      sql/sql_select.cc:
        Fix for bug#49897: crash in ptr_compare when char(0) NOT NULL 
        column is used for ORDER BY
          - don't sort null length data e.g. in case of ORDER BY CHAR(0).
      57f9915f
  15. 28 Jan, 2010 1 commit
  16. 29 Jan, 2010 2 commits
  17. 28 Jan, 2010 3 commits
    • Davi Arnaut's avatar
      Fix for compiler warnings: · 47e52b90
      Davi Arnaut authored
      Rename method as to not hide a base.
      Reorder attributes initialization.
      Remove unused variable.
      Rework code to silence a warning due to assignment used as truth value.
      
      
      sql/item_strfunc.cc:
        Rename method as to not hide a base.
      sql/item_strfunc.h:
        Rename method as to not hide a base.
      sql/log_event.cc:
        Reorder attributes initialization.
      sql/rpl_injector.cc:
        Rework code to silence a warning due to assignment used as truth value.
      sql/rpl_record.cc:
        Remove unused variable.
      sql/sql_db.cc:
        Rework code to silence a warning due to assignment used as truth value.
      sql/sql_parse.cc:
        Rework code to silence a warning due to assignment used as truth value.
      sql/sql_table.cc:
        Rework code to silence a warning due to assignment used as truth value.
      47e52b90
    • Andrei Elkin's avatar
      1319802e
    • Andrei Elkin's avatar
      5ae3165d
  18. 27 Jan, 2010 1 commit
    • Andrei Elkin's avatar
      bug#47142 · 03797aa0
      Andrei Elkin authored
      merging patches prepared for 5.0 to 5.1-bt. That caused a few changes in the test file
      03797aa0