- 19 May, 2022 1 commit
-
-
Oleg Smirnov authored
Cause: a copy of the joined TABLE_LIST is created during multi_update::prepare and TABLE::pos_in_table_list of the tables are set to point to the new TABLE_LIST object. This prevents some optimization steps to perform correctly. Solution: do not update pos_in_table_list during multi_update::prepare
-
- 18 May, 2022 1 commit
-
-
KiyoshiTakeda authored
MDEV-14642 Assertion 'table->s->db_create_options == part_table->s->db_create_options' failed in compare_table_with_partition When trying to execute ALTER TABLE EXCHANGE PARTITION with different definitions, assertion table->s->db_create_options == part_table->s->db_create_options failed in compare_table_with_partition(). However, this execution should not be allowed since executing 'exchange partition' requires the identical structure of the two tables. To fix the problem, I deleted the assertion code and added code that returns an error that indicates tables have different definitions. Reviewed By: Nayuta Yanagisawa
-
- 17 May, 2022 1 commit
-
-
Alexander Barkov authored
-
- 16 May, 2022 2 commits
-
-
Marko Mäkelä authored
The counter srv_stats.key_rotation_list_length is never updated, and therefore Innodb_encryption_key_rotation_list_length will always be 0. The view INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION comes close to reporting this information.
-
Marko Mäkelä authored
The counters were added in commit 5e55d1ce and any code to update them was inadvertently removed in commit 2e814d47 when applying InnoDB changes from MySQL 5.7. Let us remove these counters that never reported anything useful. If such statistics are really needed in a special case, they can be obtained by instrumenting the code by some means, such as eBPF or a source code patch.
-
- 15 May, 2022 1 commit
-
-
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().
-
- 13 May, 2022 1 commit
-
-
Nayuta Yanagisawa authored
The condition of the if statements are always true.
-
- 12 May, 2022 1 commit
-
-
Hartmut Holzgraefe authored
Reviewed-by: Jan Lindström <jan.lindstrom@mariadb.com>
-
- 09 May, 2022 1 commit
-
-
Jan Lindström authored
Make sure that nodes have correct auto_increment_offset when they start and when control is turned on.
-
- 08 May, 2022 1 commit
-
-
Sergei Golubchik authored
Fixed failing main.default on Windows (to trigger an assert the test needed a debug build without safemalloc, as 0xa5 happened to have the important bit set "correctly")
-
- 07 May, 2022 2 commits
-
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
- 06 May, 2022 7 commits
-
-
Daniel Black authored
Test compat/oracle.sp-package-mysqldump needed re-record.
-
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.
-
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.
-
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.
-
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().
-
Sergei Petrunia authored
-
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.
-
- 05 May, 2022 4 commits
-
-
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)
-
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.
-
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.
-
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
-
- 04 May, 2022 4 commits
-
-
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)
-
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.
-
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.
-
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 <>
-
- 03 May, 2022 1 commit
-
-
Oleksandr Byelkin authored
-
- 02 May, 2022 2 commits
-
-
Oleksandr Byelkin authored
-
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.
-
- 29 Apr, 2022 3 commits
-
-
Aleksey Midenkov authored
-
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).
-
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.
-
- 28 Apr, 2022 4 commits
-
-
Sergei Golubchik authored
test case only
-
Sergei Golubchik authored
it was showing ca and capath instead of crl and crl_path
-
Sergei Petrunia authored
Expression_cache_tmptable object uses an Expression_cache_tracker object to report the statistics. In the common scenario, Expression_cache_tmptable destructor sets tracker->cache=NULL. The tracker object survives after the expression cache is deleted and one may call cache_tracker->fetch_current_stats() for it with no harm. However a degenerate cache with no parameters does not set tracker->cache=NULL in Expression_cache_tmptable destructor which results in an attempt to use freed data in the cache_tracker->fetch_current_stats() call. Fixed by setting tracker->cache to NULL and wrapping the assignment into a function.
-
Alexey Botchkov authored
Few initializations to the connection_info structure added. I think they can be removed if we are sure the bug was fixed.
-
- 27 Apr, 2022 3 commits
-
-
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
-
Marko Mäkelä authored
-
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
-