1. 25 Feb, 2021 3 commits
    • Dmitry Shulga's avatar
      MDEV-24860: Incorrect behaviour of SET STATEMENT in case it is executed as a prepared statement · 259e5243
      Dmitry Shulga authored
      Running statements with SET STATEMENT FOR clause is handled incorrectly in
      case the whole statement is executed in prepared statement mode.
      For example, running of the following statement
        SET STATEMENT sql_mode = 'NO_ENGINE_SUBSTITUTION' FOR CREATE TABLE t1 AS SELECT CONCAT('abc') AS c1;
      results in different definition of the table t1 depending on whether
      the statement is executed as a prepared or as a regular statement.
      
      In first case the column c1 is defined as
        `c1` varchar(3) DEFAULT NULL
      in the last case the column c1 is defined as
        `c1` varchar(3) NOT NULL
      
      Different definition for the column c1 arise due to the fact that
      a value of the data memeber Item_func_concat::maybe_null depends on
      whether strict mode is on or off. Below is definition of the method
      fix_fields() of the class Item_str_func that is base class for the
      class Item_func_concat that is created on parsing the
      SET STATEMENT FOR clause.
      
      bool Item_str_func::fix_fields(THD *thd, Item **ref)
      {
        bool res= Item_func::fix_fields(thd, ref);
        /*
          In Item_str_func::check_well_formed_result() we may set null_value
          flag on the same condition as in test() below.
        */
        maybe_null= maybe_null || thd->is_strict_mode();
        return res;
      }
      
      Although the clause SET STATEMENT sql_mode = 'NO_ENGINE_SUBSTITUTION' FOR
      is parsed on PREPARE phase during processing of the prepared statement,
      real setting of the sql_mode system variable is done on EXECUTION phase.
      On the other hand, the method Item_str_func::fix_fields is called on PREPARE
      phase. In result, thd->is_strict_mode() returns true during calling the method
      Item_str_func::fix_fields(), the data member maybe_null is assigned the value
      true and column c1 is defined as DEFAULT NULL.
      
      To fix the issue the system variables listed in the SET STATEMENT FOR clause
      are set at the beginning of handling the PREPARE phase just right before
      calling  the function check_prepared_statement() and their original values
      restored immediate after return from this function.
      
      Additionally, to avoid code duplication the source code used in the function
      mysql_execute_command for setting variables, specified by SET STATEMENT
      clause, were extracted to the standalone functions
      run_set_statement_if_requested(). This new function is called from
      the function  mysql_execute_command() and the method
      Prepared_statement::prepare().
      259e5243
    • Varun Gupta's avatar
      0a95c922
    • Daniel Black's avatar
      MDEV-24728: Debian include client caching_sha2_password plugin · 577c970c
      Daniel Black authored
      Backport of 4bc31a90
      
      Include client libraries for auth caching_sha2_password and
      sha256_password in the libmariadb3 client library package.
      577c970c
  2. 24 Feb, 2021 1 commit
    • Daniel Black's avatar
      MDEV-23510: arm64 lf_hash alignment of pointers · 1635686b
      Daniel Black authored
      volatile != atomic.
      
      volatile has no memory barrier schemantics, its for mmaped IO
      so lets allow some optimizer gains and stop pretending it helps
      with memory atomicity.
      
      The MDEV lists a SEGV an assumption is made that an address was
      partially read. As C packs structs strictly in order and on arm64 the
      cache line size is 128 bits. A pointer (link - 64 bits), followed
      by a hashnr (uint32 - 32 bits), leaves the following key (uchar *
      64 bits), neither naturally aligned to any pointer and worse, split
      across a cache line which is the processors view of an atomic
      reservation of memory.
      
      lf_dynarray_lvalue is assumed to return a 64 bit aligned address.
      
      As a solution move the 32bit hashnr to the end so we don't get the
      *key pointer split across two cache lines.
      
      Tested by: Krunal Bauskar
      Reviewer: Marko Mäkelä
      1635686b
  3. 23 Feb, 2021 2 commits
  4. 22 Feb, 2021 13 commits
    • Sergei Golubchik's avatar
      fix binlog_xa_recover test · 3c021485
      Sergei Golubchik authored
      1. wait for the binlog thread to reach the certain state, don't use
         a debug_sync that's incorrectly placed to detect the state
      2. no need to do a (non-deterministic) `show binlog events` to verify
         what is guaranteed by the directly preceding line
      3c021485
    • Sergei Golubchik's avatar
      cleanup: renames, no need to create a new .inc file · bb98c6bf
      Sergei Golubchik authored
      if it's the whole content of a test anyway.
      bb98c6bf
    • Sergei Golubchik's avatar
      mtr fixes for old (5.10.1) perl · 7fe351ab
      Sergei Golubchik authored
      7fe351ab
    • Sergei Golubchik's avatar
      support for mtr --valgdb · 77c23c62
      Sergei Golubchik authored
      add a new "debugger" to mtr, that runs the executable
      under valgrind in gdb. valgrind pid is auto-detected,
      but the delay (sleep) and vgdb path are hard-coded for now
      77c23c62
    • Sergei Golubchik's avatar
      unify mtr handling of debuggers · feacc0aa
      Sergei Golubchik authored
      "debugger" is anything that wraps execution of a target
      binary (mysqld or mysqltest). Currently the list includes:
      gdb, ddd, dbx, lldb, valgrind, strace, ktrace, rr,
      devenv, windbg, vsjitdebugger.
      
      for every debugger xxx, mtr will recognize four options:
      --xxx, --boot-xxx, --manual-xxx, --client-xxx.
      They all support an optional "=string" argument. String
      being a semicolon-separated list of commands (e.g. for gdb)
      or one (not semicolon-separated) command line of options
      (e.g. for valgrind). Or both (e.g. --gdb='-quiet -nh;info files'
      
      In embedded both --xxx and --client-xxx work.
      
      Functionality changed/removed:
      * --rr-args is gone
      * --rr-dir is gone
      * --manual-debug is gone
      * --debugger={devenv|vc|windbg|vc_express|vsjitdebugger} is gone
      * --strace-option is gone
      * --stracer={strace|ktrace} is gone
      * --valgrind only enables it for the server, not for everything
      * --valgrind-all is gone
      * --valgrind-mysqltest is gone
      * --valgrind-mysqld is gone
      * --valgrind-options is gone
      * --valgrind-option is gone
      * --valgrind-path is gone
      * --callgrind is gone
      * one cannot combine --valgrind --gdb anymore
      * valgrind report doesn't add a fake test line to the output
      * vc and vcexpress on windows are no longer supported
      feacc0aa
    • Sergei Golubchik's avatar
      cleanup: remove dead code in mtr · 3b0b4e61
      Sergei Golubchik authored
      3b0b4e61
    • Sergei Golubchik's avatar
      cleanup: stat tables · c4f01334
      Sergei Golubchik authored
      don't allocate Column_statistics_collected objects that won't
      be used.
      
      minor style fixes (StringBuffer<>, etc)
      c4f01334
    • Sergei Golubchik's avatar
      MDEV-23753: SIGSEGV in Column_stat::store_stat_fields · 06a791aa
      Sergei Golubchik authored
      only collect persistent stats for columns explicitly listed
      by the user in the  ANALYZE TABLE PERSISTENT FOR COLUMNS (...)
      clause. The engine can extend table->read_set as much as
      it wants, it should not affect the collected statistics.
      
      Test case from the 3b94309a applies - it used to crash,
      because ha_partition extended table->read_set after the loop that
      initialized some objects based on bits in the read_set but before the
      loop that used these objects based on bits in the read_set.
      06a791aa
    • Sergei Golubchik's avatar
      Revert "MDEV-23753: SIGSEGV in Column_stat::store_stat_fields" · caad32ca
      Sergei Golubchik authored
      This reverts the commit 3b94309a but keeps the test
      
      Because the fix is a hack that isn't supposed to do anything,
      and relies on a side-effect of rnd_init inside ha_partition.
      
      A different fix is coming up.
      caad32ca
    • Sergei Golubchik's avatar
      a638f157
    • Daniel Bartholomew's avatar
      bump the VERSION · 6aa90974
      Daniel Bartholomew authored
      6aa90974
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-24863 AHI entries mismatch with the index while reloading the evicted tables. · d7fc4f52
      Thirunarayanan Balathandayuthapani authored
      - This is caused by commit ad6171b9
      (MDEV-22456). InnoDB reloads the evicted table again from dictionary.
      In that case, AHI entries and current index object mismatches
      happens. When index object mismatches then InnoDB should drop
      the page hash AHI entries for the block. In
      btr_search_drop_page_hash_index(), InnoDB should take exclusive
      lock on the AHI latch if index is already freed to avoid the
      freed memory access during buf_pool_resize()
      d7fc4f52
    • Jan Lindström's avatar
      374f4c3f
  5. 18 Feb, 2021 2 commits
  6. 17 Feb, 2021 3 commits
  7. 16 Feb, 2021 4 commits
    • Marko Mäkelä's avatar
      MDEV-15641 fixup: Make the test faster · 067465cd
      Marko Mäkelä authored
      Let us avoid the excessive allocation of explicit record locks
      (a work-around of MDEV-24813) so that the test will execute
      much faster under AddressSanitizer, MemorySanitizer, Valgrind.
      067465cd
    • Varun Gupta's avatar
      MDEV-23291: SUM column from a derived table returns invalid values · 3544643f
      Varun Gupta authored
      The issue here was the read_set bitmap was not set for a field which
      was used as a reference in an inner select.
      We need to make sure that if we are in an inner select and we have
      references from outer select then we update the table bitmaps for
      such references.
      
      Introduced a function in the class Item_subselect that would
      update bitmaps of table for the references within a
      subquery that are defined in outer selects.
      3544643f
    • Varun Gupta's avatar
      MDEV-24779: main.subselect fails in buildbot with --ps-protocol · 7e9a6b7f
      Varun Gupta authored
      Follow-up fix to commit 26f50335(MDEV-23449)
      The GROUP BY clause inside IN/ALL/ANY subquery is removed
      when there is no aggregate function or HAVING clause in the subquery.
      
      When the GROUP BY clause is removed, a subquery can also be removed
      if it part of the GROUP BY clause. This is done inside the function
      remove_redundant_subquery_clauses. Here we walk over the GROUP BY list
      and remove a subselect from its unit via the callback function
      eliminate_subselect_processor.
      
      The issue here was that when the query was being re-executed it was trying
      to reinitialize the select that was removed as stated above.
      This is not required, so the fix would be to remove select_lex
      both from tree lex structure and the global list of nodes so that
      we don't do the reinitialization again.
      7e9a6b7f
    • Varun Gupta's avatar
      MDEV-19474: Histogram statistics are used even with optimizer_use_condition_selectivity=3 · a461e4d3
      Varun Gupta authored
      The issue here was histogram statistics were being used even when
      the level of optimizer_use_condition_selectivity doesn't allow
      usage of statistics from histogram.
      
      The histogram statistics are read for a table only when
      optimizer_use_condition_selectivity > 3. But the TABLE structure can be
      stored in the internal table cache and be reused for the next query.
      So in this case the histogram statistics will be available for the next query.
      
      The fix would be to make sure to use the histogram statistics only when
      optimizer_use_condition_selectivity > 3.
      a461e4d3
  8. 15 Feb, 2021 2 commits
  9. 12 Feb, 2021 3 commits
  10. 11 Feb, 2021 2 commits
    • Julius Goryavsky's avatar
      MDEV-19950: Galera test failure on galera_ssl_upgrade · 95003eab
      Julius Goryavsky authored
      The test requires adaptation for MariaDB, which is done
      in this patch. In addition, this patch includes a fix for
      the SST script startup code that adds escaping for special
      characters on the command line (in case they are contained
      in the arguments to mysqld). The fix does not require
      separate tests, as the required tests are already part
      of the mtr suite for Galera.
      95003eab
    • Jan Lindström's avatar
      Update Galera disabled.def · 362dcf9e
      Jan Lindström authored
      362dcf9e
  11. 08 Feb, 2021 1 commit
  12. 07 Feb, 2021 1 commit
    • Marko Mäkelä's avatar
      Make innodb_gis.rtree_purge run faster · 739abf51
      Marko Mäkelä authored
      A locking SELECT from an InnoDB table is very slow especially
      in debug builds. Replacing some INSERT...SELECT should not reduce
      the test coverage, because the test will still do DELETE
      (which will acquire explicit record locks).
      739abf51
  13. 05 Feb, 2021 3 commits