1. 27 May, 2010 3 commits
    • Dmitry Lenev's avatar
      A 5.1-only version of fix for bug #46947 "Embedded SELECT · 0a35e5bd
      Dmitry Lenev authored
      without FOR UPDATE is causing a lock".
      
      SELECT statements with subqueries referencing InnoDB tables
      were acquiring shared locks on rows in these tables when they
      were executed in REPEATABLE-READ mode and with statement or
      mixed mode binary logging turned on.
      
      This was a regression which were introduced when fixing
      bug 39843.
      
      The problem was that for tables belonging to subqueries
      parser set TL_READ_DEFAULT as a lock type. In cases when
      statement/mixed binary logging at open_tables() time this
      type of lock was converted to TL_READ_NO_INSERT lock at
      open_tables() time and caused InnoDB engine to acquire
      shared locks on reads from these tables. Although in some
      cases such behavior was correct (e.g. for subqueries in
      DELETE) in case of SELECT it has caused unnecessary locking.
      
      This patch implements minimal version of the fix for the
      specific problem described in the bug-report which supposed
      to be not too risky for pushing into 5.1 tree.
      The 5.5 tree already contains a more appropriate solution
      which also addresses other related issues like bug 53921
      "Wrong locks for SELECTs used stored functions may lead
      to broken SBR".
      
      This patch tries to solve the problem by ensuring that
      TL_READ_DEFAULT lock which is set in the parser for
      tables participating in subqueries at open_tables()
      time is interpreted as TL_READ_NO_INSERT or TL_READ.
      TL_READ is used only if we know that this is a SELECT
      and that this particular table is not used by a stored
      function.
      
      Test coverage is added for both InnoDB and MyISAM.
      
      This patch introduces an "incompatible" change in locking
      scheme for subqueries used in SELECT ... FOR UPDATE and
      SELECT .. IN SHARE MODE.
      
      In 4.1 (as well as in 5.0 and 5.1 before fix for bug 39843)
      the server would use a snapshot InnoDB read for subqueries
      in SELECT FOR UPDATE and SELECT .. IN SHARE MODE statements,
      regardless of whether the binary log is on or off.
      
      If the user required a different type of read (i.e. locking
      read), he/she could request so explicitly by providing FOR
      UPDATE/IN SHARE MODE clause for each individual subquery.
      
      The patch for bug 39843 broke this behaviour (which was not
      documented or tested), and started to use locking reads for
      all subqueries in SELECT ... FOR UPDATE/IN SHARE MODE.
      This patch restores 4.1 behaviour.
      
      This patch should be mostly null-merged into 5.5 tree.
      
      mysql-test/include/check_concurrent_insert.inc:
        Added auxiliary script which allows to check if statement
        reading table allows concurrent inserts in it.
      mysql-test/include/check_no_concurrent_insert.inc:
        Added auxiliary script which allows to check that statement
        reading table doesn't allow concurrent inserts in it.
      mysql-test/include/check_no_row_lock.inc:
        Added auxiliary script which allows to check if statement
        reading table doesn't take locks on its rows.
      mysql-test/include/check_shared_row_lock.inc:
        Added auxiliary script which allows to check if statement
        reading table takes shared locks on some of its rows.
      mysql-test/r/bug39022.result:
        After bug #46947 'Embedded SELECT without FOR UPDATE is
        causing a lock' was fixed test case for bug 39022 has to
        be adjusted in order to trigger execution path on which
        original problem was encountered.
      mysql-test/r/innodb_mysql_lock2.result:
        Added coverage for handling of locking in various cases when
        we read data from InnoDB tables (includes test case for
        bug #46947 'Embedded SELECT without FOR UPDATE is causing a
        lock').
      mysql-test/r/lock_sync.result:
        Added coverage for handling of locking in various cases when
        we read data from MyISAM tables.
      mysql-test/t/bug39022.test:
        After bug #46947 'Embedded SELECT without FOR UPDATE is
        causing a lock' was fixed test case for bug 39022 has to
        be adjusted in order to trigger execution path on which
        original problem was encountered.
      mysql-test/t/innodb_mysql_lock2.test:
        Added coverage for handling of locking in various cases when
        we read data from InnoDB tables (includes test case for
        bug #46947 'Embedded SELECT without FOR UPDATE is causing a
        lock').
      mysql-test/t/lock_sync.test:
        Added coverage for handling of locking in various cases when
        we read data from MyISAM tables.
      sql/mysql_priv.h:
        Function read_lock_type_for_table() now takes pointers to
        LEX and TABLE_LIST elements as its arguments since to
        correctly determine lock type it needs to know what
        statement is being performed and whether table element for
        which lock type to be determined belongs to prelocking list.
      sql/sql_base.cc:
        Changed read_lock_type_for_table() to return a weak TL_READ
        type of lock in cases when we are executing SELECT (and so
        won't update tables directly) and table doesn't belong to
        statement's prelocking list and thus can't be used by a
        stored function. It is OK to do so since in this case table
        won't be used by statement or function call which will be
        written to the binary log, so serializability requirements
        for it can be relaxed.
        One of results from this change is that SELECTs on InnoDB
        tables no longer takes shared row locks for tables which
        are used in subqueries (i.e. bug #46947 is fixed).
        Another result is that for similar SELECTs on MyISAM tables
        concurrent inserts are allowed.
        In order to implement this change signature of
        read_lock_type_for_table() function was changed to
        take pointers to LEX and TABLE_LIST objects.
      sql/sql_update.cc:
        Function read_lock_type_for_table() now takes pointers to
        LEX and TABLE_LIST elements as its arguments since to
        correctly determine lock type it needs to know what
        statement is being performed and whether table element for
        which lock type to be determined belongs to prelocking list.
      0a35e5bd
    • Sergey Glukhov's avatar
      Bug#52005 'JOIN_TAB->dependent' may be incorrectly propageted for multilevel outer joins · 8ede529b
      Sergey Glukhov authored
      There are two problems:
      1. In simplify_joins function we calculate table dependencies. If STRAIGHT_JOIN hint
      is used for whole SELECT we do not count it and as result some dependendecies
      might be lost. It leads to incorrect table order which is returned by
      join_tab_cmp_straight() function.
      2. make_join_statistics() calculate the transitive closure for relations a particular
      JOIN_TAB is 'dependent on'.
      We aggregate the dependent table_map of a JOIN_TAB by adding dependencies from other
      tables which we depend on. However, this may also cause new dependencies to be
      available after we have completed processing a certain JOIN_TAB.
      Both these problems affect condition pushdown and as result condition might be pushed
      into wrong table which leads to crash or even omitted which leads to wrong result.
      The fix:
      1. Use modified 'transitive closure' algorithm provided by Ole John Aske
      2. Update table dependences in simplify_joins according to 
         global STRAIGHT_JOIN hint.
      Note: the patch also fixes bugs 46091 & 51492
      
      
      mysql-test/r/join_outer.result:
        test case
      mysql-test/t/join_outer.test:
        test case
      sql/sql_select.cc:
        1. Use modified 'transitive closure' algorithm provided by Ole John Aske
        2. Update table dependences in simplify_joins according to 
           global STRAIGHT_JOIN hint.
      8ede529b
    • Alexey Kopytov's avatar
      Automerge. · 4c31276e
      Alexey Kopytov authored
      4c31276e
  2. 26 May, 2010 2 commits
  3. 25 May, 2010 7 commits
    • Ramil Kalimullin's avatar
      Manual merge. · d98c981f
      Ramil Kalimullin authored
      d98c981f
    • Alexey Kopytov's avatar
      Bug #53830: !table || (!table->read_set || · 1d0acc77
      Alexey Kopytov authored
                   bitmap_is_set(table->read_set, field_index))
      
      UPDATE on an InnoDB table modifying the same index that is used
      to satisfy the WHERE condition could trigger a debug assertion
      under some circumstances.
      
      Since for engines with the HA_PRIMARY_KEY_IN_READ_INDEX flag
      set results of an index scan on a secondary index are appended
      by the primary key value, if a query involves only columns from
      the primary key and a secondary index, the latter is considered
      to be covering.
      
      That tricks mysql_update() to mark for reading only columns
      from the secondary index when it does an index scan to retrieve
      rows to update in case a part of that key is also being
      updated. However, there may be other columns in WHERE that are
      part of the primary key, but not the secondary one.
      
      What we actually want to do in this case is to add index
      columns to the existing WHERE columns bitmap rather than
      replace it.
      
      mysql-test/r/innodb_mysql.result:
        Test case for bug #53830.
      mysql-test/t/innodb_mysql.test:
        Test case for bug #53830.
      sql/sql_update.cc:
        Add index columns to the read_set bitmap, don't replace it.
      sql/table.cc:
        Added a new add_read_columns_used_by_index() function to 
        st_table.
      sql/table.h:
        Added a new add_read_columns_used_by_index() function to 
        st_table.
      1d0acc77
    • Ramil Kalimullin's avatar
      Automerge. · 32d6a7fc
      Ramil Kalimullin authored
      32d6a7fc
    • Ramil Kalimullin's avatar
      Fix for bug #53907: Table dump command can be abused to dump arbitrary tables. · eef9ce8c
      Ramil Kalimullin authored
      Problem: one with SELECT privilege on some table may dump other table
      performing COM_TABLE_DUMP command due to missed check of the table name.
      
      Fix: check the table name.
      
      
      sql/sql_parse.cc:
        Fix for bug #53907: Table dump command can be abused to dump arbitrary tables.
          - check given table name performing COM_TABLE_DUMP command.
      tests/mysql_client_test.c:
        Fix for bug #53907: Table dump command can be abused to dump arbitrary tables.
          - test case.
      eef9ce8c
    • Davi Arnaut's avatar
      Bug#53908: compile failure with embedded enabled · 342819f1
      Davi Arnaut authored
      This fixes a recently introduced regression, where a variable is
      not defined for the embedded server. Although the embedded server
      is not supported in 5.0, make it at least compile.
      342819f1
    • Jonathan Perkin's avatar
      bug#49968: Properly define HAVE_ERRNO_AS_DEFINE for the appropriate · c42772c7
      Jonathan Perkin authored
      OpenBSD releases.
      
      Apply patch from Brad Smith, thanks!
      c42772c7
    • unknown's avatar
      Postfix BUG#49741 · 8f8e1d6f
      unknown authored
      8f8e1d6f
  4. 24 May, 2010 1 commit
    • unknown's avatar
      Bug #49741 test files contain explicit references to bin/relay-log positions · 7e80f1c5
      unknown authored
      Some of the test cases reference to binlog position and
      these position numbers are written into result explicitly.
      It is difficult to maintain if log event format changes. 
      
      There are a couple of cases explicit position number appears, 
      we handle them in different ways
      A. 'CHANGE MASTER ...' with MASTER_LOG_POS or/and RELAY_LOG_POS options
         Use --replace_result to mask them.
      B. 'SHOW BINLOG EVENT ...'
         Replaced by show_binlog_events.inc or wait_for_binlog_event.inc. 
         show_binlog_events.inc file's function is enhanced by given
         $binlog_file and $binlog_limit.
      C. 'SHOW SLAVE STATUS', 'show_slave_status.inc' and 'show_slave_status2.inc'
         For the test cases just care a few items in the result of 'SHOW SLAVE STATUS',
         only the items related to each test case are showed.
         'show_slave_status.inc' is rebuild, only the given items in $status_items
         will be showed.
         'check_slave_is_running.inc' and 'check_slave_no_error.inc'
         and 'check_slave_param.inc' are auxiliary files helping
         to show running status and error information easily.
      
      
      mysql-test/extra/binlog_tests/binlog.test:
        It only cares whether current binlog file index is changed, so it is ok
        with 'show_master_status.inc' instead of 'show mater status'.
      mysql-test/extra/binlog_tests/blackhole.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/extra/rpl_tests/rpl_deadlock.test:
        Use 'check_slave_is_running.inc' instead of 'show_slave_status2.inc'.
      mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
        Use 'check_slave_is_running.inc' instead of 'show slave status' statement.
      mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test:
        Use 'wait_for_slave_sql_error.inc' and 'ait_for_slave_sql_error_and_skip.inc' instead of 'show slave status'.
      mysql-test/extra/rpl_tests/rpl_flsh_tbls.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/extra/rpl_tests/rpl_get_master_version_and_clock.test:
        It is need now to give a error number, so use 'wait_for_slave_io_to_stop.inc'
        instead of 'wait_for_slave_io_error.inc'.
      mysql-test/extra/rpl_tests/rpl_insert_delayed.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/extra/rpl_tests/rpl_log.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
        se 'check_slave_is_running.inc' instead of 'show slave status' statement.
      mysql-test/extra/rpl_tests/rpl_max_relay_size.test:
        se 'check_slave_is_running.inc' instead of 'show slave status' statement.
      mysql-test/extra/rpl_tests/rpl_ndb_apply_status.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/extra/rpl_tests/rpl_reset_slave.test:
        Use 'show_slave_status.inc' instead of 'show_slave_status2.inc' statement.
        Use 'check_slave_no_error.inc' to simplify the check that there is no error.
      mysql-test/extra/rpl_tests/rpl_row_basic.test:
        Use 'check_slave_is_running.inc' to verify that Slave threads are running well.
        Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening.
      mysql-test/extra/rpl_tests/rpl_row_tabledefs.test:
        Use 'show_slave_error_status_and_skip.inc' instead of 'show slave status'.
      mysql-test/include/check_slave_is_running.inc:
        To make sure both sql and io thread are running well. If not, the test will be aborted.
      mysql-test/include/check_slave_no_error.inc:
        To make sure both sql and io thread have no error. If not, the test will be aborted.
      mysql-test/include/get_relay_log_pos.inc:
        According to the position of a log event in master binlog file,
        find the peer position of a log event in relay log file.
      mysql-test/include/rpl_stmt_seq.inc:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/include/show_binlog_events.inc:
        Add two options $binlog_file and $binlog_limit for showing binlog events from different binlog files or/and given different limits on position or row number.
      mysql-test/include/show_rpl_debug_info.inc:
        Add 'SELECT NOW()' in the debug information.
      mysql-test/include/show_slave_status.inc:
        It's more clean and tidy Only the given columns of slave status are printed.
      mysql-test/include/test_fieldsize.inc:
        Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening.
        There is no need to print the result of 'show slave stutus'.
      mysql-test/include/wait_for_binlog_event.inc:
        Use show_rpl_debug_info.inc instead of 'SHOW BINLOG EVENTS'.
      mysql-test/include/wait_for_slave_io_error.inc:
        Add $slave_io_errno and $show_slave_io_error, it waits only a given error.
      mysql-test/include/wait_for_slave_param.inc:
        Use die instead of exit.
      mysql-test/include/wait_for_slave_sql_error.inc:
        Add $slave_sql_errno and $show_slave_sql_error, it waits only a given error.
      mysql-test/include/wait_for_status_var.inc:
        Use die instead of exit.
      mysql-test/r/flush_block_commit_notembedded.result:
        It checks whether somethings are binlogged, so we using 'show_binlog_event.inc' instead of 'show master status'.
      mysql-test/r/multi_update.result:
        It checks whether somethings are binlogged, so we using 'show_binlog_event.inc' instead of 'show master status'.
      mysql-test/suite/binlog/r/binlog_innodb.result:
        It checks whether somethings are binlogged, so we using 'show_binlog_event.inc' instead of 'show master status'.
      mysql-test/suite/binlog/r/binlog_row_binlog.result:
        Position in the result of 'show master status' is replaced by '#'.
      mysql-test/suite/binlog/r/binlog_stm_binlog.result:
        Position in the result of 'show master status' is replaced by '#'.
      mysql-test/suite/binlog/t/binlog_innodb.test:
        It checks whether somethings are binlogged, so we use 'show_binlog_event.inc' instead of 'show master status'.
      mysql-test/suite/binlog/t/binlog_stm_binlog.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/suite/bugs/r/rpl_bug36391.result:
        Position in the result of 'show master status' is replaced by '#'.
      mysql-test/suite/bugs/t/rpl_bug12691.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/suite/bugs/t/rpl_bug36391.test:
        'show master status' is replaced by 'show_master_status.inc'.
        Position in the result of 'show master status' is replaced by '#'.
      mysql-test/suite/engines/funcs/r/rpl_000015.result:
        It checks whether somethings are binlogged, 
        so we using 'show_binlog_event.inc' instead of 'show master status'.
      mysql-test/suite/engines/funcs/t/rpl_000015.test:
        Use 'check_slave_is_running.inc' to verify that Slave threads are running well.
      mysql-test/suite/engines/funcs/t/rpl_REDIRECT.test:
        Use 'query_vertical SHOW SLAVE STATUS' instead of 'show slave status'.
        There is no status columns in the result file, for no slave exists on master's server.
      mysql-test/suite/engines/funcs/t/rpl_change_master.test:
        This test just care whether Read_Master_Log_Pos is equal to Exec_Master_Log_Pos after 'CHANGE MASTER ..'. So 'show slave status' is removed and just check the value of Read_Master_Log_Pos and Exec_Master_Log_Pos.
      mysql-test/suite/engines/funcs/t/rpl_empty_master_crash.test:
        We doesn't really need the statement.
      mysql-test/suite/engines/funcs/t/rpl_flushlog_loop.test:
        Just show Relay_Log_File, running status and error informations.
        Use 'check_slave_is_running.inc' to verify that Slave threads are running well.
      mysql-test/suite/engines/funcs/t/rpl_loaddata_s.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/suite/engines/funcs/t/rpl_log_pos.test:
        Mask the explicit positions in the result file.
        Use 'check_slave_no_error.inc' to simplify the check that there is no error.
        Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening.
        There is no need to print the result of 'show slave stutus'.
      mysql-test/suite/engines/funcs/t/rpl_rbr_to_sbr.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/suite/engines/funcs/t/rpl_row_drop.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/suite/engines/funcs/t/rpl_row_inexist_tbl.test:
        Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening.
        There is no need to print the result of 'show slave stutus'.
      mysql-test/suite/engines/funcs/t/rpl_row_until.test:
        Use 'check_slave_param.inc' to check whether SQL Thread stop at a right position, and use binlog position variables instead of explicit number in the 'CHANGE MASTER' statements.
        
        Mask the explicit binary log positions in the result file.
      mysql-test/suite/engines/funcs/t/rpl_server_id1.test:
        Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening.
        There is no need to print the result of 'show slave stutus'.
        Use 'check_slave_no_error.inc' to simplify the check that there is no error.
      mysql-test/suite/engines/funcs/t/rpl_server_id2.test:
        It doesn't really need in this test.
      mysql-test/suite/engines/funcs/t/rpl_slave_status.test:
        Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening.
        There is no need to print the result of 'show slave stutus'.
      mysql-test/suite/engines/funcs/t/rpl_switch_stm_row_mixed.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/suite/manual/t/rpl_replication_delay.test:
        Use 'show_slave_status.inc' instead of 'show slave status'.
      mysql-test/suite/parts/t/rpl_partition.test:
        Use 'check_slave_is_running.inc' instead of 'show slave status' statement.
      mysql-test/suite/rpl/include/rpl_mixed_ddl.inc:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/suite/rpl/include/rpl_mixed_dml.inc:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/suite/rpl/t/rpl_000015.test:
        Use 'show_slave_status.inc' instead of 'show_slave_status2.inc'.
      mysql-test/suite/rpl/t/rpl_binlog_grant.test:
        Use 'wait_for_binlog_event.inc' instead of 'show binlog events' statement.
      mysql-test/suite/rpl/t/rpl_bug33931.test:
        Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening.
        There is no need to print the result of 'show slave stutus'.
      mysql-test/suite/rpl/t/rpl_change_master.test:
        This test just care whether Read_Master_Log_Pos is equal to Exec_Master_Log_Pos after 'CHANGE MASTER ..'. So 'show slave status' is removed and just check the value of Read_Master_Log_Pos and Exec_Master_Log_Pos.
      mysql-test/suite/rpl/t/rpl_critical_errors.test:
        Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening.
        There is no need to print the result of 'show slave stutus'.
      mysql-test/suite/rpl/t/rpl_dual_pos_advance.test:
        Mask the explicit position numbers in result file.
        It is restricted running on SBR, for it want to binlog 'set @A=1' statement.
      mysql-test/suite/rpl/t/rpl_empty_master_crash.test:
        It doesn't need in this test.
      mysql-test/suite/rpl/t/rpl_flushlog_loop.test:
        UUse 'check_slave_is_running.inc' and 'show_slave_status.inc' instead of 'show slave status' statement.
      mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test:
        Use 'wait_for_slave_io_error.inc' to wait the given io thread error happening.
      mysql-test/suite/rpl/t/rpl_grant.test:
        It doesn't need in this test.
      mysql-test/suite/rpl/t/rpl_incident.test:
        Use 'check_slave_is_running.inc' instead of 'show slave status' statement.
      mysql-test/suite/rpl/t/rpl_known_bugs_detection.test:
        Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening.
        There is no need to print the result of 'show slave stutus'.
      mysql-test/suite/rpl/t/rpl_loaddata_fatal.test:
        Use 'wait_for_slave_sql_error_and_skip.inc' to wait the given sql thread error happening and then skip the event. There is no need to print the result of 'show slave stutus'.
      mysql-test/suite/rpl/t/rpl_log_pos.test:
        Use 'wait_for_slave_io_error.inc' to wait the given io thread error happening.
        There is no need to print the result of 'show slave status'.
      mysql-test/suite/rpl/t/rpl_rbr_to_sbr.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/suite/rpl/t/rpl_replicate_do.test:
        Use 'show_slave_status.inc' instead of 'show slave status'.
      mysql-test/suite/rpl/t/rpl_rotate_logs.test:
        Use 'show_slave_status.inc' instead of 'show_slave_status2.inc'.
      mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/suite/rpl/t/rpl_row_create_table.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/suite/rpl/t/rpl_row_drop.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/suite/rpl/t/rpl_row_until.test:
        Use 'check_slave_param.inc' to check whether SQL Thread stop at a right position, and use binlog position variables instead of explicit number in the 'CHANGE MASTER' statements.
      mysql-test/suite/rpl/t/rpl_skip_error.test:
        Use 'check_slave_is_running.inc' instead of 'show slave status' statement.
      mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test:
        Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening.
        There is no need to print the result of 'show slave status'.
      mysql-test/suite/rpl/t/rpl_slave_skip.test:
        Use 'check_slave_param.inc' to check whether SQL Thread stop at a right position, and mask the explicit position number in the 'CHANGE MASTER' statements.
      mysql-test/suite/rpl/t/rpl_sp.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/suite/rpl/t/rpl_ssl.test:
        Use 'show_slave_status.inc' instead of 'show slave status'.
      mysql-test/suite/rpl/t/rpl_ssl1.test:
        Use 'show_slave_status.inc' instead of 'show slave status'.
      mysql-test/suite/rpl/t/rpl_stm_until.test:
        Use 'check_slave_param.inc' to check whether SQL Thread stop at a right position, and use binlog position variables instead of explicit number in the 'CHANGE MASTER' statements.
      mysql-test/suite/rpl/t/rpl_temporary_errors.test:
        Use 'check_slave_is_running.inc' instead of 'show slave status' statement.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test:
        Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening.
        There is no need to print the result of 'show slave status'.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_circular.test:
        Use 'check_slave_is_running.inc' instead of 'show slave status' statement.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_simplex.test:
        Use 'check_slave_is_running.inc' instead of 'show slave status' statement.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_idempotent.test:
        Use 'check_slave_is_running.inc' instead of 'show slave status' statement.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_multi.test:
        Mask master_log_pos and master_log_file
      mysql-test/suite/rpl_ndb/t/rpl_ndb_sync.test:
        Use 'check_slave_is_running.inc' instead of 'show slave status' statement.
      mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/t/alter_table-big.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/t/create-big.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/t/ctype_cp932_binlog_stm.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      mysql-test/t/flush_block_commit_notembedded.test:
        It checks whether somethings are binlogged, 
        so we using 'show_binlog_event.inc' instead of 'show master status'.
      mysql-test/t/multi_update.test:
        It checks whether somethings are binlogged, 
        so we using 'wait_binlog_event.inc' instead of 'show master status'.
      mysql-test/t/sp_trans_log.test:
        Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
      7e80f1c5
  5. 23 May, 2010 1 commit
  6. 21 May, 2010 2 commits
    • Gleb Shchepa's avatar
      Bug #53804: serious flaws in the alter database .. upgrade · d72a4710
      Gleb Shchepa authored
                  data directory name command
      
      The check_db_name function has been modified to validate tails of
      #mysql50#-prefixed database names for compliance with MySQL 5.0
      database name encoding rules (the check_table_name function call
      has been reused).
      
      
      mysql-test/r/renamedb.result:
        Updated test case.
      mysql-test/r/upgrade.result:
        Test case for bug #53804.
      mysql-test/t/renamedb.test:
        Updated test case.
      mysql-test/t/upgrade.test:
        Test case for bug #53804.
      sql/mysql_priv.h:
        Bug #53804: serious flaws in the alter database .. upgrade
                    data directory name command
        
        The check_mysql50_prefix has been added.
      sql/sql_table.cc:
        Bug #53804: serious flaws in the alter database .. upgrade
                    data directory name command
        
        - The check_mysql50_prefix has been added.
        - The check_n_cut_mysql50_prefix function has been refactored
        to share code with new check_mysql50_prefix function.
      sql/table.cc:
        Bug #53804: serious flaws in the alter database .. upgrade
                    data directory name command
        
        The check_db_name function has been modified to validate tails of
        #mysql50#-prefixed database names for compliance with MySQL 5.0
        database name encoding rules.
      d72a4710
    • Mattias Jonsson's avatar
      merge into mysql-5.1-bugteam · 6ef03ea3
      Mattias Jonsson authored
      sql/ha_partition.cc:
        Bug#49477, added safety that a partitioned table cannot be
        temporary.
      6ef03ea3
  7. 20 May, 2010 2 commits
    • Sven Sandberg's avatar
      BUG#52987: mysqldump fails if umask=0077 · 37b02cd7
      Sven Sandberg authored
      Problem: The test case mysqldump reads a file that must
      be world-readable. The test did not force the file to be
      world-readable, so if the tree was branched with a umask
      of 0077, the test would fail.
      Fix: chmod the file.
      
      
      mysql-test/t/mysqldump.test:
        Added chmod so that the file is guaranteed to be world-readable.
      37b02cd7
    • Sergey Glukhov's avatar
      Bug#52884 mysql-test-run does not work with --debug option · b8af4ab2
      Sergey Glukhov authored
      Server crashes on 64bit linux with 'double free or corruption'
      message, on 32bit mysql-test-run silently fails on bootstrap
      stage. The problem is that FreeState() is called twice
      for init_settings struct in _db_end_ function.
      The fix is to remove superfluous FreeState() call.
      Additional fix:
      fixed discrepancy of result file when
      debug & valgrind options are enabled
      for MTR.
      
      dbug/dbug.c:
        The problem is that FreeState() is called twice
        for init_settings struct in _db_end_ function.
        The fix is to remove superfluous FreeState() call.
      mysql-test/r/variables_debug.result:
        fixed discrepancy of result file when
        debug & valgrind options are enabled
        for MTR.
      mysql-test/t/variables_debug.test:
        fixed discrepancy of result file when
        debug & valgrind options are enabled
        for MTR.
      sql/set_var.cc:
        fixed discrepancy of result file when
        debug & valgrind options are enabled
        for MTR.
      b8af4ab2
  8. 19 May, 2010 4 commits
  9. 18 May, 2010 1 commit
    • Sergey Glukhov's avatar
      Bug#48729 SELECT ... FROM INFORMATION_SCHEMA.ROUTINES causes memory to grow · 36be33b0
      Sergey Glukhov authored
      Analysis showed that in case of accessing I_S table
      ROUTINES we perform unnecessary allocations
      with get_field() function for every processed row that
      in their turn causes significant memory growth.
      the fix is to avoid use of get_field().
      
      
      sql/sql_show.cc:
        Functions store_schema_proc() are changed
        to avoid use of get_field() function.
      36be33b0
  10. 16 May, 2010 3 commits
  11. 14 May, 2010 1 commit
    • Gleb Shchepa's avatar
      Bug #53450: Crash / assertion "virtual int · 9cbb009b
      Gleb Shchepa authored
                  ha_myisam::index_first(uchar*)") at assert.c:81
      
      Single-table DELETE crash/assertion similar to single-table
      UPDATE bug 14272.
      
      Same resolution as for the bug 14272:
      Don't run index scan when we should use quick select.
      This could cause failures because there are table handlers (like federated)
      that support quick select scanning but do not support index scanning.
      
      
      mysql-test/r/delete.result:
        Test case for bug #53450.
      mysql-test/t/delete.test:
        Test case for bug #53450.
      sql/sql_delete.cc:
        Bug #53450: Crash / assertion "virtual int
                    ha_myisam::index_first(uchar*)") at assert.c:81
        
        The mysql_delete function has been modified to not to use
        init_read_record_idx instead of init_read_record for the
        quick select.
      9cbb009b
  12. 13 May, 2010 1 commit
  13. 12 May, 2010 3 commits
    • Ramil Kalimullin's avatar
      Fix for bug#52051: Aggregate functions incorrectly returns · feb03a82
      Ramil Kalimullin authored
            NULL from outer join query
            
            Problem: optimising MIN/MAX() queries without GROUP BY clause
            by replacing the aggregate expression with a constant, we may set it
            to NULL disregarding the fact that there may be outer joins involved.
            
            Fix: don't replace MIN/MAX() with NULL if there're outer joins.
            
            Note: the fix itself is just
            - if (!count)
            + if (!count && !outer_tables)
                set to NULL
            
            The rest of the patch eliminates repeated code to improve speed
            and for easy maintenance of the code.
      
      
      mysql-test/r/group_by.result:
                Fix for bug#52051: Aggregate functions incorrectly returns
                NULL from outer join query
                  - test result.
      mysql-test/t/group_by.test:
                Fix for bug#52051: Aggregate functions incorrectly returns
                NULL from outer join query
                  - test case.
      sql/opt_sum.cc:
                Fix for bug#52051: Aggregate functions incorrectly returns
                NULL from outer join query
                  - optimising MIN/MAX() queries without GROUP BY clause by
                replacing them with a constant, take into account that
                there're may be outer joins involved.
                  - repeated code for MIN/MAX optimization in the opt_sum_query()
                eliminated by introducing new functions that read MIN/MAX values
                using index and combining MIN/MAX cases to one.
      feb03a82
    • Staale Smedseng's avatar
      Bug #49756 Rows_examined is always 0 in the slow query log for · 330864fc
      Staale Smedseng authored
      update statements
            
      Only SELECT statements report any examined rows in the slow
      log. Slow UPDATE, DELETE and INSERT statements report 0 rows
      examined, unless the statement has a condition including a
      SELECT substatement.
            
      This patch adds counting of examined rows for the UPDATE and
      DELETE statements. An INSERT ... VALUES statement will still 
      not report any rows as examined.
      
      
      
      sql/sql_class.h:
        Added more docs for THD::examined_row_count.
      sql/sql_delete.cc:
        Add incrementing thd->examined_row_count.
      sql/sql_update.cc:
        Add incrementing thd->examined_row_count.
      330864fc
    • Sven Sandberg's avatar
      BUG#50410: rpl_ndb tests should run with binlog_format=row · 29c8c152
      Sven Sandberg authored
      Problem: The rpl_ndb did not set binlog_format explicitly. Since
      the default is binlog_format=statement, it means that the suite
      ran with that. ndb does not support binlog_format=statement,
      and many tests were skipped because they sourced
      include/have_binlog_format_row_or_mixed.inc
      Fix: set binlog_format=row explicitly in the configuration file
      for the rpl_ndb suite.
      
      
      Makefile.am:
        Removed duplicate run of rpl_ndb suite with binlog_format=row.
        Now that rpl_ndb is run with binlog_format=row by default, this
        run that explicitly changes to binlog_format=row is not needed,
        because it is covered by the following run.
      mysql-test/suite/rpl_ndb/my.cnf:
        cluster only supports binlog_format=row.
      mysql-test/suite/rpl_ndb/r/rpl_ndb_stm_innodb.result:
        updated result file
      mysql-test/suite/rpl_ndb/t/rpl_ndb_stm_innodb.test:
        This test is supposed to use binlog_format=STATEMENT on
        master. It uses innodb on master, so statement format is
        supported.
      29c8c152
  14. 11 May, 2010 2 commits
    • Martin Hansson's avatar
      00cd994d
    • Martin Hansson's avatar
      Bug#48157: crash in Item_field::used_tables · 79e60f0a
      Martin Hansson authored
            
      MySQL handles the join syntax "JOIN ... USING( field1,
      ... )" and natural joins by building the same parse tree as
      a corresponding join with an "ON t1.field1 = t2.field1 ..."
      expression would produce. This parse tree was not cleaned up
      properly in the following scenario. If a thread tries to
      lock some tables and finds that the tables were dropped and
      re-created while waiting for the lock, it cleans up column
      references in the statement by means a per-statement free
      list. But if the statement was part of a stored procedure,
      column references on the stored procedure's free list
      weren't cleaned up and thus contained pointers to freed
      objects.
            
      Fixed by adding a call to clean up the current prepared
      statement's free list.
      
      This is a backport from MySQL 5.1
      79e60f0a
  15. 10 May, 2010 3 commits
    • Mattias Jonsson's avatar
      merge · 6fa04cad
      Mattias Jonsson authored
      6fa04cad
    • Martin Hansson's avatar
      Bug#50939: Loose Index Scan unduly relies on engine to · 6d0425b1
      Martin Hansson authored
      remember range endpoints
      
      The Loose Index Scan optimization keeps track of a sequence
      of intervals. For the current interval it maintains the
      current interval's endpoints. But the maximum endpoint was
      not stored in the SQL layer; rather, it relied on the
      storage engine to retain this value in-between reads. By
      coincidence this holds for MyISAM and InnoDB. Not for the
      partitioning engine, however.
      
      Fixed by making the key values iterator 
      (QUICK_RANGE_SELECT) keep track of the current maximum endpoint.
      This is also more efficient as we save a call through the
      handler API in case of open-ended intervals.
      
      The code to calculate endpoints was extracted into 
      separate methods in QUICK_RANGE_SELECT, and it was possible to
      get rid of some code duplication as part of fix.
      6d0425b1
    • Jim Winstead's avatar
      Using an initial command with mysql_options(..., MYSQL_INIT_COMMAND, ...) · 6170e64f
      Jim Winstead authored
      that generated multiple result sets (such as a stored procedure or a
      multi-statement command) would leave the connection unusable. (Bug #42373)
      
      A side-effect of this bug fix is to make MYSQL_INIT_COMMAND settings ignored
      when connecting from within the server, but none of the existing mechanisms
      for connecting from within the server use or need to set the initial command.
      6170e64f
  16. 09 May, 2010 1 commit
  17. 08 May, 2010 1 commit
    • He Zhenxing's avatar
      Bug#53189 Table map version unused and can be removed · df0b6707
      He Zhenxing authored
      MYSQL_BIN_LOG m_table_map_version member and it's associated 
      functions were not used in the logic of binlogging and replication,
      this patch removed all related code.
      
      sql/log.cc:
        removed unused m_table_map_version variable and functions
      sql/log.h:
        removed unused m_table_map_version variable and functions
      sql/log_event.h:
        Removed unused LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F flag
      sql/sql_class.cc:
        Removed unused LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F flag
      sql/sql_load.cc:
        Removed unused LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F flag
      sql/table.cc:
        removed unused table_map_version variable
      sql/table.h:
        removed unused table_map_version variable
      df0b6707
  18. 07 May, 2010 2 commits
    • Luis Soares's avatar
      BUG#49522: Replication problem with mixed MyISAM/InnoDB · 2646306c
      Luis Soares authored
      When using a non-transactional table (t1) on the master 
      and with autocommit disabled, no COMMIT is recorded 
      in the binary log ending the statement. Therefore, if 
      the slave has t1 in a transactional engine, then it will 
      be as if a transaction is started but never ends. This is
      actually BUG#29288 all over again.
      
      We fix this by cherrypicking the cset for BUG#29288 which
      was pushed to a later mysql version. The revision picked
      was: mats@sun.com-20090923094343-bnheplq8n95opjay .
      
      Additionally, a test case for covering the scenario depicted
      in the bug report is included in this cset.
      2646306c
    • Martin Hansson's avatar
      Merge of fix for Bug#52357 · 721ec081
      Martin Hansson authored
      721ec081