1. 14 Dec, 2010 1 commit
    • Sergey Glukhov's avatar
      Fixed following problems: · fcb83cbf
      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.
      
      
      mysql-test/r/derived.result:
        test case
      mysql-test/r/multi_update.result:
        test case
      mysql-test/r/view.result:
        test case
      mysql-test/suite/innodb/r/innodb_multi_update.result:
        test case
      mysql-test/suite/innodb/t/innodb_multi_update.test:
        test case
      mysql-test/suite/innodb_plugin/r/innodb_multi_update.result:
        test case
      mysql-test/suite/innodb_plugin/t/innodb_multi_update.test:
        test case
      mysql-test/t/derived.test:
        test case
      mysql-test/t/multi_update.test:
        test case
      mysql-test/t/view.test:
        test case
      sql/item.cc:
        --removed unnecessary code
      sql/item_cmpfunc.cc:
        --removed unnecessary checks
        --THD::is_context_analysis_only() is replaced with LEX::is_ps_or_view_context_analysis()
      sql/item_func.cc:
        --refactored context analysis checks
      sql/item_row.cc:
        --removed unnecessary checks
      sql/item_subselect.cc:
        --removed unnecessary code
        --added DBUG_ASSERT into Item_subselect::exec()
          which asserts that subquery execution can not happen
          if LEX::context_analysis_only is set, i.e. at context
          analysis stage.
        --Item_subselect::const_item()
          Return FALSE if LEX::context_analysis_only is set.
          It prevents subquery evaluation in ::fix_fields &
          ::fix_length_and_dec at context analysis stage.
      sql/item_subselect.h:
        --removed unnecessary code
      sql/mysql_priv.h:
        --Added new set of flags.
      sql/sql_class.h:
        --removed unnecessary code
      sql/sql_derived.cc:
        --added LEX::context_analysis_only analysis intialization/cleanup
      sql/sql_lex.cc:
        --init LEX::context_analysis_only field
      sql/sql_lex.h:
        --New LEX::context_analysis_only field
      sql/sql_parse.cc:
        --removed unnecessary code
      sql/sql_prepare.cc:
        --removed unnecessary code
        --added LEX::context_analysis_only analysis intialization/cleanup
      sql/sql_select.cc:
        --refactored context analysis checks
      sql/sql_show.cc:
        --added LEX::context_analysis_only analysis intialization/cleanup
      sql/sql_view.cc:
        --added LEX::context_analysis_only analysis intialization/cleanup
      fcb83cbf
  2. 13 Dec, 2010 3 commits
    • Tor Didriksen's avatar
      Bug #58426 Crashing tests not failing as they are supposed to on Solaris 10 debug · fda62900
      Tor Didriksen authored
        
      On this platform we seem to get lots of other signals
      while waiting for SIGKILL to be delivered.
      
      Solution: use sigsuspend(<all signals blocked>)
      
      
      
      dbug/dbug.c:
        New function _db_suicide_() which does kill(myself, -9) and then waits forever.
      include/my_dbug.h:
        Let DBUG_SUICE wait forever until the KILL signal is delivered, and process dies.
      fda62900
    • Sergey Glukhov's avatar
      Bug#39828 : Autoinc wraps around when offset and increment > 1 · 1faf910e
      Sergey Glukhov authored
      Auto increment value wraps when performing a bulk insert with
      auto_increment_increment and auto_increment_offset greater than
      one.
      The fix:
      If overflow happened then return MAX_ULONGLONG value as an
      indication of overflow and check this before storing the
      value into the field in update_auto_increment().
      
      
      
      mysql-test/r/auto_increment.result:
        test case
      mysql-test/suite/innodb/r/innodb-autoinc.result:
        test case fix
      mysql-test/suite/innodb/t/innodb-autoinc.test:
        test case fix
      mysql-test/suite/innodb_plugin/r/innodb-autoinc.result:
        test case fix
      mysql-test/suite/innodb_plugin/t/innodb-autoinc.test:
        test case fix
      mysql-test/t/auto_increment.test:
        test case
      sql/handler.cc:
        If overflow happened then return MAX_ULONGLONG value as an
        indication of overflow and check this before storing the
        value into the field in update_auto_increment().
      1faf910e
    • Sergey Glukhov's avatar
      Bug#58396 group_concat and explain extended are still crashy · 6330815a
      Sergey Glukhov authored
      Explain fails at fix_fields stage and some items are left unfixed,
      particulary Item_group_concat. Item_group_concat::orig_args field
      is uninitialized in this case and Item_group_concat::print call 
      leads to crash.
      The fix:
      move the initialization of Item_group_concat::orig_args
      into constructor.
      
      
      mysql-test/r/func_gconcat.result:
        test case
      mysql-test/t/func_gconcat.test:
        test case
      sql/item_sum.cc:
        move the initialization of Item_group_concat::orig_args
        into constructor.
      6330815a
  3. 07 Dec, 2010 1 commit
  4. 10 Dec, 2010 1 commit
    • Dmitry Shulga's avatar
      Fixed bug#54486 - assert in my_seek, concurrent · 5ca6880d
      Dmitry Shulga authored
      DROP/CREATE SCHEMA, CREATE TABLE, REPAIR.
      
      The cause of assert was concurrent execution of
      DROP DATABASE and REPAIR TABLE where first statement
      deleted table's file .TMD at the same time as
      REPAIR TABLE tried to read file details from the old file
      that was just removed.
      
      Additionally was fixed trouble when DROP TABLE try delete
      all files belong to table being dropped at the same time
      when REPAIR TABLE statement has just deleted .TMD file.
      
      No regression test added because this would require adding a
      sync point to mysys/my_redel.c. Since this bug is not present in
      5.5+, adding test coverage was considered unnecessary.
      The patch has been verified using RQG testing.
      
      
      sql/sql_db.cc:
        mysql_rm_known_files() modified: ignore possible ENOENT error
        when trying delete all table's files. Such aggressive 
        algorithm permits skip already deleted (in another thread)
        files.
        
        Installation of Drop_table_error_handler as internal error handler
        moved from mysql_rm_db() to mysql_rm_knowns_files() near to place
        where source of possible errors (call to mysql_rm_table_part2) located.
      storage/myisam/mi_check.c:
        mi_repair() was modified: set param->retry_repair= 0
        in order to don't call following failover procedure
        in ha_myisam::repair().
      5ca6880d
  5. 09 Dec, 2010 5 commits
    • Bjorn Munch's avatar
      merge from 5.1-mtr · 50d1f9f3
      Bjorn Munch authored
      50d1f9f3
    • Bjorn Munch's avatar
      Bug #58511 mysqltest doesn't always run statements in ps mode · 10088271
      Bjorn Munch authored
      mysqltest checks if the stmt is one that should be run in ps mode,
        but regexp doesn't match if preceeded by /* */ comment.
      Fix: match function will jump over /*..*/ if found at start
      10088271
    • Bjorn Munch's avatar
      Bug #58522 mtr --debug leaks memory when test fails · e70cb01d
      Bjorn Munch authored
      Backported use of setenv() from 5.5
      This will remove the leak on systems that have setenv()
      I have not fixed the string.c leak, it's a local variable
         that the cleanup function cannot access.
      e70cb01d
    • Bjorn Munch's avatar
      Bug #58608 mysqltestrun --help incongruences · b5fdbcb2
      Bjorn Munch authored
      Fixed some errors
      Added note about 'no' prefix to options
      See also follow-up comment to bug report
      b5fdbcb2
    • Ramil Kalimullin's avatar
      Fix for bug#48451: my_seek and my_tell ignore MY_WME flag · 0137e028
      Ramil Kalimullin authored
       my_seek() and my_tell() functions now honour MY_WME flag.
      
      
      include/mysys_err.h:
        Fix for bug#48451: my_seek and my_tell ignore MY_WME flag
          - EE_CANT_SEEK added, used in my_seek() and my_tell() functions.
      mysys/errors.c:
        Fix for bug#48451: my_seek and my_tell ignore MY_WME flag
          - EE_CANT_SEEK added, used in my_seek() and my_tell() functions.
      mysys/my_seek.c:
        Fix for bug#48451: my_seek and my_tell ignore MY_WME flag
          - my_seek() and my_tell() handle MY_WME flag.
      mysys/my_symlink.c:
        Fix for bug#48451: my_seek and my_tell ignore MY_WME flag
          - __attribute__((unused)) removed, as myf MyFlags is
        actually used in the my_realpath() function.
      storage/myisam/ha_myisam.cc:
        Fix for bug#48451: my_seek and my_tell ignore MY_WME flag
          - check my_seek() result.
      0137e028
  6. 07 Dec, 2010 1 commit
    • Luis Soares's avatar
      BUG#58416 · 3cecccff
      Luis Soares authored
      Automerging bzr bundle from bug report into latest 
      mysql-5.1-bugteam.
      3cecccff
  7. 02 Dec, 2010 3 commits
  8. 01 Dec, 2010 4 commits
    • Mats Kindahl's avatar
      9c87ae9b
    • Mats Kindahl's avatar
      BUG#58246: INSTALL PLUGIN not secure & crashable · fc9f3efa
      Mats Kindahl authored
      When installing plugins, there is a missing check
      for slash (/) in the path on Windows. Note that on
      Windows, both / and \ can be used to separate
      directories.
      
      This patch fixes the issue by:
      - Adding a FN_DIRSEP symbol for all platforms
        consisting of a string of legal directory
        separators.
      - Adding a charset-aware version of strcspn().
      - Adding a check_valid_path() function that uses
        my_strcspn() to check if any FN_DIRSEP character
        is in the supplied string.
      - Using the check_valid_path() function in
        sql_plugin.cc and sql_udf.cc (which means
        replacing the existing test there).
      
      include/config-netware.h:
        Adding FN_DIRSEP
        ******
        Adding FN_DIRSEP
      include/config-win.h:
        Adding FN_DIRSEP
        ******
        Adding FN_DIRSEP
      include/m_ctype.h:
        Adding my_strspn() and my_strcspn().
        
        ******
        Adding my_strspn() and my_strcspn().
      include/my_global.h:
        Adding FN_DIRSEP
        ******
        Adding FN_DIRSEP
      mysql-test/t/plugin_not_embedded.test:
        Adding test that file names containing / is
        disallowed on *all* platforms.
        ******
        Adding test that file names containing / is
        disallowed on *all* platforms.
      sql/sql_plugin.cc:
        Introducing check_if_path() function for
        checking if filename is a path to include
        / on Windows.
        ******
        Introducing check_if_path() function for
        checking if filename is a path to include
        / on Windows.
      sql/sql_udf.cc:
        Switching to use check_if_path() function.
        ******
        Switching to use check_if_path() function.
      strings/my_strchr.c:
        Adding my_strspn() and my_strcspn().
        ******
        Adding my_strspn() and my_strcspn().
      fc9f3efa
    • Bjorn Munch's avatar
      Bug #58092 Test "rpl_cross_version" has "copy_file" failing · cc21483f
      Bjorn Munch authored
      I am not fixing the test failure
      Adds printing of my_errno when commands fail, could hopefully help
      cc21483f
    • Nirbhay Choubey's avatar
      Additional fix for bug#54899 · 2d81ad5b
      Nirbhay Choubey authored
      Fixing the testcase to use the database name
      as connected_db instead of 'test' database.
      
      mysql-test/r/mysql.result:
        Additional fix in the test for bug#54899.
      mysql-test/t/mysql.test:
        Additional fix in the test for bug#54899.
      2d81ad5b
  9. 30 Nov, 2010 1 commit
  10. 27 Nov, 2010 1 commit
    • Luis Soares's avatar
      BUG#58416: binlog.binlog_row_failure_mixing_engines fails on · 6ce0bd8a
      Luis Soares authored
      win x86 debug_max
      
      The windows MTR run exhibited a different test execution 
      ordering (due to the fact that in these platforms MTR is invoked
      with --parallel > 1). This uncovered a bug in the aforementioned
      test case, which is triggered by the following conditions:
      
        1. server is not restarted between two different tests;
        2. the test before binlog.binlog_row_failure_mixing_engines
           issues flush logs;
        3. binlog.binlog_row_failure_mixing_engines uses binlog
           positions to limit the output of show_binlog_events;
        4. binlog.binlog_row_failure_mixing_engines does not state which
           binlog file to use, thence it uses a wrong binlog file with
           the correct position.
      
      There are two possible fixes: 1. make sure that the test start 
      from a clean slate - binlog wise; 2. in addition to the position, 
      also state the binary log file before sourcing 
      show_binlog_events.inc .
      
      We go for fix #1, ie, deploy a RESET MASTER before the test is 
      actually started.
      6ce0bd8a
  11. 26 Nov, 2010 1 commit
    • Davi Arnaut's avatar
      Bug#51817: incorrect assumption: thd->query at 0x2ab2a8360360 is an invalid pointer · d5e92895
      Davi Arnaut authored
      The problem is that the logic which checks if a pointer is
      valid relies on a poor heuristic based on the start and end
      addresses of the data segment and heap.
      
      Apart from miscalculating the heap bounds, this approach also
      suffers from the fact that memory can come from places other
      than the heap. See Bug#58528 for a more detailed explanation.
      
      On Linux, the solution is to access the process's memory
      through /proc/self/task/<tid>/mem, which allows for retrieving
      the contents of pages within the virtual address space of
      the calling process. If a address range is not mapped, a
      input/output error is returned.
      
      client/mysqltest.cc:
        Use new interface to my_safe_print_str.
      include/my_stacktrace.h:
        Drop name from my_safe_print_str.
      mysys/stacktrace.c:
        Access the process's memory through a file descriptor and
        dump the contents of the memory range. The file descriptor
        offset is equivalent to a offset into the address space.
        
        Do not print the name of the variable associated with the
        address. It can be better accomplished at a higher level.
      sql/mysqld.cc:
        Put the variable dumping information within its own newline block.
        Use symbolic names which better convey information to the user.
      d5e92895
  12. 30 Nov, 2010 7 commits
    • Luis Soares's avatar
      2bdeabe7
    • Christopher Powers's avatar
      Null-merge from mysql-5.0-bugteam · e05bfa68
      Christopher Powers authored
      e05bfa68
    • Luis Soares's avatar
      BUG#57288: binlog_tmp_table fails sporadically: "Failed to write · b0094227
      Luis Soares authored
      the DROP statement ..."
            
      Problem: When using temporary tables and closing a session, an
      implicit DROP TEMPORARY TABLE IF EXISTS is written to the binary
      log (while cleaning up the context of the session THD - see:
      sql_class.cc:THD::cleanup which calls close_temporary_tables).
           
      close_temporary_tables, first checks if the binary log is opened
      and then proceeds to creating the DROP statements. Then, such
      statements, are written to the binary log through
      MYSQL_BIN_LOG::write(Log_event *). Inside, there is another check
      if the binary log is opened and if not an error is returned. This
      is where the faulty behavior is triggered. Given that the test
      case replays a binary log, with temp tables statements, and right
      after it issues RESET MASTER, there is a chance that is_open will
      report false (when the mysql session is closed and the temporary
      tables are written).
            
      is_open may return false, because MYSQL_BIN_LOG::reset_logs is
      not setting the correct flag (LOG_CLOSE_TO_BE_OPENED), on the
      MYSQL_LOG_BIN::log_state (instead it sets just the
      LOG_CLOSE_INDEX flag, leaving the log_state to
      LOG_CLOSED). Thence, when writing the DROP statement as part of
      the THD::cleanup, the thread could get a return value of false
      for is_open - inside MYSQL_BIN_LOG::write, ultimately reporting
      that it can't write the event to the binary log.
            
      Fix: We fix this by adding the correct flag, missing in the
      second close.
      b0094227
    • Christopher Powers's avatar
      Bug#35333, "If Federated table can't connect to remote host, can't retrieve metadata" · bc0f5b24
      Christopher Powers authored
      mysql-test/r/show_check.result:
        Fixed corrupted result file
      bc0f5b24
    • Christopher Powers's avatar
      Bug#35333, "If Federated table can't connect to remote host, can't retrieve · 4edea18f
      Christopher Powers authored
      metadata"
                  
      Improved error handling such that queries against Information_Schema.Tables won't
      fail if a federated table can't make a remote connection.
      
      mysql-test/r/merge.result:
        Updated with warnings that were previously masked.
      mysql-test/r/show_check.result:
        Updated with warnings that were previously masked.
      mysql-test/r/view.result:
        Updated with warnings that were previously masked.
      sql/sql_show.cc:
        If get_schema_tables_record() encounters an error, push a warning,
        set the TABLE COMMENT column with the error text, and clear the
        error so that the operation can continue.
      4edea18f
    • Christopher Powers's avatar
      merge · f6887139
      Christopher Powers authored
      f6887139
    • Christopher Powers's avatar
      Bug#35333, "If Federated table can't connect to remote host, can't retrieve metadata" · e199c7cd
      Christopher Powers authored
      Improved error handling such that queries against Information_Schema.Tables won't
      fail if a Federated table is unable to connect to remote host.
      
      
      
      sql/sql_show.cc:
        If Handler::Info() fails, save error text in TABLE COMMENTS column, clear error.
      e199c7cd
  13. 29 Nov, 2010 3 commits
  14. 28 Nov, 2010 1 commit
    • unknown's avatar
      BUG#54903 BINLOG statement toggles session variables · f225470b
      unknown authored
      When using BINLOG statement to execute rows log events, session variables
      foreign_key_checks and unique_checks are changed temporarily.  As each rows
      log event has their own special session environment and its own
      foreign_key_checks and unique_checks can be different from current session
      which executing the BINLOG statement. But these variables are not restored
      correctly after BINLOG statement. This problem will cause that the following
      statements fail or generate unexpected data.
      
      In this patch, code is added to backup and restore these two variables.
      So BINLOG statement will not affect current session's variables again.
      
      
      mysql-test/extra/binlog_tests/binlog.test:
        Add test to verify this patch.
      mysql-test/suite/binlog/r/binlog_row_binlog.result:
        Add test to verify this patch.
      mysql-test/suite/binlog/r/binlog_stm_binlog.result:
        Add test to verify this patch.
      sql/sql_binlog.cc:
        Add code to backup and restore thd->options.
      f225470b
  15. 27 Nov, 2010 1 commit
  16. 26 Nov, 2010 6 commits
    • Georgi Kodinov's avatar
      merge · d6d0827e
      Georgi Kodinov authored
      d6d0827e
    • Alexander Barkov's avatar
      Bug#56639 Character Euro (0x88) not converted from cp1251 to utf8 · a7c09ea9
      Alexander Barkov authored
      Problem: MySQL cp1251 did not support 'U+20AC EURO SIGN'
      which was assigned a few years ago to 0x88.
      
      Fix: adding mapping: 0x88 <-> U+20AC 
      
        @ mysql-test/include/ctype_8bit.inc
        New shared file to test 8bit character sets.
      
        @ mysql-test/r/ctype_cp1251.result
        @ mysql-test/t/ctype_cp1251.test
        Adding tests
      
        @ sql/share/charsets/cp1251.xml
        Adding mapping
      
        @ strings/ctype-extra.c
        Regenerating ctype-extra.c using strings/conf_to_src
        according to new cp1251.xml
      a7c09ea9
    • Nirbhay Choubey's avatar
      Bug #54899 : --one-database option cannot handle DROP/CREATE DATABASE commands · e1b773cb
      Nirbhay Choubey authored
      After dropping and recreating the database specified along with --one-database
      option at command line, mysql client keeps filtering the statements even after
      the execution of a 'USE' command on the same database.
      
      --one-database option enables the filtering of statements when the current
      database is not the one specified at the command line. However, when the same
      database is dropped and recreated the variable (current_db) that holds the
      inital database name gets altered. This bug exploits the fact that current_db
      initially gets set to null value (0) when a 'use db_name' follows the recreation
      of same database db_name (speficied at the command line) and hence skip_updates
      gets set to 1, which inturn triggers the further filtering of statements.
      
      Fixed by making get_current_db() a no-op function when one_database is set,
      and hence, under that condition current_db will not get altered.
      Note, however the value of current_db can change when we execute 'connect'
      command with a differnet database to reconnect to the server, in which case,
      the behavior of --one-database will be formulated using this new database.
      
      
      client/mysql.cc:
        Bug #54899 : --one-database option cannot handle DROP/CREATE DATABASE commands
        
        Added an if statement at the beginnning of get_current_db() , which makes it
        a no-op function if one-database option is specified, and hence current_db
        remains unchanged.
        
        Changed the help message for one-database option to a more appropriate message
        as specified in mysql documentation.
      mysql-test/r/mysql.result:
        Added a test case for bug#54899 and some more test cases to
        check other one-database option related behaviors.
      mysql-test/t/mysql.test:
        Added a test case for bug#54899 and some more test cases to
        check other one-database option related behaviors.
      e1b773cb
    • Bjorn Munch's avatar
      Bug #58515 Tests: use use exec echo, not write_file to write mysqld.1.expect · 067710eb
      Bjorn Munch authored
      Fixed as suggested in the .inc file and two tests
      Could not reproduce problem, but tested tests on Windows
      067710eb
    • Georgi Kodinov's avatar
      merge · db8bd7be
      Georgi Kodinov authored
      db8bd7be
    • Georgi Kodinov's avatar
      bumped up the version string. · b7e69aef
      Georgi Kodinov authored
      b7e69aef