1. 04 Oct, 2022 3 commits
  2. 03 Oct, 2022 2 commits
    • Oleksandr Byelkin's avatar
      Merge branch '10.5' into 10.6 · fe449aff
      Oleksandr Byelkin authored
      fe449aff
    • Rucha Deodhar's avatar
      Crash in INSERT...SELECT..RETURNING with subquery · 7865c8c9
      Rucha Deodhar authored
      Underlying causes of all bugs mentioned below are same. This patch fixes
      all of them:
      1) MDEV-25028: ASAN use-after-poison in
      base_list_iterator::next or Assertion `sl->join == 0' upon
      INSERT .. RETURNING via PS
      2) MDEV-25187: Assertion `inited == NONE || table->open_by_handler'
      failed or Direct leak in init_dynamic_array2 upon INSERT .. RETURNING
      and memory leak in init_dynamic_array2
      3) MDEV-28740: crash in INSERT RETURNING subquery in prepared statements
      4) MDEV-27165: crash in base_list_iterator::next
      5) MDEV-29686: Assertion `slave == 0' failed in
      st_select_lex_node::attach_single
      
      Analysis:
      consider this statement:
      INSERT(1)...SELECT(2)...(SELECT(3)...) RETURNING (SELECT(4)...)
      
      When RETURNING is encountered, add_slave() changes how selects are linked.
      It makes the builtin_select(1) slave of SELECT(2). This causes
      losing of already existing slave(3) (which is nested select of SELECT of
      INSERT...SELECT). When really, builtin_select (1) shouldn't be slave to
      SELECT(2) because it is not nested within it. Also, push_select() to use
      correct context also changed how select are linked.
      During reinit_stmt_before_use(), we expect the selects to
      be cleaned-up and have join=0. Since these selects are not linked correctly,
      clean-up doesn't happen correctly so join is not NULL. Hence the crash.
      
      Fix:
      IF we are parsing RETURNING, make is_parsing_returning= true for
      current select. get rid of add_slave(). In place of push_select(), used
      push_context() to have correct context (the context of builtin_select)
      to resolve items in item_list. And add these items to item_list of
      builtin_select.
      7865c8c9
  3. 02 Oct, 2022 2 commits
  4. 01 Oct, 2022 3 commits
  5. 30 Sep, 2022 8 commits
  6. 29 Sep, 2022 3 commits
    • Sergei Golubchik's avatar
      correctness assert · 6b685ea7
      Sergei Golubchik authored
      thd_get_ha_data() can be used without a lock, but only from the
      current thd thread, when calling from anoher thread it *must*
      be protected by thd->LOCK_thd_data
      
      * fix group commit code to take thd->LOCK_thd_data
      * remove innobase_close_connection() from the innodb background thread,
        it's not needed after 87775402 and was failing the assert with
        current_thd==0
      6b685ea7
    • Sergei Golubchik's avatar
      fix sporadic failures on main.kill · f9605eb2
      Sergei Golubchik authored
      KILL QUERY ID 0 was sometimes finding con3 that was still in the process
      of disconnecting and had query_id==0 (as it didn't run any queries)
      f9605eb2
    • Igor Babaev's avatar
      MDEV-29361 Infinite recursive calls when detecting CTE dependencies · 28ae3618
      Igor Babaev authored
      This patch resolves the problem of improper name resolution of table
      references to embedded CTEs for some queries. This improper binding could
      lead to
        - infinite sequence of calls of recursive functions
        - crashes due to resolution of null pointers
        - wrong result sets returned by queries
        - bogus error messages
      
      If the definition of a CTE contains with clauses then such CTE is called
      embedding CTE while CTEs from the with clauses are called embedded CTEs.
      If a table reference used in the definition of an embedded CTE cannot be
      resolved within the unit that contains this reference it still may be
      resolved against a CTE definition from the with clause with one of the
      embedding CTEs.
      A table reference can be resolved against a CTE definition if it used in
      the the scope of this definition and it refers to the name of the CTE.
      Table reference t is in the scope of the CTE definition of CTE cte if
      - the definition of cte is an element of a with clause declared as
        RECURSIVE and the reference t belongs either to the unit to which
        this with clause is attached or to one of the elements of this clause
      - the definition of cte is an element of a with clause without RECURSIVE
        specifier and the reference t belongs either to the unit to which this
        with clause is attached or to one of the elements from this clause that
        are placed before the definition of cte.
      If a table reference can be resolved against several CTE definitions then
      it is bound to the most embedded.
      
      The code before this patch not always resolved table references used in
      embedded CTE according to the above rules.
      
      Approved by Oleksandr Byelkin <sanja@mariadb.com>
      28ae3618
  7. 28 Sep, 2022 6 commits
    • Sergei Golubchik's avatar
      MDEV-29368 Assertion `trx->mysql_thd == thd' failed in innobase_kill_query... · de130323
      Sergei Golubchik authored
      MDEV-29368 Assertion `trx->mysql_thd == thd' failed in innobase_kill_query from process_timers/timer_handler and use-after-poison in innobase_kill_query
      
      This is a 10.5 version of 9b750dcb, fix for
      MDEV-23536 Race condition between KILL and transaction commit
      
      InnoDB needs to remove trx from thd before destroying it (trx), otherwise
      a concurrent KILL might get a pointer from thd to a destroyed trx.
      
      ha_close_connection() should allow engines to clear ha_data in
      hton->on close_connection(). To prevent the engine from being unloaded
      while hton->close_connection() is running, we remove the lock from
      ha_data and unlock the plugin manually.
      de130323
    • Sergei Golubchik's avatar
      cleanup: kill test · 74ac683a
      Sergei Golubchik authored
      split it into debug and non-debug tests
      74ac683a
    • Sergei Golubchik's avatar
      debug_sync: ignore "sort" kills and disconnects · d7d3ad69
      Sergei Golubchik authored
      only "hard" kills will now interrupt debug_sync waits.
      this is needed to have debug_sync points that work during disconnect
      d7d3ad69
    • Mikhail Chalov's avatar
      Use memory safe snprintf() in Connect Engine and elsewhere (#2210) · 9de9f105
      Mikhail Chalov authored
      Continue with similar changes as done in 19af1890 to replace sprintf(buf, ...)
      with snprintf(buf, sizeof(buf), ...), specifically in the "easy" cases where buf
      is allocated with a size known at compile time.
      
      All new code of the whole pull request, including one or several files that are
      either new files or modified ones, are contributed under the BSD-new license.  I
      am contributing on behalf of my employer Amazon Web Services, Inc.
      9de9f105
    • Daniel Black's avatar
      MDEV-29614 mariadb-upgrade calls mysql and mysql-check (#2279) · 620d520d
      Daniel Black authored
      rather than mariadb/mariadb-check
      620d520d
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-29570 InnoDB fails to clean bulk buffer when server does rollback operation · 7d4b2b98
      Thirunarayanan Balathandayuthapani authored
      - During bulk insert, server detects the error and does rollback
      operation. At that time, InnoDB fails to clean up the bulk insert
      buffer
      
      trx_t::rollback_finish(): Removed the clean up of modified tables
      from transaction
      
      trx_t::commit_cleanup(): Free the bulk buffer for bulk insert operation
      
      trx_t::commit(): Check whether modified table wasn't dropped only
      for non-dictionary transaction
      7d4b2b98
  8. 27 Sep, 2022 3 commits
    • Alexey Botchkov's avatar
      MDEV-21134 Crash with partitioned table, PARTITION syntax, and index_merge. · b2cfcf1d
      Alexey Botchkov authored
      When the partition table is cloned, the handlers for the partitions that were not opened
      should anyway be created (but not opened).
      b2cfcf1d
    • Oleksandr Byelkin's avatar
      MDEV-29022 add_slave destroy child list and has dead code · 47e96789
      Oleksandr Byelkin authored
      Nowdays subquery in a UNION's ORDER BY placed correctly in fake select,
      the only problem was incorrect Name_resolution_contect is fixed by this
      patch in parsing, so we do not need scanning/reseting of ORDER BY of
      a union.
      47e96789
    • Marko Mäkelä's avatar
      Revert MDEV-29566 · 8833c24c
      Marko Mäkelä authored
      This reverts commit bdc5548c
      that introduced a work-around to ha_innobase::delete_table()
      for avoiding failures when trying to remove table partitions.
      
      This work-around (of not removing statistics in case of a locking
      conflict) would occasionally cause a failure of the test
      parts.part_supported_sql_func_innodb:
      
      mysqltest: In included file "./suite/parts/inc/partition_supported_sql_funcs.inc":
      included from ./suite/parts/inc/part_supported_sql_funcs_main.inc at line 91:
      included from /buildbot/amd64-ubuntu-2004-msan/build/mysql-test/suite/parts/t/part_supported_sql_func_innodb.test at line 44:
      At line 234: query 'alter table t66
      reorganize partition s1 into
      (partition p0 values less than ($valsqlfunc),
      partition p1 values less than maxvalue)' failed: ER_DUP_KEY (1022): Can't write; duplicate key in table 'mysql.innodb_table_stats'
      8833c24c
  9. 26 Sep, 2022 10 commits