1. 17 May, 2022 1 commit
  2. 16 May, 2022 2 commits
  3. 15 May, 2022 1 commit
    • Sergei Petrunia's avatar
      Code cleanup in/around check_interleaving_with_nj() · 730eb1c4
      Sergei Petrunia authored
      - In best_extension_by_limited_search(), do not check for
        "(remaining_tables & real_table_bit)", it is guaranteed to be true.
        Make it an assert.
      - In (!idx || check_interleaving_with_nj())", remove the !idx part.
        This check made sense only in the original version of this function.
      - "micro optimization" in check_interleaving_with_nj().
      730eb1c4
  4. 13 May, 2022 1 commit
  5. 12 May, 2022 1 commit
  6. 09 May, 2022 1 commit
  7. 08 May, 2022 1 commit
  8. 07 May, 2022 2 commits
  9. 06 May, 2022 7 commits
    • Daniel Black's avatar
      MDEV-27816: Set sql_mode before DROP IF EXISTS already (postfix) · 0db27eff
      Daniel Black authored
      Test compat/oracle.sp-package-mysqldump needed re-record.
      0db27eff
    • Andrei's avatar
      MDEV-28310 Missing binlog data for INSERT .. ON DUPLICATE KEY UPDATE · a5dc12ee
      Andrei authored
      MDEV-21810 MBR: Unexpected "Unsafe statement" warning for unsafe IODKU
      
      MDEV-17614 fixes to replication unsafety for INSERT ON DUP KEY UPDATE
      on two or more unique key table left a flaw. The fixes checked the
      safety condition per each inserted record with the idea to catch a user-created
      value to an autoincrement column and when that succeeds the autoincrement column
      would become the source of unsafety too.
      It was not expected that after a duplicate error the next record's
      write_set may become different and the unsafe decision for that
      specific record will be computed to screw the Query's binlogging
      state and when @@binlog_format is MIXED nothing gets bin-logged.
      
      This case has been already fixed in 10.5.2 by 91ab42a8 that
      relocated/optimized THD::decide_logging_format_low() out of the record insert
      loop. The safety decision is computed once and at the right time.
      Pertinent parts of the commit are cherry-picked.
      
      Also a spurious warning about unsafety is removed when MIXED
      @@binlog_format; original MDEV-17614 test result corrected.
      The original test of MDEV-17614 is extended and made more readable.
      a5dc12ee
    • Daniel Black's avatar
      MDEV-4875 Can't restore a mysqldump if --add-drop-database meets general_log · 221ced92
      Daniel Black authored
      or slow query log when the log_output=TABLE.
      
      When this happens, we temporary disable by changing log_output until
      we've created the general_log and slow_log tables again.
      
      Move </database> in xml mode until after the transaction_registry.
      
      General_log and slow_log tables where moved to be first to be dumped so
      that the disabling of the general/slow queries is minimal.
      221ced92
    • Hartmut Holzgraefe's avatar
      MDEV-27816 Set sql_mode before DROP IF EXISTS already · 9fe3bc2a
      Hartmut Holzgraefe authored
      Previously the correct SQL mode for a stored routine or
      package was only set before doing the CREATE part, this
      worked out for PROCEDUREs and FUNCTIONs, but with ORACLE
      mode specific PACKAGEs the DROP also only works in ORACLE
      mode.
      
      Moving the setting of the sql_mode a few lines up to happen
      right before the DROP statement is writen fixes this.
      9fe3bc2a
    • Oleksandr Byelkin's avatar
      MDEV-28402 ASAN heap-use-after-free in create_tmp_table, Assertion `l_offset... · 141ab971
      Oleksandr Byelkin authored
      MDEV-28402 ASAN heap-use-after-free in create_tmp_table, Assertion `l_offset >= 0 && table->s->rec_buff_length - l_offset > 0'
      
      Make default() function follow Item_field and use get_tmp_table_item() for
      change_to_use_tmp_fields().
      141ab971
    • Sergei Petrunia's avatar
      624cb973
    • Marko Mäkelä's avatar
      MDEV-28478: INSERT into SPATIAL INDEX in TEMPORARY table writes log · 20ae4816
      Marko Mäkelä authored
      row_ins_sec_index_entry_low(): If a separate mini-transaction is
      needed to adjust the minimum bounding rectangle (MBR) in the parent
      page, we must disable redo logging if the table is a temporary table.
      For temporary tables, no log is supposed to be written, because
      the temporary tablespace will be reinitialized on server restart.
      
      rtr_update_mbr_field(): Plug a memory leak.
      20ae4816
  10. 05 May, 2022 4 commits
    • Sergei Petrunia's avatar
      MDEV-28437: Assertion `!eliminated' failed: Part #2 · 84e32eff
      Sergei Petrunia authored
      In SELECT_LEX::update_used_tables(),
      do not run the loop setting tl->table->maybe_null
      when tl is an eliminated table
      
      (Rationale: First, with current table elimination, tl already
       has maybe_null=1. Second, one should not care what flags
       eliminated tables had)
      84e32eff
    • Sergei Petrunia's avatar
      MDEV-28437: Assertion `!eliminated' failed in Item_subselect::exec · 8dbfaa2a
      Sergei Petrunia authored
      (This is the assert that was added in fix for MDEV-26047)
      
      Table elimination may remove an ON expression from an outer join.
      However SELECT_LEX::update_used_tables() will still call
      
        item->walk(&Item::eval_not_null_tables)
      
      for eliminated expressions. If the subquery is constant and cheap
      Item_cond_and will attempt to evaluate it, which will trigger an
      assert.
      The fix is not to call update_used_tables() or eval_not_null_tables()
      for ON expressions that were eliminated.
      8dbfaa2a
    • Tuukka Pasanen's avatar
      MDEV-28388: As Travis is not used anymore remove configurations files · 06562b84
      Tuukka Pasanen authored
      As Travis is not used anymore for CI is not wise to keep untested CI files laying around
      that someone can base their effort to update un-used files.
      06562b84
    • Tuukka Pasanen's avatar
      MDEV-12275: Add switch '--silent' to SySV init upgrade · db47855e
      Tuukka Pasanen authored
      Debian script debian-start upgrades database (which can be huge)
      and prints lots of unnecessary information (not errors). Add
      '--silent' to only sport possible errors
      db47855e
  11. 04 May, 2022 4 commits
    • Sergei Golubchik's avatar
      test fixes for FreeBSD · 53193599
      Sergei Golubchik authored
      * FreeBSD returns errno 31 (EMLINK, Too many links),
        not 40 (ELOOP, Too many levels of symbolic links)
      * (`mysqlbinlog|mysql`) was just crazy, why did it ever work?
      * socket_ipv6.inc check (that checked whether ipv6 is supported)
        only worked correctly when ipv6 was supported
      * perfschema.socket_summary_by_instance was changing global variables
        and then skip-ing the test (because on missing ipv6)
      53193599
    • Sergei Petrunia's avatar
      MDEV-19398: Assertion `item1->type() == Item::FIELD_ITEM ... · ba4927e5
      Sergei Petrunia authored
      Window Functions code tries to minimize the number of times it
      needs to sort the select's resultset by finding "compatible"
      OVER (PARTITION BY ... ORDER BY ...) clauses.
      
      This employs compare_order_elements(). That function assumed that
      the order expressions are Item_field-derived objects (that refer
      to a temp.table). But this is not always the case: one can
      construct queries order expressions are arbitrary item expressions.
      
      Add handling for such expressions: sort them according to the window
      specification they appeared in.
      This means we cannot detect that two compatible PARTITION BY clauses
      that use expressions can share the sorting step.
      But at least we won't crash.
      ba4927e5
    • Vlad Lesin's avatar
      MDEV-17843 Assertion `page_rec_is_leaf(rec)' failed in lock_rec_queue_validate... · 2c381d8c
      Vlad Lesin authored
      MDEV-17843 Assertion `page_rec_is_leaf(rec)' failed in lock_rec_queue_validate upon SHOW ENGINE INNODB STATUS
      
      lock_validate() accumulates page ids under locked lock_sys->mutex, then
      releases the latch, and invokes lock_rec_block_validate() for each page.
      Some other thread has ability to add/remove locks and change pages
      between releasing the latch in lock_validate() and acquiring it in
      lock_rec_validate_page().
      
      lock_rec_validate_page() can invoke lock_rec_queue_validate() for
      non-locked supremum, what can cause ut_ad(page_rec_is_leaf(rec)) failure
      in lock_rec_queue_validate().
      
      The fix is to invoke lock_rec_queue_validate() only for locked records
      in lock_rec_validate_page().
      
      The error message in lock_rec_block_validate() is not necessary as
      BUF_GET_POSSIBLY_FREED mode is used to get block from buffer pool, and
      this is not error if a block was evicted.
      
      The test case would require new debug sync point. I think it's not
      necessary as the fixed code is debug-only.
      2c381d8c
    • anel's avatar
      Use proper pid namespace · 794bebf9
      anel authored
          Problem:
          ==============
          By testing `pgrep` with `--ns` option,
          introduced with MDEV-21331, commit fb7c1b94,
          I noted that:
          a) `--ns`  cannot use more than single PID.
          b) `--ns` is returning the processes of the namespace to which supplied PID belongs to.
          So by that sense command `pgrep -x --ns $$ mysqld` will always return an error and skip
          checking of the existing PID of the server.
      
          Solution:
          ==============
          Suggested solution is to add `--nslist pid`, since `--ns` needs to know in which namespace type it should look for.
          See `pgrep --help` for different namespace types.
          Note also that this works *only* if script is run as a `root` (we have that case here).
      
          Current PR is a part of:
          1. MDEV-21331: sync preinst and postrm script
          2. MDEV-15718: check for exact mysqld process
      
          This commit:
          a) fixes fb7c1b94
          b) Closes PR #2068 (obsolete)
          c) Closes PR #2069 (obsolete)
      
          Thanks Faustin Lammler <faustin@mariadb.org> for testing and verifying
          Reviewed by <>
      794bebf9
  12. 03 May, 2022 1 commit
  13. 02 May, 2022 2 commits
    • Oleksandr Byelkin's avatar
      New CC 3.1 · 70555454
      Oleksandr Byelkin authored
      70555454
    • Alexander Barkov's avatar
      MDEV-28446 mariabackup prepare fails for incrementals if a new schema is... · 680ca152
      Alexander Barkov authored
      MDEV-28446 mariabackup prepare fails for incrementals if a new schema is created after full backup is taken
      
      When "mariabackup --target-dir=$basedir --incremental-dir=$incremental_dir"
      is running and is moving a new table file (e.g. `db1/t1.new`) from the
      incremental directory to the base directory, it needs to verify that the base
      backup database directory (e.g. `$basedir/db1`) really exists
      (or create it otherwise).
      
      The table `db1/t1` can come from a new database `db1` which
      was created during the base mariabackup execution time.
      
      In such case the directory `db1` exists only in the incremental directory,
      but does not exist in the base directory.
      680ca152
  14. 29 Apr, 2022 3 commits
    • Aleksey Midenkov's avatar
      MDEV-20077 compilation fix · 182b8a29
      Aleksey Midenkov authored
      182b8a29
    • Aleksey Midenkov's avatar
      MDEV-20077 Warning on full history partition is delayed until next DML statement · ddc416c6
      Aleksey Midenkov authored
      Moved LIMIT warning from vers_set_hist_part() to new call
      vers_check_limit() at table unlock phase. At that point
      read_partitions bitmap is already pruned by DML code (see
      prune_partitions(), find_used_partitions()) so we have to set
      corresponding bits for working history partition.
      
      Also we don't do my_error(ME_WARNING|ME_ERROR_LOG), because at that
      point it doesn't update warnings number, so command reports 0 warnings
      (but warning list is still updated). Instead we do
      push_warning_printf() and sql_print_warning() separately.
      
      Under LOCK TABLES external_lock(F_UNLCK) is not executed. There is
      start_stmt(), but no corresponding "stop_stmt()". So for that mode we
      call vers_check_limit() directly from close_thread_tables().
      
      Test result has been changed according to new LIMIT and warning
      printing algorithm. For convenience all LIMIT warnings are marked with
      "You see warning above ^".
      
      TODO MDEV-20345 fixed. Now vers_history_generating() contains
      fine-grained list of DML-commands that can generate history (and TODO
      mechanism worked well).
      ddc416c6
    • Aleksey Midenkov's avatar
      MDEV-28271 Assertion on TRUNCATE PARTITION for PARTITION BY SYSTEM_TIME · ea2f0997
      Aleksey Midenkov authored
      Like in MDEV-27217 vers_set_hist_part() for LIMIT depends on all
      partitions selected in read_partitions. That bugfix just disabled
      partition selection for DELETE with this check:
      
        if (table->pos_in_table_list &&
            table->pos_in_table_list->partition_names)
        {
          return HA_ERR_PARTITION_LIST;
        }
      
      ALTER TABLE TRUNCATE PARTITION is a different story. First, it doesn't
      update pos_in_table_list->partition_names, but
      thd->lex->alter_info.partition_names. But we cannot depend on that
      since alter_info will be stale for DML. Second, we should not disable
      TRUNCATE PARTITION for that to be consistent with TRUNCATE TABLE
      behavior.
      
      Now we don't do vers_set_hist_part() for ALTER TABLE as this command
      is not DML, so it does not produce history.
      ea2f0997
  15. 28 Apr, 2022 4 commits
  16. 27 Apr, 2022 4 commits
    • Marko Mäkelä's avatar
      MDEV-28422 Page split breaks a gap lock · 0806592a
      Marko Mäkelä authored
      btr_insert_into_right_sibling(): Inherit any gap lock from the
      left sibling to the right sibling before inserting the record
      to the right sibling and updating the node pointer(s).
      
      lock_update_node_pointer(): Update locks in case a node pointer
      will move.
      
      Based on mysql/mysql-server@c7d93c274fdc5c56e36458fa4000fa3a483ffffd
      0806592a
    • Marko Mäkelä's avatar
      c711abd1
    • Marko Mäkelä's avatar
      MDEV-28416 Incorrect AUTO_INCREMENT may be issued when close to UINT64_MAX · 44a27a26
      Marko Mäkelä authored
      ha_innobase::get_auto_increment(): In the overflow check, account
      for 64-bit unsigned integer wrap-around.
      
      Based on mysql/mysql-server@25ecfe7f49b5a649e96d462cb90602de9de3b919
      44a27a26
    • Marko Mäkelä's avatar
      MDEV-28415 ALTER TABLE on a large table hangs InnoDB · f21a8756
      Marko Mäkelä authored
      buf_flush_page(): Never wait for a page latch, even in checkpoint
      flushing (flush_type == BUF_FLUSH_LIST), to prevent a hang of the
      page cleaner threads when a large number of pages is latched.
      
      In mysql/mysql-server@9542f3015b00330ef537f6223565b28b82a5b325
      it was claimed that such a hang only affects CREATE FULLTEXT INDEX.
      Their fix was to retain buffer-fix but release exclusive latch
      on non-leaf pages, and subsequently write to those pages while
      they are not associated with the mini-transaction, which would
      trip a debug assertion in the MariaDB version of
      mtr_t::memo_modify_page() and cause potential corruption
      when using the default MariaDB setting innodb_log_optimize_ddl=OFF.
      
      This change essentially backports a small part of
      commit 7cffb5f6 (MDEV-23399)
      from MariaDB Server 10.5.7.
      f21a8756
  17. 26 Apr, 2022 1 commit
    • Sergei Golubchik's avatar
      MDEV-28020 CHECKSUM TABLE calculates different checksums · 39990135
      Sergei Golubchik authored
      Two bugs here:
      
      1. CHECKSUM TABLE asserted that all fields in the table are arranged
         sequentially in the record, but virtual columns are always at the
         end, violating this assertion
      2. virtual columns were not calculated for CHECKSUM, so CHECKSUM
         was using, essentially, garbage left from the previous statement.
         (that's why the test must use INSERT IGNORE to have this "previous
         statement" mark vcols not null)
      
      Fix: don't include virtual columns into the table CHECKSUM. Indeed,
      they cannot be included as the engine does not see virtual columns,
      so in-engine checksum cannot include them, meaning in-server checksum
      should not either
      39990135