- 13 Oct, 2022 1 commit
-
-
Oleg Smirnov authored
Queries to INFORMATION_SCHEMA.PARAMETERS and ROUTINES tables are always performed using full index scan of the mysql.proc primary key on fields (`db`,`name`,`type`). This can be done in a much more effective way if `db` and `name` field values can be derived from the WHERE statement, like here: SELECT * FROM INFORMATION_SCHEMA.PARAMETERS WHERE SPECIFIC_SCHEMA = 'test' AND SPECIFIC_NAME = 'my_func' or here: SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA='test' AND ROUTINE_NAME='my_func'. In such cases index range scan may be employed instead of full index scan. This commit makes the server retrieve lookup field values from the SQL statement and perform index range scan instead of full index scan if possible.
-
- 04 Oct, 2022 10 commits
-
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
Sergei Golubchik authored
post-merge fixes: * remove log_slow_queries_not_using_indexes, no need to create variables that are deprecated since the moment of creation * rename log_slow_query_enable->log_slow_query no other variable uses *_enable pattern * MDEV-29626 Assertion `self == &Sys_slow_query_log' failed in fix_log_state * tests Closes #2137
-
Michael Qin authored
Thus, all these variables will be grouped together and more logically named. Descriptions for the old variables were updated to indicate they are now aliases for the newly introduced variables with prefix log_slow. log_slow_queries_not_using_indexes_filter will not be addressed in this merge request. log_throttle_queries_not_using_indexes seems to no longer be in use. MTR tests are also updated to include the new variable names. All new code of the whole pull request, including one or several files that are either new files or modified ones, are contributed under the BSD-new license. I am contributing on behalf of my employer Amazon Web Services, Inc.
-
Sergei Golubchik authored
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
- 03 Oct, 2022 2 commits
-
-
Oleksandr Byelkin authored
-
Rucha Deodhar authored
Underlying causes of all bugs mentioned below are same. This patch fixes all of them: 1) MDEV-25028: ASAN use-after-poison in base_list_iterator::next or Assertion `sl->join == 0' upon INSERT .. RETURNING via PS 2) MDEV-25187: Assertion `inited == NONE || table->open_by_handler' failed or Direct leak in init_dynamic_array2 upon INSERT .. RETURNING and memory leak in init_dynamic_array2 3) MDEV-28740: crash in INSERT RETURNING subquery in prepared statements 4) MDEV-27165: crash in base_list_iterator::next 5) MDEV-29686: Assertion `slave == 0' failed in st_select_lex_node::attach_single Analysis: consider this statement: INSERT(1)...SELECT(2)...(SELECT(3)...) RETURNING (SELECT(4)...) When RETURNING is encountered, add_slave() changes how selects are linked. It makes the builtin_select(1) slave of SELECT(2). This causes losing of already existing slave(3) (which is nested select of SELECT of INSERT...SELECT). When really, builtin_select (1) shouldn't be slave to SELECT(2) because it is not nested within it. Also, push_select() to use correct context also changed how select are linked. During reinit_stmt_before_use(), we expect the selects to be cleaned-up and have join=0. Since these selects are not linked correctly, clean-up doesn't happen correctly so join is not NULL. Hence the crash. Fix: IF we are parsing RETURNING, make is_parsing_returning= true for current select. get rid of add_slave(). In place of push_select(), used push_context() to have correct context (the context of builtin_select) to resolve items in item_list. And add these items to item_list of builtin_select.
-
- 02 Oct, 2022 2 commits
-
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
- 01 Oct, 2022 3 commits
-
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
Sergei Golubchik authored
extended initializers are only allowed since c++11
-
- 30 Sep, 2022 10 commits
-
-
Aleksey Midenkov authored
When ha_end_bulk_insert() fails F_UNLCK was done twice: in select_insert::prepare_eof() and in select_create::abort_result_set(). Now we avoid making F_UNLCK in prepare_eof() if error is non-zero.
-
Sergei Golubchik authored
after d7d3ad69 debug_sync waits are no longer interrupted by soft kills that server shutdown is using. Luckily in this test there's no need to wait, it wants the commit to be properly completed, fully committed in both engines.
-
Alexander Barkov authored
Backporting from 10.5 to 10.4 This is needed to fix MDEV-28727 easier.
-
Sergei Golubchik authored
-
Oleksandr Byelkin authored
MDEV-17124: mariadb 10.1.34, views and prepared statements: ERROR 1615 (HY000): Prepared statement needs to be re-prepared The problem is that if table definition cache (TDC) is full of real tables which are in tables cache, view definition can not stay there so will be removed by its own underlying tables. In situation above old mechanism of detection matching definition in PS and current version always require reprepare and so prevent executing the PS. One work around is to increase TDC, other - improve version check for views/triggers (which is done here). Now in suspicious cases we check: - timestamp (microseconds) of the view to be sure that version really have changed; - time (microseconds) of creation of a trigger related to time (microseconds) of statement preparation.
-
Oleksandr Byelkin authored
-
Sergei Golubchik authored
-
Alexander Barkov authored
-
Anel Husakovic authored
- Added missing information about database of corresponding table for various types of commands - Update some typos - Reviewed by: <vicentiu@mariadb.org>
-
Marko Mäkelä authored
We do not need a non-inline wrapper for the function destroy_background_thd().
-
- 29 Sep, 2022 9 commits
-
-
Aleksey Midenkov authored
ha_release_auto_increment() must be done before F_UNLCK. Non-atomic case is handled by select_insert::binlog_query().
-
Aleksey Midenkov authored
MDEV-28933 added a condition to avoid keeping cached foreign keys when renaming into temporary table. Such foreign keys must be freed.
-
Aleksey Midenkov authored
make_tmp_name() creates temporary name with prefix containing PID and TID. This prefix influences max length of the rest of the name (the whole name is limited by NAME_LEN). During the test run PID and TID can change. PID increases when the server restarts. TID is incremented with the new connections (generated by next_thread_id(), is not the posix thread ID). During the test run PID can increase max 2 decimal positions: from tens to thousands this requires ~900 restarts. TID depends on connection count, but for test we assume it will not trespass 100000 connections which is 5 decimal positions. So it should be enough to reserve 7 characters for PID and TID increment. The patch reserves more: it reserves 12 characters for 7-decimal PID and 5-decimal TID plus 4 chars of additional reserve (for future prefix changes) and assumes minimal legth of the prefix is 30 bytes: #sql-backup-PID-TID- #sql-create-PID-TID- 4-6-PID-TID- is 10 + 4 + PID + TID, so PID + TID is 16 chars (7 + 5 + 4).
-
Aleksey Midenkov authored
Usually when we get into finalize_locked_tables() with error m_locked_tables_count was not decremented. m_locked_tables_count is decremented when we drop the original table and if we failed that m_locked_tables_count is expected intact. The bug comes from the fact that finalize_atomic_replace() violates the above contract. It does HA_EXTRA_PREPARE_FOR_DROP and decrements m_locked_tables_count. Then it tries rename_table_and_triggers() and fails. With decremented m_locked_tables_count reopen_tables() does nothing and we don't get new value for pos_in_locked_tables->table. The test case demonstrates ER_ERROR_ON_RENAME where non-atomic CREATE OR REPLACE would not fail. The original RENAME TABLE fails under such broken environment, so nothing is wrong with atomic CREATE OR REPLACE failing there too.
-
Sergei Golubchik authored
mysqlslap has an unusual semantics of the --iterations option, so that $ mysqlslap --concurrency=16 --iterations=1000 performs 16,000 connections. Because of that it gets many times slower with --ssl Let's disable ssl for mysqlslap in mysql-test
-
Sergei Golubchik authored
-
Sergei Golubchik authored
thd_get_ha_data() can be used without a lock, but only from the current thd thread, when calling from anoher thread it *must* be protected by thd->LOCK_thd_data * fix group commit code to take thd->LOCK_thd_data * remove innobase_close_connection() from the innodb background thread, it's not needed after 87775402 and was failing the assert with current_thd==0
-
Sergei Golubchik authored
KILL QUERY ID 0 was sometimes finding con3 that was still in the process of disconnecting and had query_id==0 (as it didn't run any queries)
-
Igor Babaev authored
This patch resolves the problem of improper name resolution of table references to embedded CTEs for some queries. This improper binding could lead to - infinite sequence of calls of recursive functions - crashes due to resolution of null pointers - wrong result sets returned by queries - bogus error messages If the definition of a CTE contains with clauses then such CTE is called embedding CTE while CTEs from the with clauses are called embedded CTEs. If a table reference used in the definition of an embedded CTE cannot be resolved within the unit that contains this reference it still may be resolved against a CTE definition from the with clause with one of the embedding CTEs. A table reference can be resolved against a CTE definition if it used in the the scope of this definition and it refers to the name of the CTE. Table reference t is in the scope of the CTE definition of CTE cte if - the definition of cte is an element of a with clause declared as RECURSIVE and the reference t belongs either to the unit to which this with clause is attached or to one of the elements of this clause - the definition of cte is an element of a with clause without RECURSIVE specifier and the reference t belongs either to the unit to which this with clause is attached or to one of the elements from this clause that are placed before the definition of cte. If a table reference can be resolved against several CTE definitions then it is bound to the most embedded. The code before this patch not always resolved table references used in embedded CTE according to the above rules. Approved by Oleksandr Byelkin <sanja@mariadb.com>
-
- 28 Sep, 2022 3 commits
-
-
Sergei Golubchik authored
MDEV-29368 Assertion `trx->mysql_thd == thd' failed in innobase_kill_query from process_timers/timer_handler and use-after-poison in innobase_kill_query This is a 10.5 version of 9b750dcb, fix for MDEV-23536 Race condition between KILL and transaction commit InnoDB needs to remove trx from thd before destroying it (trx), otherwise a concurrent KILL might get a pointer from thd to a destroyed trx. ha_close_connection() should allow engines to clear ha_data in hton->on close_connection(). To prevent the engine from being unloaded while hton->close_connection() is running, we remove the lock from ha_data and unlock the plugin manually.
-
Sergei Golubchik authored
split it into debug and non-debug tests
-
Sergei Golubchik authored
only "hard" kills will now interrupt debug_sync waits. this is needed to have debug_sync points that work during disconnect
-