1. 06 Jan, 2017 2 commits
    • Dmitry Lenev's avatar
      MDEV-9084 Calling a stored function from a nested select from temporary table... · e4978d26
      Dmitry Lenev authored
      MDEV-9084 Calling a stored function from a nested select from temporary table causes unpredictable behavior
      
      Cherry-pick: f4a0af070ce49abae60040f6f32e1074309c27fb
      Author: Dmitry Lenev <dmitry.lenev@oracle.com>
      Date:   Mon Jul 25 16:06:52 2016 +0300
      
        Fix for bug #16672723 "CAN'T FIND TEMPORARY TABLE".
      
        Attempt to execute prepared CREATE TABLE SELECT statement which used
        temporary table in the subquery in FROM clause and stored function
        failed with unwarranted ER_NO_SUCH_TABLE error. The same happened
        when such statement was used in stored procedure and this procedure
        was re-executed.
      
        The problem occurred because execution of such prepared statement/its
        re-execution as part of stored procedure incorrectly set
        Query_table_list::query_tables_own_last marker, indicating the last
        table which is directly used by statement. As result temporary table
        used in the subquery was treated as indirectly used/belonging to
        prelocking list and was not pre-opened by open_temporary_tables()
        call before statement execution. Thus causing ER_NO_SUCH_TABLE errors
        since our code assumes that temporary tables need to be correctly
        pre-opened before statement execution.
      
        This problem became visible only in version 5.6 after patches related to
        bug 11746602/27480 "EXTEND CREATE TEMPORARY TABLES PRIVILEGE TO ALLOW
        TEMP TABLE OPERATIONS" since they have introduced pre-opening of temporary
        tables for statements.
      
        Incorrect setting of Query_table_list::query_tables_own_last happened
        in LEX::first_lists_tables_same() method which is called by CREATE TABLE
        SELECT implementation as part of LEX::unlink_first_table(), which temporary
        excludes table list element for table being created from the query table
        list before handling SELECT part.
      
        LEX::first_lists_tables_same() tries to ensure that global table list of
        the statement starts with the first table list element from the first
        statement select. To do this it moves such table list element to the head
        of the global table list. If this table happens to be last directly-used
        table for the statement, query_tables_own_last marker is pointing to it.
        Since this marker was not updated when table list element was moved we
        ended up with all tables except the first table separated by it as if
        they were not directly used by statement (i.e. belonged to prelocked
        tables list).
      
        This fix changes code of LEX::first_lists_tables_same() to update
        query_tables_own_last marker in cases when it points to the table
        being moved. It is set to the table which precedes table being moved
        in this case.
      e4978d26
    • Kristian Nielsen's avatar
      MDEV-10271: Stopped SQL slave thread doesn't print a message to error log like IO thread does · 43378f36
      Kristian Nielsen authored
      Make the slave SQL thread always output to the error log the message "Slave
      SQL thread exiting, replication stopped in ..." whenever it previously
      outputted "Slave SQL thread initialized, starting replication ...".
      
      Before this patch, it was somewhat inconsistent in which cases the message
      would be output and in which not, depending on the exact time and cause of
      the condition that caused the SQL thread to stop.
      43378f36
  2. 05 Jan, 2017 3 commits
  3. 04 Jan, 2017 2 commits
  4. 03 Jan, 2017 1 commit
    • Marko Mäkelä's avatar
      MDEV-11694 InnoDB tries to create unused table SYS_ZIP_DICT · 80d5d145
      Marko Mäkelä authored
      MariaDB Server 10.0.28 and 10.1.19 merged code from Percona XtraDB
      that introduced support for compressed columns. Much but not all
      of this code was disabled by placing #ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
      around it.
      
      Among the unused but not disabled code is code to access
      some new system tables related to compressed columns.
      
      The creation of these system tables SYS_ZIP_DICT and SYS_ZIP_DICT_COLS
      would cause a crash in --innodb-read-only mode when upgrading
      from an earlier version to 10.0.28 or 10.1.19.
      
      Let us remove all the dead code related to compressed columns.
      Users who already upgraded to 10.0.28 and 10.1.19 will have the two
      above mentioned empty tables in their InnoDB system tablespace.
      Subsequent versions of MariaDB Server will completely ignore those tables.
      80d5d145
  5. 01 Jan, 2017 2 commits
    • Elena Stepanova's avatar
      MDEV-10100 main.pool_of_threads fails sporadically in buildbot · 3871477c
      Elena Stepanova authored
      The patch fixes two test failures:
      - on slow builders, sometimes a connection attempt which should
        fail due to the exceeded number of thread_pool_max_threads
        actually succeeds;
      - on even slow builders, MTR sometimes cannot establish the
        initial connection, and check-testcase fails prior to the
        test start
      
      The problem with check-testcase was caused by connect-timeout=2
      which was set for all clients in the test config file. On slow
      builders it might be not enough.
      There is no way to override it for the pre-test check, so it needed
      to be substantially increased or removed.
      
      The other problem was caused by a race condition between sleeps
      that the test performs in existing connections and the connect
      timeout for the connection attempt which was expected to fail.
      If sleeps finished before the connect-timeout was exceeded, it
      would allow the connection to succeed.
      
      To solve each problem without making the other one worse,
      connect-timeout should be configured dynamically during the test.
      Due to the nature of the test (all connections must be busy
      at the moment when we need to change the timeout, and cannot execute
      SET GLOBAL ...), it needs to be done independently from the server.
      
      The solution:
      - recognize 'connect_timeout' as a connection option in mysqltest's
        "connect" command;
      - remove connect-timeout from the test configuration file;
      - use the new connect_timeout option for those connections which
        are expected to fail;
      - re-arrange the test flow to allow running a huge SLEEP
        without affecting the test execution time (because it would be
        interrupted after the main test flow is finished).
      
      The test is still subject to false negatives, e.g. if the connection
      fails due to timeout rather than due to the exceeded number of
      allowed threads, or if the connection on extra port succeeds due
      to a race condition and not because the special logic for the extra
      port. But those false negatives have always been possible there
      on slow builders, they should not be critical because faster builders
      should catch such failures if they appear.
      3871477c
    • Sachin Setiya's avatar
      MDEV-11636 Extra persistent columns on slave always gets NULL in RBR · d02a77bc
      Sachin Setiya authored
      Problem:- In replication if slave has extra persistent column then these
      column are not computed while applying write-set from master.
      
      Solution:- While applying row events from server, we will generate values
      for extra persistent columns.
      d02a77bc
  6. 27 Dec, 2016 1 commit
  7. 19 Dec, 2016 1 commit
    • Marko Mäkelä's avatar
      MDEV-11602 InnoDB leaks foreign key metadata on DDL operations · 9f863a15
      Marko Mäkelä authored
      Essentially revert MDEV-6759, which addressed a double free of memory
      by removing the freeing altogether, introducing the memory leaks.
      No double free was observed when running the test suite -DWITH_ASAN.
      
      Replace some mem_heap_free(foreign->heap) with dict_foreign_free(foreign)
      so that the calls can be located and instrumented more easily when needed.
      9f863a15
  8. 10 Dec, 2016 1 commit
    • Vicențiu Ciorbaru's avatar
      MDEV-11533: Roles with trailing white spaces are not cleared correctly · eb4f2e06
      Vicențiu Ciorbaru authored
      Role names with trailing whitespaces are truncated in length as of
      956e92d9 to fix MDEV-8609. The problem
      is that the code that creates role mappings expects the string to be null
      terminated.
      
      Add the null terminator to account for that as well. In the future
      the rest of the code can be cleaned up to never assume c style strings
      but only LEX_STRINGS.
      eb4f2e06
  9. 09 Dec, 2016 1 commit
  10. 08 Dec, 2016 2 commits
    • Sergei Golubchik's avatar
      MDEV-10713: signal 11 error on multi-table update - crash in... · 03dabfa8
      Sergei Golubchik authored
      MDEV-10713: signal 11 error on multi-table update - crash in handler::increment_statistics or in make_select or assertion failure pfs_thread == ((PFS_thread*) pthread_getspecific((THR_PFS)))
      
      Different fix. Don't allow Item_func_sp to be evaluated unless
      all tables are prelocked.
      
      Extend the test case to make sure Item_func_sp::val_str is called
      (the table must have at least one row for that).
      03dabfa8
    • Sergei Golubchik's avatar
      Revert "MDEV-10713: signal 11 error on multi-table update - crash in... · ab65db6d
      Sergei Golubchik authored
      Revert "MDEV-10713: signal 11 error on multi-table update - crash in handler::increment_statistics or in make_select or assertion failure pfs_thread == ((PFS_thread*) pthread_getspecific((THR_PFS)))"
      
      This reverts commit 035a5ac6.
      
      Two minor problems and one regression:
      1. caching the value in str_result. Other Item methods may use it,
         destroying the cache. See, for example, Item::save_in_field, where
         str_result is moved to use a local buffer (this failed main.grant)
      2. Item_func_conv_charset::safe is now set too late, it's initialized
         only in val_str() but checked before that, this failed many tests
         in optimized builds.
      
      to fix 1 - use tmp_result instead of str_result, to fix 2, use
      the else branch in the Item_func_conv_charset constructor to set
      safe purely from charset properties.
      
      But this introduces a regression, constant strings can no longer be
      converted, say, from utf8 to latin1 (because 'safe' will be false).
      This fails few tests too. There is no way to fix it without reverting
      the commit and converting constants, as before, in the constructor.
      ab65db6d
  11. 07 Dec, 2016 6 commits
  12. 06 Dec, 2016 5 commits
  13. 05 Dec, 2016 2 commits
    • Sergei Golubchik's avatar
      MDEV-10293 'setupterm' was not declared in this scope · 18cdff67
      Sergei Golubchik authored
      Check for readline before checking for curses headers, because
      MYSQL_CHECK_READLINE fails when curses is not found, but
      CHECK_INCLUDE_FILES simply remembers the fact and continues.  So if
      there's no curses, MYSQL_CHECK_READLINE will abort, the user will then
      installs curses and continue the build. Thus, CHECK_INCLUDE_HEADERS
      will remember that there is no curses, but other checks from
      MYSQL_CHECK_READLINE will remember that curses are there. It will
      result in inconsistent HAVE_xxx defines.
      18cdff67
    • Sergei Golubchik's avatar
      02d153c7
  14. 04 Dec, 2016 4 commits
  15. 03 Dec, 2016 3 commits
  16. 02 Dec, 2016 2 commits
  17. 01 Dec, 2016 2 commits