1. 20 Aug, 2010 4 commits
    • Jon Olav Hauglid's avatar
      1a804fca
    • Dmitry Lenev's avatar
      Fixed failure of parts.partition_debug_sync_innodb.test which · 309b68cf
      Dmitry Lenev authored
      was caused by change of thread state name from "Waiting for
      table" to "Waiting for table metadata lock" (which has 
      happened as part of fix for bug 52044 "FLUSH TABLES WITH READ
      LOCK and FLUSH TABLES <list> WITH READ LOCK are incompati").
      309b68cf
    • Jon Olav Hauglid's avatar
      Bug #55973 Assertion `thd->transaction.stmt.is_empty()' · 10e78191
      Jon Olav Hauglid authored
                 on CREATE TABLE .. SELECT I_S.PART
      
      This assert was triggered if an InnoDB table was created using
      CREATE TABLE ... AS SELECT where the query used an I_S table, and
      a view existed in the database. It would also be triggered for
      any statement changing an InnoDB table (e.g. INSERT, UPDATE, DELETE)
      which had a subquery referencing an I_S table.
      
      The assert was triggered if open_normal_and_derived_tables() failed
      and a statement transaction had been started. This will usually not
      happen as tables are opened before a statement transaction is started.
      However, e.g. CREATE TABLE ... AS SELECT starts a transaction in order
      to insert tuples into the new table. And if the subquery references
      an I_S table, all current tables and views can be opened in order to
      fill the I_S table on the fly. If a view is discovered, open will fail
      as it is instructed to open tables only (OPEN_TABLE_ONLY). This would
      cause the assert to be triggered.
      
      The assert was added in the patch for Bug#52044 and was therefore
      not in any released versions of the server.
      
      This patch fixes the problem by adjusting the assert to take into
      consideration the possibility of tables being opened as part of
      an I_S query. This is similar to what is already done for 
      close_tables_for_reopen().
      
      Test case added to information_schema_inno.test.
      10e78191
    • Alfranio Correia's avatar
      BUG#53452 Inconsistent behavior of binlog_direct_non_transactional_updates with · 1dbc24bc
      Alfranio Correia authored
      temp table
                  
      This patch introduces two key changes in the replication's behavior.
                  
      Firstly, it reverts part of BUG#51894 which puts any update to temporary tables
      into the trx-cache. Now, updates to temporary tables are handled according to
      the type of their engines as a regular table.
                  
      Secondly, an unsafe mixed statement, (i.e. a statement that access transactional
      table as well non-transactional or temporary table, and writes to any of them),
      are written into the trx-cache in order to minimize errors in the execution when
      the statement logging format is in use.
                  
      Such changes has a direct impact on which statements are classified as unsafe
      statements and thus part of BUG#53259 is reverted.
      1dbc24bc
  2. 19 Aug, 2010 4 commits
    • Alexander Barkov's avatar
      Bug#54916 GROUP_CONCAT + IFNULL truncates output · 7f06a971
      Alexander Barkov authored
      Problem: a few functions did not calculate their max_length correctly.
      This is an after-fix for WL#2649 Number-to-string conversions".
      
      Fix: changing the buggy functions to calculate max_length
      using fix_char_length() introduced in WL#2649,
      instead of setting max_length directly
      
        mysql-test/include/ctype_numconv.inc
           Adding new tests
      
        mysql-test/r/ctype_binary.result
           Adding new tests
      
        mysql-test/r/ctype_cp1251.result
           Adding new tests
      
        mysql-test/r/ctype_latin1.result
           Adding new tests
      
        mysql-test/r/ctype_ucs.result
           Adding new tests
      
        mysql-test/r/ctype_utf8.result
           Adding new tests
      
        mysql-test/t/ctype_utf8.test
          Including ctype_numconv
      
        sql/item.h
          - Introducing new method fix_char_length_ulonglong(),
          for the cases when length is potentially greater
          than UINT_MAX32. This method removes a few
          instances of duplicate code, e.g. in item_strfunc.cc.
          - Setting collation in Item_copy properly. This change
          fixes wrong metadata on client side in some cases, when
          "binary" instead of the real character set was reported.
      
        sql/item_cmpfunc.cc
          - Using fix_char_length() and max_char_length() methods,
          instead of direct access to max_length, to calculate
          item length properly.
          - Moving count_only_length() in COALESCE after
          agg_arg_charsets_for_string_result(). The old
          order was incorrect and led to wrong length
          calucation in case of multi-byte character sets.
          
        sql/item_func.cc
          Fixing that count_only_length() didn't work
          properly for multi-byte character sets.
          Using fix_char_length() and max_char_length()
          instead of direct access to max_length.
      
        sql/item_strfunc.cc
          - Using fix_char_length(), fix_char_length_ulonglong(),
          max_char_length() instead of direct access to max_length.
          - Removing wierd condition: "if (collation.collation->mbmaxlen > 0)",
          which is never FALSE.
      7f06a971
    • Jon Olav Hauglid's avatar
      Bug #56085 Embedded server tests fails with assert in · 24c991ba
      Jon Olav Hauglid authored
                 check_if_table_exists()
      
      This assert was triggered when the server tried to load plugins
      while running in embedded server mode. In embedded server mode,
      check_if_table_exists() was used to check if mysql.plugin existed
      so that ER_NO_SUCH_TABLE could be silently ignored.
      The problem was that this check was done without acquiring a metadata
      lock on mysql.plugin first. This triggered the assert.
      
      This patch fixes the problem by removing the call to
      check_if_table_exists() from plugin_load(). Instead an error handler
      which traps ER_NO_SUCH_TABLE is installed before trying to open
      mysql.plugin when running in embedded server mode.
      
      No test coverage added since this assert was triggered by 
      existing tests running in embedded server mode.
      
      
      sql/sql_base.cc:
        Renamed Prelock_error_handler to No_such_table_error_handler
        and moved the declaration to sql_base.h to make it usable
        in plugin_load().
      sql/sql_base.h:
        Renamed Prelock_error_handler to No_such_table_error_handler
        and moved the declaration to sql_base.h to make it usable
        in plugin_load().
      sql/sql_plugin.cc:
        Removed call to check_if_table_exists() used to check for mysql.plugin 
        in plugin_load() for embedded server. Instead install error handler
        which traps ER_NO_SUCH_TABLE during open_and_lock_tables().
      24c991ba
    • Bernt M. Johnsen's avatar
    • Alexander Barkov's avatar
      Backporting Bug#32391 Character sets: crash with --character-set-server · 3d5a6131
      Alexander Barkov authored
      from mysql-trunk-bugfixing (5.6.1-m5) from mysql-5.5-bugfixing (5.5.6-m3).
      3d5a6131
  3. 18 Aug, 2010 9 commits
  4. 17 Aug, 2010 10 commits
    • Joerg Bruehe's avatar
      Merge the fix for bug#55015. · 31bc7673
      Joerg Bruehe authored
      31bc7673
    • Marko Mäkelä's avatar
      A non-functional change: · b1d455a5
      Marko Mäkelä authored
      dict_load_index_low(): Rename the parameter "cached" to "allocated"
      and clarify the comments.
      b1d455a5
    • Vasil Dimov's avatar
      Make main.endspace more deterministic · 2dbf375d
      Vasil Dimov authored
      Followup to vasil.dimov@oracle.com-20100817063430-inglmzgdtj95t29d
      which didn't fully fix the test because the order of the returned
      rows was different in embedded and non-embedded version. So the only
      way to fix this is to add an ORDER BY clause.
      2dbf375d
    • Magne Mahre's avatar
      Bug #54850 rpl_ndb.rpl_ndb_stm_innodb and · d93ff051
      Magne Mahre authored
                 rpl_ndb.rpl_ndb_2other fails
      
      The two regressions tests failed after WL#5349 was
      pushed, since they were writted with the implicit
      requirement that MyISAM is the default storage engine.
      
      Adding --default-storage-engine=MyISAM as startup
      parameter, to mimic the pre-wl#5349 situation.
      
      
      mysql-test/suite/rpl_ndb/t/disabled.def:
        Re-enabling rpl_ndb_stm_innodb and rpl_ndb_2other
      mysql-test/suite/rpl_ndb/t/rpl_ndb_2other-slave.opt:
        Setting MyISAM as default storage engine
        explicitly
      mysql-test/suite/rpl_ndb/t/rpl_ndb_stm_innodb-slave.opt:
        The slave also needs to be started with
        MyISAM as default engine.
      d93ff051
    • Jimmy Yang's avatar
      Fix bug #53496 Use Lock_time in slow query log output for InnoDB row · 064914db
      Jimmy Yang authored
      lock wait time. Including the InnoDB lock time in the exiting "Lock_time"
      output.
      064914db
    • Vasil Dimov's avatar
      Adjust endspace.result · 148dd69d
      Vasil Dimov authored
      This is a followup to vasil.dimov@oracle.com-20100816142329-yimenbuktd416z1a
      which improved the sampling algorithm. The endspace test is non-deterministic
      because it does not include ORDER BY clause in its queries.
      148dd69d
    • Vasil Dimov's avatar
      Adjust type_bit_innodb.result · b2b41eda
      Vasil Dimov authored
      This is a followup to vasil.dimov@oracle.com-20100816142329-yimenbuktd416z1a
      which improved the sampling algorithm.
      b2b41eda
    • Vasil Dimov's avatar
      Adjust rowid_order_innodb.result · 3e6add94
      Vasil Dimov authored
      This is a followup to vasil.dimov@oracle.com-20100816142329-yimenbuktd416z1a
      which improved the sampling algorithm.
      3e6add94
    • Vasil Dimov's avatar
      Adjust innodb_gis.result · c3070b12
      Vasil Dimov authored
        
      This is a followup to vasil.dimov@oracle.com-20100816142329-yimenbuktd416z1a
      which improved the sampling algorithm.
      c3070b12
    • Vasil Dimov's avatar
      Adjust innodb_mysql.result · 9dec2223
      Vasil Dimov authored
      This is a followup to vasil.dimov@oracle.com-20100816142329-yimenbuktd416z1a
      which improved the sampling algorithm. I have manually checked that the new
      values are actually the correct ones, for example:
      -rows	16
      +rows	32
      the number of rows returned by the query is 32.
      9dec2223
  5. 16 Aug, 2010 9 commits
    • Mattias Jonsson's avatar
      merge · 4417be8f
      Mattias Jonsson authored
      4417be8f
    • Mattias Jonsson's avatar
    • Vasil Dimov's avatar
      Fix Bug#53761 RANGE estimation for matched rows may be 200 times different · a867677e
      Vasil Dimov authored
      Improve the range estimation algorithm.
      
      Previously:
      For a given level the algo knows the number of pages in the requested range and the n
      
      With this change:
      Same idea, but peek a few (10) of the intermediate pages to get a better estimate of 
      
      In the bug report one of the examples has a btree with a snippet of the leaf level li
      page1(899 records), page2(1 record), page3(1 record), page4(1 record)
      so when trying to estimate, the previous algo, assumed there are average (899+1)/2=45
      Fix Bug#53761 RANGE estimation for matched rows may be 200 times different
      
      Improve the range estimation algorithm.
      
      Previously:
      For a given level the algo knows the number of pages in the requested range
      and the number of records on the leftmost and the rightmost page. Then it
      assumes all pages in between contain the average between the two border pages
      and multiplies this average number by the number of intermediate pages.
      
      With this change:
      Same idea, but peek a few (10) of the intermediate pages to get a better
      estimate of the average number of records per page. If there are less than 10
      intermediate pages then all of them will be scanned and the result will be
      precise, not an estimation.
      
      In the bug report one of the examples has a btree with a snippet of the leaf
      level like this:
      page1(899 records), page2(1 record), page3(1 record), page4(1 record)
      so when trying to estimate, the previous algo, assumed there are average
      (899+1)/2=450 records per page which went terribly wrong. With this change
      page2 and page3 will be read and the exact number of records will be returned.
      
      Approved by:	Sunny (rb://401)
      a867677e
    • Magne Mahre's avatar
      Bug#55001 Change in behavior: thread_concurrency (docs, · 0f5b77cb
      Magne Mahre authored
                example files)
      
      The system variable 'thread_concurrency' has been
      (re-)enabled on all platforms, to prevent startup
      errors.
      
      'thread_concurrency' is unused and has no effect,
      on any platform, in MySQL 5.1 and later versions.  It 
      will be deprecated, and removed, in context of 
      worklog WL#5265
      
      
      mysql-test/include/have_thread_concurrency.inc:
        include/have_thread_concurrency.inc was only needed
        to support platforms that didn't have the
        thread_concurrency variable available.  Since the
        variable is now available on all platforms, the file
        is removed.
      0f5b77cb
    • Mattias Jonsson's avatar
      merge · eb2e8df9
      Mattias Jonsson authored
      eb2e8df9
    • Mattias Jonsson's avatar
      Bug#49907: ALTER TABLE ... TRUNCATE PARTITION does not wait for · 36c82480
      Mattias Jonsson authored
                 locks on the table
      
      Fixing the partitioning specifics after TRUNCATE TABLE in
      bug-42643 was fixed.
      
      Reorganize of code to decrease the size of the giant switch
      in mysql_execute_command, and to prepare for future parser
      reengineering. Moved code into Sql_statement objects.
      
      Updated patch according to davi's review comments.
      
      libmysqld/CMakeLists.txt:
        Added new files.
      libmysqld/Makefile.am:
        Added new files.
      mysql-test/r/not_partition.result:
        now returning error on partitioning commands
        if partitioning is not enabled.
      mysql-test/r/partition_disabled.result:
        There is no partition handlerton, so it cannot
        find the specified engine in the .frm file.
      mysql-test/r/partition_truncate.result:
        Updated test results.
      mysql-test/suite/parts/inc/partition_mgm.inc:
        Added check that TRUNCATE PARTITION does not delete on failure.
      mysql-test/suite/parts/r/partition_debug_sync_innodb.result:
        updated results.
      mysql-test/suite/parts/r/partition_mgm_lc0_archive.result:
        updated results.
      mysql-test/suite/parts/r/partition_mgm_lc1_archive.result:
        updated results.
      mysql-test/suite/parts/r/partition_mgm_lc2_archive.result:
        updated results.
      mysql-test/suite/parts/t/partition_debug_sync_innodb.test:
        Test case for this bug.
      mysql-test/t/not_partition.test:
        Added check for TRUNCATE PARTITION without partitioning.
      mysql-test/t/partition_truncate.test:
        Added test of TRUNCATE PARTITION on non partitioned table.
      sql/CMakeLists.txt:
        Added new files.
      sql/Makefile.am:
        Added new files.
      sql/datadict.cc:
        Moved out the storage engine check into an own
        function, including assert for lock.
      sql/datadict.h:
        added dd_frm_storage_engine.
      sql/sql_alter_table.cc:
        moved the code for SQLCOM_ALTER_TABLE in mysql_execute_command
        into its own file, and using the Sql_statement object to
        prepare for future parser reengineering.
      sql/sql_alter_table.h:
        Created Sql_statement object for ALTER TABLE.
      sql/sql_lex.cc:
        resetting m_stmt.
      sql/sql_lex.h:
        Temporary hack for forward declaration of enum_alter_table_change_level.
      sql/sql_parse.cc:
        Moved out ALTER/ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE
        from the giant switch into their own Sql_statement
        objects.
      sql/sql_parse.h:
        Exporting check_merge_table_access.
      sql/sql_partition_admin.cc:
        created Sql_statement for
        ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR/TRUNCATE
        PARTITION. To be able to reuse the TABLE equivalents.
      sql/sql_partition_admin.h:
        Added Sql_statement of partition admin statements.
      sql/sql_table.cc:
        Moved table maintenance code into sql_table_maintenance.cc
      sql/sql_table.h:
        Moved table maintenance code into sql_table_maintenance.h
        exporting functions used by sql_table_maintenance.
      sql/sql_table_maintenance.cc:
        Moved table maintenance code from sql_table.cc
      sql/sql_table_maintenance.h:
        Sql_statement objects for ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE.
        Also declaring the keycache functions.
      sql/sql_truncate.cc:
        Moved code from SQLCOM_TRUNCATE in mysql_execute_command into
        Truncate_statement::execute.
        Added check for partitioned table on TRUNCATE PARTITION.
        Moved locking fix for partitioned table into
        Alter_table_truncate_partition::execute.
      sql/sql_truncate.h:
        Truncate_statement declaration (sub class of Sql_statement).
      sql/sql_yacc.yy:
        Using the new Sql_statment objects.
      36c82480
    • Alexander Nozdrin's avatar
      Auto-merge from mysql-5.5. · 49c014a4
      Alexander Nozdrin authored
      49c014a4
    • Alexander Nozdrin's avatar
      Auto-merge from mysql-5.5. · 71636efa
      Alexander Nozdrin authored
      71636efa
    • Alexander Nozdrin's avatar
      Auto-merge from mysql-5.5-stage. · c187598c
      Alexander Nozdrin authored
      c187598c
  6. 14 Aug, 2010 1 commit
    • Evgeny Potemkin's avatar
      Bug#49746: Const expression caching led to NDB not using engine condition · 3c282ea2
      Evgeny Potemkin authored
      pushdown.
            
      NDB supports only a limited set of item nodes for use in engine condition
      pushdown. Because of this adding cache for const expression effectively
      disabled this optimization.
            
      The ndb_serialize_cond function is extended to support Item_cache and treat
      it as a constant values.
      A helper function called ndb_serialize_const is added. It is used to create
      Ndb_cond value node from given const item.
      
      
      mysql-test/suite/ndb/t/disabled.def:
        Bug#49746: Const expression caching led to NDB not using engine condition
        pushdown.
        Enabled ndb_condition_pushdown test after fixing appropriate bug.
      sql/ha_ndbcluster_cond.cc:
        Bug#49746: Const expression caching led to NDB not using engine condition
        pushdown.
        The ndb_serialize_cond function is extended to support Item_cache and treat
        it as a constant values.
        A helper function called ndb_serialize_const is added. It is used to create
        Ndb_cond value node from given const item.
      sql/item.cc:
        Bug#49746: Const expression caching led to NDB not using engine condition
        pushdown.
        The Item::cache_const_expr_analyzer function is adjusted to not create
        cache for Item_int_with_ref objects.
      sql/item.h:
        Bug#49746: Const expression caching led to NDB not using engine condition
        pushdown.
        The result_type() method is added to Item_cache class.
        The Item_cache_str now initializes its collation.
      3c282ea2
  7. 13 Aug, 2010 3 commits