1. 26 Jul, 2012 1 commit
    • Venkata Sidagam's avatar
      Bug #12876932 - INCORRECT SELECT RESULT ON FEDERATED TABLE · 3b954d1d
      Venkata Sidagam authored
      Problem description:
      Table 't' created with two colums having compound index on both the 
      columns under innodb/myisam engine at remote machine. In the local 
      machine same table is created undet the federated engine.
      A select having where clause with along 'AND' operation gives wrong 
      results on local machine.
      
      Analysis: 
      The given query at federated engine is wrongly transformed by 
      federated::create_where_from_key() function and the same was sent to 
      the remote machine. Hence the local machine is showing wrong results.
      
      Given query "select c1 from t where c1 <= 2 and c2 = 1;"
      Query transformed, after ha_federated::create_where_from_key() function is:
      SELECT `c1`, `c2` FROM `t` WHERE  (`c1` IS NOT NULL ) AND 
      ( (`c1` >= 2)  AND  (`c2` <= 1) ) and the same sent to real_query().
      In the above the '<=' and '=' conditions were transformed to '>=' and 
      '<=' respectively.
      
      ha_federated::create_where_from_key() function behaving as below:
      The key_range is having both the start_key and end_key. The start_key 
      is used to get "(`c1` IS NOT NULL )" part of the where clause, this 
      transformation is correct. The end_key is used to get "( (`c1` >= 2) 
      AND  (`c2` <= 1) )", which is wrong, here the given conditions('<=' and '=') 
      are changed as wrong conditions('>=' and '<=').
      The end_key is having {key = 0x39fa6d0 "", length = 10, keypart_map = 3, 
      flag = HA_READ_AFTER_KEY}
      
      The store_length is having value '5'. Based on store_length and length 
      values the condition values is applied in HA_READ_AFTER_KEY switch case.
      The switch case 'HA_READ_AFTER_KEY' is applicable to only the last part of 
      the end_key and for previous parts it is going to 'HA_READ_KEY_OR_NEXT' case, 
      here the '>=' is getting added as a condition instead of '<='.
      
      Fix:
      Updated the 'if' condition in 'HA_READ_AFTER_KEY' case to affect for all 
      parts of the end_key. i.e 'i > 0' will used for end_key, Hence added it in 
      the if condition.
      3b954d1d
  2. 25 Jul, 2012 1 commit
  3. 24 Jul, 2012 1 commit
  4. 19 Jul, 2012 3 commits
    • Bjorn Munch's avatar
      Reverting broken configure/make stuff · 3fb22525
      Bjorn Munch authored
      3fb22525
    • Bjorn Munch's avatar
      Bug #14035452 - MODULARIZE MYSQL_CLIENT_TEST · 1a6ce811
      Bjorn Munch authored
        Added new minimal client using same framework
        Added internal test using it
        Small changes to top level make/configure/cmake to have it built
      1a6ce811
    • Venkata Sidagam's avatar
      Bug #12615411 - server side help doesn't work as first statement · 6ee1c030
      Venkata Sidagam authored
      Problem description:
      Giving "help 'contents'" in the mysql client as a first statement
      gives error
      
      Analysis:
      In com_server_help() function the "server_cmd" variable was
      initialised with buffer->ptr(). And the "server_cmd" variable is not
      updated since we are passing "'contents'"(with single quote) so the
      buffer->ptr() consists of the previous buffer values and it was sent
      to the mysql_real_query() hence we are getting error.
      
      Fix:
      We are not initialising the "server_cmd" variable and we are updating
      the variable with "server_cmd= cmd_buf" in any of the case i.e with
      single quote or without single quote for the contents.
      As part of error message improvement, added new error message in case
      of "help 'contents'".
      6ee1c030
  5. 18 Jul, 2012 1 commit
    • Chaithra Gopalareddy's avatar
      Bug#11762052: 54599: BUG IN QUERY PLANNER ON QUERIES WITH · a56c4692
      Chaithra Gopalareddy authored
                           "ORDER BY" AND "LIMIT BY" CLAUSE
      
      PROBLEM:
      When a 'limit' clause is specified in a query along with
      group by and order by, optimizer chooses wrong index
      there by examining more number of rows than required.
      However without the 'limit' clause, optimizer chooses
      the right index.
      
      ANALYSIS:
      With respect to the query specified, range optimizer chooses
      the first index as there is a range present ( on 'a'). Optimizer
      then checks for an index which would give records in sorted
      order for the 'group by' clause.
      
      While checking chooses the second index (on 'c,b,a') based on
      the 'limit' specified and the selectivity of
      'quick_condition_rows' (number of rows present in the range)
      in 'test_if_skip_sort_order' function. 
      But, it fails to consider that an order by clause on a
      different column will result in scanning the entire index and 
      hence the estimated number of rows calculated above are 
      wrong (which results in choosing the second index).
      
      FIX:
      Do not enforce the 'limit' clause in the call to
      'test_if_skip_sort_order' if we are creating a temporary
      table. Creation of temporary table indicates that there would be
      more post-processing and hence will need all the rows.
      
      This fix is backported from 5.6. This problem is fixed in 5.6 as   
      part of changes for work log #5558
      a56c4692
  6. 12 Jul, 2012 1 commit
    • Annamalai Gurusami's avatar
      Bug #11765218 58157: INNODB LOCKS AN UNMATCHED ROW EVEN THOUGH USING · e612f552
      Annamalai Gurusami authored
      RBR AND RC
      
      Description: When scanning and locking rows with < or <=, InnoDB locks
      the next row even though row based binary logging and read committed
      is used.
      
      Solution: In the handler, when the row is identified to fall outside
      of the range (as specified in the query predicates), then request the
      storage engine to unlock the row (if possible). This is done in
      handler::read_range_first() and handler::read_range_next().
      e612f552
  7. 11 Jul, 2012 1 commit
  8. 10 Jul, 2012 7 commits
    • mysql-builder@oracle.com's avatar
      No commit message · bb35915d
      mysql-builder@oracle.com authored
      No commit message
      bb35915d
    • Andrei Elkin's avatar
      merge from 5.1 repo. · 3c50bfce
      Andrei Elkin authored
      3c50bfce
    • Andrei Elkin's avatar
      merge from 5.1 repo. · 04a24413
      Andrei Elkin authored
      04a24413
    • Bjorn Munch's avatar
      bc4a83d5
    • Andrei Elkin's avatar
      merge from 5.1 repo. · f62bca39
      Andrei Elkin authored
      f62bca39
    • Sujatha Sivakumar's avatar
      BUG#11762670:MY_B_WRITE RETURN VALUE IGNORED · cf858b71
      Sujatha Sivakumar authored
      Problem:
      =======
      The return value from my_b_write is ignored by: `my_b_write_quoted',
      `my_b_write_bit',`Query_log_event::print_query_header'
      
      Most callers of `my_b_printf' ignore the return value. `log_event.cc' 
      has many calls to it. 
      
      Analysis:
      ========
      `my_b_write' is used to write data into a file. If the write fails it
      sets appropriate error number and error message through my_error()
      function call and sets the IO_CACHE::error == -1.
      `my_b_printf' function is also used to write data into a file, it
      internally invokes my_b_write to do the write operation. Upon
      success it returns number of characters written to file and on error
      it returns -1 and sets the error through my_error() and also sets
      IO_CACHE::error == -1.  Most of the event specific print functions
      for example `Create_file_log_event::print', `Execute_load_log_event::print'
      etc are the ones which make several calls to the above two functions and
      they do not check for the return value after the 'print' call. All the above 
      mentioned abuse cases deal with the client side.
      
      Fix:
      ===
      As part of bug fix a check for IO_CACHE::error == -1 has been added at 
      a very high level after the call to the 'print' function.  There are 
      few more places where the return value of "my_b_write" is ignored
      those are mentioned below.
      
      +++ mysys/mf_iocache2.c    2012-06-04 07:03:15 +0000
      @@ -430,7 +430,8 @@
                 memset(buffz, '0', minimum_width - length2);
               else
                 memset(buffz, ' ', minimum_width - length2);
      -        my_b_write(info, buffz, minimum_width - length2);
      
      +++ sql/log.cc	2012-06-08 09:04:46 +0000
      @@ -2388,7 +2388,12 @@
           {
             end= strxmov(buff, "# administrator command: ", NullS);
             buff_len= (ulong) (end - buff);
      -      my_b_write(&log_file, (uchar*) buff, buff_len);
      
      At these places appropriate return value handlers have been added.
      cf858b71
    • Bjorn Munch's avatar
      fcc53fa7
  9. 09 Jul, 2012 2 commits
  10. 05 Jul, 2012 2 commits
    • Andrei Elkin's avatar
      Bug#14275000 · dbd63d00
      Andrei Elkin authored
      Fixes for BUG11761686 left a flaw that managed to slip away from testing.
      Only effective filtering branch was actually tested with a regression test
      added to rpl_filter_tables_not_exist.
      The reason of the failure is destuction of too early mem-root-allocated memory 
      at the end of the deferred User-var's do_apply_event().
      
      Fixed with bypassing free_root() in the deferred execution branch.
      Deallocation of created in do_apply_event() items is done by the base code
      through THD::cleanup_after_query() -> free_items() that the parent Query
      can't miss.
      dbd63d00
    • Georgi Kodinov's avatar
      Bug #13889741: HANDLE_FATAL_SIGNAL IN _DB_ENTER_ | · 42644a07
      Georgi Kodinov authored
      HANDLE_FATAL_SIGNAL IN STRNLEN
      
      Fixed the following bounds checking problems :
      1. in check_if_legal_filename() make sure the null terminated
      string is long enough before accessing the bytes in it.
      Prevents pottential read-past-buffer-end
      2. in my_wc_mb_filename() of the filename charset check
      for the end of the destination buffer before sending single
      byte characters into it.
      Prevents write-past-end-of-buffer (and garbaling stack in
      the cases reported here) errors.
      
      Added test cases.
      42644a07
  11. 03 Jul, 2012 1 commit
    • Rohit Kalhans's avatar
      BUG#11762667:MYSQLBINLOG IGNORES ERRORS WHILE WRITING OUTPUT · 176d6b1d
      Rohit Kalhans authored
      This is a followup patch for the bug enabling the test
      i_binlog.binlog_mysqlbinlog_file_write.test
      this was disabled in mysql trunk and mysql 5.5 as in the release
      build mysqlbinlog was not debug compiled whereas the mysqld was.
      Since have_debug.inc script checks only for mysqld to be debug
      compiled, the test was not being skipped on release builds.
      
      We resolve this problem by creating a new inc file 
      mysqlbinlog_have_debug.inc which checks exclusively for mysqlbinlog
      to be debug compiled. if not it skips the test.
       
      176d6b1d
  12. 29 Jun, 2012 1 commit
  13. 28 Jun, 2012 1 commit
    • Georgi Kodinov's avatar
      Bug #13708485: malformed resultset packet crashes client · 428ff7f8
      Georgi Kodinov authored
      Several fixes :
      
      * sql-common/client.c
      Added a validity check of the fields metadata packet sent 
      by the server.
      Now libmysql will check if the length of the data sent by
      the server matches what's expected by the protocol before
      using the data.
      
      * client/mysqltest.cc
      Fixed the error handling code in mysqltest to avoid sending
      new commands when the reading the result set failed (and 
      there are unread data in the pipe).
      
      * sql_common.h + libmysql/libmysql.c + sql-common/client.c
      unpack_fields() now generates a proper error when it fails.
      Added a new argument to this function to support the error 
      generation.
      
      * sql/protocol.cc
      Added a debug trigger to cause the server to send a NULL
      insted of the packet expected by the client for testing 
      purposes.
      428ff7f8
  14. 29 Jun, 2012 2 commits
  15. 28 Jun, 2012 1 commit
  16. 19 Jun, 2012 1 commit
  17. 18 Jun, 2012 1 commit
    • Norvald H. Ryeng's avatar
      Bug#13003736 CRASH IN ITEM_REF::WALK WITH SUBQUERIES · 5f61cc43
      Norvald H. Ryeng authored
      Problem: Some queries with subqueries and a HAVING clause that
      consists only of a column not in the select or grouping lists causes
      the server to crash.
      
      During parsing, an Item_ref is constructed for the HAVING column. The
      name of the column is resolved when JOIN::prepare calls fix_fields()
      on its having clause. Since the column is not mentioned in the select
      or grouping lists, a ref pointer is not found and a new Item_field is
      created instead. The Item_ref is replaced by the Item_field in the
      tree of HAVING clauses. Since the tree consists only of this item, the
      pointer that is updated is JOIN::having. However,
      st_select_lex::having still points to the Item_ref as the root of the
      tree of HAVING clauses.
      
      The bug is triggered when doing filesort for create_sort_index(). When
      find_all_keys() calls select->cond->walk() it eventually reaches
      Item_subselect::walk() where it continues to walk the having clauses
      from lex->having. This means that it finds the Item_ref instead of the
      new Item_field, and Item_ref::walk() tries to dereference the ref
      pointer, which is still null.
      
      The crash is reproducible only in 5.5, but the problem lies latent in
      5.1 and trunk as well.
      
      Fix: After calling fix_fields on the having clause in JOIN::prepare(),
      set select_lex::having to point to the same item as JOIN::having.
      
      This patch also fixes a bug in 5.1 and 5.5 that is triggered if the
      query is executed as a prepared statement. The Item_field is created
      in the runtime arena when the query is prepared, and the pointer to
      the item is saved by st_select_lex::fix_prepare_information() and
      brought back as a dangling pointer when the query is executed, after
      the runtime arena has been reclaimed.
      
      Fix: Backport fix from trunk that switches to the permanent arena
      before calling Item_ref::fix_fields() in JOIN::prepare().
      5f61cc43
  18. 15 Jun, 2012 1 commit
  19. 14 Jun, 2012 1 commit
  20. 13 Jun, 2012 1 commit
    • Harin Vadodaria's avatar
      Bug#11753779: MAX_CONNECT_ERRORS WORKS ONLY WHEN 1ST · 3ec0a7eb
      Harin Vadodaria authored
                    INC_HOST_ERRORS() IS CALLED.
      
      Issue       : Sequence of calling inc_host_errors()
                    and reset_host_errors() required some
                    changes in order to maintain correct
                    connection error count.
      
      Solution    : Call to reset_host_errors() is shifted
                    to a location after which no calls to
                    inc_host_errors() are made.
      3ec0a7eb
  21. 12 Jun, 2012 1 commit
    • Manish Kumar's avatar
      BUG#12400221 - 60926: BINARY LOG EVENTS LARGER THAN MAX_ALLOWED_PACKET · 1211b5d5
      Manish Kumar authored
      Problem
      ========
                  
      Replication breaks in the cases if the event length exceeds 
      the size of master Dump thread's max_allowed_packet.
                    
      The reason why this failure is occuring is because the event length is
      more than the total size of the max_allowed_packet, on addition of the  
      max_event_header length exceeds the max_allowed_packet of the DUMP thread.
      This causes the Dump thread to break replication and throw an error.
                            
      That can happen e.g with row-based replication in Update_rows event.
                  
      Fix
      ====
                
      The problem is fixed in 2 steps:
      
      1.) The Dump thread limit to read event is increased to the upper limit
          i.e. Dump thread reads whatever gets logged in the binary log.
      
      2.) On the slave side we increase the the max_allowed_packet for the
          slave's threads (IO/SQL) by increasing it to 1GB.
      
          This is done using the new server option (slave_max_allowed_packet)
          included, is used to regulate the max_allowed_packet of the  
          slave thread (IO/SQL) by the DBA, and facilitates the sending of
          large packets from the master to the slave.
      
          This causes the large packets to be received by the slave and apply
          it successfully.
      1211b5d5
  22. 05 Jun, 2012 1 commit
  23. 01 Jun, 2012 1 commit
    • Annamalai Gurusami's avatar
      Bug #13933132: [ERROR] GOT ERROR -1 WHEN READING TABLE APPEARED · 08f36070
      Annamalai Gurusami authored
      WHEN KILLING
      
      Suppose there is a query waiting for a lock.  If the user kills
      this query, then "Got error -1 when reading table" error message
      must not be logged in the server log file.  Since this is a user
      requested interruption, no spurious error message must be logged
      in the server log.  This patch will remove the error message from
      the log.
      
      approved by joh and tatjana
      08f36070
  24. 31 May, 2012 2 commits
  25. 30 May, 2012 2 commits
  26. 29 May, 2012 1 commit
    • Rohit Kalhans's avatar
      Bug#11762667: MYSQLBINLOG IGNORES ERRORS WHILE WRITING OUTPUT · 35d4c18e
      Rohit Kalhans authored
      Problem: mysqlbinlog exits without any error code in case of
      file write error. It is because of the fact that the calls
      to Log_event::print() method does not return a value and the
      thus any error were being ignored.
      
      Resolution: We resolve this problem by checking for the 
      IO_CACHE::error == -1 after every call to Log_event:: print()
      and terminating the further execution.
      35d4c18e
  27. 24 May, 2012 1 commit
    • Inaam Rana's avatar
      Bug #14100254 65389: MVCC IS BROKEN WITH IMPLICIT LOCK · 0bb636b3
      Inaam Rana authored
      rb://1088
      approved by: Marko Makela
      
      This bug was introduced in early stages of plugin. We were not
      checking for an implicit lock on sec index rec for trx_id that is
      stamped on current version of the clust_index in case where the
      clust_index has a previous delete marked version.
      0bb636b3