1. 23 Jan, 2024 3 commits
  2. 22 Jan, 2024 2 commits
    • Rex's avatar
      MDEV-33165 Incorrect result interceptor passed to mysql_explain_union() · 11738822
      Rex authored
      Statements affect by this bug are all SQL statements that
      1) prefixed with "EXPLAIN"
      2) have a lower level join structure created for a union subquery.
      
      A bug in select_describe() passed an incorrect "result" object to
      mysql_explain_union(), resulting in unpredictable behaviour and
      out of context calls.
      
      Reviewed by: Oleksandr Byelkin, sanja@mariadb.com
      11738822
    • Brandon Nesterenko's avatar
      MDEV-33283: Binlog Checksum is Zeroed by Zlib if Part of Event Data is Empty · 207c8578
      Brandon Nesterenko authored
      An existing binlog checksum can be overridden to 0 if writing a NULL
      payload when using Zlib for the computation. That is, calling into
      Zlib's crc32 with empty data initializes an incremental CRC
      computation to 0.
      
      This patch changes the Log_event_writer::write_data() to exit
      immediately if there is nothing to write, thereby bypassing the
      checksum computation. This follows the pattern of
      Log_event_writer::encrypt_and_write(), which also exits immediately
      if there is no data to write.
      
      Reviewed By:
      ============
      Andrei Elkin <andrei.elkin@mariadb.com>
      207c8578
  3. 19 Jan, 2024 1 commit
  4. 17 Jan, 2024 1 commit
  5. 16 Jan, 2024 1 commit
  6. 15 Jan, 2024 1 commit
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-32968 InnoDB fails to restore tablespace first page from doublewrite... · caad34df
      Thirunarayanan Balathandayuthapani authored
      MDEV-32968  InnoDB fails to restore tablespace first page from doublewrite buffer when page is empty
      
      - InnoDB fails to find the space id from the page0 of
      the tablespace. In that case, InnoDB can use
      doublewrite buffer to recover the page0 and write
      into the file.
      
      - buf_dblwr_t::init_or_load_pages(): Loads only the pages
      which are valid.(page lsn >= checkpoint). To do that,
      InnoDB has to open the redo log before system
      tablespace, read the latest checkpoint information.
      
      recv_dblwr_t::find_first_page():
      1) Iterate the doublewrite buffer pages and find the 0th page
      2) Read the tablespace flags, space id from the 0th page.
      3) Read the 1st, 2nd and 3rd page from tablespace file and
      compare the space id with the space id which is stored
      in doublewrite buffer.
      4) If it matches then we can write into the file.
      5) Return space which matches the pages from the file.
      
      SysTablespace::read_lsn_and_check_flags(): Remove the
      retry logic for validating the first page. After
      restoring the first page from doublewrite buffer,
      assign tablespace flags by reading the first page.
      
      recv_recovery_read_max_checkpoint(): Reads the maximum
      checkpoint information from log file
      
      recv_recovery_from_checkpoint_start(): Avoid reading
      the checkpoint header information from log file
      
      Datafile::validate_first_page(): Throw error in case
      of first page validation fails.
      caad34df
  7. 14 Jan, 2024 1 commit
  8. 13 Jan, 2024 1 commit
  9. 12 Jan, 2024 3 commits
  10. 11 Jan, 2024 4 commits
  11. 10 Jan, 2024 6 commits
  12. 09 Jan, 2024 2 commits
    • Sergei Golubchik's avatar
      MDEV-33148 A connection can control RAND() in following connection · c6e1ffd1
      Sergei Golubchik authored
      initialize THD::rand in THD::init() not in THD::THD(),
      because the former is also called when a THD is reused -
      in COM_CHANGE_USER and in taking a THD from the cache.
      
      Also use current cycle timer for more unpreditability
      c6e1ffd1
    • Alexander Barkov's avatar
      MDEV-32645 CAST(AS UNSIGNED) fails with --view-protocol · 9322ef03
      Alexander Barkov authored
      Item_float::neg() did not preserve the "presentation" from "this".
      So
        CAST(-1e0 AS UNSIGNED)  -- cast from double to unsigned
      changes its meaning to:
        CAST(-1 AS UNSIGNED)  -- cast signed to undigned
      
      Fixing Item_float::neg() to construct the new value for
      Item_float::presentation as follows:
      - if the old value starts with minus, then the minus is truncated:
        '-2e0' -> '2e0'
      - otherwise, minus sign followed by its old value:
        '1e0'  -> '-1e0'
      9322ef03
  13. 08 Jan, 2024 5 commits
  14. 04 Jan, 2024 1 commit
  15. 03 Jan, 2024 6 commits
    • Igor Babaev's avatar
      MDEV-31657 Crash on query using CTE with the same name as a base table · 54ed3939
      Igor Babaev authored
      If a query contained a CTE whose name coincided with the name of one of
      the base tables used in the specification of the CTE and the query had at
      least two references to this CTE in the specifications of other CTEs then
      processing of the query led to unlimited recursion that ultimately caused
      a crash of the server.
      
      Any secondary non-recursive reference to a CTE requires creation of a copy
      of the CTE specification. All the references to CTEs in this copy must be
      resolved. If the specification contains a reference to a base table whose
      name coincides with the name of then CTE then it should be ensured that
      this reference in no way can be resolved against the name of the CTE.
      54ed3939
    • Marko Mäkelä's avatar
      MDEV-33156 Crash on innodb_buf_flush_list_now=ON and innodb_force_recovery=6 · cc5c0eda
      Marko Mäkelä authored
      srv_start(): Move a read only mode startup tweak from
      innodb_init_params() to the correct location. Also if
      innodb_force_recovery=6 we will disable the doublewrite buffer,
      because InnoDB must run in read-only mode to prevent further corruption.
      
      This change only affects debug checks. Whenever srv_read_only_mode holds,
      the buf_pool.flush_list will be empty, that is, there will be no writes
      of persistent InnoDB data pages.
      
      Reviewed by: Thirunarayanan Balathandayuthapani
      cc5c0eda
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · 3a3a4f04
      Marko Mäkelä authored
      3a3a4f04
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-33098 The test innodb.doublewrite_debug occasionally fails to start up InnoDB · 77b8bedf
      Thirunarayanan Balathandayuthapani authored
      - innodb.doublewrite_debug should avoid the checkpoint
      before killing the server. So used debug sync and
      innodb_flush_sync to avoid the checkpoint completely.
      Test case allowed to skip on MSAN builder due to extra
      checkpoint.
      77b8bedf
    • Marko Mäkelä's avatar
      MDEV-33157 WSREP: Fix function pointer mismatch · 96130b18
      Marko Mäkelä authored
      wsrep_plugin_init(), wsrep_plugin_deinit(): Remove these dummy functions
      in order to fix an error that would be flagged by cmake -DWITH_UBSAN=ON
      when using clang.
      
      wsrep_show_ready(), wsrep_show_bf_aborts(): Correct the signature.
      96130b18
    • Igor Babaev's avatar
      MDEV-29362 Crash with query using constant subquery as left part of IN subquery · 832e96de
      Igor Babaev authored
      If a query has a HAVING clause that contains a predicate with a constant
      IN subquery whose lef part in its turn is a subquery and the predicate is
      subject to pushdown from HAVING to WHERE then execution of the query could
      cause a crash of the server.
      
      The cause of the problem was the missing implementation of the walk()
      method for the class Item_in_optimizer. As a result in some cases the left
      operand of the Item_in_optimizer condition could be traversed twice by
      the walk procedure. For many call-back functions used as an argument of
      this procedure it does not matter. Yet it matters for the call-back
      function cleanup_excluding_immutables_processor() used in pushdown of
      predicates from HAVING to WHERE. If the processed item is marked with
      the IMMUTABLE_FL flag then the processor just removes this flag, otherwise
      it performs cleanup of the item making it unfixed. If an item is marked
      with an the IMMUTABLE_FL and it traversed with this processor twice then
      it becomes unfixed after the second traversal though the flag indicates
      that the item should not be cleaned up.
      
      Approved by Oleksandr Byelkin <sanja@mariadb.com>
      832e96de
  16. 27 Dec, 2023 2 commits
    • Alexander Barkov's avatar
      MDEV-33019 The database part is not case sensitive in SP names · 9695974e
      Alexander Barkov authored
      Problem:
      
      sp_cache erroneously looked up fully qualified SP names (e.g. `DB`.`SP`),
      in case insensitive style. It was wrong, because only the "name"
      part is always case insensitive, while the "db" part should be compared
      according to lower_case_table_names (case sensitively for 0,
      case insensitively for 1 and 2).
      
      Fix:
      
      Adding a "casedn_name" parameter make_qname() to tell
      if the name part should be lower cased:
        `DB1`.`SP` -> "DB1.SP"  (when casedn_name=false)
        `DB1`.`SP` -> "DB1.sp"  (when casedn_name=true)
      and using make_qname() with casedn_name=true when creating
      sp_cache hash lookup keys.
      
      Details:
      
      As a result, it now works as follows:
      - sp_head::m_db is converted to lower case if lower_case_table_names>0
        during the sp_name initialization phase. So when make_qname() is called,
        sp_head::m_db is already normalized. There are no changes in here.
      
      - The initialization phase of sp_head when creating sp_head::m_qname
        now calls make_qname() with casedn_name=true,
        so sp_head::m_name gets written to sp_head::m_qname in lower case.
      
      - sp_cache_lookup() now also calls make_qname() with casedn_name=true,
        so sp_head::m_name gets written to the temporary lookup key in lower case.
      
      - sp_cache::m_hashtable now uses case sensitive comparison
      9695974e
    • Alexander Barkov's avatar
      MDEV-33019 The database part is not case sensitive in SP names · 916caac2
      Alexander Barkov authored
      Part#1 A non-functional change
      
      Changing the signature of Identifier_chain2::make_qname() from
      
        bool make_qname(MEM_ROOT *mem_root, LEX_CSTRING *dst) const;
      
      to
      
        LEX_CSTRING make_qname(MEM_ROOT *mem_root) const;
      
      Now the result is returned as LEX_CSTRING from the function rather than
      is passed as a parameter.
      The return value {NULL,0} means "EOM".
      916caac2