An error occurred fetching the project authors.
  1. 29 Oct, 2008 1 commit
    • Mattias Jonsson's avatar
      Bug#39084: Getting intermittent errors with statement-based binary logging · 6f40f061
      Mattias Jonsson authored
      Problem was that partitioning cached the table flags.
      These flags could change due to TRANSACTION LEVEL changes.
      Solution was to remove the cache and always return the table flags
      from the first partition (if the handler was initialized).
      
      mysql-test/r/partition_innodb_stmt.result:
        Bug#39084: Getting intermittent errors with statement-based binary logging
        
        New test result file.
      mysql-test/t/partition_innodb_stmt.test:
        Bug#39084: Getting intermittent errors with statement-based binary logging
        
        New test file.
      sql/ha_partition.cc:
        Bug#39084: Getting intermittent errors with statement-based binary logging
        
        Removed m_table_flags, and added m_handler_status.
        Added checks that all partitions have the same
        table flags.
        Moved some variable initializations.
        Updated some comments.
        Fixed typo initialise -> initialize
        Changed HA_EXTTA_NO_READCHECK to do nothing, since it
        is only used in ha_open, which is called for every
        partition in ::open anyway.
      sql/ha_partition.h:
        Bug#39084: Getting intermittent errors with statement-based binary logging
        
        Removed m_table_flags, and added m_handler_status.
        Always return the first partitions table flags, instead of using
        cached table flags.
        Added define of enabled/disabled partitioning table flags
        Fixed type initialise -> initialize
        Updated some comments.
      sql/handler.cc:
        Bug#39084: Getting intermittent errors with statement-based binary logging
        
        Fixed type initialise -> initialize.
      sql/handler.h:
        Bug#39084: Getting intermittent errors with statement-based binary logging
        
        Added comment to understand where the cached value is set.
      6f40f061
  2. 21 Oct, 2008 2 commits
    • Davi Arnaut's avatar
      Bug#28323: Server crashed in xid cache operations · 2503f00d
      Davi Arnaut authored
      The problem was that the server did not robustly handle a
      unilateral roll back issued by the Resource Manager (RM)
      due to a resource deadlock within the transaction branch.
      By not acknowledging the roll back, the server (TM) would
      eventually corrupt the XA transaction state and crash.
      
      The solution is to mark the transaction as rollback-only
      if the RM indicates that it rolled back its branch of the
      transaction.
      
      mysql-test/r/xa.result:
        Add test case result for Bug#28323
      mysql-test/t/xa.test:
        Add test case for Bug#28323
      sql/handler.cc:
        Reset XID only at the end of the global transaction.
      sql/share/errmsg.txt:
        Add new error codes.
      sql/sql_class.h:
        Remember the error reported by the Resource Manager.
      sql/sql_parse.cc:
        Rollback the transaction if the Resource Manager reported
        a error and rolled back its branch of the transaction.
      2503f00d
    • Davi Arnaut's avatar
      Bug#28323: Server crashed in xid cache operations · cc0b0a3c
      Davi Arnaut authored
      The problem was that the server did not robustly handle a
      unilateral roll back issued by the Resource Manager (RM)
      due to a resource deadlock within the transaction branch.
      By not acknowledging the roll back, the server (TM) would
      eventually corrupt the XA transaction state and crash.
      
      The solution is to mark the transaction as rollback-only
      if the RM indicates that it rolled back its branch of the
      transaction.
      
      mysql-test/r/xa.result:
        Add test case result for Bug#28323
      mysql-test/t/xa.test:
        Add test case for Bug#28323
      sql/handler.cc:
        Reset XID only at the end of the global transaction.
      sql/share/errmsg.txt:
        Add new error codes.
      sql/sql_class.h:
        Remember the error reported by the Resource Manager.
      sql/sql_parse.cc:
        Rollback the transaction if the Resource Manager reported
        a error and rolled back its branch of the transaction.
      cc0b0a3c
  3. 17 Oct, 2008 1 commit
    • Ramil Kalimullin's avatar
      Fix for bug #40053: 'check table .. for upgrade' doesn't detect · 931f05d8
      Ramil Kalimullin authored
      collation change made in 5.1.24-rc
      
      Problem: 'CHECK TABLE ... FOR UPGRADE' did not check for 
      incompatible collation changes made in MySQL 5.1.24-rc.
      
      Fix: add the check.
      
      
      sql/handler.cc:
          - check for incompatible collation changes made in 5.1.24-rc:
        bug #27877:
          utf8_general_ci
          ucs2_general_ci
      931f05d8
  4. 11 Oct, 2008 1 commit
  5. 08 Oct, 2008 2 commits
    • Ramil Kalimullin's avatar
      Fix for bug#39585: innodb and myisam corruption after binary · 0d1b38ba
      Ramil Kalimullin authored
      upgrade from <=5.0.46 to >=5.0.48
      
      Problem: 'check table .. for upgrade' doesn't detect 
      incompatible collation changes made in 5.0.48.
      
      Fix: check for incompatible collation changes.
      
      
      sql/handler.cc:
        Fix for bug#39585: innodb and myisam corruption after binary 
        upgrade from <=5.0.46 to >=5.0.48
          - check for incompatible collation changes made in 5.0.48:
        bug #29461
          latin7_general_ci
          latin7_general_cs
          latin7_estonian_cs
          latin2_hungarian_ci
          koi8u_general_ci
          cp1251_ukrainian_ci
          cp1250_general_ci
        bug #29499, bug #27562
          ascii_general_ci
      0d1b38ba
    • Mats Kindahl's avatar
      Bug #34707: Row based replication: slave creates table within wrong database · 2b5ea13f
      Mats Kindahl authored
      The failure was caused by executing a CREATE-SELECT statement that creates a
      table in another database than the current one. In row-based logging, the
      CREATE statement was written to the binary log without the database, hence
      creating the table in the wrong database, causing the following inserts to
      fail since the table didn't exist in the given database.
      
      Fixed the bug by adding a parameter to store_create_info() that will make
      the function print the database name before the table name and used that
      in the calls that write the CREATE statement to the binary log. The database
      name is only printed if it is different than the currently selected database.
      
      The output of SHOW CREATE TABLE has not changed and is still printed without
      the database name.
      
      mysql-test/suite/rpl/t/rpl_row_create_table.test:
        Added test to check that CREATE-SELECT into another database than the
        current one replicates.
      sql/sql_insert.cc:
        Adding parameter to calls to store_create_info().
      sql/sql_show.cc:
        Adding parameter to calls to store_create_info().
        
        Extending store_create_info() with parameter 'show_database' that will cause
        the database to be written before the table name.
      sql/sql_show.h:
        Adding parameter to call to store_create_info() to tell if the database should be shown or not.
      sql/sql_table.cc:
        Adding parameter to calls to store_create_info().
      2b5ea13f
  6. 06 Oct, 2008 1 commit
    • Guilhem Bichot's avatar
      Fix for BUG#31612 · 6ab4238f
      Guilhem Bichot authored
      "Trigger fired multiple times leads to gaps in auto_increment sequence".
      The bug was that if a trigger fired multiple times inside a top
      statement (for example top-statement is a multi-row INSERT,
      and trigger is ON INSERT), and that trigger inserted into an auto_increment
      column, then gaps could be observed in the auto_increment sequence,
      even if there were no other users of the database (no concurrency).
      It was wrong usage of THD::auto_inc_intervals_in_cur_stmt_for_binlog.
      Note that the fix changes "class handler", I'll tell the Storage Engine API team.
      
      mysql-test/r/trigger-trans.result:
        result; before the bugfix, the sequence was 1,2,4,6,8,10,12...
      mysql-test/t/trigger-trans.test:
        test for BUG#31612
      sql/handler.cc:
        See revision comment of handler.h.
        As THD::auto_inc_intervals_in_cur_stmt_for_binlog is cumulative
        over all trigger invokations by the top statement, the
        second invokation of the trigger arrived in handler::update_auto_increment()
        with already one interval in
        THD::auto_inc_intervals_in_cur_stmt_for_binlog. The method thus
        believed it had already reserved one interval for that invokation,
        thus reserved a twice larger interval (heuristic when we don't know
        how large the interval should be: we grow by powers of two). InnoDB
        thus increased its internal per-table auto_increment counter by 2
        while only one row was to be inserted. Hence a gap in the sequence.
        The fix is to use the new handler::auto_inc_intervals_count.
        Note that the trigger's statement knows how many rows it is going
        to insert, but provides estimation_rows_to_insert == 0 (see comments
        in sql_insert.cc why triggers don't call handler::ha_start_bulk_insert()).
        * removing white space at end of line
        * we don't need to maintain THD::auto_inc_intervals_in_cur_stmt_for_binlog
        if no binlogging or if row-based binlogging. Using auto_inc_intervals_count in
        the heuristic makes the heuristic independent of binary logging, which is good.
      sql/handler.h:
        THD::auto_inc_intervals_in_cur_stmt_for_binlog served
         - for binlogging
         - as a heuristic when we have no estimation of how many records the
           statement will insert.
        But the first goal needs to be cumulative over all statements which
        form a binlog event, while the second one needs to be attached to each
        statement. THD::auto_inc_intervals_in_cur_stmt_for_binlog is cumulative,
        leading to BUG#31612. So we introduce handler::auto_inc_intervals_count
        for the second goal. See the revision comment of handler.cc.
        A smaller issue was that, even when the binlog event was only one
        statement (no triggers, no stored functions),
        THD::auto_inc_intervals_in_cur_stmt.nb_elements() could be lower than
        the number of reserved intervals (fooling the heuristic), because its
        append() method collapses two contiguous intervals in one.
        Note that as auto_inc_intervals_count is in class 'handler' and not
        in class 'THD', it does not need to be handled in
        THD::reset|restore_sub_statement_state().
      sql/log.cc:
        Comment is wrong: if auto_increment is second, in handler::update_auto_increment()
        'append' is false and so auto_inc_intervals_in_cur_stmt_for_binlog
        is empty, we do not come here.
      sql/sql_class.h:
        comment
      6ab4238f
  7. 01 Oct, 2008 1 commit
    • Ingo Struewing's avatar
      Bug#37958 - test main.plugin crash on Mac OS X when selecting from EXAMPLE engine. · a85379af
      Ingo Struewing authored
      This patch contains fixes for two problems:
      
      1. As originally reported, the server crashed on Mac OS X when trying to access
         an EXAMPLE table after the EXAMPLE plugin was installed.
      
         It turned out that the dynamically loaded EXAMPLE plugin called the
         function hash_earch() from a Mac OS X system library, instead of
         hash_earch() from MySQL's mysys library. Makefile.am in storage/example
         does not include libmysys. So the Mac OS X linker arranged the hash_search()
         function to be linked to the system library when the shared object is
         loaded.
      
         One possible solution would be to include libmysys into the linkage of
         dynamic plugins. But then we must have a libmysys.so, which must be
         used by the server too. This could have a minimal performance impact,
         but foremost the change seems to bee too risky at the current state of
         MySQL 5.1.
      
         The selected solution is to rename MySQL's hash_search() to my_hash_search()
         like it has been done before with hash_insert() and hash_reset().
      
         Since this is the third time, we need to rename a hash_*() function,
         I did renamed all hash_*() functions to my_hash_*().
      
         To avoid changing a zillion calls to these functions, and announcing
         this to hundreds of developers, I added defines that map the old names
         to the new names.
      
         This change is in hash.h and hash.c.
      
      2. The other problem was improper implementation of the handlerton-to-plugin
         mapping. We use a fixed-size array to hold a plugin reference for each
         handlerton. On every install of a handler plugin, we allocated a new slot
         of the array. On uninstall we did not free it. After some uninstall/install
         cycles the array overflowed. We did not check for overflow.
      
         One fix is to check for overflow to stop the crashes.
      
         Another fix is to free the array slot at uninstall and search for a free slot
         at plugin install.
      
         This change is in handler.cc.
      
      
      
      include/hash.h:
        Bug#37958 - test main.plugin crash on Mac OS X when selecting from EXAMPLE engine.
        Renamed hash_*() functions to my_hash_*().
        Added defines that map old names to new names.
      mysys/hash.c:
        Bug#37958 - test main.plugin crash on Mac OS X when selecting from EXAMPLE engine.
        Renamed hash_*() functions to my_hash_*().
      sql/handler.cc:
        Bug#37958 - test main.plugin crash on Mac OS X when selecting from EXAMPLE engine.
        Protect against a failing ha_initialize_handlerton() in ha_finalize_handlerton().
        Free hton2plugin slot on uninstall of a handler plugin.
        Reuse freed slost of the hton2plugin array.
        Protect against array overrun.
      a85379af
  8. 05 Sep, 2008 1 commit
    • Georgi Kodinov's avatar
      Bug #38701: Crash in String::append when inserting duplicate empty strings an uft8 · 4f7be648
      Georgi Kodinov authored
      SET col
                        
      When reporting a duplicate key error the server was making incorrect assumptions 
      on what the state of the value string to include in the error is.
      
      Fixed by accessing the data in this string in a "safe" way (without relying on it
      having a terminating 0).
            
      Detected by code analysis and fixed a similar problem in reporting the foreign key
      duplicate errors.
      
      mysql-test/r/type_set.result:
        Bug #38701: test case
      mysql-test/t/type_set.test:
        Bug #38701: test case
      sql/handler.cc:
        Bug #38701: don't rely on the presence of a terminating 0 in the string
      4f7be648
  9. 19 Aug, 2008 1 commit
    • Mats Kindahl's avatar
      Bug #34707: Row based replication: slave creates table within wrong database · 2bcec934
      Mats Kindahl authored
      The failure was caused by executing a CREATE-SELECT statement that creates a
      table in another database than the current one. In row-based logging, the
      CREATE statement was written to the binary log without the database, hence
      creating the table in the wrong database, causing the following inserts to
      fail since the table didn't exist in the given database.
      
      Fixed the bug by adding a parameter to store_create_info() that will make
      the function print the database name before the table name and used that
      in the calls that write the CREATE statement to the binary log. The database
      name is only printed if it is different than the currently selected database.
      
      The output of SHOW CREATE TABLE has not changed and is still printed without
      the database name.
      
      mysql-test/suite/rpl/r/rpl_row_create_table.result:
        Result file change.
      mysql-test/suite/rpl/t/rpl_row_create_table.test:
        Added test to check that CREATE-SELECT into another database than the
        current one replicates.
      sql/sql_insert.cc:
        Adding parameter to calls to store_create_info().
      sql/sql_show.cc:
        Adding parameter to calls to store_create_info().
        
        Extending store_create_info() with parameter 'show_database' that will cause
        the database to be written before the table name.
      sql/sql_show.h:
        Adding parameter to call to store_create_info() to tell if the database should be shown or not.
      sql/sql_table.cc:
        Adding parameter to calls to store_create_info().
      2bcec934
  10. 11 Aug, 2008 1 commit
    • Mattias Jonsson's avatar
      Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that · 3faf4f76
      Mattias Jonsson authored
      partition is corrupt
      
      The main problem was that ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR
      PARTITION took another code path (over mysql_alter_table instead of
      mysql_admin_table) which differs in two ways:
      1) alter table opens the tables in a different way than admin tables do
         resulting in returning with error before it tried the command
      2) alter table does not start to send any diagnostic rows to the client
         which the lower admin functions continue to use -> resulting in
         assertion crash
      
      The fix:
      Remapped ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR PARTITION to use
      the same code path as ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE t.
      Adding check in mysql_admin_table to setup the partition list for
      which partitions that should be used.
      
      
      Partitioned tables will still not work with
      REPAIR TABLE/PARTITION USE_FRM, since that requires moving partitions
      to tables, REPAIR TABLE t USE_FRM, and check that the data still
      fulfills the partitioning function and then move the table back to
      being a partition.
      
      NOTE: I have removed the following functions from the handler
      interface:
      analyze_partitions, check_partitions, optimize_partitions,
      repair_partitions
      Since they are not longer needed.
      THIS ALTERS THE STORAGE ENGINE API
      
      mysql-test/r/handler_innodb.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added a note result row.
      mysql-test/r/innodb.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added a note result row.
      mysql-test/r/innodb_mysql.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added a note result row.
      mysql-test/r/partition.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned
        tables.
      mysql-test/r/trigger-trans.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added a note result row.
      mysql-test/suite/ndb/r/ndb_partition_key.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned
        tables.
      mysql-test/suite/ndb/t/ndb_partition_key.test:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned
        tables.
      mysql-test/suite/parts/inc/partition_alter4.inc:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned
        tables.
      mysql-test/suite/parts/r/partition_alter4_innodb.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned
        tables.
      mysql-test/suite/parts/r/partition_alter4_myisam.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned
        tables.
      mysql-test/suite/rpl/r/rpl_failed_optimize.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added a note result row.
      mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added a note result row.
      mysql-test/t/partition.test:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned
        tables.
      sql/ha_partition.cc:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added a function for returning admin commands result rows
        Updated handle_opt_partitions to handle admin commands result rows,
        and some error filtering (as mysql_admin_table do).
        
        Removed the functions analyze/check/optimize/repair_partitions
        since they have no longer any use.
      sql/ha_partition.h:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Removed analyze/check/optimize/repair_partitions since they
        are no longer are needed.
      sql/handler.cc:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Removed analyze/check/optimize/repair_partitions since they
        are no longer are needed.
      sql/handler.h:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Removed analyze/check/optimize/repair_partitions since they
        are no longer are needed.
      sql/mysql_priv.h:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added set_part_state for reuse of code in mysql_admin_table.
        (Originally fond in sql/sql_partition.cc:prep_alter_part_table)
      sql/protocol.cc:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added one assert and a debug print.
      sql/sql_partition.cc:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Refactored code for setting up partition state, set_part_state,
        now used in both prep_alter_part_table and
        sql_table.cc:mysql_admin_table.
        Removed code for handling ANALYZE/CHECK/OPTIMIZE/REPAIR partitions,
        since it is now handled by mysql_admin_table.
      sql/sql_table.cc:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Added functionality in mysql_admin_table to work with partitioned
        tables.
        Fixed a possible assertion bug for HA_ADMIN_TRY_ALTER
        (If analyze would output a row, it fails since the row was already
        started).
      sql/sql_yacc.yy:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Remapped ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR PARTITION
        to use the same code path as ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE
        instead of taking the ALTER TABLE path.
        Added reset of alter_info for ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE
        since it is now used by partitioned tables.
      storage/myisam/mi_check.c:
        Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
        partition is corrupt
        
        Changed warning message from "Found X parts  Should be: Y parts"
        to "Found X key parts. Should be Y", since it could be confusing
        with partitioned tables.
      3faf4f76
  11. 21 Jul, 2008 1 commit
  12. 10 Jul, 2008 1 commit
    • Mattias Jonsson's avatar
      Bug#37402: Mysql cant read partitioned table with capital letter in the name · 4454c9cd
      Mattias Jonsson authored
      Problem was that ha_partition had HA_FILE_BASED flag set
      (since it uses a .par file), but after open it uses the first partitions
      flags, which results in different case handling for create and for
      open.
      
      Solution was to change the underlying partition name so it was consistent.
      (Only happens when lower_case_table_names = 2, i.e. Mac OS X and storage
      engines without HA_FILE_BASED, like InnoDB and Memory.)
      
      (Recommit after adding rename of check_lowercase_names to
      get_canonical_filename, and moved it from handler.h to mysql_priv.h)
      
      NOTE: if a mixed case name for a partitioned table was created when
      lower_case_table_name = 2 it should be renamed or dropped before using
      the updated version (See bug#37402 for more info)
      
      mysql-test/include/have_case_insensitive_file_system.inc:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        Added include file.
      mysql-test/include/have_lowercase0.inc:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        moved case insensitive file system to a new file, leaving only
        lower_case_table_names.
      mysql-test/include/have_lowercase2.inc:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        Added include file.
      mysql-test/lib/mtr_report.pl:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        Removed a duplicate row and suppressed warning about setting
        lower_case_table_names to 2 on case sensitive file systems.
      mysql-test/r/case_insensitive_file_system.require:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        Added requirement file.
      mysql-test/r/lowercase0.require:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        moved case insensitive file system to a new file, leaving only
        lower_case_table_names.
      mysql-test/suite/parts/inc/partition_mgm.inc:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New include file for testing partitioning management functions for different
        settings of lower_case_table_names.
      mysql-test/suite/parts/r/partition_mgm_lc0_archive.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/r/partition_mgm_lc0_innodb.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/r/partition_mgm_lc0_memory.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/r/partition_mgm_lc0_myisam.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/r/partition_mgm_lc0_ndb.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/r/partition_mgm_lc1_archive.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/r/partition_mgm_lc1_innodb.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/r/partition_mgm_lc1_memory.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/r/partition_mgm_lc1_myisam.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/r/partition_mgm_lc1_ndb.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/r/partition_mgm_lc2_archive.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/r/partition_mgm_lc2_innodb.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/r/partition_mgm_lc2_memory.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/r/partition_mgm_lc2_myisam.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/r/partition_mgm_lc2_ndb.result:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New result file.
      mysql-test/suite/parts/t/partition_mgm_lc0_archive.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/suite/parts/t/partition_mgm_lc0_innodb.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/suite/parts/t/partition_mgm_lc0_memory.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/suite/parts/t/partition_mgm_lc0_myisam.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/suite/parts/t/partition_mgm_lc0_ndb.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/suite/parts/t/partition_mgm_lc1_archive-master.opt:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New opt file.
      mysql-test/suite/parts/t/partition_mgm_lc1_archive.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/suite/parts/t/partition_mgm_lc1_innodb-master.opt:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New opt file.
      mysql-test/suite/parts/t/partition_mgm_lc1_innodb.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/suite/parts/t/partition_mgm_lc1_memory-master.opt:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New opt file.
      mysql-test/suite/parts/t/partition_mgm_lc1_memory.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/suite/parts/t/partition_mgm_lc1_myisam-master.opt:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New opt file.
      mysql-test/suite/parts/t/partition_mgm_lc1_myisam.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/suite/parts/t/partition_mgm_lc1_ndb-master.opt:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New opt file.
      mysql-test/suite/parts/t/partition_mgm_lc1_ndb.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/suite/parts/t/partition_mgm_lc2_archive-master.opt:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New opt file.
      mysql-test/suite/parts/t/partition_mgm_lc2_archive.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/suite/parts/t/partition_mgm_lc2_innodb-master.opt:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New opt file.
      mysql-test/suite/parts/t/partition_mgm_lc2_innodb.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/suite/parts/t/partition_mgm_lc2_memory-master.opt:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New opt file.
      mysql-test/suite/parts/t/partition_mgm_lc2_memory.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/suite/parts/t/partition_mgm_lc2_myisam-master.opt:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New opt file.
      mysql-test/suite/parts/t/partition_mgm_lc2_myisam.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/suite/parts/t/partition_mgm_lc2_ndb-master.opt:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New opt file.
      mysql-test/suite/parts/t/partition_mgm_lc2_ndb.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        New test file.
      mysql-test/t/lowercase_table3.test:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        Moved case sensitive file system to a specific inc-file instead of
        included in lowercase0.inc
      sql/ha_partition.cc:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        Problem was that ha_partition had HA_FILE_BASED set
        (since it uses a .par file), but after open it uses the first partitions
        table_flags(), which results in different case handling for create and for
        open.
        
        Solution was to change the underlying partition name so it was consistent.
        (Only happens when lower_case_table_names = 2, i.e. Mac OS X)
      sql/handler.cc:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        Renamed check_lowercase_names to get_canonical_filename, and exported it
        so that ha_partition.cc can use the function.
      sql/mysql_priv.h:
        Bug#37402: Mysql cant read partitioned table with capital letter in the name
        
        Renamed check_lowercase_names to get_canonical_filename, and exported it
        so that ha_partition.cc can use the function.
      4454c9cd
  13. 17 May, 2008 1 commit
  14. 12 May, 2008 1 commit
    • unknown's avatar
      Fixed bug #36055: mysql_upgrade doesn't really 'upgrade' tables · 32425d4c
      unknown authored
      The REPAIR TABLE ... USE_FRM query silently corrupts data of tables
      with old .FRM file version.
      The mysql_upgrade client program or the REPAIR TABLE query (without
      the USE_FRM clause) can't prevent this trouble, because in the
      common case they don't upgrade .FRM file to compatible structure.
      
      1. Evaluation of the REPAIR TABLE ... USE_FRM query has been
         modified to reject such tables with the message:
         "Failed repairing incompatible .FRM file".
      
      2. REPAIR TABLE query (without USE_FRM clause) evaluation has been
         modified to upgrade .FRM files to current version.
      
      3. CHECK TABLE ... FOR UPGRADE query evaluation has been modified
         to return error status when .FRM file has incompatible version.
      
      4. mysql_upgrade and mysqlcheck client programs call CHECK TABLE
         FOR UPGRADE and REPAIR TABLE queries, so their behaviors have
         been changed too to upgrade .FRM files with incompatible
         version numbers.
      
      
      mysql-test/std_data/bug36055.MYD:
        Added test data for bug #36055.
      mysql-test/std_data/bug36055.MYI:
        Added test data for bug #36055.
      mysql-test/std_data/bug36055.frm:
        Added test data for bug #36055.
      mysql-test/r/repair.result:
        Added test case for bug# 36055.
      mysql-test/t/repair.test:
        Added test case for bug# 36055.
      sql/handler.cc:
        Fixed bug #36055: mysql_upgrade doesn't really 'upgrade' tables
        
        The handler::ha_check_for_upgrade method has been modified to
        return error if .FRM file has incompatible version number.
      sql/sql_table.cc:
        Fixed bug #36055: mysql_upgrade doesn't really 'upgrade' tables
        
        The prepare_for_repair function has been modified to reject
        REPAIR TABLE ... USE_FRM queries on incompatible .FRM files
        with the message: "Failed repairing incompatible .FRM file".
      32425d4c
  15. 08 Apr, 2008 1 commit
    • unknown's avatar
      Fix for bug #35732: read-only blocks SELECT statements in InnoDB · 41e97eb3
      unknown authored
      Problem: SELECTs prohibited for a transactional SE in autocommit mode
      if read_only is set.
      
      Fix: allow them.
      
      
      mysql-test/r/read_only_innodb.result:
        Fix for bug #35732: read-only blocks SELECT statements in InnoDB
          - test result.
      mysql-test/t/read_only_innodb.test:
        Fix for bug #35732: read-only blocks SELECT statements in InnoDB
          - test case.
      sql/handler.cc:
        Fix for bug #35732: read-only blocks SELECT statements in InnoDB
          - in autocommit mode thd->transaction.all list is empty thus 
            is_real_trans set to TRUE for any SELECTs, so using it in the
            "read_only" check is insufficient.
            ha_check_and_coalesce_trx_read_only() changed to return number
            of engines with read-write changes. This value is used in the
            "read-only" check and checks for GLOBAL READ LOCK.
      sql/lock.cc:
        Fix for bug #35732: read-only blocks SELECT statements in InnoDB
          - added assert(protect_against_global_read_lock) before decreasing,
            in order to catch (uint) 0 - 1 situation due to wrong 
            wait_if_global_read_lock()/start_waiting_global_read_lock() call
            sequence.
      41e97eb3
  16. 19 Feb, 2008 2 commits
    • unknown's avatar
    • unknown's avatar
      A fix and a test case for Bug#12713 "Error in a stored function called from · 1745446d
      unknown authored
      a SELECT doesn't cause ROLLBACK of statem".
      
      The idea of the fix is to ensure that we always commit the current
      statement at the end of dispatch_command(). In order to not issue
      redundant disc syncs, an optimization of the two-phase commit
      protocol is implemented to bypass the two phase commit if
      the transaction is read-only.
      
      
      mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result:
        Update test results.
      mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result:
        Update test results.
      mysql-test/suite/rpl_ndb/t/disabled.def:
        Disable the tests, for which this changeset reveals a bug:
        the injector thread does not always add 'statement commit' to the
        rows injected in circular replication set up.
        To be investigated separately.
      sql/ha_ndbcluster_binlog.cc:
        Add close_thread_tables() to run_query: this ensures
        that all tables are closed and there is no pending statement transaction.
      sql/handler.cc:
        Implement optimisation of read-only transactions.
        If a transaction consists only of DML statements that do not change
        data, we do not perform a two-phase commit for it 
        (run one phase commit only).
      sql/handler.h:
        Implement optimisation of read-only transactions.
        If a transaction consists only of DML statements that do not change
        data, we do not perform a two-phase commit for it 
        (run one phase commit only).
      sql/log.cc:
        Mark the binlog transaction read-write whenever it's started.
        We never read from binlog, so it's safe and least intrusive to add
        this mark up here.
      sql/log_event.cc:
        Update to the new layout of thd->transaction.
      sql/rpl_injector.cc:
        Always commit statement transaction before committing the global one.
      sql/sp.cc:
        Ad comments.
      sql/sp_head.cc:
        Add comments.
      sql/sql_base.cc:
        Commit transaction at the end of the statement. Always.
      sql/sql_class.cc:
        Update thd_ha_data to return the right pointer in the new layout.
        
        Fix select_dumpvar::send_data to properly return operation status.
        A test case from commit.inc would lead to an assertion failure in the 
        diagnostics area (double assignment). Not test otherwise by the test suite.
      sql/sql_class.h:
        Implement a new layout of storage engine transaction info in which 
        it is easy to access all members related to the handlerton only
        based on ht->slot.
      sql/sql_cursor.cc:
        Update to the new layout of thd->transaction.
      sql/sql_delete.cc:
        Remove wrong and now redundant calls to ha_autocommit_or_rollback.
        The transaction is committed in one place, at the end of the statement.
        Remove calls to mysql_unlock_tables, since some engines count locks
        and commit statement transaction in unlock_tables(), which essentially
        equates mysql_unlock_tables to ha_autocommit_or_rollback.
        Previously it was necessary to unlock tables soon because we wanted
        to avoid sending of 'ok' packet to the client under locked tables.
        This is no longer necessary, since OK packet is also sent from one place
        at the end of transaction.
      sql/sql_do.cc:
        Add DO always clears the error, we must rollback the current
        statement before this happens. Otherwise the statement will be committed,
        and not rolled back in the end.
      sql/sql_insert.cc:
        Remove wrong and now redundant calls to ha_autocommit_or_rollback.
        The transaction is committed in one place, at the end of the statement.
        Remove calls to mysql_unlock_tables, since some engines count locks
        and commit statement transaction in unlock_tables(), which essentially
        equates mysql_unlock_tables to ha_autocommit_or_rollback.
        Previously it was necessary to unlock tables soon because we wanted
        to avoid sending of 'ok' packet to the client under locked tables.
        This is no longer necessary, since OK packet is also sent from one place
        at the end of transaction.
      sql/sql_load.cc:
        Remove wrong and now redundant calls to ha_autocommit_or_rollback.
        The transaction is committed in one place, at the end of the statement.
        Remove calls to mysql_unlock_tables, since some engines count locks
        and commit statement transaction in unlock_tables(), which essentially
        equates mysql_unlock_tables to ha_autocommit_or_rollback.
        Previously it was necessary to unlock tables soon because we wanted
        to avoid sending of 'ok' packet to the client under locked tables.
        This is no longer necessary, since OK packet is also sent from one place
        at the end of transaction.
      sql/sql_parse.cc:
        Implement optimisation of read-only transactions: bypass 2-phase
        commit for them.
        Always commit statement transaction before commiting the global one.
        Fix an unrelated crash in check_table_access, when called from 
        information_schema.
      sql/sql_partition.cc:
        Partitions commit at the end of a DDL operation.
        Make sure that send_ok() is done only if the commit has succeeded.
      sql/sql_table.cc:
        Use ha_autocommit_or_rollback and end_active_trans everywhere.
        Add end_trans to mysql_admin_table, so that it leaves no pending
        transaction.
      sql/sql_udf.cc:
        Remvove a redundant call to close_thread_tables()
      sql/sql_update.cc:
        Remove wrong and now redundant calls to ha_autocommit_or_rollback.
        The transaction is committed in one place, at the end of the statement.
        Remove calls to mysql_unlock_tables, since some engines count locks
        and commit statement transaction in unlock_tables(), which essentially
        equates mysql_unlock_tables to ha_autocommit_or_rollback.
        Previously it was necessary to unlock tables soon because we wanted
        to avoid sending of 'ok' packet to the client under locked tables.
        This is no longer necessary, since OK packet is also sent from one place
        at the end of transaction.
      mysql-test/include/commit.inc:
        New BitKeeper file ``mysql-test/include/commit.inc''
      mysql-test/r/commit_1innodb.result:
        New BitKeeper file ``mysql-test/r/commit_1innodb.result''
      mysql-test/t/commit_1innodb.test:
        New BitKeeper file ``mysql-test/t/commit_1innodb.test''
      1745446d
  17. 15 Feb, 2008 2 commits
    • unknown's avatar
      Bug #34458 Extreneous use of templates in server code · 15267188
      unknown authored
      Patch to remove white-space left over after removing anonymous
      namespace.
      
      
      sql/handler.cc:
        Removing indentation and whitespace.
      15267188
    • unknown's avatar
      Bug #34458 Extreneous use of templates in server code · 06697e88
      unknown authored
      Replacing a template function with a normal static function.
      The template parameter, which previously was the class to
      find a binlogging function in, is now passed as a pointer to
      the actual binlogging function instead.
      
      The patch requires change of indention, but that is submitted
      as a separate patch.
      
      
      sql/handler.cc:
        Replacing template function with a normal static function.
      06697e88
  18. 07 Feb, 2008 1 commit
    • unknown's avatar
      BUG#27732 "Possible memory leak with index_merge" · 82f24597
      unknown authored
      The bug was that handler::clone/handler::ha_open() call caused allocation of 
      cloned_copy->ref on the handler->table->mem_root. The allocated memory could not 
      be reclaimed until the table is flushed, so it was possible to exhaust memory by 
      repeatedly running index_merge queries without doing table flushes.  
      
      The fix:
      - make handler::clone() allocate new_handler->ref on the passed mem_root 
      - make handler::ha_open() not allocate this->ref if it has already been allocated
      There is no testcase as it is not possible to check small leaks from testsuite.
      
      
      sql/handler.cc:
        BUG#27732 "Possible memory leak with index_merge"
        - make handler::clone() allocate new_handler->ref on the passed mem_root 
        - make handler::ha_open() not allocate this->ref if it has already been allocated
      82f24597
  19. 15 Jan, 2008 1 commit
    • unknown's avatar
      Bug#33375 all_set corrupted on table object · cb09dc21
      unknown authored
       - make sure to reset the read and write sets
      
      
      handler.cc, log_event.cc:
        - make sure to reset the read and write sets
      
      
      sql/handler.cc:
        - make sure to reset the read and write sets
      sql/log_event.cc:
        - make sure to reset the read and write sets
      cb09dc21
  20. 20 Dec, 2007 1 commit
    • unknown's avatar
      A pre-requisite for the fix for Bug#12713 "Error in a stored function · 31cb9f17
      unknown authored
      called from a SELECT doesn't cause ROLLBACK of state"
      Make private all class handler methods (PSEA API) that may modify
      data. Introduce and deploy public ha_* wrappers for these methods in 
      all sql/.
      This necessary to keep track of all data modifications in sql/,
      which is in turn necessary to be able to optimize two-phase
      commit of those transactions that do not modify data.
      
      
      sql/ha_partition.cc:
        Class ha_partition is no longer a friend of class handler.
        Use the public handler interface (handler::ha_ methods) for partition
        operations.
        Remove unnecessary casts from char[] to const char *.ppзи выафвыаafa
      sql/handler.cc:
        Function ha_create_table() is no longer a friend of class handler.
        Use public handler::change_table_ptr() to access private members.
        This fixes a subtle bug (no test case in the test suite) when a
        deletion error occurs inside one partition of a partitioned engine. 
        The old code would crash in handler::print_error() in this case.
        
        Implement the newly introduced public ha_* wrappers of the private
        virtual handler methods.
      sql/handler.h:
        Introduce ha_* wrappers to all class handler methods that may
        modify data. This is necessary to be able to keep track of
        data modifying operations of class handler and optimize read-only
        transactions.
      sql/item_sum.cc:
        delete_all_rows -> ha_delete_all_rows
      sql/sql_base.cc:
        Use the new public wrappers.
      sql/sql_delete.cc:
        delete_all_rows -> ha_delete_all_rows
      sql/sql_partition.cc:
        Use the new public wrappers.
      sql/sql_select.cc:
        delete_all_rows -> ha_delete_all_rows
        delete_table -> ha_delete_table
        disabe_indexes -> ha_disable_idnexes
      sql/sql_show.cc:
        delete_all_rows -> ha_delete_all_rows
      sql/sql_table.cc:
        Use the public wrappers for class handler DDL methods.
        All methods which may change handler data are now accessed via a public
        wrapper.
      sql/sql_union.cc:
        delete_all_rows -> ha_delete_all_rows
        {enable,disable}_indexes -> ha_{enable,disable}_indexes
      sql/sql_update.cc:
        bulk_update_row -> ha_bulk_update_row
      sql/unireg.cc:
        create_handler_files -> ha_create_handler_files
      31cb9f17
  21. 19 Dec, 2007 1 commit
  22. 16 Nov, 2007 1 commit
  23. 15 Nov, 2007 1 commit
    • unknown's avatar
      Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE · 6e5ea686
      unknown authored
                  corrupts a MERGE table
      Bug 26867 - LOCK TABLES + REPAIR + merge table result in
                  memory/cpu hogging
      Bug 26377 - Deadlock with MERGE and FLUSH TABLE
      Bug 25038 - Waiting TRUNCATE
      Bug 25700 - merge base tables get corrupted by
                  optimize/analyze/repair table
      Bug 30275 - Merge tables: flush tables or unlock tables
                  causes server to crash
      Bug 19627 - temporary merge table locking
      Bug 27660 - Falcon: merge table possible
      Bug 30273 - merge tables: Can't lock file (errno: 155)
      
      The problems were:
      
      Bug 26379 - Combination of FLUSH TABLE and REPAIR TABLE
                      corrupts a MERGE table
      
        1. A thread trying to lock a MERGE table performs busy waiting while
           REPAIR TABLE or a similar table administration task is ongoing on
           one or more of its MyISAM tables.
        
        2. A thread trying to lock a MERGE table performs busy waiting until all
           threads that did REPAIR TABLE or similar table administration tasks
           on one or more of its MyISAM tables in LOCK TABLES segments do UNLOCK
           TABLES. The difference against problem #1 is that the busy waiting
           takes place *after* the administration task. It is terminated by
           UNLOCK TABLES only.
        
        3. Two FLUSH TABLES within a LOCK TABLES segment can invalidate the
           lock. This does *not* require a MERGE table. The first FLUSH TABLES
           can be replaced by any statement that requires other threads to
           reopen the table. In 5.0 and 5.1 a single FLUSH TABLES can provoke
           the problem.
      
      Bug 26867 - LOCK TABLES + REPAIR + merge table result in
                  memory/cpu hogging
      
        Trying DML on a MERGE table, which has a child locked and
        repaired by another thread, made an infinite loop in the server.
      
      Bug 26377 - Deadlock with MERGE and FLUSH TABLE
      
        Locking a MERGE table and its children in parent-child order
        and flushing the child deadlocked the server.
      
      Bug 25038 - Waiting TRUNCATE
      
        Truncating a MERGE child, while the MERGE table was in use,
        let the truncate fail instead of waiting for the table to
        become free.
      
      Bug 25700 - merge base tables get corrupted by
                  optimize/analyze/repair table
      
        Repairing a child of an open MERGE table corrupted the child.
        It was necessary to FLUSH the child first.
      
      Bug 30275 - Merge tables: flush tables or unlock tables
                  causes server to crash
      
        Flushing and optimizing locked MERGE children crashed the server.
      
      Bug 19627 - temporary merge table locking
      
        Use of a temporary MERGE table with non-temporary children
        could corrupt the children.
      
        Temporary tables are never locked. So we do now prohibit
        non-temporary chidlren of a temporary MERGE table.
      
      Bug 27660 - Falcon: merge table possible
      
        It was possible to create a MERGE table with non-MyISAM children.
      
      Bug 30273 - merge tables: Can't lock file (errno: 155)
      
        This was a Windows-only bug. Table administration statements
        sometimes failed with "Can't lock file (errno: 155)".
      
      These bugs are fixed by a new implementation of MERGE table open.
      
      When opening a MERGE table in open_tables() we do now add the
      child tables to the list of tables to be opened by open_tables()
      (the "query_list"). The children are not opened in the handler at
      this stage.
      
      After opening the parent, open_tables() opens each child from the
      now extended query_list. When the last child is opened, we remove
      the children from the query_list again and attach the children to
      the parent. This behaves similar to the old open. However it does
      not open the MyISAM tables directly, but grabs them from the already
      open children.
      
      When closing a MERGE table in close_thread_table() we detach the
      children only. Closing of the children is done implicitly because
      they are in thd->open_tables.
      
      For more detail see the comment at the top of ha_myisammrg.cc.
      
      Changed from open_ltable() to open_and_lock_tables() in all places
      that can be relevant for MERGE tables. The latter can handle tables
      added to the list on the fly. When open_ltable() was used in a loop
      over a list of tables, the list must be temporarily terminated
      after every table for open_and_lock_tables().
      table_list->required_type is set to FRMTYPE_TABLE to avoid open of
      special tables. Handling of derived tables is suppressed.
      These details are handled by the new function
      open_n_lock_single_table(), which has nearly the same signature as
      open_ltable() and can replace it in most cases.
      
      In reopen_tables() some of the tables open by a thread can be
      closed and reopened. When a MERGE child is affected, the parent
      must be closed and reopened too. Closing of the parent is forced
      before the first child is closed. Reopen happens in the order of
      thd->open_tables. MERGE parents do not attach their children
      automatically at open. This is done after all tables are reopened.
      So all children are open when attaching them.
      
      Special lock handling like mysql_lock_abort() or mysql_lock_remove()
      needs to be suppressed for MERGE children or forwarded to the parent.
      This depends on the situation. In loops over all open tables one
      suppresses child lock handling. When a single table is touched,
      forwarding is done.
      
      Behavioral changes:
      ===================
      
      This patch changes the behavior of temporary MERGE tables.
      Temporary MERGE must have temporary children.
      The old behavior was wrong. A temporary table is not locked. Hence
      even non-temporary children were not locked. See
      Bug 19627 - temporary merge table locking.
      
      You cannot change the union list of a non-temporary MERGE table
      when LOCK TABLES is in effect. The following does *not* work:
      CREATE TABLE m1 ... ENGINE=MRG_MYISAM ...;
      LOCK TABLES t1 WRITE, t2 WRITE, m1 WRITE;
      ALTER TABLE m1 ... UNION=(t1,t2) ...;
      However, you can do this with a temporary MERGE table.
      
      You cannot create a MERGE table with CREATE ... SELECT, neither
      as a temporary MERGE table, nor as a non-temporary MERGE table.
      CREATE TABLE m1 ... ENGINE=MRG_MYISAM ... SELECT ...;
      Gives error message: table is not BASE TABLE.
      
      
      include/my_base.h:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added HA_EXTRA_ATTACH_CHILDREN and HA_EXTRA_DETACH_CHILDREN.
      include/myisammrg.h:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added element 'children_attached' to MYRG_INFO.
        Added declarations for myrg_parent_open(),
        myrg_attach_children() and myrg_detach_children()
        for the new MERGE table open approach.
      mysql-test/extra/binlog_tests/blackhole.test:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Preliminarily added new error message with a comment.
      mysql-test/r/create.result:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Fixed test result.
      mysql-test/r/delayed.result:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Moved test result from here to merge.result.
      mysql-test/r/merge.result:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Fixed/added test result.
      mysql-test/r/myisam.result:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Moved test result for bug 8306 from here to merge.result.
      mysql-test/suite/binlog/r/binlog_stm_blackhole.result:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Fixed test result.
      mysql-test/t/create.test:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Fixed error number.
      mysql-test/t/delayed.test:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Moved test from here to merge.test.
      mysql-test/t/merge.test:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Fixed test for new temporary MERGE table behavior.
        Exchanged error numbers by symbolic codes.
        Added tests. Included are tests for bugs
        8306 (moved from myisam.test), 26379, 19627, 25038, 25700, 26377,
        26867, 27660, 30275, and 30273.
        Fixed changes resulting from disabled CREATE...SELECT.
        Integrated tests moved from delayed.test and myisam.test to here.
      mysql-test/t/myisam.test:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Moved test for bug 8306 from here to merge.test.
      mysys/thr_lock.c:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added code to let the owner of a high priority lock (TL_WRITE_ONLY)
        to bypass its own lock.
      sql/ha_ndbcluster_binlog.cc:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added 'thd' argument to init_tmp_table_share().
      sql/handler.cc:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added 'thd' argument to init_tmp_table_share().
      sql/mysql_priv.h:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Removed declaration of check_merge_table_access(). It is now static
        in sql_parse.cc.
        Added declaration for fix_merge_after_open().
        Renamed open_and_lock_tables() to open_and_lock_tables_derived()
        with additional parameter 'derived'.
        Added inline functions simple_open_n_lock_tables() and
        open_and_lock_tables(), which call open_and_lock_tables_derived()
        and add the argument for 'derived'.
        Added new function open_n_lock_single_table(), which can be used
        as an replacement for open_ltable() in most situations. Internally
        it calls simple_open_n_lock_tables() so hat it is appropriate for
        MERGE tables.
        Added 'thd' argument to init_tmp_table_share().
      sql/slave.cc:
        ug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added comment.
      sql/sql_base.cc:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        
        Defined new functions add_merge_table_list(),
        attach_merge_children(), detach_merge_children(), and
        fix_merge_after_open() for the new MERGE table open approach.
        
        Added calls of the new functions to
        close_handle_and_leave_table_as_lock(), close_thread_tables(),
        close_thread_table(), unlink_open_table(), reopen_name_locked_table(),
        reopen_table(), drop_locked_tables(), close_temporary_table(),
        and open_tables() respectively.
        
        Prevented special lock handling of merge children (like
        mysql_lock_remove, mysql_lock_merge or mysql_lock_abort)
        at many places. Some of these calls are forwarded to the
        parent table instead.
        
        Added code to set thd->some_tables_deleted for every thread that has
        a table open that we are flushing.
        Added code for MERGE tables to unlink_open_table().
        Added MERGE children to the list of unusable tables in open_table().
        Added MERGE table handling to reopen_table().
        Added lock handling and closing of a parent before the children
        in close_data_files_and_morph_locks().
        Added code for re-attaching children in reopen_tables().
        Added MYSQL_LOCK_NOTIFY_IF_NEED_REOPEN to the locking flags and
        error reporting after mysql_lock_tables() in reopen_tables().
        Added lock handling and closing of a parent before the children
        in close_old_data_files().
        Added lock handling and detaching in drop_locked_tables().
        Added code for removing the children list from the statement list
        to prepare for a repetition in open_tables().
        Added new function open_n_lock_single_table(), which can be used
        as an replacement for open_ltable() in most situations. Internally
        it calls simple_open_n_lock_tables() so hat it is appropriate for
        MERGE tables.
        Disabled use of open_ltable() for MERGE tables.
        Removed function simple_open_n_lock_tables(). It is now inline
        declared in mysql_priv.h.
        Renamed open_and_lock_tables() to open_and_lock_tables_derived()
        with additional parameter 'derived'. open_and_lock_tables() is now
        inline declared in mysql_priv.h.
        Added a check for end-of-list in two loops in lock_tables().
        Added 'thd' argument to init_tmp_table_share().
      sql/sql_insert.cc:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Changed from open_ltable() to open_n_lock_single_table() in
        handle_delayed_insert().
        Reestablished LEX settings after lex initialization.
        Added 'thd' argument to init_tmp_table_share().
      sql/sql_parse.cc:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Made check_merge_table_access() a static function.
        Disabled use of CREATE...SELECT for MERGE tables.
      sql/sql_partition.cc:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Fixed comment typo.
      sql/sql_select.cc:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added 'thd' argument to init_tmp_table_share().
      sql/sql_table.cc:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Optimized use of mysql_ha_flush() in mysql_rm_table_part2().
        Disabled the use of MERGE tables with prepare_for_restore() and
        prepare_for_repair().
        Changed from open_ltable() to open_n_lock_single_table() in
        mysql_alter_table() and mysql_checksum_table().
        Disabled change of child list under LOCK TABLES.
        Initialized table_list->table in mysql_recreate_table().
      sql/sql_trigger.cc:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added code for allowing CREATE TRIGGER under LOCK TABLE, to be able
        to test it with MERGE tables.
      sql/table.cc:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added 'thd' argument to init_tmp_table_share().
        Setting table_map_id from query_id in init_tmp_table_share().
        Added member function TABLE::is_children_attached().
      sql/table.h:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added access method get_table_def_version() to TABLE_SHARE.
        Added elements for MERGE tables to TABLE and TABLE_LIST.
      storage/myisam/ha_myisam.cc:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added an unrelated comment to the function comment of table2myisam().
      storage/myisam/ha_myisam.h:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added new member function MI_INFO::file_ptr().
      storage/myisammrg/ha_myisammrg.cc:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added callback functions to support parent open and children attach
        of MERGE tables.
        Changed ha_myisammrg::open() to initialize storage engine structures
        and create a list of child tables only. Child tables are not opened.
        Added ha_myisammrg::attach_children(), which does now the main part
        of MERGE open.
        Added ha_myisammrg::detach_children().
        Added calls to ::attach_children() and ::detach_children() to
        ::extra() on HA_EXTRA_ATTACH_CHILDREN and HA_EXTRA_DETACH_CHILDREN
        respectively.
        Added a check for matching TEMPORARY type for children against
        parent.
        Added a check for table def version.
        Added support for thd->open_options to attach_children().
        Changed child path name generation for temporary tables so that
        it does nothing special for temporary tables.
      storage/myisammrg/ha_myisammrg.h:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added elements to class ha_myisammrg to support the new
        open approach.
        Changed empty destructor definition to a declaration.
        Implemented in ha_myisammrg.cc.
        Added declaration for methods attach_children() and
        detach_children().
        Added definition for method table_ptr() for use with
        callback functions.
      storage/myisammrg/myrg_close.c:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Added a check to avoid closing of MyISAM tables when the
        child tables are not attached.
        Added freeing of rec_per_key_part when the child tables
        are not attached.
      storage/myisammrg/myrg_extra.c:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        Some ::extra() functions and ::reset() can be called when
        children are detached.
      storage/myisammrg/myrg_open.c:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
                    corrupts a MERGE table
        
        Kept old myrg_open() for MERGE use independent from MySQL.
        Removed an always true condition in myrg_open().
        Set children_attached for independent MERGE use in myrg_open().
        
        Added myrg_parent_open(), myrg_attach_children(), and
        myrg_detach_children() for the new MERGE table open approach.
      mysql-test/r/merge-big.result:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE corrupts a MERGE table
        New test result
      mysql-test/t/merge-big.test:
        Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE corrupts a MERGE table
        New test case
      6e5ea686
  24. 07 Nov, 2007 1 commit
    • unknown's avatar
      Bug#22351 - handler::index_next_same() call to key_cmp_if_same() uses · 07c701ab
      unknown authored
                  the wrong buffer
      
      handler::index_next_same() did not take into account that the
      internally called function key_cmp_if_same() uses the fixed
      buffer table->record[0] for key comparison instead of the
      buffer provided by the caller of handler::index_next_same().
      
      Added code to temporarily redirect table->record[0] and the fields
      used for the key to the record buffer provided by the caller of
      handler::index_next_same().
      
      The test case is in partition.test already.
      
      
      sql/handler.cc:
        Bug#22351 - handler::index_next_same() call to key_cmp_if_same() uses
                    the wrong buffer
        Added code to temporarily redirect table->record[0] and the fields
        used for the key to the record buffer provided by the caller of
        handler::index_next_same().
      07c701ab
  25. 30 Oct, 2007 1 commit
    • unknown's avatar
      In ha_delete_table, use a standard mechanism to intercept the error message · 383ce41d
      unknown authored
      and convert it to a warning instead of direct manipulation with the
      thread error stack.
      Fix a bug in handler::print_erorr when a garbled message was
      printed for HA_ERR_NO_SUCH_TABLE.
      This is a pre-requisite patch for the fix for Bug#12713 Error in a stored
      function called from a SELECT doesn't cause ROLLBACK of statem
      
      
      sql/handler.cc:
        Use a standard mechanism to intercept the error message, instead
        of direct manipulation with thread error stack. 
        Fix a bug when for HA_ERR_NO_SUCH_TABLE handler::print_error() would
        print a garbled message.
      sql/log.cc:
        Extend internal error handler interface to carry the message text.
      sql/mysqld.cc:
        Extend internal error handler interface to carry the message text.
      sql/sql_base.cc:
        Extend internal error handler interface to carry the message text.
      sql/sql_class.cc:
        Extend internal error handler interface to carry the message text.
      sql/sql_class.h:
        Extend internal error handler interface to carry the message text.
      sql/sql_error.cc:
        Extend internal error handler interface to carry the message text.
      383ce41d
  26. 19 Oct, 2007 1 commit
    • unknown's avatar
      Rename: query_error -> is_slave_error. · 6b658b9f
      unknown authored
      Add comments.
      
      
      sql/ha_ndbcluster_binlog.cc:
        query_error -> slave_error
      sql/handler.cc:
        query_error -> slave_error
      sql/log.cc:
        query_error -> slave_error
      sql/log_event.cc:
        query_error -> slave_error
      sql/log_event_old.cc:
        query_error -> slave_error
      sql/mysqld.cc:
        query_error -> slave_error
      sql/protocol.cc:
        query_error -> slave_error
      sql/slave.cc:
        query_error -> slave_error
      sql/sp_head.cc:
        query_error -> slave_error
      sql/sql_class.cc:
        query_error -> slave_error
      sql/sql_class.h:
        Rename: query_error -> is_slave_error, to avoid confusion.
        Add commenta.
      sql/sql_connect.cc:
        Rename: query_error -> is_slave_error, to avoid confusion.
        Originally it was the same code to handle init-connect and init-slave 
        mysqld options. Then init-connect implementation forked off,
        but the one who copy-pasted the code didn't change it to not
        use a replication-specific variable.
      6b658b9f
  27. 11 Oct, 2007 2 commits
    • unknown's avatar
      Doxygenization of comments. · f617e5fc
      unknown authored
      f617e5fc
    • unknown's avatar
      Moved a lot of old bug fixes and safe cleanups from Maria 5.1 tree to 5.1 · d685c483
      unknown authored
      - Reserver namespace and place in frm for TABLE_CHECKSUM and PAGE_CHECKSUM create options
      - Added syncing of directory when creating .frm files
      - Portability fixes
      - Added missing cast that could cause bugs
      - Code cleanups
      - Made some bit functions inline
      - Moved things out of myisam.h to my_handler.h to make them more accessable
      - Renamed some myisam variables and defines to make them more globaly usable (as they are used outside of MyISAM)
      - Fixed bugs in error conditions
      - Use compiler time asserts instead of run time
      - Fixed indentation
      HA_EXTRA_PREPARE_FOR_DELETE -> HA_EXTRA_PREPARE_FOR_DROP as the old name was wrong
      (Added a define for old value to ensure we don't break any old code)
      Added HA_EXTRA_PREPARE_FOR_RENAME as a signal for rename (before we used a DROP signal which is wrong)
      - Initialize error messages early to get better errors when mysqld or an engine fails to start
      - Fix windows bug that query_performance_frequency was not initialized if registry code failed
      - thread_stack -> my_thread_stack_size
      
      
      BitKeeper/etc/ignore:
        added libmysqld/scheduler.cc libmysqld/sql_connect.cc libmysqld/sql_tablespace.cc
      include/Makefile.am:
        Added my_bit.h
      include/m_string.h:
        Added bzero_if_purify() to simplify code
      include/my_base.h:
        Reserve options for the future
        Added HA_OPTION_NULL_FIELDS, HA_OPTION_PAGE_CHECKSUM, HA_CREATE_PAGE_CHECKSUM
        Added new error message HA_ERR_NEW_FILE
        Added optional new row type BLOCK_RECORD
        Renamed HA_EXTRA_PREPARE_FOR_DELETE to HA_EXTRA_PREPARE_FOR_DROP
        Added HA_EXTRA_PREARE_FOR_RENAME to inform handler we will do a rename
        (Added define to make things compatible until 6.0)
        Moved invalidator_by_filename form myisam.h
      include/my_dbug.h:
        Poirtablity fix
      include/my_global.h:
        Added helper macros STATIC_INLINE and MY_ERRPTR
        Added NEED_EXPLICIT_SYNC_DIR
      include/my_handler.h:
        Added missing casts
        Moved some constants and macros out from myisam.h to make these generally available
        Renamed mi_compare_text() to ha_compare_text() as this function is not myisam specific
        Renamed mi_portable_sizeof_char_ptr to portable_sizeof_char_ptr
        Added registering of handler messages for better error reporting during startup
      include/my_sys.h:
        Added my_sync_dir() and my_sync_dir_by_file()
        More comments
        Some indentation fixes
        Moved bit functions to my_bit.h
        Added prototype for crc32()
      include/myisam.h:
        Moved things from here to my_handler.h to make them more accessable
      libmysql/Makefile.shared:
        Added my_sync
      mysys/array.c:
        Fixed indentation and spelling errors
        Split set_dynamic() to two functions
        Added allocate_dynamic() as a new visiable function
        (no new code, only refactoring)
      mysys/mf_iocache.c:
        More DBUG
      mysys/mf_keycache.c:
        More explicite ASSERT
        Removed some casts
        Fixed indentation
      mysys/mf_tempfile.c:
        Fixed bug with possible dangling file descriptor
      mysys/my_atomic.c:
        Use compile time asserts instead of run time
      mysys/my_bit.c:
        Make most bit functions inline
      mysys/my_bitmap.c:
        Added my_bit.h
      mysys/my_compress.c:
        Fixed indentation
      mysys/my_create.c:
        Added my_sync_by_dir()
      mysys/my_delete.c:
        Added my_sync_by_dir()
      mysys/my_error.c:
        init_glob_errs() is now done in my_init()
      mysys/my_handler.c:
        mi_compare_text() -> ha_compare_text() as this is not MyISAM specific
        Added functions to initialize handler error messages
        Fixed indentation
        More clear usage of include files
      mysys/my_init.c:
        Added my_thread_stack_size to be used by other programs
        Ensure that global error messages are always initialized
        Fix windows bug that query_performance_frequency was not initialized if registry code failed
      mysys/my_open.c:
        More comments
        Removed duplicate code
      mysys/my_pread.c:
        Ensure that my_errno is set even if errno is 0
      mysys/my_realloc.c:
        Added comment
      mysys/my_rename.c:
        Added syncing of directories
      mysys/my_symlink.c:
        Added my_sync_by_dir()
      mysys/my_sync.c:
        Added my_sync_dir()
         
        On recent Mac OS X, fcntl(F_FULLFSYNC) is recommended over fsync()
        (see "man fsync" on Mac OS X 10.3).
        my_sync_dir(): to sync a directory after a file creation/deletion/
        renaming; can be called directly or via MY_SYNC_DIR in my_create/
        my_delete/my_rename(). No-op except on Linux (see "man fsync" on Linux).
        my_sync_dir_from_file(): same as above, just more practical when the
        caller has a file name but no directory name ready.
        Should the #warning even be a #error? I mean do we want to release
        binaries which don't guarantee any durability?
      mysys/safemalloc.c:
        Added sf_malloc_report_allocated() (Debugging aid)
      sql/gen_lex_hash.cc:
        Remove inline for big function
      sql/ha_partition.cc:
        HA_EXTRA_PREPARE_FOR_DELETE -> HA_EXTRA_PREPARE_FOR_DROP
        prepare_for_delete -> prepare_for_rename() as this is the the time this function is called
      sql/ha_partition.h:
        prepare_for_delete -> prepare_for_rename() as this is the the time this function is called
      sql/handler.cc:
        ha_init_errors() is now called at startup before plugins
        This allows us to get better error messages
      sql/handler.h:
        Reserve enum value for Maria
        Add future proof enum for page checksums
      sql/item_func.cc:
        Include my_bit.h
      sql/lex.h:
        Added future proof CREATE table options
      sql/log.cc:
        Added comment
      sql/mysql_priv.h:
        thread_stack moved to mysys
      sql/mysqld.cc:
        thread_stack moved to mysys
        thread_stack -> my_thread_stack_size
        Initialize myisam key caches before plugins starts
        Initialize error to allow storage engine to give better error messages if init failes.
        Fixed indentation
        Group all MyISAM options together
        Added new status variable 'Opened_table_definitions' to allow one to monitor if table definition cache is too small
        Clarified some option help messages
      sql/opt_range.cc:
        Removed wrong usage of SAFE_MODE (this disabled key usage for UPDATES, which was never the intention)
        Removed print if total cost in a place where it didn't have any usable value
      sql/set_var.cc:
        thread_stack -> my_thread_stack
      sql/sql_class.cc:
        Intialize transaction object properly
      sql/sql_parse.cc:
        thread_stack -> my_thread_stack
      sql/sql_select.cc:
        Include my_bit.h
        mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
      sql/sql_show.cc:
        Simplify handling of ha_choice variables
        Added future safe PAGE_CHECKSUM option
        Addid missing 'transactional=#' in information schema
      sql/sql_table.cc:
        HA_EXTRA_PREPARE_FOR_DELETE -> HA_EXTRA_FORCE_REOPEN when doing reopen
        HA_EXTRA_PREPARE_FOR_DELETE -> HA_EXTRA_PREPARE_FOR_RENAME when doing rename
        Removed not needed initialization
      sql/sql_test.cc:
        thread_stack -> my_thread_stack
      sql/sql_yacc.yy:
        Simplify handling of ha_choice variables
        Added future proof create table options TABLE_CHECKSUM=# & PAGE_CHECKSUM=#
      sql/table.cc:
        Save page_checksum in .frm
      sql/table.h:
        Added variable to hold create table option PAGE_CHECKSUM
      sql/unireg.cc:
        Added syncing of directories
      storage/myisam/ft_boolean_search.c:
        mi_compare_text() -> ha_compare_text()
      storage/myisam/ft_eval.c:
        mi_compare_text() -> ha_compare_text()
      storage/myisam/ft_nlq_search.c:
        mi_compare_text() -> ha_compare_text()
      storage/myisam/ft_parser.c:
        mi_compare_text() -> ha_compare_text()
      storage/myisam/ft_stopwords.c:
        mi_compare_text() -> ha_compare_text()
      storage/myisam/ft_test1.c:
        mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
      storage/myisam/ft_update.c:
        mi_compare_text() -> ha_compare_text()
      storage/myisam/ha_myisam.cc:
        Include my_bit.h
      storage/myisam/mi_check.c:
        MI_MAX_POSSIBLE_KEY_BUFF -> HA_MAX_POSSIBLE_KEY_BUFF
        mi_compare_text() -> ha_compare_text()
        Added BLOCK_RECORD to avoid compiler warnings
      storage/myisam/mi_checksum.c:
        mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
      storage/myisam/mi_create.c:
        MI_MAX_POSSIBLE_KEY -> HA_MAX_POSSIBLE_KEY
        MI_MAX_KEY_BLOCK_SIZE -> HA_MAX_KEY_BLOCK_SIZE
        mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
      storage/myisam/mi_dynrec.c:
        mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
      storage/myisam/mi_extra.c:
        HA_EXTRA_PREPARE_FOR_DELETE -> HA_EXTRA_PREPARE_FOR_DROP
      storage/myisam/mi_open.c:
        MI_MAX_POSSIBLE_KEY -> HA_MAX_POSSIBLE_KEY
        mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
      storage/myisam/mi_packrec.c:
        mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
      storage/myisam/mi_range.c:
        mi_compare_text -> ha_compare_text
      storage/myisam/mi_test1.c:
        mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
      storage/myisam/mi_test2.c:
        mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
      storage/myisam/mi_unique.c:
        mi_compare_text() -> ha_compare_text()
      storage/myisam/mi_write.c:
        mi_compare_text() -> ha_compare_text()
      storage/myisam/myisamchk.c:
        Include my_bit.h
      storage/myisam/myisamdef.h:
        Moved store_key_length_inc to handler.h
      storage/myisam/myisampack.c:
        mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
      storage/myisam/sp_test.c:
        mi_portable_sizeof_char_ptr -> portable_sizeof_char_ptr
      storage/myisammrg/ha_myisammrg.cc:
        HA_EXTRA_PREPARE_FOR_DELETE -> HA_EXTRA_PREPARE_FOR_DROP
      include/my_bit.h:
        New BitKeeper file ``include/my_bit.h''
      d685c483
  28. 09 Oct, 2007 1 commit
  29. 08 Oct, 2007 1 commit
    • unknown's avatar
      Fixed bug #31310. · 947d1196
      unknown authored
      Locked rows of the InnoDB storage was silently skipped in the read-committed
      isolation level.
      
      QUICK_RANGE_SELECT for unique ranges lacks second (blocking) read
      of the record that was read semi-consistently and just skip it.
      
      The handler::read_multi_range_next method has been modified
      to retry previous unique range if the previous read was
      semi-consistent.
      
      
      sql/handler.cc:
        Fixed bug #31310.
        The handler::read_multi_range_next method has been modified
        to retry previous unique range if the previous read was
        semi-consistent.
      mysql-test/include/mix1.inc:
        Added test case for bug #31310.
      mysql-test/r/innodb_mysql.result:
        Added test case for bug #31310.
      947d1196
  30. 01 Oct, 2007 1 commit
    • unknown's avatar
      Removed extra spaces · 6e7f15ef
      unknown authored
      Added extra debug
      
      
      client/mysql_upgrade.c:
        Removed extra space
      client/mysqlcheck.c:
        Removed extra space
      client/mysqldump.c:
        Removed extra space
      client/mysqlimport.c:
        Removed extra space
      client/mysqlshow.c:
        Removed extra space
      client/mysqlslap.c:
        Removed extra space
      client/mysqltest.c:
        Removed extra space
      sql/handler.cc:
        Added extra debug
      6e7f15ef
  31. 31 Aug, 2007 1 commit
    • unknown's avatar
      Never access thd->ha_data directly, use getters/setters from the plugin · 3b85708a
      unknown authored
      API instead.
      This is a pre-requisite of the fix for Bug 12713, which changes the
      data type of thd->ha_data from void * to struct Ha_data.
      
      
      include/mysql/plugin.h:
        Provide accessors to thd->ha_data for simple and robust code.
      sql/ha_ndbcluster_binlog.h:
        Use getters/setters of thd->ha_data, instead of direct access.
      sql/handler.cc:
        Use a getter of thd->ha_data instead of direct access.
      sql/log.cc:
        Use getters/setters of thd->ha_data, instead of direct access.
      sql/rpl_utility.h:
        Fix a compilation warning (declaration order must match initialization
        order in constructor).
      storage/federated/ha_federated.cc:
        Use interface accessors to thd->ha_data, instead of direct access.
      3b85708a
  32. 15 Aug, 2007 1 commit
    • unknown's avatar
      bug#28570: handler::index_read() is called with different find_flag when · 546c7fcf
      unknown authored
      ORDER BY is used
      
      The range analysis module did not correctly signal to the 
      handler that a range represents a ref (EQ_RANGE flag). This causes 
      non-range queries like 
      SELECT ... FROM ... WHERE keypart_1=const, ..., keypart_n=const 
      ORDER BY ... FOR UPDATE
      to wait for a lock unneccesarily if another running transaction uses
      SELECT ... FOR UPDATE on the same table.
      
      Fixed by setting EQ_RANGE for all range accesses that represent 
      an equality predicate. 
      
      
      mysql-test/r/innodb_mysql.result:
        bug#28570: Test Result
      mysql-test/t/innodb_mysql.test:
        bug#28570: Test Case
      sql/handler.cc:
        bug#28570: Updated comment
      sql/opt_range.cc:
        bug#28570: Removed the criterion that key has to be unique (HA_NOSAME) in 
        order for the EQ_RANGE flag to be set. It is sufficient that the range 
        represent a ref access.
      546c7fcf
  33. 13 Aug, 2007 1 commit
    • unknown's avatar
      Fixed a lot of compiler warnings and errors detected by Forte C++ on Solaris · 09bc9d90
      unknown authored
      Faster thr_alarm()
      Added 'Opened_files' status variable to track calls to my_open()
      Don't give warnings when running mysql_install_db
      Added option --source-install to mysql_install_db
      
      I had to do the following renames() as used polymorphism didn't work with Forte compiler on 64 bit systems
      index_read()      -> index_read_map()
      index_read_idx()  -> index_read_idx_map()
      index_read_last() -> index_read_last_map()
      
      
      BUILD/compile-solaris-sparc-forte:
        Updated script to current Solaris installations
        Now we compile by default for 64 bits
      client/mysql.cc:
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
      client/mysql_upgrade.c:
        Fixed compiler warning (on Forte)
      client/mysqladmin.cc:
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
      client/mysqlcheck.c:
        Fixed compiler warning (on Forte)
      client/mysqldump.c:
        Fixed compiler warning (on Forte)
      client/mysqlslap.c:
        Fixed compiler warning (on Forte)
      client/mysqltest.c:
        Fixed compiler warning (on Forte)
      client/sql_string.cc:
        Avoid compiler warnings when using C function pointers in C++
      configure.in:
        Added detection of mtmalloc and ieeefp.h
      extra/replace.c:
        Fixed compiler warning (on Forte)
      include/m_ctype.h:
        Added some typedef's to make it easy to use C function pointers in C++
      include/my_sys.h:
        Added my_file_total_opened (counter for calls to my_open())
      include/myisam.h:
        Fixed compiler warning (on Forte)
      libmysql/libmysql.c:
        Fixed compiler warning (on Forte) by adding casts and change types
      libmysql/manager.c:
        Fixed compiler warning (on Forte) by adding casts and change types
      mysql-test/r/ctype_cp932_binlog_stm.result:
        Updated positions
        (Needed because we didn't before correctly restore collation_database after running stored procedure
      mysys/my_fopen.c:
        Count number of opened files
      mysys/my_open.c:
        Count number of opened files
      mysys/my_static.c:
        Count number of opened files
      mysys/thr_alarm.c:
        Optimization to do less alarm() and pthread_sigmask() calls.
        Idea is to remember time for next pending alarm and not reschedule a new alarm if it's after the current one.
        Before we only did this if there was other pending alarms.
        We don't have to use pthread_sigmask() in case of 'USE_ONE_SIGNAL_HAND' as the alarm()
        signal will be blocked for the calling thread anyway and no other thread will have the alarm() signal enabled to call process_alarm()
      regex/regcomp.c:
        Fixed compiler warning (on Forte) by adding casts and change types
      scripts/mysql_install_db.sh:
        Added option --source-install to allow one to create a mysql database from the source tree without installing MySQL
        Don't give (unnecessary) warnings
      server-tools/instance-manager/angel.cc:
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
      server-tools/instance-manager/thread_registry.cc:
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
      sql/event_db_repository.cc:
        index_read() -> index_read_map()
      sql/event_queue.cc:
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
      sql/field.cc:
        Fixed compiler warnings about hidden fields
      sql/ha_partition.cc:
        Fixed compiler warnings about hidden fields
        index_read() -> index_read_map()
      sql/ha_partition.h:
        index_read() -> index_read_map()
      sql/handler.cc:
        Added PAGE option to row types (to prepare for future)
        index_read() -> index_read_map()
      sql/handler.h:
        Added ROW_TYPE_PAGE (for future)
        Added flag to signal if table was to be created transactionally
        I had to do the following renames() as used polymorphism didn't work with Forte compiler on 64 bit systems
        index_read()      -> index_read_map()
        index_read_idx()  -> index_read_idx_map()
        index_read_last() -> index_read_last_map()
      sql/item.cc:
        Fixed indentation
        Renamed local variable to avoid hiding class variable
      sql/item_cmpfunc.cc:
        Renamed local variable to avoid hiding class variable
      sql/item_cmpfunc.h:
        Removed not used variable
      sql/item_func.cc:
        Renamed local variable to avoid hiding class variable
      sql/item_strfunc.cc:
        Moved functions from Item_strfunc.cc
      sql/item_strfunc.h:
        Move functions to item_strfunc.cc
        Use C function pointer type to avoid compiler warnings (with Forte)
      sql/item_subselect.cc:
        index_read() -> index_read_map()
      sql/item_xmlfunc.cc:
        Renamed local variable to avoid hiding class variable
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
      sql/key.cc:
        Fixed indentation
      sql/log.cc:
        Renamed local variable to avoid hiding class variable
      sql/log_event.cc:
        Removed call to my_time() when creating class instance of Log_event() as this may have static instances.
        (One can't call my_time() before my_init())
        index_read() -> index_read_map()
        Renamed local variable to avoid hiding class variable
      sql/log_event_old.cc:
        Renamed local variable to avoid hiding class variable
      sql/mysql_priv.h:
        Made all create_backup_ctx() declarations identical.
        This lifted up a bug where wrong create_backup_ctx() was called in some cases.
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
      sql/mysqld.cc:
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
        Fixed indentation
        Don't call end_thr_alarm() when calling unireg_abort() as unireg_abort() already calls end_thr_alarm()
        Added variable 'Opened_files' (number of calls to my_open() or my_fopen())
        Don't print 'loose' warnings when using --bootstrap (to avoid warnings when running mysql_install_db)
        Fixed compiler warnings
      sql/opt_range.cc:
        index_read() -> index_read_map()
      sql/opt_sum.cc:
        index_read() -> index_read_map()
      sql/partition_info.cc:
        Renamed local variable to avoid hiding class variable
      sql/rpl_filter.cc:
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
      sql/set_var.cc:
        Renamed local variable to avoid hiding class variable
        Added 'process_key_cache_t' type to avoid compiler warning (on Forte)
      sql/set_var.h:
        Added 'process_key_cache_t' type to avoid compiler warning (on Forte)
      sql/sp.cc:
        More debugging
        index_read() -> index_read_map()
      sql/sp_cache.cc:
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
      sql/sp_head.cc:
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
        Moved 'saved_creation_ctx' higher up to be able to free objects allocated by create_backup_ctx()
      sql/sql_acl.cc:
        index_read() -> index_read_map()
      sql/sql_class.cc:
        Renamed local variable to avoid hiding class variable
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
      sql/sql_class.h:
        Renamed local variable to avoid hiding class variable
      sql/sql_db.cc:
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
      sql/sql_delete.cc:
        Renamed local variable to avoid hiding class variable
      sql/sql_handler.cc:
        index_read() -> index_read_map()
      sql/sql_help.cc:
        index_read() -> index_read_map()
      sql/sql_insert.cc:
        index_read() -> index_read_map()
        Renamed local variable to avoid hiding class variable
      sql/sql_lex.cc:
        Renamed local variable to avoid hiding class variable
      sql/sql_plugin.cc:
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
        index_read() -> index_read_map()
        Don't give warnings about not used plugins if we are using --warnings=0
      sql/sql_select.cc:
        index_read() -> index_read_map()
      sql-common/client.c:
        Fixed compiler warning (on Forte)
      sql-common/my_time.c:
        Removed never accessed code
        Fixed compiler warning (on Forte)
      sql/sql_servers.cc:
        index_read() -> index_read_map()
      sql/sql_show.cc:
        Added TRANSACTIONAL to SHOW CREATE
        Fixed ROW_TYPE_PAGE
      sql/sql_string.cc:
        Avoid compiler warnings when using C function pointers in C++
      sql/sql_table.cc:
        Set create_info->transactional if we used TRANSACTIONAL=1
      sql/sql_udf.cc:
        index_read() -> index_read_map()
      sql/sql_yacc.yy:
        Added TRANSACTIONAL=0|1 to CREATE (for future)
        Added row type PAGE (was only partionally handled before)
      sql/strfunc.cc:
        Avoid compiler warnings when using C function pointers in C++
      sql/table.cc:
        More DBUG statements
        Declare all create_backup_ctx() functions identically
        Remember if table was created with TRANSACTIONAL flag or not (future safe)
        Renamed local variable to avoid hiding class variable
      sql/table.h:
        Remember if table was created with TRANSACTIONAL=1
      sql/tztime.cc:
        index_read() -> index_read_map()
      sql-common/pack.c:
        Fixed compiler warning (on Forte)
      storage/archive/archive_reader.c:
        Fixed compiler warning (on Forte)
      storage/archive/azio.c:
        Fixed compiler warning (on Forte)
      storage/blackhole/ha_blackhole.cc:
        index_read() -> index_read_map()
      storage/blackhole/ha_blackhole.h:
        index_read() -> index_read_map()
      storage/csv/ha_tina.cc:
        Declare functions sent to C code with extern "C" to avoid compiler warnings (on Forte)
      storage/example/ha_example.cc:
        index_read() -> index_read_map()
      storage/example/ha_example.h:
        index_read() -> index_read_map()
      storage/heap/ha_heap.cc:
        index_read() -> index_read_map()
      storage/heap/ha_heap.h:
        index_read() -> index_read_map()
      storage/heap/hp_test1.c:
        Fixed compiler warning (on Forte)
      storage/heap/hp_test2.c:
        Fixed compiler warning (on Forte)
      storage/myisam/ft_boolean_search.c:
        Fixed compiler warning (on Forte)
      storage/myisam/ft_nlq_search.c:
        Fixed compiler warning (on Forte)
      storage/myisam/ft_parser.c:
        Fixed compiler warning (on Forte)
      storage/myisam/ft_stopwords.c:
        Fixed compiler warning (on Forte)
      storage/myisam/ha_myisam.cc:
        index_read() -> index_read_map()
      storage/myisam/ha_myisam.h:
        index_read() -> index_read_map()
      storage/myisam/mi_check.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_delete.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_dynrec.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_extra.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_key.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_keycache.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_locking.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_log.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_open.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_packrec.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_page.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_rkey.c:
        Added comment
      storage/myisam/mi_search.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_statrec.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_test1.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_test2.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_test3.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_update.c:
        Fixed compiler warning (on Forte)
      storage/myisam/mi_write.c:
        Fixed compiler warning (on Forte)
      storage/myisam/myisamdef.h:
        Fixed that file_read/file_write returns type size_t
        Changed some functions to use uchar * as argument/return value instead of char*
        This fixed some compiler warnings on Forte
      storage/myisam/myisamlog.c:
        Fixed compiler warning (on Forte)
      storage/myisam/myisampack.c:
        Fixed compiler warning (on Forte)
      storage/myisam/rt_test.c:
        Fixed compiler warning (on Forte)
      storage/myisam/sort.c:
        Fixed compiler warning (on Forte) by adding casts or changing variables to uchar*
      storage/myisam/sp_test.c:
        Fixed compiler warning (on Forte) by adding casts or changing variables to uchar*
      storage/myisammrg/ha_myisammrg.cc:
        index_read() -> index_read_map()
      storage/myisammrg/ha_myisammrg.h:
        index_read() -> index_read_map()
      storage/myisammrg/myrg_create.c:
        Fixed compiler warning (on Forte) by adding casts or changing variable types
      storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp:
        Tdummy -> align  (as in other part of cluster code)
      storage/ndb/src/kernel/vm/DynArr256.cpp:
        Removed not used variable
      storage/ndb/src/ndbapi/Ndb.cpp:
        Removed not used variable
      strings/strtod.c:
        Include ieeefp.h to avoid compiler warning
      tests/bug25714.c:
        Fixed compiler warning
      tests/mysql_client_test.c:
        Remove not used variable
        Fixed indentation
        Removed never reached code
        Fixed compiler warning (on Forte) by adding casts or changing variable types
      vio/viosocket.c:
        Fixed compiler warning (on Forte) by adding casts or changing variable types
      09bc9d90
  34. 02 Aug, 2007 2 commits
    • unknown's avatar
      Simplify logging code a bit (to make code smaller and faster) · 68a7f757
      unknown authored
      Moved duplicated code to inline function store_timestamp()
      Save thd->time_zone_used when logging to table as CSV internally cases it to be changed
      Added MYSQL_LOCK_IGNORE_FLUSH to log tables to avoid deadlock in case of flush tables.
      Mark log tables with TIMESTAMP_NO_AUTO_SET to avoid automatic timestamping
      Set TABLE->no_replicate on open
      
      
      
      client/mysqlbinlog.cc:
        Fixed several memory leaks (most in case of error situations)
      mysql-test/r/events_logs_tests.result:
        Made long_query_timeout smaller to ensure next query comes into log
      mysql-test/r/variables.result:
        Make it safe to run test with --log
      mysql-test/t/events_logs_tests.test:
        Made long_query_timeout smaller to ensure next query comes into log
      mysql-test/t/variables.test:
        Make it safe to run test with --log
      sql/field.cc:
        Moved duplicated code to inline function store_timestamp()
      sql/field.h:
        Moved duplicated code to inline function store_timestamp()
      sql/handler.cc:
        Reorder checks in likely order
        Simplify checks if we should do binary logging
        (no_replicate is set once and for all when table is opened)
      sql/log.cc:
        Save thd->time_zone_used as CVS internally cases it to be changed
        Use Field_timestamp->store_timestamp instead of automatic timestamps.
        This gives us correct timestamp even if thd->set_time() is not called (in case
        of connect) and we don't have to store thd->query_start_used anymore.
      sql/sql_base.cc:
        Removed not needed comment
        Moved LINT_INIT() to after declaration
        Renamed temporary variable to avoid compiler warning
        Added MYSQL_LOCK_IGNORE_FLUSH to log tables to avoid deadlock in case of flush tables.
        Mark log tables with TIMESTAMP_NO_AUTO_SET to avoid automatic timestamping
      sql/table.cc:
        Set TABLE->no_replicate on open
      68a7f757
    • unknown's avatar
      WL#3732 Information schema optimization · 6cc8d986
      unknown authored
      client/mysqldump.c:
        table type compare is changed to case insensitive
      mysql-test/r/information_schema.result:
        test result
      mysql-test/r/information_schema_db.result:
        result fix
      mysql-test/suite/ndb/r/ndb_alter_table.result:
        result fix
      mysql-test/suite/ndb/r/ndb_temporary.result:
        result fix
      mysql-test/t/information_schema.test:
        test case
      sql/ha_ndbcluster.cc:
        char* variables are changed to LEX_STRING
      sql/ha_ndbcluster.h:
        char* variables are changed to LEX_STRING
      sql/ha_ndbcluster_binlog.cc:
        char* variables are changed to LEX_STRING
      sql/handler.cc:
        char* variables are changed to LEX_STRING
      sql/handler.h:
        char* variables are changed to LEX_STRING
      sql/sql_base.cc:
        Modified functions which are used during open table process
        according to table opening method and requested_object.
      sql/sql_select.cc:
        Add support for I_S tables into select_describe() function
      sql/sql_show.cc:
        1. Added initialization of 'open_method' to 'st_field_info' structs.
        2. Added initialization of 'i_s_requested_object' to 'ST_SCHEMA_TABLE' structs.
        3. New function which calculates database name and table name values 
           from 'where' condition if it's possible
           void get_lookup_field_values(THD *thd, COND *cond, TABLE_LIST *table,
                                        LOOKUP_FIELD_VALUES *lookup_field_vals);
        4. New function which set table open method
           setup_table_open_method(TABLE_LIST *tables,
                                   ST_SCHEMA_TABLE *schema_table,
                                   enum enum_schema_tables schema_table_idx)
        5. New function
           int make_db_list(THD *thd, List<LEX_STRING> *files,
                            LOOKUP_FIELD_VALUES *lookup_field_vals,
                            bool *with_i_schema)
        6. New function
           int make_table_name_list(THD *thd, List<LEX_STRING> *files, LEX *lex,
                                    LOOKUP_FIELD_VALUES *lookup_field_vals,
                                    bool with_i_schema, LEX_STRING *db_name)
        7. Modified 'get_all_tables' function according to new schema(see wl#3732).
      sql/sql_show.h:
        char* variables are changed to LEX_STRING
      sql/table.cc:
        Modified functions which are used during open table process
        according to table opening method and requested_object.
      sql/table.h:
        1. added new constants(open_method)
        #define SKIP_OPEN_TABLE 0
        #define OPEN_FRM_ONLY   1
        #define OPEN_FULL_TABLE 2
            
        2. Added new field 'open_method' into struct st_field_info;
           uint open_method;
            
        3. Added new field into ST_SCHEMA_TABLE struct
           uint i_s_requested_object;  /* the object we need to open(TABLE | VIEW) */.
        4. Added new field to TABLE_LIST struct.
           uint i_s_requested_object;
           This field is set from ST_SCHEMA_TABLE.i_s_requested_object
           for processed table before opening.
            
        5. Added new fields to TABLE_LIST struct, used for 'explain select' for I_S table
           bool has_db_lookup_value;
           bool has_table_lookup_value;
           uint table_open_method;
      sql/unireg.h:
        added new constants
      6cc8d986