An error occurred fetching the project authors.
  1. 31 Mar, 2010 1 commit
    • Mats Kindahl's avatar
      WL#5030: Split and remove mysql_priv.h · 23d8586d
      Mats Kindahl authored
      This patch:
      
      - Moves all definitions from the mysql_priv.h file into
        header files for the component where the variable is
        defined
      - Creates header files if the component lacks one
      - Eliminates all include directives from mysql_priv.h
      - Eliminates all circular include cycles
      - Rename time.cc to sql_time.cc
      - Rename mysql_priv.h to sql_priv.h
      23d8586d
  2. 24 Mar, 2010 2 commits
    • MySQL Build Team's avatar
      Backport into build-201003230706-5.1.43sp1 · 4fddae59
      MySQL Build Team authored
      > ------------------------------------------------------------
      > revno: 3315.1.1
      > revision-id: mattias.jonsson@sun.com-20100118164918-afjah8vmey4ya4ox
      > parent: joro@sun.com-20100115090646-0g4tjrmqf20axlpv
      > committer: Mattias Jonsson <mattias.jonsson@sun.com>
      > branch nick: b47343-51-bt
      > timestamp: Mon 2010-01-18 17:49:18 +0100
      > message:
      >   Bug#47343: InnoDB fails to clean-up after lock wait timeout on
      >              REORGANIZE PARTITION
      >   
      >   There were several problems which lead to this this,
      >   all related to bad error handling.
      >   
      >   1) There was several bugs preventing the ddl-log to be used for
      >      cleaning up created files on error.
      >   
      >   2) The error handling after the copy partition rows did not close
      >      and unlock the tables, resulting in deletion of partitions
      >      which were in use, which lead InnoDB to put the partition to
      >      drop in a background queue.
      
      > ------------------------------------------------------------
      > revno: 3325
      > revision-id: mattias.jonsson@sun.com-20100119160251-0xvcgzw0y08xwk6r
      > parent: joro@sun.com-20091223151122-ada73up1yydh0emt
      > committer: Mattias Jonsson <mattias.jonsson@sun.com>
      > branch nick: topush-51-bugteam
      > timestamp: Tue 2010-01-19 17:02:51 +0100
      > message:
      >   post-push patch for bug#47343.
      >   
      >   Missing ha_rnd_end in copy_partitions, found due to a
      >   DBUG_ASSERT in mysql-pe
      4fddae59
    • MySQL Build Team's avatar
      Backporting to 5.1.43sp1 patch · 1da0fb9d
      MySQL Build Team authored
      1da0fb9d
  3. 17 Mar, 2010 1 commit
    • Mattias Jonsson's avatar
      Bug#50561: ALTER PARTITIONS does not have adequate lock, breaks with · 5196beed
      Mattias Jonsson authored
      concurrent I_S query
      
      There were two problem:
      1) MYSQL_LOCK_IGNORE_FLUSH also ignored name locks
      2) there was a race between abort_and_upgrade_locks and
         alter_close_tables
         (i.e. remove_table_from_cache and
          close_data_files_and_morph_locks)
      
      Which allowed the table to be opened with MYSQL_LOCK_IGNORE_FLUSH flag
      resulting in renaming a partition that was already in use,
      which could cause the table to be unusable.
      
      Solution was to not allow IGNORE_FLUSH to skip waiting for
      a named locked table.
      
      And to not release the LOCK_open mutex between the
      calls to remove_table_from_cache and
      close_data_files_and_morph_locks by merging the functions
      abort_and_upgrade_locks and alter_close_tables.
      
      mysql-test/suite/parts/r/partition_debug_sync_innodb.result:
        Bug#50561: ALTER PARTITIONS does not have adequate lock, breaks with
        concurrent I_S query
        
        Added test result
      mysql-test/suite/parts/t/partition_debug_sync_innodb-master.opt:
        Bug#50561: ALTER PARTITIONS does not have adequate lock, breaks with
        concurrent I_S query
        
        Added test option
      mysql-test/suite/parts/t/partition_debug_sync_innodb.test:
        Bug#50561: ALTER PARTITIONS does not have adequate lock, breaks with
        concurrent I_S query
        
        Added test file
      sql/authors.h:
        Bug#50561: ALTER PARTITIONS does not have adequate lock, breaks with
        concurrent I_S query
        
        Time to be acknowledged :)
      sql/ha_partition.cc:
        Bug#50561: ALTER PARTITIONS does not have adequate lock, breaks with
        concurrent I_S query
        
        Added DEBUG_SYNC for deterministic testing
      sql/mysql_priv.h:
        Bug#50561: ALTER PARTITIONS does not have adequate lock, breaks with
        concurrent I_S query
        
        Renamed function since merging alter_close_tables into
        abort_and_upgrade_lock.
      sql/sql_base.cc:
        Bug#50561: ALTER PARTITIONS does not have adequate lock, breaks with
        concurrent I_S query
        
        Changed MYSQL_LOCK_IGNORE_FLUSH to not ignore name locks
        (open_placeholder).
        
        Merged alter_close_tables into abort_and_upgrade_locks
        (and added _and_close_table to the name)
        to not release LOCK_open between remove_table_from_cache
        and close_data_files_and_morph_locks.
        
        Added DEBUG_SYNC for deterministic testing.
      sql/sql_partition.cc:
        Bug#50561: ALTER PARTITIONS does not have adequate lock, breaks with
        concurrent I_S query
        
        Removed alter_close_tables, (merged it into
        abort_and_upgrad_lock) so that LOCK_open never is released
        between remove_table_from_cache and
        close_data_files_and_morph_locks.
      sql/sql_show.cc:
        Bug#50561: ALTER PARTITIONS does not have adequate lock, breaks with
        concurrent I_S query
        
        Added DEBUG_SYNC for deterministic testing
      5196beed
  4. 04 Mar, 2010 2 commits
    • Mattias Jonsson's avatar
      Bug#50392: insert_id is not reset for partitioned tables · 1f77c7b4
      Mattias Jonsson authored
      auto_increment on duplicate entry
      
      The bug was that when INSERT_ID was used and the storage
      engine was told to release any reserved but not used
      auto_increment values, it set the highest auto_increment
      value to INSERT_ID.
      
      The fix was to check if the auto_increment value was forced
      by user (INSERT_ID) or by slave-thread, i.e. not auto-
      generated. So that it is only allowed to release generated
      values.
      
      mysql-test/r/partition_error.result:
        Bug#50392: insert_id is not reset for partitioned tables
        auto_increment on duplicate entry
        
        updated result
      mysql-test/suite/parts/inc/partition_auto_increment.inc:
        Bug#50392: insert_id is not reset for partitioned tables
        auto_increment on duplicate entry
        
        Added test
      mysql-test/suite/parts/r/partition_auto_increment_archive.result:
        Bug#50392: insert_id is not reset for partitioned tables
        auto_increment on duplicate entry
        
        Added result, note that archive does only allow increasing
        auto_increment values
      mysql-test/suite/parts/r/partition_auto_increment_blackhole.result:
        Bug#50392: insert_id is not reset for partitioned tables
        auto_increment on duplicate entry
        
        Added result, note that blackhole accepts all inserts :)
      mysql-test/suite/parts/r/partition_auto_increment_innodb.result:
        Bug#50392: insert_id is not reset for partitioned tables
        auto_increment on duplicate entry
        
        Added result, note that innodb rolls back inserts on error,
        but keeps the auto_increment value.
      mysql-test/suite/parts/r/partition_auto_increment_memory.result:
        Bug#50392: insert_id is not reset for partitioned tables
        auto_increment on duplicate entry
        
        Added result, note that memory and myisam inserts all rows
        before the error.
      mysql-test/suite/parts/r/partition_auto_increment_myisam.result:
        Bug#50392: insert_id is not reset for partitioned tables
        auto_increment on duplicate entry
        
        Added result, note that memory and myisam inserts all rows
        before the error.
      mysql-test/suite/parts/r/partition_auto_increment_ndb.result:
        Bug#50392: insert_id is not reset for partitioned tables
        auto_increment on duplicate entry
        
        Added result, note that NDB does not seem to handle
        INSERT_ID as other engines. (Martin will look into it).
      mysql-test/t/partition_error.test:
        Bug#50392: insert_id is not reset for partitioned tables
        auto_increment on duplicate entry
        
        Added test
      sql/ha_partition.cc:
        Bug#50392: insert_id is not reset for partitioned tables
        auto_increment on duplicate entry
        
        If the next_insert_id comes from non generated (i.e
        forced by INSERT_ID or slave-thread) then we cannot
        lower the reserved auto_increment value, since it have
        not reserved any values.
      1f77c7b4
    • Mattias Jonsson's avatar
      Bug#48229: group by performance issue of partitioned table · e46d120e
      Mattias Jonsson authored
      Problem was block_size on partitioned tables was not set,
      resulting in keys_per_block was not correct which affects
      the cost calculation for read time of indexes (including
      cost for group min/max).Which resulted in a bad optimizer
      decision.
      
      Fixed by setting stats.block_size correctly.
      
      mysql-test/r/partition_range.result:
        Bug#48229: group by performance issue of partitioned table
        
        Added result
      mysql-test/t/partition_range.test:
        Bug#48229: group by performance issue of partitioned table
        
        Added test
      sql/ha_partition.cc:
        Bug#48229: group by performance issue of partitioned table
        
        Added missing assignment of stats.block_size.
      e46d120e
  5. 03 Mar, 2010 1 commit
  6. 01 Feb, 2010 1 commit
    • Mattias Jonsson's avatar
      Bug#42438: Crash ha_partition::change_table_ptr · 16c8298a
      Mattias Jonsson authored
      There was two problems:
      The first was the symptom, caused by bad error handling in
      ha_partition. It did not handle print_error etc. when
      having no partitions (when used by dummy handler).
      
      The second was the real problem that when dropping tables
      it reused the table type (storage engine) from when the lock
      was asked for, not the table type that it had when gaining
      the exclusive name lock. So that it tried to delete tables
      from wrong storage engines.
      
      Solutions for the first problem was to accept some handler
      calls to the partitioning handler even if it was not setup
      with any partitions, and also if possible fallback
      to use the base handler's default functions.
      
      Solution for the second problem was to remove the optimization
      to reuse the definition from the cache, instead always check
      the frm-file when holding the LOCK_open mutex
      
      (updated with a fix for a debug print crash and better
      comments as required by reviewer, and removed optimization
      to avoid reading the frm-file).
      
      mysql-test/r/partition_debug_sync.result:
        Bug#42438: Crash ha_partition::change_table_ptr
        
        New result file using DEBUG_SYNC for deterministic results.
      mysql-test/t/partition_debug_sync.test:
        Bug#42438: Crash ha_partition::change_table_ptr
        
        New test file using DEBUG_SYNC for deterministic results.
      sql/ha_partition.cc:
        Bug#42438: Crash ha_partition::change_table_ptr
        
        allow some handler calls, used by error handling, even when
        no partitions are setup. Fallback to default handling if possible.
      sql/sql_base.cc:
        Bug#42438: Crash ha_partition::change_table_ptr
        
        Added DEBUG_SYNC point for deterministic test cases.
      sql/sql_table.cc:
        Bug#42438: Crash ha_partition::change_table_ptr
        
        Always use the table type written in the .frm-file
        (i.e. the current table type) when deleting a table.
        
        Moved the check for log-table to not depend of the cache.
        
        Added DEBUG_SYNC points for deterministic test cases.
      16c8298a
  7. 19 Jan, 2010 1 commit
    • Mattias Jonsson's avatar
      post-push patch for bug#47343. · 4839c426
      Mattias Jonsson authored
      Missing ha_rnd_end in copy_partitions, found due to a
      DBUG_ASSERT in mysql-pe
      
      sql/ha_partition.cc:
        Post-push patch for bug#47343
        
        Must call ha_rnd_end since ha_rnd_init has been called.
      4839c426
  8. 18 Jan, 2010 1 commit
    • Mattias Jonsson's avatar
      Bug#47343: InnoDB fails to clean-up after lock wait timeout on · eab2be0a
      Mattias Jonsson authored
                 REORGANIZE PARTITION
      
      There were several problems which lead to this this,
      all related to bad error handling.
      
      1) There was several bugs preventing the ddl-log to be used for
         cleaning up created files on error.
      
      2) The error handling after the copy partition rows did not close
         and unlock the tables, resulting in deletion of partitions
         which were in use, which lead InnoDB to put the partition to
         drop in a background queue.
      
      sql/ha_partition.cc:
        Bug#47343: InnoDB fails to clean-up after lock wait timeout on
                   REORGANIZE PARTITION
        
        Better error handling, if partition has been created/opened/locked
        then make sure it is unlocked and closed before returning error.
        The delete of the newly created partition is handled by the ddl-log.
      sql/sql_parse.cc:
        Bug#47343: InnoDB fails to clean-up after lock wait timeout on
                   REORGANIZE PARTITION
        
        Fix a bug found when experimenting, thd could really be NULL here,
        as mentioned in the function header.
      sql/sql_partition.cc:
        Bug#47343: InnoDB fails to clean-up after lock wait timeout on
                   REORGANIZE PARTITION
        
        Used the correct .frm shadow name to put into the ddl-log.
        Really use the ddl-log to handle errors.
      sql/sql_table.cc:
        Bug#47343: InnoDB fails to clean-up after lock wait timeout on
                   REORGANIZE PARTITION
        
        Fixes of the ddl-log when used as error recovery (no crash).
        When executing an entry from memory (not read from disk)
        the name_len was not set correctly.
      eab2be0a
  9. 07 Jan, 2010 1 commit
  10. 22 Dec, 2009 1 commit
    • Sergei Golubchik's avatar
      WL#4738 streamline/simplify @@variable creation process · 1ad5bb1a
      Sergei Golubchik authored
      Bug#16565 mysqld --help --verbose does not order variablesBug#20413 sql_slave_skip_counter is not shown in show variables
      Bug#20415 Output of mysqld --help --verbose is incomplete
      Bug#25430 variable not found in SELECT @@global.ft_max_word_len;
      Bug#32902 plugin variables don't know their names
      Bug#34599 MySQLD Option and Variable Reference need to be consistent in formatting!
      Bug#34829 No default value for variable and setting default does not raise error
      Bug#34834 ? Is accepted as a valid sql mode
      Bug#34878 Few variables have default value according to documentation but error occurs  
      Bug#34883 ft_boolean_syntax cant be assigned from user variable to global var.
      Bug#37187 `INFORMATION_SCHEMA`.`GLOBAL_VARIABLES`: inconsistent status
      Bug#40988 log_output_basic.test succeeded though syntactically false.
      Bug#41010 enum-style command-line options are not honoured (maria.maria-recover fails)
      Bug#42103 Setting key_buffer_size to a negative value may lead to very large allocations 
      Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled
      Bug#44797 plugins w/o command-line options have no disabling option in --help
      Bug#46314 string system variables don't support expressions
      Bug#46470 sys_vars.max_binlog_cache_size_basic_32 is broken
      Bug#46586 When using the plugin interface the type "set" for options caused a crash.
      Bug#47212 Crash in DBUG_PRINT in mysqltest.cc when trying to print octal number
      Bug#48758 mysqltest crashes on sys_vars.collation_server_basic in gcov builds
      Bug#49417 some complaints about mysqld --help --verbose output
      Bug#49540 DEFAULT value of binlog_format isn't the default value
      Bug#49640 ambiguous option '--skip-skip-myisam' (double skip prefix)
      Bug#49644 init_connect and \0
      Bug#49645 init_slave and multi-byte characters
      Bug#49646 mysql --show-warnings crashes when server dies
      
      
      CMakeLists.txt:
        Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled
      client/mysql.cc:
        don't crash with --show-warnings when mysqld dies
      config/ac-macros/plugins.m4:
        Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled
      include/my_getopt.h:
        comments
      include/my_pthread.h:
        fix double #define
      mysql-test/mysql-test-run.pl:
        run sys_vars suite by default
        properly recognize envirinment variables (e.g. MTR_MAX_SAVE_CORE) set to 0
        escape gdb command line arguments
      mysql-test/suite/sys_vars/r/rpl_init_slave_func.result:
        init_slave+utf8 bug
      mysql-test/suite/sys_vars/t/rpl_init_slave_func.test:
        init_slave+utf8 bug
      mysys/my_getopt.c:
        Bug#34599 MySQLD Option and Variable Reference need to be consistent in formatting!
        Bug#46586 When using the plugin interface the type "set" for options caused a crash.
        Bug#49640 ambiguous option '--skip-skip-myisam' (double skip prefix)
      mysys/typelib.c:
        support for flagset
      sql/ha_ndbcluster.cc:
        backport from telco tree
      sql/item_func.cc:
        Bug#49644 init_connect and \0
        Bug#49645 init_slave and multi-byte characters
      sql/sql_builtin.cc.in:
        Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled
      sql/sql_plugin.cc:
        Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled
        Bug#32902 plugin variables don't know their names
        Bug#44797 plugins w/o command-line options have no disabling option in --help
      sql/sys_vars.cc:
        all server variables are defined here
      storage/myisam/ft_parser.c:
        remove unnecessary updates of param->quot
      storage/myisam/ha_myisam.cc:
        myisam_* variables belong here
      strings/my_vsnprintf.c:
        %o and %llx
      unittest/mysys/my_vsnprintf-t.c:
        %o and %llx tests
      vio/viosocket.c:
        bugfix: fix @@wait_timeout to work with socket timeouts (vs. alarm thread)
      1ad5bb1a
  11. 02 Dec, 2009 1 commit
    • Konstantin Osipov's avatar
      Backport of: · 7f628ac2
      Konstantin Osipov authored
      ----------------------------------------------------------
      revno: 2630.4.38
      committer: Konstantin Osipov <konstantin@mysql.com>
      branch nick: mysql-6.0-4144
      timestamp: Wed 2008-06-25 22:07:06 +0400
      message:
        WL#4144 - Lock MERGE engine children.
        Committing a version of the patch merged with WL#3726
        on behalf of Ingo.
      
        Step #1: Move locking from parent to children.
      
        MERGE children are now left in the query list of tables
        after inserted there in open_tables(). So they are locked
        by lock_tables() as all other tables are.
      
        The MERGE parent does not store locks any more. It appears
        in a MYSQL_LOCK with zero lock data. This is kind of a "dummy"
        lock.
      
        All other lock handling is also done directly on the children.
        To protect against parent or child modifications during LOCK
        TABLES, the children are detached after every statement and
        attached before every statement, even under LOCK TABLES.
      
        The children table list is removed from the query list of tables
        on every detach and on close of the parent.
      
        Step #2: Move MERGE specific functionality from SQL layer
        into table handler.
      
        Functionality moved from SQL layer (mainly sql_base.cc)
        to the table handler (ha_myisammrg.cc).
      
        Unnecessary code is removed from the SQL layer.
      
        Step #3: Moved all MERGE specific members from TABLE
        to ha_myisammrg.
      
        Moved members from TABLE to ha_myisammrg.
        Renamed some mebers.
        Fixed comments.
      
        Step #4: Valgrind and coverage testing
      
        Valgrind did not uncover new problems.
        Added purecov comments.
      
        Added a new test for DATA/INDEX DIRECTORY options.
        Changed handling of ::reset() for non-attached children.
        Fixed the merge-big test.
      
        Step #5: Fixed crashes detected during review
        Changed detection when to attach/detach.
        Added new tests.
      
      Backport also the fix for Bug#44040 "MySQL allows creating a 
      MERGE table upon VIEWs but crashes when using it"
      
      
      include/my_base.h:
        WL#4144 - Lock MERGE engine children
        Added HA_EXTRA_ADD_CHILDREN_LIST and HA_EXTRA_IS_ATTACHED_CHILDREN
        for MERGE table support
      mysql-test/r/merge.result:
        WL#4144 - Lock MERGE engine children
        Fixed test result.
      mysql-test/t/disabled.def:
        Enable merge.test, which now is working again (WL#4144).
      mysql-test/t/merge-big.test:
        Fix the messages for wait_condition (merge with WL#3726).
      mysql-test/t/merge.test:
        WL#4144 - Lock MERGE engine children
        Fixed one test to meet coding standards for tests
        (upper case keywords, engine names as in SHOW ENGINES).
        Fixed error codes.
        Added a test for DATA/INDEX DIRECTORY.
      mysys/thr_lock.c:
        WL#4144 - Lock MERGE engine children
        Added purecov comments.
      sql/ha_partition.cc:
        WL#4144 - Lock MERGE engine children
        Added MERGE specific extra operations to ha_partition::extra().
        Extended comments.
        Changed function comment to doxygen style.
        Fixed nomenclature: 'parameter' -> 'operation'.
      sql/mysql_priv.h:
        WL#4144 - Lock MERGE engine children
        Removed declarations for removed functions.
      sql/sql_base.cc:
        WL#4144 - Lock MERGE engine children
        Leave the children in the query list of tables after open_tables().
        Set proper back links (prev_global).
        Attach MERGE children before and detach them after every
        statement. Even under LOCK TABLES.
        Remove children from the query list when they are detached.
        Remove lock forwarding from children to parent.
        Moved MERGE specific functions to ha_myisammrg.cc.
        Added purecov comments.
        Backport the fix for Bug#44040 "MySQL allows creating a MERGE table upon VIEWs but crashes when using it"
      sql/sql_table.cc:
        WL#4144 - Lock MERGE engine children
        Changed detection of MERGE tables.
      sql/table.cc:
        WL#4144 - Lock MERGE engine children
        Moved is_children_attached() method from TABLE to ha_myisammrg.
      sql/table.h:
        WL#4144 - Lock MERGE engine children
        Moved all MERGE specific members from TABLE to ha_myisammrg.
      storage/myisammrg/ha_myisammrg.cc:
        WL#4144 - Lock MERGE engine children
        Set proper back links in the child list (prev_global).
        Added a function for removal of the child list from the query list.
        Remove children from the query list when the parent is closed.
        Make parent lock handling a dummy (zero locks).
        Moved MERGE specific functionality from SQL layer to here.
        Moved all MERGE specific members from TABLE to ha_myisammrg.
        Renamed children list pointers.
        Added initialization and free for the children list mem_root.
        Fixed comments.
        Added purecov comments.
      storage/myisammrg/ha_myisammrg.h:
        WL#4144 - Lock MERGE engine children
        Added method add_children_list().
        Moved all MERGE specific members from TABLE to ha_myisammrg.
        Renamed children list pointers.
        Added a mem_root for the children list.
      storage/myisammrg/myrg_extra.c:
        WL#4144 - Lock MERGE engine children
        Changed handling of ::reset() for non-attached children.
      7f628ac2
  12. 30 Nov, 2009 1 commit
    • Konstantin Osipov's avatar
      Backport of: · cd055f0e
      Konstantin Osipov authored
      -------------------------------------------------------------------
      revno: 2630.6.6
      committer: Konstantin Osipov <konstantin@mysql.com>
      branch nick: mysql-6.0-3726
      timestamp: Tue 2008-05-27 16:15:44 +0400
      message:
      Implement code review fixes for WL#3726 "DDL locking for all
      metadata objects": cleanup the code from share->mutex
      acquisitions, which are now obsolete.
      
      sql/ha_partition.cc:
        Rename share->mutex to share->LOCK_ha_data. The mutex never
        protected the entire share. The right way to protect a share
        is to acquire an MDL lock.
      sql/ha_partition.h:
        Rename share->mutex to share->LOCK_ha_data.
      sql/sql_base.cc:
        Remove LOCK_table_share. Do not acquire share->mutex when
        deleting a table share or incrementing its ref_count.
        All these operations are and must continue to be protected by LOCK_open
        and respective MDL locks.
      sql/sql_view.cc:
        Remove acquisition of share->mutex when incrementing share->ref_count.
      sql/table.cc:
        Simplify release_table_shar() by removing dead code related
        to share->mutex from it.
      sql/table.h:
        Rename TABLE_SHARE::mutex to TABLE_SHARE::LOCK_ha_data
        to better reflect its purpose.
      storage/myisam/ha_myisam.cc:
        Rename share->mutex to share->LOCK_ha_data.
      cd055f0e
  13. 24 Nov, 2009 1 commit
    • Konstantin Osipov's avatar
      Backport of: · 9a9e8d23
      Konstantin Osipov authored
      ----------------------------------------------------------------------
      ChangeSet@1.2571, 2008-04-08 12:30:06+02:00, vvaintroub@wva. +122 -0
        Bug#32082 : definition of VOID in my_global.h conflicts with Windows
        SDK headers
        
        VOID macro is now removed. Its usage is replaced with void cast.
        In some cases, where cast does not make much sense (pthread_*, printf, 
        hash_delete, my_seek), cast is ommited.
      
      
      client/mysqladmin.cc:
        Bug#32082 : remove VOID macro
      client/mysqldump.c:
        Bug#32082 : remove VOID macro
      client/mysqlimport.c:
        Bug#32082 : remove VOID macro
      client/mysqlslap.c:
        Bug#32082 : remove VOID macro
      client/mysqltest.cc:
        Bug#32082 : remove VOID macro
      client/sql_string.cc:
        Bug#32082 : remove VOID macro
      extra/comp_err.c:
        Bug#32082 : remove VOID macro
      extra/replace.c:
        Bug#32082 : remove VOID macro
      include/my_alarm.h:
        Bug#32082 : remove VOID macro
      include/my_global.h:
        Bug#32082 : remove VOID macro
      libmysql/libmysql.c:
        Bug#32082 : remove VOID macro
      mysys/errors.c:
        Bug#32082 : remove VOID macro
      mysys/hash.c:
        Bug#32082 : remove VOID macro
      mysys/mf_iocache2.c:
        Bug#32082 : remove VOID macro
      mysys/mf_loadpath.c:
        Bug#32082 : remove VOID macro
      mysys/mf_path.c:
        Bug#32082 : remove VOID macro
      mysys/my_append.c:
        Bug#32082 : remove VOID macro
      mysys/my_clock.c:
        Bug#32082 : remove VOID macro
      mysys/my_copy.c:
        Bug#32082 : remove VOID macro
      mysys/my_fstream.c:
        Bug#32082 : remove VOID macro
      mysys/my_getwd.c:
        Bug#32082 : remove VOID macro
      mysys/my_lib.c:
        Bug#32082 : remove VOID macro
      mysys/my_lockmem.c:
        Bug#32082 : remove VOID macro
      mysys/my_pthread.c:
        Bug#32082 : remove VOID macro
      mysys/my_redel.c:
        Bug#32082 : remove VOID macro
      mysys/stacktrace.c:
        Bug#32082 : remove VOID macro
      mysys/thr_alarm.c:
        Bug#32082 : remove VOID macro
      mysys/thr_lock.c:
        Bug#32082 : remove VOID macro
      sql/derror.cc:
        Bug#32082 : remove VOID macro
      sql/des_key_file.cc:
        Bug#32082 : remove VOID macro
      sql/discover.cc:
        Bug#32082 : remove VOID macro
      sql/field.cc:
        Bug#32082 : remove VOID macro
      sql/filesort.cc:
        Bug#32082 : remove VOID macro
      sql/ha_ndbcluster.cc:
        Bug#32082 : remove VOID macro
      sql/ha_partition.cc:
        Bug#32082 : remove VOID macro
      sql/handler.cc:
        Bug#32082 : remove VOID macro
      sql/hostname.cc:
        Bug#32082 : remove VOID macro
      sql/init.cc:
        Bug#32082 : remove VOID macro
      sql/item.cc:
        Bug#32082 : remove VOID macro
      sql/item_cmpfunc.cc:
        Bug#32082 : remove VOID macro
      sql/item_strfunc.cc:
        Bug#32082 : remove VOID macro
      sql/lock.cc:
        Bug#32082 : remove VOID macro
      sql/log.cc:
        Bug#32082 : remove VOID macro
      sql/log_event.cc:
        Bug#32082 : remove VOID macro
      sql/mysqld.cc:
        Bug#32082 : remove VOID macro
      sql/opt_range.h:
        Bug#32082 : remove VOID macro
      sql/protocol.cc:
        Bug#32082 : remove VOID macro
      sql/records.cc:
        Bug#32082 : remove VOID macro
      sql/sp_head.cc:
        Bug#32082 : remove VOID macro
      sql/sp_pcontext.cc:
        Bug#32082 : remove VOID macro
      sql/sql_acl.cc:
        Bug#32082 : remove VOID macro
      sql/sql_base.cc:
        Bug#32082 : remove VOID macro
      sql/sql_cache.cc:
        Bug#32082 : remove VOID macro
      sql/sql_connect.cc:
        Bug#32082 : remove VOID macro
      sql/sql_db.cc:
        Bug#32082 : remove VOID macro
      sql/sql_delete.cc:
        Bug#32082 : remove VOID macro
      sql/sql_handler.cc:
        Bug#32082 : remove VOID macro
      sql/sql_insert.cc:
        Bug#32082 : remove VOID macro
      sql/sql_map.cc:
        Bug#32082 : remove VOID macro
      sql/sql_parse.cc:
        Bug#32082 : remove VOID macro
      sql/sql_select.cc:
        Bug#32082 : remove VOID macro
      sql/sql_servers.cc:
        Bug#32082 : remove VOID macro
      sql/sql_show.cc:
        Bug#32082 : remove VOID macro
      sql/sql_string.cc:
        Bug#32082 : remove VOID macro
      sql/sql_table.cc:
        Bug#32082 : remove VOID macro
      sql/sql_test.cc:
        Bug#32082 : remove VOID macro
      sql/sql_trigger.cc:
        Bug#32082 : remove VOID macro
      sql/sql_update.cc:
        Bug#32082 : remove VOID macro
      sql/sql_view.cc:
        Bug#32082 : remove VOID macro
      sql/table.cc:
        Bug#32082 : remove VOID macro
      sql/tztime.cc:
        Bug#32082 : remove VOID macro
      sql/udf_example.c:
        Bug#32082 : remove VOID macro
      sql/uniques.cc:
        Bug#32082 : remove VOID macro
      sql/unireg.cc:
        Bug#32082 : remove VOID macro
      storage/archive/ha_archive.cc:
        Bug#32082 : remove VOID macro
      storage/blackhole/ha_blackhole.cc:
        Bug#32082 : remove VOID macro
      storage/csv/ha_tina.cc:
        Bug#32082 : remove VOID macro
      storage/csv/transparent_file.cc:
        Bug#32082 : remove VOID macro
      storage/example/ha_example.cc:
        Bug#32082 : remove VOID macro
      storage/federated/ha_federated.cc:
        Bug#32082 : remove VOID macro
      storage/heap/hp_clear.c:
        Bug#32082 : remove VOID macro
      storage/heap/hp_create.c:
        Bug#32082 : remove VOID macro
      storage/heap/hp_test1.c:
        Bug#32082 : remove VOID macro
      storage/heap/hp_test2.c:
        Bug#32082 : remove VOID macro
      storage/innobase/handler/ha_innodb.cc:
        Bug#32082 : remove VOID macro
      storage/myisam/ft_eval.c:
        Bug#32082 : remove VOID macro
      storage/myisam/ha_myisam.cc:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_changed.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_check.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_close.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_create.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_dbug.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_delete.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_delete_all.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_dynrec.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_info.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_locking.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_log.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_open.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_packrec.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_panic.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_rsame.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_statrec.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_test1.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_test2.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_test3.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_update.c:
        Bug#32082 : remove VOID macro
      storage/myisam/mi_write.c:
        Bug#32082 : remove VOID macro
      storage/myisam/myisamchk.c:
        Bug#32082 : remove VOID macro
      storage/myisam/myisamlog.c:
        Bug#32082 : remove VOID macro
      storage/myisam/myisampack.c:
        Bug#32082 : remove VOID macro
      storage/myisam/sort.c:
        Bug#32082 : remove VOID macro
      storage/myisammrg/myrg_close.c:
        Bug#32082 : remove VOID macro
      storage/myisammrg/myrg_create.c:
        Bug#32082 : remove VOID macro
      storage/myisammrg/myrg_open.c:
        Bug#32082 : remove VOID macro
      strings/str_test.c:
        Bug#32082 : remove VOID macro
      tests/thread_test.c:
        Bug#32082 : remove VOID macro
      9a9e8d23
  14. 17 Nov, 2009 1 commit
    • Mattias Jonsson's avatar
      Bug#48846: Too much time spent in ha_partition::records_in_range if not able to prune · 87349334
      Mattias Jonsson authored
      Problem was that ha_partition::records_in_range called
      records_in_range for all non pruned partitions, even if
      an estimate should be given.
      
      Solution is to only use 1/3 of the partitions (up to 10) for
      records_in_range and estimate the total from this subset.
      (And continue until a non zero return value from the called
      partitions records_in_range is given, since 0 means no rows
      will match.)
      
      sql/ha_partition.cc:
        Bug#48846: Too much time spent in ha_partition::records_in_range if not able to prune
        
        estimate_rows_upper_bound and records_in_range are very similar
        (the only difference is the function and its parameters to use)
        so I created a common function for this.
        
        Since these calls from the optimizer are only estimates, it is
        not neccesary to call them for every partition, it can use
        a much smaller subset of the used partitions instead,
        which improves performance for selects.
      sql/ha_partition.h:
        Bug#48846: Too much time spent in ha_partition::records_in_range if not able to prune
        
        Added two private functions to help some
        optimizer calls.
      87349334
  15. 10 Nov, 2009 1 commit
    • Davi Arnaut's avatar
      Backport of Bug#15192 to mysql-next-mr · e879919a
      Davi Arnaut authored
      ------------------------------------------------------------
      revno: 2597.4.17
      revision-id: sp1r-davi@mysql.com/endora.local-20080328174753-24337
      parent: sp1r-anozdrin/alik@quad.opbmk-20080328140038-16479
      committer: davi@mysql.com/endora.local
      timestamp: Fri 2008-03-28 14:47:53 -0300
      message:
        Bug#15192 "fatal errors" are caught by handlers in stored procedures
      
        The problem is that fatal errors (e.g.: out of memory) were being
        caught by stored procedure exception handlers which could cause
        the execution to not be stopped due to a continue handler.
      
        The solution is to not call any exception handler if the error is
        fatal and send the fatal error to the client.
      
      mysql-test/r/sp-error.result:
        Add test case result for Bug#15192
      mysql-test/t/sp-error.test:
        Add test case for Bug#15192
      mysys/my_alloc.c:
        Pass flag to signal fatal error in memory root allocations.
      sql/event_data_objects.cc:
        Use init_sql_alloc to initialize memory roots, which uses
        the sql error handler to push errors.
      sql/ha_partition.cc:
        Pass flag to signal fatal error instead of calling fatal_error.
      sql/item_func.cc:
        Pass flag to signal fatal error instead of calling fatal_error.
      sql/item_subselect.cc:
        Remove redundant fatal error, memory root already pushes error.
      sql/opt_sum.cc:
        Pass flag to signal fatal error instead of calling fatal_error.
      sql/sp_head.cc:
        Allocator already sets fatal error.
      sql/sql_class.h:
        A error must exist for it to be fatal. Pass flag to signal fatal
        error instead of calling fatal_error.
      sql/sql_insert.cc:
        Pass flag to signal fatal error instead of calling fatal_error.
      sql/sql_list.h:
        Pass flag to signal fatal error instead of calling fatal_error.
      sql/sql_parse.cc:
        Pass flag to signal fatal error instead of calling fatal_error.
      sql/sql_partition.cc:
        Pass flag to signal fatal error instead of calling fatal_error.
      sql/sql_select.cc:
        Pass flag to signal fatal error instead of calling fatal_error.
      sql/sql_servers.cc:
        Use init_sql_alloc to initialize memory roots, which uses
        the sql error handler to push errors.
      sql/sql_show.cc:
        Pass flag to signal fatal error instead of calling fatal_error.
      sql/sql_trigger.cc:
        Use init_sql_alloc to initialize memory roots, which uses
        the sql error handler to push errors.
      sql/sql_update.cc:
        Pass flag to signal fatal error instead of calling fatal_error.
      sql/tztime.cc:
        Use init_sql_alloc to initialize memory roots, which uses
        the sql error handler to push errors.
      e879919a
  16. 16 Oct, 2009 1 commit
  17. 15 Oct, 2009 1 commit
    • Magne Mahre's avatar
      Bug #37433 Deadlock between open_table, close_open_tables, · 53d54948
      Magne Mahre authored
                      get_table_share, drop_open_table
                  
      In the partition handler code, LOCK_open and share->LOCK_ha_data
      are acquired in the wrong order in certain cases.  When doing a
      multi-row INSERT (i.e a INSERT..SELECT) in a table with auto-
      increment column(s). the increments must be in a monotonically
      continuous increasing sequence (i.e it can't have "holes"). To
      achieve this, a lock is held for the duration of the operation.
      share->LOCK_ha_data was used for this purpose.
                  
      Whenever there was a need to open a view _during_ the operation
      (views are not currently pre-opened the way tables are), and
      LOCK_open was grabbed, a deadlock could occur.  share->LOCK_ha_data
      is other places used _while_ holding LOCK_open.
                  
      A new mutex was introduced in the HA_DATA_PARTITION structure,
      for exclusive use of the autoincrement data fields, so we don't
      need to overload the use of LOCK_ha_data here.
                  
      A module test case has not been supplied, since the problem occurs
      as a result of a race condition, and testing for this condition 
      is thus not deterministic.   Testing for it could be done by
      setting up a test case as described in the bug report.
      53d54948
  18. 08 Oct, 2009 2 commits
    • Mattias Jonsson's avatar
      Bug#44059: Incorrect cardinality of indexes on a partitioned table · 62395e6f
      Mattias Jonsson authored
      backport for bug#44059 from mysql-pe to mysql-5.1-bugteam
      
      Using the partition with most rows instead of first partition
      to estimate the cardinality of indexes.
      
      mysql-test/r/partition.result:
        Bug#44059: Incorrect cardinality of indexes on a partitioned table
        
        Added test result
      mysql-test/t/partition.test:
        Bug#44059: Incorrect cardinality of indexes on a partitioned table
        
        Added test case
      sql/ha_partition.cc:
        Bug#44059: Incorrect cardinality of indexes on a partitioned table
        
        Checking which partition that has the most rows, and using that
        partition for HA_STATUS_CONST instead of first partition
      62395e6f
    • Mattias Jonsson's avatar
      Bug#46922: crash when adding partitions and open_files_limit · 0186334a
      Mattias Jonsson authored
      is reached
      
      Problem was bad error handling, leaving some new temporary
      partitions locked and initialized and some not yet initialized
      and locked, leading to a crash when trying to unlock the not
      yet initialized and locked partitions
      
      Solution was to unlock the already locked partitions, and not
      include any of the new temporary partitions in later unlocks
      
      mysql-test/r/partition_open_files_limit.result:
        Bug#46922: crash when adding partitions and open_files_limit
        is reached
        
        New test result
      mysql-test/t/partition_open_files_limit-master.opt:
        Bug#46922: crash when adding partitions and open_files_limit
        is reached
        
        New test opt-file for testing when open_files_limit is reached
      mysql-test/t/partition_open_files_limit.test:
        Bug#46922: crash when adding partitions and open_files_limit
        is reached
        
        New test case testing when open_files_limit is reached
      sql/ha_partition.cc:
        Bug#46922: crash when adding partitions and open_files_limit
        is reached
        
        When cleaning up the partitions already locked need to be unlocked,
        and not be unlocked/closed after cleaning up.
      0186334a
  19. 01 Oct, 2009 1 commit
  20. 23 Sep, 2009 1 commit
  21. 17 Sep, 2009 1 commit
    • Anurag Shekhar's avatar
      Bug #45840 read_buffer_size allocated for each partition when · 5999113f
      Anurag Shekhar authored
       "insert into.. select * from"
      
      When inserting into a partitioned table using 'insert into
      <target> select * from <src>', read_buffer_size bytes of memory
      are allocated for each partition in the target table.
      
      This resulted in large memory consumption when the number of
      partitions are high.
      
      This patch introduces a new method which tries to estimate the
      buffer size required for each partition and limits the maximum
      buffer size used to maximum of 10 * read_buffer_size, 
      11 * read_buffer_size in case of monotonic partition functions.
      
      sql/ha_partition.cc:
        Introduced a method ha_partition::estimate_read_buffer_size
        to estimate buffer size required for each partition. 
        Method ha_partition::start_part_bulk_insert updated
        to update the read_buffer_size before calling bulk upload
        in storage engines.
        Added thd in ha_partition::start_part_bulk_insert method signature.
      sql/ha_partition.h:
        Introduced a method ha_partition::estimate_read_buffer_size.
        Added thd in ha_partition::start_part_bulk_insert method signature.
      5999113f
  22. 10 Sep, 2009 2 commits
  23. 07 Sep, 2009 1 commit
  24. 04 Sep, 2009 2 commits
    • Mattias Jonsson's avatar
      Bug#35845: unneccesary call to ha_start_bulk_insert for not used partitions · 35d6911b
      Mattias Jonsson authored
      (Backport)
      
      Problem is that when insert (ha_start_bulk_insert) in i partitioned table,
      it will call ha_start_bulk_insert for every partition, used or not.
      
      Solution is to delay the call to the partitions ha_start_bulk_insert until
      the first row is to be inserted into that partition
      
      
      sql/ha_partition.cc:
        Bug#35845: unneccesary call to ha_start_bulk_insert for not used partitions
        
        Using a bitmap for keeping record of which partitions for which
        ha_start_bulk_insert has been called, and check against that if one
        should call it before continue with the insert/update, or if it has already
        been called.
        
        This way it will only call ha_start_bulk_insert for the used partitions.
        There is also a little prediction on how many rows that will be inserted into
        the current partition, it will guess on equal distribution of the records
        across all partitions, accept for the first used partition, which will guess
        at 50% of the given estimate, if it is a monotonic partitioning function.
      sql/ha_partition.h:
        Bug#35845: unneccesary call to ha_start_bulk_insert for not used partitions
        
        Added help variables and function for delaying ha_bulk_insert until it has
        to be called.
        
        Fixed a comment.
      35d6911b
    • V Narayanan's avatar
      Bug#45823 Assertion failure in file row/row0mysql.c line 1386 · 9776b6f9
      V Narayanan authored
      Inserting a negative value in the autoincrement column of a
      partitioned innodb table was causing the value of the auto
      increment counter to wrap around into a very large positive
      value. The consequences are the same as if a very large positive
      value was inserted into a column, e.g. reduced autoincrement
      range, failure to read autoincrement counter.
      
      The current patch ensures that before calculating the next
      auto increment value, the current value is within the positive
      maximum allowed limit.
      
      mysql-test/suite/parts/inc/partition_auto_increment.inc:
        Bug#45823 Assertion failure in file row/row0mysql.c line 1386
        
        Adds tests for performing insert,update and delete on a partition
        table with negative auto_increment values.
      mysql-test/suite/parts/r/partition_auto_increment_innodb.result:
        Bug#45823 Assertion failure in file row/row0mysql.c line 1386
        
        Result file for the innodb engine.
      mysql-test/suite/parts/r/partition_auto_increment_memory.result:
        Bug#45823 Assertion failure in file row/row0mysql.c line 1386
        
        Result file for the memory engine.
      mysql-test/suite/parts/r/partition_auto_increment_myisam.result:
        Bug#45823 Assertion failure in file row/row0mysql.c line 1386
        
        Result file for the myisam engine.
      mysql-test/suite/parts/r/partition_auto_increment_ndb.result:
        Bug#45823 Assertion failure in file row/row0mysql.c line 1386
        
        Result file for the ndb engine.
      mysql-test/suite/parts/t/partition_auto_increment_archive.test:
        Bug#45823 Assertion failure in file row/row0mysql.c line 1386
        
        Adds a variable that allows the Archive engine to skip tests
        that involve insertion of negative auto increment values.
      mysql-test/suite/parts/t/partition_auto_increment_blackhole.test:
        Bug#45823 Assertion failure in file row/row0mysql.c line 1386
        
        Adds a variable that allows the Blackhole engine to skip tests
        that involve insertion of negative auto increment values.
      sql/ha_partition.cc:
        Bug#45823 Assertion failure in file row/row0mysql.c line 1386
        
        Ensures that the current value is lesser than the upper limit
        for the type of the field before setting the next auto increment
        value to be calculated.
      sql/ha_partition.h:
        Bug#45823 Assertion failure in file row/row0mysql.c line 1386
        
        Modifies the set_auto_increment_if_higher function, to take
        into account negative auto increment values when doing a
        comparison.
      9776b6f9
  25. 21 Aug, 2009 1 commit
    • Mattias Jonsson's avatar
      Bug#46639: 1030 (HY000): Got error 124 from storage engine on · a4e832d6
      Mattias Jonsson authored
      INSERT ... SELECT ...
      
      Problem was that when bulk insert is used on an empty
      table/partition, it disables the indexes for better
      performance, but in this specific case it also tries
      to read from that partition using an index, which is
      not possible since it has been disabled.
      
      Solution was to allow index reads on disabled indexes
      if there are no records.
      
      Also reverted the patch for bug#38005, since that was a workaround
      in the partitioning engine instead of a fix in myisam.
      
      mysql-test/r/partition.result:
        Bug#46639: 1030 (HY000): Got error 124 from storage engine on
        INSERT ... SELECT ...
        
        updated result file
      mysql-test/t/partition.test:
        Bug#46639: 1030 (HY000): Got error 124 from storage engine on
        INSERT ... SELECT ...
        
        Added testcase
      sql/ha_partition.cc:
        Bug#46639: 1030 (HY000): Got error 124 from storage engine on
        INSERT ... SELECT ...
        
        reverted the patch for bug#38005, since that was a workaround
        around this problem, not needed after fixing it in myisam.
      storage/myisam/mi_search.c:
        Bug#46639: 1030 (HY000): Got error 124 from storage engine on
        INSERT ... SELECT ...
        
        Return HA_ERR_END_OF_FILE instead of HA_ERR_WRONG_INDEX
        when there are no rows.
      a4e832d6
  26. 06 Aug, 2009 1 commit
    • Satya B's avatar
      Fix for BUG#45816 - assertion failure with index containing double · d933cb16
      Satya B authored
                          column on partitioned table
            
            
      An assertion 'ASSERT_COULUMN_MARKED_FOR_READ' is failed if the query 
      is executed with index containing double column on partitioned table.
      The problem is that assertion expects all the fields which are read,
      to be in the read_set.
            
      In this query only the field 'a' is in the readset as the tables in
      the query are joined by the field 'a' and so the assertion fails 
      expecting other field 'b'.
            
      Since the function cmp() is just comparison of two parameters passed, 
      the assertion is not required.
            
      Fixed by removing the assertion in the double fields comparision
      function and also fixed the index initialization to do ordered
      index scan with RW LOCK which ensures all the fields from a key are in
      the read_set.
       
      
      Note: this bug is not reproducible with other datatypes because the
            assertion doesn't exist in comparision function for other 
            datatypes.
      
      mysql-test/r/partition.result:
        Testcase for BUG#45816
      mysql-test/t/partition.test:
        Testcase for BUG#45816
      sql/field.cc:
        Removed the assertion ASSERT_COLUMN_MARED_FOR_READ in Field_double::cmp()
        function
      sql/ha_partition.cc:
        Fixed index_int() method to make it initialize the read_set properly if
        ordered index scan with RW lock is requested.
      d933cb16
  27. 31 Jul, 2009 1 commit
    • Tatiana A. Nurnberg's avatar
      Bug#40281, partitioning the general log table crashes the server · 717d6054
      Tatiana A. Nurnberg authored
      We disallow the partitioning of a log table. You could however
      partition a table first, and then point logging to it. This is
      not only against the docs, it also crashes the server.
      
      We catch this case now.
      
      mysql-test/r/partition.result:
        results for 40281
      mysql-test/t/partition.test:
        test for 40281: show that trying to log to partitioned table fails rather
        to crash the server
      sql/ha_partition.cc:
        Signal that we no longer support logging to partitioned tables,
        as per the docs.
      sql/sql_partition.cc:
        Some commands like "USE ..." have no select, yet we may try
        to parse partition info after their execution if user set a
        partitioned table as log target. This shouldn't lead to a
        NULL-deref/crash.
      717d6054
  28. 24 Jul, 2009 1 commit
    • Anurag Shekhar's avatar
      Bug#30102: Rename table does corrupt tables with partition files on failure · 0498988b
      Anurag Shekhar authored
      Problem was that a failing rename just left the partitions at the state
      it was at the failure.
      
      Solution was to try to revert the started rename if a failure occured.
      
      mysql-test/r/partition_not_embedded.result:
        Bug#30102: Rename table does corrupt tables with partition files on failure
        
        New result file
      mysql-test/t/partition_not_embedded.test:
        Bug#30102: Rename table does corrupt tables with partition files on failure
        
        New test file
        (list_files does not report the files in embedded)
      sql/ha_partition.cc:
        Bug#30102: Rename table does corrupt tables with partition files on failure
        
        Better error handling for rename partitions (reverting the started rename
        operation)
        
        Different order of files for delete.
      sql/handler.cc:
        Bug#30102: Rename table does corrupt tables with partition files on failure
        
        Tries to remove as many table files as possible
        if the first delete succeeds.
      0498988b
  29. 14 Jul, 2009 1 commit
    • Sven Sandberg's avatar
      BUG#39934: Slave stops for engine that only support row-based logging · 41783de5
      Sven Sandberg authored
      General overview:
      The logic for switching to row format when binlog_format=MIXED had
      numerous flaws. The underlying problem was the lack of a consistent
      architecture.
      General purpose of this changeset:
      This changeset introduces an architecture for switching to row format
      when binlog_format=MIXED. It enforces the architecture where it has
      to. It leaves some bugs to be fixed later. It adds extensive tests to
      verify that unsafe statements work as expected and that appropriate
      errors are produced by problems with the selection of binlog format.
      It was not practical to split this into smaller pieces of work.
      
      Problem 1:
      To determine the logging mode, the code has to take several parameters
      into account (namely: (1) the value of binlog_format; (2) the
      capabilities of the engines; (3) the type of the current statement:
      normal, unsafe, or row injection). These parameters may conflict in
      several ways, namely:
       - binlog_format=STATEMENT for a row injection
       - binlog_format=STATEMENT for an unsafe statement
       - binlog_format=STATEMENT for an engine only supporting row logging
       - binlog_format=ROW for an engine only supporting statement logging
       - statement is unsafe and engine does not support row logging
       - row injection in a table that does not support statement logging
       - statement modifies one table that does not support row logging and
         one that does not support statement logging
      Several of these conflicts were not detected, or were detected with
      an inappropriate error message. The problem of BUG#39934 was that no
      appropriate error message was written for the case when an engine
      only supporting row logging executed a row injection with
      binlog_format=ROW. However, all above cases must be handled.
      Fix 1:
      Introduce new error codes (sql/share/errmsg.txt). Ensure that all
      conditions are detected and handled in decide_logging_format()
      
      Problem 2:
      The binlog format shall be determined once per statement, in
      decide_logging_format(). It shall not be changed before or after that.
      Before decide_logging_format() is called, all information necessary to
      determine the logging format must be available. This principle ensures
      that all unsafe statements are handled in a consistent way.
      However, this principle is not followed:
      thd->set_current_stmt_binlog_row_based_if_mixed() is called in several
      places, including from code executing UPDATE..LIMIT,
      INSERT..SELECT..LIMIT, DELETE..LIMIT, INSERT DELAYED, and
      SET @@binlog_format. After Problem 1 was fixed, that caused
      inconsistencies where these unsafe statements would not print the
      appropriate warnings or errors for some of the conflicts.
      Fix 2:
      Remove calls to THD::set_current_stmt_binlog_row_based_if_mixed() from
      code executed after decide_logging_format(). Compensate by calling the
      set_current_stmt_unsafe() at parse time. This way, all unsafe statements
      are detected by decide_logging_format().
      
      Problem 3:
      INSERT DELAYED is not unsafe: it is logged in statement format even if
      binlog_format=MIXED, and no warning is printed even if
      binlog_format=STATEMENT. This is BUG#45825.
      Fix 3:
      Made INSERT DELAYED set itself to unsafe at parse time. This allows
      decide_logging_format() to detect that a warning should be printed or
      the binlog_format changed.
      
      Problem 4:
      LIMIT clause were not marked as unsafe when executed inside stored
      functions/triggers/views/prepared statements. This is
      BUG#45785.
      Fix 4:
      Make statements containing the LIMIT clause marked as unsafe at
      parse time, instead of at execution time. This allows propagating
      unsafe-ness to the view.
      
      
      mysql-test/extra/rpl_tests/create_recursive_construct.inc:
        Added auxiliary file used by binlog_unsafe.test to create and
        execute recursive constructs
        (functions/procedures/triggers/views/prepared statements).
      mysql-test/extra/rpl_tests/rpl_foreign_key.test:
        removed unnecessary set @@session.binlog_format
      mysql-test/extra/rpl_tests/rpl_insert_delayed.test:
        Filter out table id from table map events in binlog listing.
        Got rid of $binlog_format_statement.
      mysql-test/extra/rpl_tests/rpl_ndb_apply_status.test:
        disable warnings around call to unsafe procedure
      mysql-test/include/rpl_udf.inc:
        Disabled warnings for code that generates warnings
        for some binlog formats. That would otherwise cause
        inconsistencies in the result file.
      mysql-test/r/mysqldump.result:
        Views are now unsafe if they contain a LIMIT clause.
        That fixed BUG#45831. Due to BUG#45832, a warning is
        printed for the CREATE VIEW statement.
      mysql-test/r/sp_trans.result:
        Unsafe statements in stored procedures did not give a warning if
        binlog_format=statement. This is BUG#45824. Now they do, so this
        result file gets a new warning.
      mysql-test/suite/binlog/r/binlog_multi_engine.result:
        Error message changed.
      mysql-test/suite/binlog/r/binlog_statement_insert_delayed.result:
        INSERT DELAYED didn't generate a warning when binlog_format=STATEMENT.
        That was BUG#45825. Now there is a warning, so result file needs to be
        updated.
      mysql-test/suite/binlog/r/binlog_stm_ps.result:
        Changed error message.
      mysql-test/suite/binlog/r/binlog_unsafe.result:
        updated result file:
         - error message changed
         - added test for most combinations of unsafe constructs invoked
           from recursive constructs
         - INSERT DELAYED now gives a warning (because BUG#45826 is fixed)
         - INSERT..SELECT..LIMIT now gives a warning from inside recursive
           constructs (because BUG#45785 was fixed)
         - When a recursive construct (e.g., stored proc or function)
           contains more than one statement, at least one of which is
           unsafe, then all statements in the recursive construct give
           warnings. This is a new bug introduced by this changeset.
           It will be addressed in a post-push fix.
      mysql-test/suite/binlog/t/binlog_innodb.test:
        Changed error code for innodb updates with READ COMMITTED or 
        READ UNCOMMITTED transaction isolation level and
        binlog_format=statement.
      mysql-test/suite/binlog/t/binlog_multi_engine.test:
        The error code has changed for statements where more than one
        engine is involved and one of them is self-logging.
      mysql-test/suite/binlog/t/binlog_unsafe-master.opt:
        Since binlog_unsafe now tests unsafe-ness of UDF's, we need an extra
        flag in the .opt file.
      mysql-test/suite/binlog/t/binlog_unsafe.test:
         - Clarified comment.
         - Rewrote first part of test. Now it tests not only unsafe variables
           and functions, but also unsafe-ness due to INSERT..SELECT..LIMIT,
           INSERT DELAYED, insert into two autoinc columns, use of UDF's, and
           access to log tables in the mysql database.
           Also, in addition to functions, procedures, triggers, and prepared
           statements, it now also tests views; and it constructs recursive
           calls in two levels by combining these recursive constructs.
           Part of the logic is in extra/rpl_tests/create_recursive_construct.inc.
         - added tests for all special system variables that should not be unsafe.
         - added specific tests for BUG#45785 and BUG#45825
      mysql-test/suite/rpl/r/rpl_events.result:
        updated result file
      mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result:
        updated result file
      mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result:
        updated result file
      mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result:
        updated result file
      mysql-test/suite/rpl/r/rpl_idempotency.result:
        updated result file
      mysql-test/suite/rpl/r/rpl_mix_found_rows.result:
        Split rpl_found_rows.test into rpl_mix_found_rows.test (a new file) and
        rpl_stm_found_rows.test (renamed rpl_found_rows.test). This file equals
        the second half of the old rpl_found_rows.result, with the following
        modifications:
         - minor formatting changes
         - additional initialization
      mysql-test/suite/rpl/r/rpl_mix_insert_delayed.result:
        Moved out code operating in mixed mode from rpl_stm_insert_delayed
        (into rpl_mix_insert_delayed) and got rid of explicit setting of
        binlog format.
      mysql-test/suite/rpl/r/rpl_rbr_to_sbr.result:
        updated result file
      mysql-test/suite/rpl/r/rpl_row_idempotency.result:
        Moved the second half of rpl_idempotency.test, which only
        executed in row mode, to rpl_row_idempotency.test. This is
        the new result file.
      mysql-test/suite/rpl/r/rpl_row_insert_delayed.result:
        Got rid of unnecessary explicit setting of binlog format.
      mysql-test/suite/rpl/r/rpl_stm_found_rows.result:
        Split rpl_found_rows.test into rpl_mix_found_rows.test (a new file) and
        rpl_stm_found_rows.test (renamed rpl_found_rows.test). Changes in
        this file:
         - minor formatting changes
         - warning is now issued for unsafe statements inside procedures
           (since BUG#45824 is fixed)
         - second half of file is moved to rpl_mix_found_rows.result
      mysql-test/suite/rpl/r/rpl_stm_insert_delayed.result:
        Moved out code operating in mixed mode from rpl_stm_insert_delayed
        (into rpl_mix_insert_delayed) and got rid of explicit setting of
        binlog format.
      mysql-test/suite/rpl/r/rpl_stm_loadfile.result:
        error message changed
      mysql-test/suite/rpl/r/rpl_temporary_errors.result:
        updated result file
      mysql-test/suite/rpl/r/rpl_udf.result:
        Remove explicit set of binlog format (and triplicate test execution)
        and rely on test system executing the test in all binlog formats.
      mysql-test/suite/rpl/t/rpl_bug31076.test:
        Test is only valid in mixed or row mode since it generates row events.
      mysql-test/suite/rpl/t/rpl_events.test:
        Removed explicit set of binlog_format and removed duplicate testing.
        Instead, we rely on the test system to try all binlog formats.
      mysql-test/suite/rpl/t/rpl_extraColmaster_innodb.test:
        Removed triplicate testing and instead relying on test system.
        Test is only relevant for row format since statement-based replication
        cannot handle extra columns on master.
      mysql-test/suite/rpl/t/rpl_extraColmaster_myisam.test:
        Removed triplicate testing and instead relying on test system.
        Test is only relevant for row format since statement-based replication
        cannot handle extra columns on master.
      mysql-test/suite/rpl/t/rpl_idempotency-slave.opt:
        Removed .opt file to avoid server restarts.
      mysql-test/suite/rpl/t/rpl_idempotency.test:
        - Moved out row-only tests to a new test file, rpl_row_idempotency.test.
          rpl_idempotency now only contains tests that execute in all
          binlog_formats.
        - While I was here, also removed .opt file to avoid server restarts.
          The slave_exec_mode is now set inside the test instead.
      mysql-test/suite/rpl/t/rpl_mix_found_rows.test:
        Split rpl_found_rows.test into rpl_mix_found_rows.test (a new file) and
        rpl_stm_found_rows.test (renamed rpl_found_rows.test). This file
        contains the second half of the original rpl_found_rows.test with the
        follwing changes:
         - initialization
         - removed SET_BINLOG_FORMAT and added have_binlog_format_mixed.inc
         - minor formatting changes
      mysql-test/suite/rpl/t/rpl_mix_insert_delayed.test:
        Moved out code operating in mixed mode from rpl_stm_insert_delayed
        (into rpl_mix_insert_delayed) and got rid of explicit setting of
        binlog format.
      mysql-test/suite/rpl/t/rpl_rbr_to_sbr.test:
        Test cannot execute in statement mode, since we no longer
        switch to row format when binlog_format=statement.
        Enforced mixed mode throughout the test.
      mysql-test/suite/rpl/t/rpl_row_idempotency.test:
        Moved the second half of rpl_idempotency.test, which only
        executed in row mode, to this new file. We now rely on the
        test system to set binlog format.
      mysql-test/suite/rpl/t/rpl_row_insert_delayed.test:
         - Got rid of unnecessary explicit setting of binlog format.
         - extra/rpl_tests/rpl_insert_delayed.test does not need the
           $binlog_format_statement variable any more, so that was
           removed.
      mysql-test/suite/rpl/t/rpl_slave_skip.test:
        The test switches binlog_format internally and master generates both
        row and statement events. Hence, the slave must be able to log in both
        statement and row format. Hence test was changed to only execute in
        mixed mode.
      mysql-test/suite/rpl/t/rpl_stm_found_rows.test:
        Split rpl_found_rows.test into rpl_mix_found_rows.test (a new file) and
        rpl_stm_found_rows.test (renamed rpl_found_rows.test). Changes in
        this file:
         - minor formatting changes
         - added have_binlog_format_statement and removed SET BINLOG_FORMAT.
         - second half of file is moved to rpl_mix_found_rows.test
         - added cleanup code
      mysql-test/suite/rpl/t/rpl_stm_insert_delayed.test:
        Moved out code operating in mixed mode from rpl_stm_insert_delayed
        (into rpl_mix_insert_delayed) and got rid of explicit setting of
        binlog format.
      mysql-test/suite/rpl/t/rpl_switch_stm_row_mixed.test:
        The test switches binlog_format internally and master generates both
        row and statement events. Hence, the slave must be able to log in both
        statement and row format. Hence test was changed to only execute in
        mixed mode on slave.
      mysql-test/suite/rpl/t/rpl_temporary_errors.test:
        Removed explicit set of binlog format. Instead, the test now only
        executes in row mode.
      mysql-test/suite/rpl/t/rpl_udf.test:
        Remove explicit set of binlog format (and triplicate test execution)
        and rely on test system executing the test in all binlog formats.
      mysql-test/suite/rpl_ndb/combinations:
        Added combinations file for rpl_ndb.
      mysql-test/suite/rpl_ndb/r/rpl_ndb_binlog_format_errors.result:
        new result file
      mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_simplex.result:
        updated result file
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2innodb.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2myisam.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors-master.opt:
        new option file
      mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors-slave.opt:
        new option file
      mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors.test:
        New test case to verify all errors and warnings generated by
        decide_logging_format.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_blob.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_blob2.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_circular.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_simplex.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
        While I was here, also made the test clean up after itself.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_commit_afterflush.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_ctype_ucs2_def.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_delete_nowhere.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_do_db.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_do_table.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_func003.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb_trans.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_insert_ignore.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_engines_transactions.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update3.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_rep_ignore.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_row_001.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_sp003.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_sp006.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_trig004.test:
        The test needs slave to be able to switch to row mode, so the
        test was changed to only execute in mixed and row mode.
      mysql-test/t/partition_innodb_stmt.test:
        Changed error code for innodb updates with READ COMMITTED or 
        READ UNCOMMITTED transaction isolation level and
        binlog_format=statement.
      sql/event_db_repository.cc:
        Use member function to read current_stmt_binlog_row_based.
      sql/events.cc:
        Use member function to read current_stmt_binlog_row_based.
      sql/ha_ndbcluster_binlog.cc:
        reset_current_stmt_binlog_row_based() is not a no-op for the ndb_binlog
        thread any more. Instead, the ndb_binlog thread now forces row mode both
        initially and just after calling mysql_parse.  (mysql_parse() is the only
        place where reset_current_stmt_binlog_row_based() may be called from
        the ndb_binlog thread, so these are the only two places that need to
        change.)
      sql/ha_partition.cc:
        Use member function to read current_stmt_binlog_row_based.
      sql/handler.cc:
        Use member function to read current_stmt_binlog_row_based.
      sql/item_create.cc:
        Added DBUG_ENTER to some functions, to be able to trace when
        set_stmt_unsafe is called.
      sql/log.cc:
        Use member function to read current_stmt_binlog_row_based.
      sql/log_event.cc:
         - Moved logic for changing to row format out of do_apply_event (and into
           decide_logging_format).
         - Added @todo comment for post-push cleanup.
      sql/log_event_old.cc:
        Move logic for changing to row format out of do_apply_event (and into
        decide_logging_format).
      sql/mysql_priv.h:
        Make decide_logging_format() a member of the THD class, for two reasons:
         - It is natural from an object-oriented perspective.
         - decide_logging_format() needs to access private members of THD
           (specifically, the new binlog_warning_flags field).
      sql/rpl_injector.cc:
        Removed call to set_current_stmt_binlog_row_based().
        From now on, only decide_logging_fromat is allowed to modify
        current_stmt_binlog_row_based. This call is from the ndb_binlog
        thread, mostly executing code in ha_ndbcluster_binlog.cc.
        This call can be safely removed, because:
         - current_stmt_binlog_row_based is initialized for the ndb_binlog
           thread's THD object when the THD object is created. So we're
           not going to read uninitialized memory.
         - The behavior of ndb_binlog thread does not use the state of the
           current_stmt_binlog_row_based. It is conceivable that the
           ndb_binlog thread would rely on the current_stmt_binlog_format
           in two situations:
            (1) when it calls mysql_parse;
            (2) when it calls THD::binlog_query.
           In case (1), it always clears THD::options&OPTION_BIN_LOG (because
           run_query() in ha_ndbcluster_binlog.cc is only called with
           disable_binlogging = TRUE).
           In case (2), it always uses qtype=STMT_QUERY_TYPE.
      sql/set_var.cc:
        Added @todo comment for post-push cleanup.
      sql/share/errmsg.txt:
        Added new error messages and clarified ER_BINLOG_UNSAFE_STATEMENT.
      sql/sp.cc:
        Added DBUG_ENTER, to be able to trace when set_stmt_unsafe is called.
        Got rid of MYSQL_QUERY_TYPE: it was equivalent to STMT_QUERY_TYPE.
      sql/sp_head.cc:
        Use member function to read current_stmt_binlog_row_based.
      sql/sp_head.h:
        Added DBUG_ENTER, to be able to trace when set_stmt_unsafe is called.
      sql/sql_acl.cc:
        Got rid of MYSQL_QUERY_TYPE: it was equivalent to STMT_QUERY_TYPE.
      sql/sql_base.cc:
         - Made decide_logging_format take care of all logic for deciding the
           logging format, and for determining the related warnings and errors.
           See comment above decide_logging_format for details.
         - Made decide_logging_format a member function of THD, since it needs
           to access private members of THD and since its purpose is to update
           the state of a THD object.
         - Added DBUG_ENTER, to be able to trace when set_stmt_unsafe is called.
      sql/sql_class.cc:
        - Moved logic for determining unsafe warnings away from THD::binlog_query
          (and into decide_logging_format()). Now, it works like this:
          1. decide_logging_format detects that the current statement shall
             produce a warning, if it ever makes it to the binlog
          2. decide_logging_format sets a flag of THD::binlog_warning_flags.
          3. THD::binlog_query reads the flag. If the flag is set, it generates
             a warning.
        - Use member function to read current_stmt_binlog_row_based.
      sql/sql_class.h:
        - Added THD::binlog_warning_flags (see sql_class.cc for explanation).
        - Made decide_logging_format() and reset_for_next_command() member
          functions of THD (instead of standalone functions). This was needed
          for two reasons: (1) the functions need to access the private member
          THD::binlog_warning_flags; (2) the purpose of these functions is to
          update the staet of a THD object, so from an object-oriented point
          of view they should be member functions.
        - Encapsulated current_stmt_binlog_row_based, so it is now private and
          can only be accessed from a member function. Also changed the
          data type to an enumeration instead of a bool.
        - Removed MYSQL_QUERY_TYPE, because it was equivalent to
          STMT_QUERY_TYPE anyways.
        - When reset_current_stmt_binlog_row_based was called from the
          ndb_binlog thread, it would behave as a no-op. This special
          case has been removed, and the behavior of
          reset_current_stmt_binlog_row_based does not depend on which thread
          calls it any more. The special case did not serve any purpose,
          since the ndb binlog thread did not take the
          current_stmt_binlog_row_based flag into account anyways.
      sql/sql_delete.cc:
        - Moved logic for setting row format for DELETE..LIMIT away from
          mysql_prepare_delete.
          (Instead, we mark the statement as unsafe at parse time (sql_yacc.yy)
          and rely on decide_logging_format() (sql_class.cc) to set row format.)
          This is part of the fix for BUG#45831.
        - Use member function to read current_stmt_binlog_row_based.
      sql/sql_insert.cc:
         - Removed unnecessary calls to thd->lex->set_stmt_unsafe() and
           thd->set_current_stmt_binlog_row_based_if_mixed() from
           handle_delayed_insert(). The calls are unnecessary because they
           have already been made; they were made in the constructor of
           the `di' object.
         - Since decide_logging_format() is now a member function of THD, code
           that calls decide_logging_format() had to be updated.
         - Added DBUG_ENTER call, to be able to trace when set_stmt_unsafe is
           called.
         - Moved call to set_stmt_unsafe() for INSERT..SELECT..LIMIT away from
           mysql_insert_select_prepare() (and into decide_logging_format).
           This is part of the fix for BUG#45831.
         - Use member function to read current_stmt_binlog_row_based.
      sql/sql_lex.h:
         - Added the flag BINLOG_STMT_FLAG_ROW_INJECTION to enum_binlog_stmt_flag.
           This was necessary so that a statement can identify itself as a row
           injection.
         - Added appropriate setter and getter functions for the new flag.
         - Added or clarified some comments.
         - Added DBUG_ENTER()
      sql/sql_load.cc:
        Use member function to read current_stmt_binlog_row_based.
      sql/sql_parse.cc:
         - Made mysql_reset_thd_for_next_command() clear thd->binlog_warning_flags.
         - Since thd->binlog_warning_flags is private, it must be set in a
           member function of THD. Hence, moved the body of
           mysql_reset_thd_for_next_command() to the new member function
           THD::reset_thd_for_next_command(), and made
           mysql_reset_thd_for_next_command() call
           THD::reset_thd_for_next_command().
         - Removed confusing comment.
         - Use member function to read current_stmt_binlog_row_based.
      sql/sql_repl.cc:
        Use member function to read current_stmt_binlog_row_based.
      sql/sql_table.cc:
        Use member function to read current_stmt_binlog_row_based.
      sql/sql_udf.cc:
        Use member function to read current_stmt_binlog_row_based.
      sql/sql_update.cc:
        Moved logic for setting row format for UPDATE..LIMIT away from
        mysql_prepare_update.
        (Instead, we mark the statement as unsafe at parse time (sql_yacc.yy)
        and rely on decide_logging_format() (sql_class.cc) to set row format.)
        This is part of the fix for BUG#45831.
      sql/sql_yacc.yy:
        Made INSERT DELAYED, INSERT..SELECT..LIMIT, UPDATE..LIMIT, and
        DELETE..LIMIT mark themselves as unsafe at parse time (instead
        of at execution time).
        This is part of the fixes BUG#45831 and BUG#45825.
      storage/example/ha_example.cc:
        Made exampledb accept inserts. This was needed by the new test case
        rpl_ndb_binlog_format_errors, because it needs an engine that
        is statement-only (and accepts inserts).
      storage/example/ha_example.h:
        Made exampledb a statement-only engine instead of a row-only engine.
        No existing test relied exampledb's row-only capabilities. The new
        test case rpl_ndb_binlog_format_errors needs an engine that is
        statement-only.
      storage/innobase/handler/ha_innodb.cc:
        - Changed error error code and message given by innodb when 
          binlog_format=STATEMENT and transaction isolation level is
          READ COMMITTED or READ UNCOMMITTED.
        - While I was here, also simplified the condition for
          checking when to give the error.
      41783de5
  30. 08 Jul, 2009 1 commit
    • Satya B's avatar
      Bug#35111 - Truncate a MyISAM partitioned table does not reset · 02e70f16
      Satya B authored
      the auto_increment value
            
      This is an alternative patch that instead of allowing RECREATE TABLE
      on TRUNCATE TABLE it implements reset_auto_increment that is called
      after delete_all_rows.
      
      Note: this bug was fixed by Mattias Jonsson:
      Pusing this patch: http://lists.mysql.com/commits/70370
      
      
      mysql-test/suite/parts/r/partition_auto_increment_memory.result:
        Bug#35111: Truncate a MyISAM partitioned table does not reset
        the auto_increment value
      mysql-test/suite/parts/r/partition_auto_increment_myisam.result:
        Bug#35111: Truncate a MyISAM partitioned table does not reset
        the auto_increment value
      sql/ha_partition.cc:
        Bug#35111: Truncate a MyISAM partitioned table does not reset
        the auto_increment value
        
        Added reset_auto_increment, to be used after delete_all_rows
        to simulate truncate.
      storage/heap/ha_heap.cc:
        Bug#35111: Truncate a MyISAM partitioned table does not reset
        the auto_increment value
        
        Added reset_auto_increment, to be used after delete_all_rows
        to simulate truncate
      storage/heap/ha_heap.h:
        Bug#35111: Truncate a MyISAM partitioned table does not reset
        the auto_increment value
        
        Added reset_auto_increment, to be used after delete_all_rows
        to simulate truncate
      storage/myisam/ha_myisam.cc:
        Bug#35111: Truncate a MyISAM partitioned table does not reset
        the auto_increment value
        
        Added reset_auto_increment, to be used after delete_all_rows
        to simulate truncate.
      storage/myisam/ha_myisam.h:
        Bug#35111: Truncate a MyISAM partitioned table does not reset
        the auto_increment value
        
        Added reset_auto_increment, to be used after delete_all_rows
        to simulate truncate.
      02e70f16
  31. 20 Feb, 2009 1 commit
  32. 19 Dec, 2008 1 commit
    • Mattias Jonsson's avatar
      Bug#36312: InnoDB DATA_FREE BUG? · dc9c5440
      Mattias Jonsson authored
      Problem is that DATA_FREE in SHOW TABLE STATUS
      is not correct when not using innodb_file_per_table.
      
      The solution is to use I_S.PARTITIONS instead.
      
      This is only a small fix for correcting mean record length and
      always return 0 if the table is empty.
      
      sql/ha_partition.cc:
        Bug#36312: InnoDB DATA_FREE BUG?
        
        This is only a small fix for correcting mean record length and
        always return 0 if the table is empty.
      dc9c5440
  33. 16 Dec, 2008 1 commit
    • Mattias Jonsson's avatar
      post push fix for bug#40595 · 23d569ed
      Mattias Jonsson authored
      Addition of hander function was_semi_consistent_read
      
      mysql-test/r/partition_innodb_semi_consistent.result:
        post push fix for bug#40595
        Addition of hander function was_semi_consistent_read
        
        Added test result
      mysql-test/t/partition_innodb_semi_consistent-master.opt:
        post push fix for bug#40595
        Addition of hander function was_semi_consistent_read
        
        Added test opt file
      mysql-test/t/partition_innodb_semi_consistent.test:
        post push fix for bug#40595
        Addition of hander function was_semi_consistent_read
        
        Added test case
      sql/ha_partition.cc:
        post push fix for bug#40595
        Addition of hander function was_semi_consistent_read
        
        The lack of was_semi_consistent_read opened a regression
        for bug-31310 when useing a partitioned InnoDB table
      23d569ed
  34. 04 Dec, 2008 1 commit
    • Mattias Jonsson's avatar
      Bug#40515: Query on a partitioned table does not return · 8adc9d1b
      Mattias Jonsson authored
      'lock wait timeout exceeded'
      
      Problem was a bug in the implementation of scan in partitioning
      which masked the error code from the partition's handler.
      
      Fixed by returning the value from the underlying handler.
      
      mysql-test/suite/parts/r/partition_special_innodb.result:
        Bug#40515: Query on a partitioned table does not return
        'lock wait timeout exceeded'
        
        Updated test result
      mysql-test/suite/parts/t/partition_special_innodb.test:
        Bug#40515: Query on a partitioned table does not return
        'lock wait timeout exceeded'
        
        Updated test case for covering the bug.
      sql/ha_partition.cc:
        Bug#40515: Query on a partitioned table does not return
        'lock wait timeout exceeded'
        
        Removing redeclaration of result variable,
        which resulted in never returning the correct return value.
      8adc9d1b
  35. 25 Nov, 2008 1 commit
    • Build Team's avatar
      mysql-test/r/partition.result · 74b35409
      Build Team authored
      mysql-test/t/partition.test
      sql/ha_partition.cc
        Bug#40954: Crash in MyISAM index code with concurrency test using partitioned tables
        Problem was usage of read_range_first with an empty key.
        Solution was to not to give a key if it was empty. (real author Mattias Jonsson)
      
      storage/archive/archive_reader.c
      client/mysqlslap.c
        Aligned the copyright texts output from "--version" of tools, to
        let internal tools be able to change them if needed.
      
      storage/ndb/test/tools/connect.cpp
      storage/ndb/test/run-test/atrt.hpp
        Corrected a few GPL headers not restricted to GPL version 2
      
      Makefile.am
        Added missing --report-features to the 'test-bt-fast' target
      
      support-files/mysql.spec.sh
        Reversed the removal of the "%define license GPL" in as internal
        tools depended on it
      74b35409