- 31 Jul, 2020 4 commits
-
-
Sergei Golubchik authored
-
Sergei Golubchik authored
don't GRANT UPDATE ON mysql.global_priv TO mariadb.sys@localhost;
-
Sergei Golubchik authored
Classes that handle privilege tables (like Tables_priv_table) could read some columns conditionally but they expect a certain minimal number of colunms always to exist. Add a check for a minimal required number of columns in privilege tables, don't use a table that has fewer columns than required.
-
Alexander Barkov authored
1. Fixing ROUND(x) and TRUNCATE(x,0) with TINYINT, SMALLINT, MEDIUMINT, BIGINT input to preserve the exact data type of the argument when it's possible. 2. Fixing FLOOR(x) and CEILING(x) with TINYINT, SMALLINT, MEDIUMINT, BIGINT to preserve the exact data type of the argument. 3. Adding dedicated Type_handler_year::Item_func_round_fix_length_and_dec() to easier handle ROUND(x) and TRUNCATE(x,y) for the YEAR(2) and YEAR(4) input. They still return INT(2) UNSIGNED and INT(4) UNSIGNED correspondingly, as before.
-
- 30 Jul, 2020 2 commits
-
-
Jan Lindström authored
-
Alexander Barkov authored
Implementing dedicated fixing methods: - Type_handler_bit::Item_func_round_fix_length_and_dec() - Type_handler_bit::Item_func_int_val_fix_length_and_dec() - Type_handler_typelib::Item_func_round_fix_length_and_dec() because the inherited methods did not work well. Fixing: - Type_handler_typelib::Item_func_int_val_fix_length_and_dec It did not work well, because it used args[0]->max_length to calculate the result data type. In case of ENUM and SET it was not correct, because in FLOOR() and CEILING() context ENUM and SET return not more than 5 digits (65535 is the biggest possible value). Misc: - Changing the API of Type_handler_bit::Bit_decimal_notation_int_digits(const Item *item) to a more generic form: Type_handler_bit::Bit_decimal_notation_int_digits_by_nbits(uint nbits) - Fixing Type_handler_bit::Bit_decimal_notation_int_digits_by_nbits() to return the exact number of decimal digits for all nbits 1..64. The old implementation was approximate. This change gives better (more precise) data types.
-
- 29 Jul, 2020 2 commits
-
-
Alexander Barkov authored
- Type_handler_hex_hybrid did not override Type_handler_string_result::Item_func_round_fix_length_and_dec(), so the result type of ROUND(0xFFFFFFFFFFFFFFFF) was erroneously calculated ad DOUBLE with a wrong length. Overriding Item_func_round_fix_length_and_dec(), to calculated the result type as INT/BIGINT. Also, fixing Item_func_round::fix_arg_int() to use args[0]->decimal_precision() instead of args[0]->max_length when calculating this->max_length, to get a correct result for hex hybrids. - Type_handler_hex_hybrid::Item_func_int_val_fix_length_and_dec() called item->fix_length_and_dec_int_or_decimal(), which did not produce a correct result data type for hex hybrid. Implementing a dedicated code instead, to return INT UNSIGNED or BIGINT UNSIGNED depending in the number of digits in the arguments.
-
Eugene Kosov authored
Doesn't allow instant alter of a field which is a prefix part of some key is_part_of_a_key_prefix(): I hope the name of the function is clear ha_innobase::can_convert_string() ha_innobase::can_convert_varstring() ha_innobase::can_convert_blob(): it can't when field is_part_of_a_key_prefix()
-
- 28 Jul, 2020 4 commits
-
-
Alexander Barkov authored
Fixing functions CEILING and FLOOR to return - TIME for TIME input - DATETIME for DATETIME and TIMESTAMP input
-
Jan Lindström authored
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
Continue support the hack of current select equal builtin select if selects stack is empty even after subselects.
-
- 27 Jul, 2020 1 commit
-
-
Marko Mäkelä authored
An instant ADD/DROP/reorder column could create a dummy table object with the wrong ROW_FORMAT when innodb_default_row_format was changed between CREATE TABLE and ALTER TABLE. prepare_inplace_alter_table_dict(): If we had promised that ALGORITHM=INPLACE is supported, we must preserve the ROW_FORMAT. dict_table_t::prepare_instant(): Add debug assertions to catch ROW_FORMAT mismatch. The rest of the changes are related to adding Alter_inplace_info::inplace_supported to cache the return value of handler::check_if_supported_inplace_alter().
-
- 26 Jul, 2020 1 commit
-
-
Alexey Botchkov authored
mutex was already locked upon startup with server_audit and orphan records in mysql.plugin. Preaquire auditing plugins before LOCK_plugin to awoid double locking.
-
- 24 Jul, 2020 10 commits
-
-
Marko Mäkelä authored
In commit 0e5a4ac2 (MDEV-15562) we introduced a bogus debug assertion, demanding that dict_col_t::len never exceed some maximum value. The intention was to match what dict_index_add_col() is doing. But, the assignment field->fixed_len = 0 applies to dict_field_t::fixed_len, not dict_col_t::len!
-
Teemu Ollakka authored
-
Jan Lindström authored
-
Jan Lindström authored
-
Teemu Ollakka authored
An assertion `server_state_.rollback_mode() == wsrep::server_state::rm_async` fired in before_command() when - thread-handling was set to pool-of-threads and - a BF abort happened between client session calls to wait_rollback_complete_and_acquire_ownership() and before_command(). This commit introduces a test case to reproduce the crash and updates wsrep-lib submodule to fixed version.
-
Jan Lindström authored
-
Alexey Yurchenko authored
-
sjaakola authored
The sporadic test hangs happen because of mutex dealock between innodb background threads and two test connection executions. The test sets variable innodb_disallow_writes, which blocks all writes to filesyste. The test logic is to execute an INSERT, which should hang because of filesytstem writes are blocked, and through another session verify by SELECT that this hanging happens. The SELECT session will then release innodb_disallow_writes blocking. However, filesystem write blocking affects also innodb background threads and they may hang while keeping some other resources locked. As an example, in one test hang situation, buffer pool access was blocked. And, if buffer pool is blocked, the test connections will be blocked as well, and the SELECT session will not be able to continue to release the innodb_disallow_writes. The fix in this commit is refactoring of the test logic. The test will now set first innodb_disallow_writes blocking, and then record a hash of data directory's filesystem contents. This works as checksum of the state of data on the datadirectory. Then some SQL load is tried on both nodes, these sessions will be blocking due to frozen file system state. The test will have a short sleep to allow innodb background threads to loop and possibly encounter innodb_disallow_writes blocking as well. After the sleep, the test will record file system checksun for the second time, and then release the innodb_disallow-writes blocking. Finally, the two checksums are compared, they should be identical to verify that nothing was written on datadirectory during the test execution. The checksum is implemented by md5sum hash over all files found in datadirectory by find command. all these file hashes are hashed together by one more md5sum. The test therefore depends on md5sum and find. find may work differently with some OS distributions, e.g. freebsd may be problematic.
-
mkaruza authored
MDEV-22458: Server with WSREP hangs after INSERT, wrong usage of mutex 'LOCK_thd_data' and 'share->intern_lock' / 'lock->mutex' Add `find_thread_by_id_with_thd_data_lock` which will be used only when killing thread. This version needs to take `thd->LOCK_thd_data` lock.
-
mkaruza authored
Fixed wsrep_notify.sh script so it only reports status changes on 'joined', 'synced', 'donor'.
-
- 23 Jul, 2020 3 commits
-
-
Tzachi Zidenberg authored
outline-atomics compilation flag changes behaviour of builtin_atomics, by adding runtime detection of LSE atomics. If these are supported, they will be used. This gains LSE atomics use without hurting compatibility with older aarch64 machines.
-
Tzachi Zidenberg authored
aarch64 timer is available to userspace via arch register. clang's __builtin_readcyclecounter is wrong for aarch64 (reads the PMU cycle counter instead of the archi-timer register), so we don't use it. my_rdtsc unit-test on AWS m6g shows: frequency: 121830845 resolution: 1 overhead: 1 This counter is not strictly increasing, but it is non-decreasing.
-
Marko Mäkelä authored
Starting with MDEV-17441 we would no longer have os_once, and we would always initialize zip_pad_info_t::mutex and dict_table_t::autoinc_mutex, even for tables are not in ROW_FORMAT=COMPRESSED nor include any AUTO_INCREMENT column. mutex_free() on those unnecessary objects would make shutdown very slow compared to older versions. Let us use std::mutex for those two mutexes, to reduce the overhead. The critical sections protected by these mutexes is very small, and therefore contention or the need for any instrumentation should be unlikely.
-
- 22 Jul, 2020 3 commits
-
-
Oleksandr Byelkin authored
If there is no current_select and variable is not found among SP variables it can be only an error.
-
Thirunarayanan Balathandayuthapani authored
InnoDB should replace FSP_FLAGS_HAS_PAGE_COMPRESSION check with fil_space_t::is_compressed(). fil_space_t::is_compressed() checks for both non full crc32 and crc32 format.
-
Jan Lindström authored
-
- 21 Jul, 2020 4 commits
-
-
Marko Mäkelä authored
-
Marko Mäkelä authored
trx_update_mod_tables_timestamp(): When implementing innodb_evict_tables_on_commit_debug, do not evict tables on which transactional locks exist. This debug variable was broken since its introduction in commit 947b0b57.
-
Monty authored
Problem was that the code didn't handle a transaction created in innodb as part of a failed mysql_lock_tables()
-
Monty authored
The issue was: T1, a parallel slave worker thread, is waiting for another worker thread to commit. While waiting, it has the MDL_BACKUP_COMMIT lock. T2, working for mariabackup, is doing BACKUP STAGE BLOCK_COMMIT and blocks all commits. This causes a deadlock as the thread T1 is waiting for can't commit. Fixed by moving locking of MDL_BACKUP_COMMIT from ha_commit_trans() to commit_one_phase_2() Other things: - Added a new argument to ha_comit_one_phase() to signal if the transaction was a write transaction. - Ensured that ha_maria::implicit_commit() is always called under MDL_BACKUP_COMMIT. This code is not needed in 10.5 - Ensure that MDL_Request values 'type' and 'ticket' are always initialized. This makes it easier to check the state of the MDL_Request. - Moved thd->store_globals() earlier in handle_rpl_parallel_thread() as thd->init_for_queries() could use a MDL that could crash if store_globals where not called. - Don't call ha_enable_transactions() in THD::init_for_queries() as this is both slow (uses MDL locks) and not needed.
-
- 20 Jul, 2020 6 commits
-
-
Eugene Kosov authored
MDEV-22899 Assertion `field->col->is_binary() || field->prefix_len % field->col->mbmaxlen == 0' failed in dict_index_add_to_cache is_part_of_a_key(): detect is TEXT field is a part of some key ha_innobase::can_convert_blob(): now correctly detect whether our blob is a part of some key. Previously the check didn't work in some cases.
-
Aleksey Midenkov authored
Fix stale virtual field value in 4 cases: when virtual field depends on row_start/row_end in timestamp/trx_id versioned table. row_start dep is recalculated in vers_update_fields() (SQL and InnoDB layer). row_end dep is recalculated on history row insert.
-
Aleksey Midenkov authored
MDEV-22061 InnoDB: Assertion of missing row in sec index row_start upon REPLACE on a system-versioned table make_versioned_helper() appended new update field unconditionally while it should check if this field already exists in update vector. Misc renames to conform versioning prefix. vers_update_fields() name conforms with sql layer TABLE::vers_update_fields().
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-