- 10 Aug, 2023 3 commits
-
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
Monty authored
This is also related to MDEV-31348 Assertion `last_key_entry >= end_pos' failed in virtual bool JOIN_CACHE_HASHED::put_record() Valgrind exposed a problem with the join_cache for hash joins: =25636== Conditional jump or move depends on uninitialised value(s) ==25636== at 0xA8FF4E: JOIN_CACHE_HASHED::init_hash_table() (sql_join_cache.cc:2901) The reason for this was that avg_record_length contained a random value if one had used SET optimizer_switch='optimize_join_buffer_size=off'. This causes either 'random size' memory to be allocated (up to join_buffer_size) which can increase memory usage or, if avg_record_length is less than the row size, memory overwrites in thd->mem_root, which is bad. Fixed by setting avg_record_length in JOIN_CACHE_HASHED::init() before it's used. There is no test case for MDEV-31893 as valgrind of join_cache_notasan checks that. I added a test case for MDEV-31348.
-
- 09 Aug, 2023 1 commit
-
-
Sergei Petrunia authored
Remove redundant delete_explain_query() calls in sp_instr_set::exec_core(), sp_instr_set_row_field::exec_core(), sp_instr_set_row_field_by_name::exec_core(). These calls are made before the SP instruction's tables are "closed" by close_thread_tables() call. When we call close_thread_tables() after that, we no longer can collect engine's counter variables, as they use the data structures that are located in the Explain Data Structures. Also, these delete_explain_query() calls are redundant, as sp_lex_keeper::reset_lex_and_exec_core() has another delete_explain_query() call, which is located in the right location after the close_thread_tables() call.
-
- 08 Aug, 2023 3 commits
-
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
Thirunarayanan Balathandayuthapani authored
- InnoDB aborts when table is dropping the column. This is caused by 5f09b53b (MDEV-31086). While iterating the altered table fields, we fail to consider the dropped columns.
-
- 07 Aug, 2023 1 commit
-
-
Oleksandr Byelkin authored
-
- 06 Aug, 2023 1 commit
-
-
Sergei Golubchik authored
when validating vcol's (default, check, etc) in ALTER TABLE vcol_info->flags are modified in place. This means that if ALTER TABLE fails for any reason we need to restore them to their original values. (mroonga was freeing the memory on ::reset() but not on ::close())
-
- 04 Aug, 2023 6 commits
-
-
Oleksandr Byelkin authored
-
Yuchen Pei authored
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
- 03 Aug, 2023 1 commit
-
-
Oleg Smirnov authored
MDEV-31743 Server crash in store_length, assertion failure in Type_handler_string_result::sort_length After MDEV-21580 the truncation of SORT_FIELD::length set_if_smaller(sortorder->length, thd->variables.max_sort_length) became conditional: if (is_variable_sized()) set_if_smaller(length, thd->variables.max_sort_length) To provide correct functioning of is_variable_sized() SORT_FIELD::type must be set properly. This commit adds the necessary initialization of SORT_FIELD::type to JOIN_TAB::remove_duplicates() as it is done in filesort's sortlength() function. DBUG_ASSERT is added to sortlength() just in case to prevent a possible uint32 overflow
-
- 02 Aug, 2023 2 commits
-
-
Sergei Golubchik authored
MDEV-31822 ALTER TABLE ENGINE=x started failing instead of producing warning on unsupported TRANSACTIONAL=1 make TRANSACTIONAL table option behave similar to other engine-defined table options. If the engine doesn't suport it: * if specified expicitly in CREATE or ALTER - it's ER_UNKNOWN_OPTION * an error or a warning depending on sql_mode IGNORE_BAD_TABLE_OPTIONS * in ALTER TABLE from the engine that suppors it to the engine that doesn't - silently preserved (no warning) * it is commented out in SHOW CREATE unless IGNORE_BAD_TABLE_OPTIONS
-
Sergei Golubchik authored
* invoke check_expression() for all vcol_info's in mysql_prepare_create_table() to check for FK CASCADE * also check for SET NULL and SET DEFAULT * to check against existing FKs when a vcol is added in ALTER TABLE, old FKs must be added to the new_key_list just like other indexes are * check columns recursively, if vcol1 references vcol2, flags of vcol2 must be taken into account * remove check_table_name_processor(), put that logic under check_vcol_func_processor() to avoid walking the tree twice
-
- 01 Aug, 2023 15 commits
-
-
Sergei Golubchik authored
mark old keys in the ALTER TABLE with the `old` flag, not with the `key_create_info.check_for_duplicate_indexes`. This allows to mark old foreign keys too.
-
Sergei Golubchik authored
to declutter Item_field::check_vcol_func_processor(), move alter_info specific part of it into Alter_info::check_vcol_field()
-
Sergei Golubchik authored
also, prefer Lex_table_name and Lex_ident over LEX_CSTRING
-
Sergei Golubchik authored
-
Sergei Golubchik authored
HA_UNIQUE_CHECK was * only used internally by MyISAM/Aria * only used for internal temporary tables (for DISTINCT) * never saved in frm * saved in MYI/MAD but only for temporary tables * only set, never checked it's safe to remove it and free the bit (there are only 16 of them)
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
Sergei Petrunia authored
Do not attempt to produce "r_engine_stats" on the temporary (=work) tables. These tables may be - re-created during the query execution - freed during the query execution (This is done e.g. in JOIN::cleanup(), before we produce ANALYZE FORMAT=JSON output). - (Also, make save_explain_data() functions not set handler_for_stats to point to handler objects that do not have handler->handler_stats set. If the storage engine is not collecting handler_stats, it will not have them when we're producing ANALYZE FORMAT=JSON output, either).
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
Marko Mäkelä authored
buf_page_t::write_complete(), buf_page_write_complete(), IORequest::write_complete(): Add a parameter for passing an error code. If an error occurred, we will release the io-fix, buffer-fix and page latch but not reset the oldest_modification field. The block would remain in buf_pool.LRU and possibly buf_pool.flush_list, to be written again later, by buf_flush_page_cleaner(). If all page writes start consistently failing, all write threads should eventually hang in log_free_check() because the log checkpoint cannot be advanced to make room in the circular write-ahead-log ib_logfile0. IORequest::read_complete(): Add a parameter for passing an error code. If a read operation fails, we report the error and discard the page, just like we would do if the page checksum was not validated or the page could not be decrypted. This only affects asynchronous reads, due to linear or random read-ahead or crash recovery. When buf_page_get_low() invokes buf_read_page(), that will be a synchronous read, not involving this code. This was tested by randomly injecting errors in write_io_callback() and read_io_callback(), like this: if (!ut_rnd_interval(100)) cb->m_err= 42;
-
Marko Mäkelä authored
buf_LRU_free_page(): The block may also be in the IBUF_EXIST state when executing the test innodb.innodb_bulk_create_index_debug.
-
Oleksandr Byelkin authored
-
Marko Mäkelä authored
buf_LRU_free_page(): When we are discarding the uncompressed copy of a ROW_FORMAT=COMPRESSED page, buf_page_t::can_relocate() must have ensured that the block descriptor state is one of FREED, UNFIXED, REINIT. Do not overwrite the state with UNFIXED. We do not want to write back pages that were actually freed, and we want to avoid doublewrite for pages that were (re)initialized by log records written since the latest checkpoint. Last but not least, we do not want crashes like those that commit dc1bd180 (MDEV-31386) was supposed to fix. The test innodb_zip.wl5522_zip should typically cover all 3 states. This bug is a regression due to commit aaef2e1d (MDEV-27058).
-
- 31 Jul, 2023 6 commits
-
-
Sergei Golubchik authored
failed SHOW CREATE FUNCTION means we don't dump this function, but should still try to dump all other functions
-
Sergei Golubchik authored
don't construct open ranges from prefix blob keys for < (less than) just as it's already done for > (greater than) because prefix KEY_PART doesn't create prefix Field for blobs (see open_table_from_share() near "Create a new field for the key part"), so stored_field_cmp_to_item() will compare the original field to the value not taking the prefix length into account.
-
Sergei Golubchik authored
-
Aleksey Midenkov authored
This reverts commit add0c01b Duplicates must be avoided in FTS_DOC_ID_INDEX
-
Oleksandr Byelkin authored
-
Marko Mäkelä authored
-
- 30 Jul, 2023 1 commit
-
-
Kristian Nielsen authored
(It's not using include/rpl_init.inc, so it needs to reset the GTID position explicitly). Signed-off-by: Kristian Nielsen <knielsen@knielsen-hq.org>
-