- 21 Jul, 2021 1 commit
-
-
Vicențiu Ciorbaru authored
-
- 20 Jul, 2021 9 commits
-
-
Igor Babaev authored
from view A crash of the server happened when executing a stored procedure whose the only query calculated window functions over a mergeable view specified as a select from non-mergeable view. The crash could be reproduced if the window specifications of the window functions were identical and both contained PARTITION lists and ORDER BY lists. A crash also happened on the second execution of the prepared statement created for such query. If to use derived tables or CTE instead of views the problem still manifests itself crashing the server. When optimizing the window specifications of a window function the server can substitute the partition lists and the order lists for the corresponding lists from another window specification in the case when the lists are identical. This substitution is not permanent and should be rolled back before the second execution. It was not done and this ultimately led to a crash when resolving the column names at the second execution of SP/PS.
-
Igor Babaev authored
This bug appeared after the patch for bug MDEV-23886. Due to this bug execution of queries with CTEs used the same CTE at least twice via prepared statements or with stored procedures caused crashes of the server. It happened because the select created for any of not the first usage of a CTE erroneously was not included into all_selects_list. This patch corrects the patch applied to fix the bug MDEV-26108. Approved by Oleksandr Byelkin <sanja@mariadb.com>
-
Eugene Kosov authored
-
Eugene Kosov authored
Store and maintain xdes pages always. And doesn't verify checksums for freed pages. innochecksum can work only with the first space file of multiple ones. Tell about it and abort in case of not the first file.
-
Jagdeep Sidhu authored
In commit 2e814d47 on MariaDB 10.2 the switch case statement in trx_flush_log_if_needed_low() regressed. Since 10.2 this code was refactored to have switches in descending order, so value of 3 for innodb_flush_log_at_trx_commit is behaving the same as value of 2, that is no FSYNC is being enforced during COMMIT phase. The switch should however not be empty and cases 2 and 3 should not have the identical contents. As per documentation, setting innodb_flush_log_at_trx_commit to 3 should do FSYNC to disk if innodb_flush_log_at_trx_commit is set to 3. This fixes the regression so that the switch statement again does what users expect the setting should do. 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.
-
Vladislav Vaintroub authored
-
Sergei Golubchik authored
When building with `make` gcov files use full path names, when building with `ninja` gcov files use paths relative to the source root in gcov_one_file() the current directory is somewhere under CMakeFiles/, so if a file exists in the specified location, this location must've been a full path name.
-
Sergei Golubchik authored
For every file.gcda file, gcov <7.x created file.cc.gcda.gcov. While gcov 7.x and 8.x create file.cc.gcov And sometimes otherfile.h.gcov or otherfile.ic.gcov, for included files. (gcov 9.x+ creates .json.gz files, see MDEV-26102) So, we use `gcov -l` that will create file.cc.gcda##file.cc.gcov, file.cc.gcda##otherfile.h.gcov, etc. And we search and parse all those file.cc.gcda*.gcov files.
-
Vladislav Vaintroub authored
-
- 19 Jul, 2021 3 commits
-
-
Igor Babaev authored
The bug affected execution of queries with With clauses containing so-called hanging recursive CTEs in PREPARE mode. A CTE is hanging if it's not used in the query. Preparation of a prepared statement from a query with a hanging CTE caused a leak in the server and execution of this prepared statement led to an assert failure of the server built in the debug mode. This happened because the units specifying recursive CTEs erroneously were not cleaned up if those CTEs were hanging. The patch enforces cleanup of hanging recursive CTEs in the same way as other hanging CTEs. Approved by dmitry.shulga@mariadb.com
-
Sergei Golubchik authored
put defaults* options first (and together). list --defaults-group-suffix too
-
Dmitry Shulga authored
Test cases like the following one produce different result sets if it's run with and without th option --ps-protocol. CREATE TABLE t1(a INT); --enable_metadata (SELECT MAX(a) FROM t1) UNION (SELECT MAX(a) FROM t1); --disable_metadata DROP TABLE t1; Result sets differ in metadata for the query (SELECT MAX(a) FROM t1) UNION (SELECT MAX(a) FROM t1); The reason for different content of query metadata is that for queries with union the items being created on JOIN preparing phase is placed into item_list from SELECT_LEX_UNIT whereas for queries without union item_list from SELECT_LEX is used instead.
-
- 16 Jul, 2021 1 commit
-
-
Nikita Malyavin authored
The columns that are part of DEFAULT expression were not read-marked in statements like UPDATE...SET b=DEFAULT. The problem is `F(DEFAULT)` expression depends of the left-hand side of an assignment. However, setup_fields accepts only right-hand side value. Neither Item::fix_fields does. Suchwise, b=DEFAULT(b) works fine, because Item_default_field has information on what field it is default of: if (thd->mark_used_columns != MARK_COLUMNS_NONE) def_field->default_value->expr->update_used_tables(); in Item_default_value::fix_fields(). It is not reasonable to pass a left-hand side to Item:fix_fields, because the case is rare, so the rewrite b= F(DEFAULT) -> b= F(DEFAULT(b)) is made instead. Both UPDATE and multi-UPDATE are affected, however any form of INSERT is not: it marks all the fields in DEFAULT expressions for read in TABLE::mark_default_fields_for_write().
-
- 15 Jul, 2021 2 commits
-
-
Sergei Petrunia authored
If test_if_skip_sort_order() decides to use an index to produce required ordering, it should disable "Range Checked for each record" optimization. This is because Range-Checked-for-each-record may decide to use an index (or an index_merge) which will not produce the required ordering.
-
Oli Sennhauser authored
Thanks to @shinguz for helping with this. This a backport commit from 10.7
-
- 14 Jul, 2021 1 commit
-
-
Nayuta Yanagisawa authored
The function spider_db_append_key_where_internal() converts HA_READ_AFTER_KEY to '>'. The conversion seems to be correct for single-column indexes because HA_READ_AFTER_KEY means "read the key after the provided value." However, how about multi-column indexes? Assume that there is a multi-column index on c1 and c2 and we search with the condition 'c1 >= 100 AND c2 > 200'. The key_range.flag corresponds to the search condition could be HA_READ_AFTER_KEY. In such a case, we could not simply convert HA_READ_AFTER_KEY to '>'. The correct conversion is to convert HA_READ_AFTER_KEY to '>' only for the last column in key_part_map and to convert HA_READ_AFTER_KEY to '>=' for the other column. The similar discussion also applies to the conversion from key_range.flag to a sign of inequality.
-
- 13 Jul, 2021 1 commit
-
-
Alexey Bychko authored
changed rpm db query to output only version for libsepol and not release/buildnumber
-
- 12 Jul, 2021 6 commits
-
-
Nikita Malyavin authored
The problem is the same as in MDEV-18166: columns in virtual field expression are not marked for read, while the field itself does. field->register_field_in_read_map() should be called for read-marking all fields. The test is reproduced only in 10.4+, however the fix is applicable to 10.2+.
-
Nikita Malyavin authored
Reformulate mark_columns_used_by_index* function family in a more laconic way: mark_columns_used_by_index -> mark_index_columns mark_columns_used_by_index_for_read_no_reset -> mark_index_columns_for_read mark_columns_used_by_index_no_reset -> mark_index_columns_no_reset static mark_index_columns -> do_mark_index_columns
-
Nikita Malyavin authored
Several different test cases were failing under the same reason: the fields in a vcol expression were not marked during marking columns of a key contatining virtual column for read. Fix: make marking columns of a key for read a special case where register_field_in_read_map() is done instead of plain bitmap_set_bit(). Some test cases are only reproducible in 10.4+, but the fix is applicable to 10.2+
-
Nikita Malyavin authored
This is a 10.2+ part of a jira task The two bugs regarding virtual column marking have been fixed: 1. UPDATE of a partitioned table, where the optimizer has chosen a secondary index to make a filesort; 2. INSERT into a table with a nonblob field generated from a blob, with binlog enabled and binlog_row_image=noblob. 3. DELETE from a view on a table with virtual column. Generally the assertion happens from update_virtual_fields() call These bugs are root-caused by missing field marking for dependant fields of a virtual column. Therefore a fix is: mark all the fields involved in the vcol expression by calling field->register_field_in_read_map() instead just setting a single bit. 3 was reproducible only on 10.4+, however the problem might has just been invisible in the earlier versions. The fix is applicable to 10.2-10.3 as well.
-
Nikita Malyavin authored
The failing reason was inconsistent truncation rules: the value of virtual column could have been evaluated to '2000' sometimes instead of '0000' for value 'a'. The reason why `c YEAR AS ('aaaa')` was not evaluated same is that len=4 is a special case insidew Field_year::store. The correct fix is: always evaluate a bad value to 0000 instead 2000. The truncated values should be evaluated as usual. $support_virtual_index is finally changed to 1 in gcol.gcol_ins_upd_innodb, which is also enough for testing. The test from original bug report is also added.
-
Robert Bindar authored
mysql_config should never return -lzlib as linking flag. Clients trying to link against mariadb that use the output of mysql_config experience linking error because we return -lzlib when we don't ship any libzlib.a in our binary tarballs, bundled zlib static library is already linked.
-
- 09 Jul, 2021 3 commits
-
-
Thirunarayanan Balathandayuthapani authored
- Set the innodb_encrypt_tables variable before timeout happens. It will add the pending tablespace to default encrypt list and does the encryption/decryption based on innodb_encrypt_tables.
-
Anel Husakovic authored
- Commit https://github.com/mariadb/server/commit/438ed0408c69 introduced `mariadb-common` package and added description. Example in description is confusing since files referred to are not installed and not related/owned by the `mariadb-common` package. - Patch is updating real file/directory description section pointing to the real examples owned by the package. - Example: ``` mariadb-client-10.3 install mariadb-client-core-10.3 install mariadb-common install mariadb-server install mariadb-server-10.3 install mariadb-server-core-10.3 install /. /etc /etc/mysql /etc/mysql/mariadb.cnf /etc/mysql/mariadb.conf.d /usr /usr/share /usr/share/doc /usr/share/doc/mariadb-common /usr/share/doc/mariadb-common/changelog.Debian.gz /usr/share/doc/mariadb-common/copyright ``` Closes PR #1690 Reviewed by: otto@kekalainen.net
-
Anel Husakovic authored
- Used single quotes, back quotes are used with commit fafb35ee in 10.3 and will be changed. Reviewed by: serg@mariadb.org
-
- 08 Jul, 2021 1 commit
-
-
Igor Babaev authored
with missing RECURSIVE If a table reference r used inthe specification of a CTE whose definition is contained in the WITH clause where RECURSIVE is omitted then this table reference cannot be considered as a recursive table reference even if it is used in the query that specifies CTE whose name is r. It can be considered only as a reference to an embedding CTE or to a temporary table or to a base table/view. If there is no such object with name r then an error message must be reported. This patch fixes the code that actually in some cases resolved r as a reference to the CTE whose specification contained r if its name was r in spite of the fact that r was not considered as a recursive CTE. This happened in the cases when the definition of r was used in the specification of another CTE. Such wrong name resolution for r led to an infinite recursive invocations of the parser that ultimately crashed the server. This bug is a result of the fix for mdev-13780 that was not quite correct. Approved by Oleksandr Byelkin <sanja@mariadb.com>
-
- 06 Jul, 2021 3 commits
-
-
Sergei Golubchik authored
part II need to tell SafeProcess not to collect the exited mysqld in sleep_until_file_created(), so that it would be found in the later wait_any_timeout() in run_testcase() Removed a strange condition in SafeProcess::wait_one() that treated return value of -1 from waitpid() as "process exists" instead of as "no such child process" (see `perldoc -f waitpid`)
-
Sergei Golubchik authored
expect file is always removed before starting a server. So if it exists here, it means the server started successfully, mysqltest continued executing the test, created a new expect file, and shut down the server. All while we were waiting for the server to start. In other words, if the expect file exists, the server did actually start. Even if it isn't running now. This fixes occasional failures of innodb.log_corruption (in 10.6)
-
Sergei Golubchik authored
MDEV-25857 MTR should report at least last test that was executed in case of shutdown and not-completed * return a success/failure value from mysqld_start() and don't error out / exit in mysqld_start(), the caller will do * pass the correct $mysqld object into check_expected_crash_and_restart() instead of searching for it inside. Search in the caller * so that when a failed restart changes $mysqld->{proc}, mtr would still detect it as a failed mysqld (by updating $proc to match) also: log the server command line into the server error log
-
- 05 Jul, 2021 1 commit
-
-
Aleksey Midenkov authored
Do log_drop_table() in case of failed mysql_prepare_create_table().
-
- 03 Jul, 2021 3 commits
-
-
Sergei Petrunia authored
Add testcase
-
Sergei Petrunia authored
Add a testcase (fixed by fix for MDEV-17783)
-
Sergei Petrunia authored
A less-intrusive fix: don't have table_cond_selectivity() assume that there are less than MAX_REF_PARTS hash-join KEYUSEs. If there are more than that, switch to using an array. Allocate the array on the heap: we can't allocate it on MEM_ROOT as table_cond_selectivity() is called many times during the optimization. (Variant 2, with review input addressed)
-
- 02 Jul, 2021 5 commits
-
-
Sergei Golubchik authored
host can be NULL
-
Eugene Kosov authored
-
Marko Mäkelä authored
This is a backport of 161e4bfa. trans_rollback_to_savepoint(): Only release metadata locks (MDL) if the storage engines agree, after the changes were already rolled back. Ever since commit 3792693f and mysql/mysql-server@55ceedbc3feb911505dcba6cee8080d55ce86dda we used to cheat here and always release MDL if the binlog is disabled. MDL are supposed to prevent race conditions between DML and DDL also when no replication is in use. MDL are supposed to be a superset of InnoDB table locks: InnoDB table lock may only exist if the thread also holds MDL on the table name. In the included test case, ROLLBACK TO SAVEPOINT would wrongly release the MDL on both tables and let ALTER TABLE proceed, even though the DML transaction is actually holding locks on the table. Until commit 1bd681c8 (MDEV-25506) in MariaDB 10.6, InnoDB would often work around the locking violation in a blatantly non-ACID way: If locks exist on a table that is being dropped (in this case, actually a partition of a table that is being rebuilt by ALTER TABLE), InnoDB could move the table (or partition) into a queue, to be dropped after the locks and references had been released. If the lock is not released and the original copy of the table not dropped quickly enough, a name conflict could occur on a subsequent ALTER TABLE. The scenario of commit 3792693f is unaffected by this fix, because mysqldump would use non-locking reads, and the transaction would not be holding any InnoDB locks during the execution of ROLLBACK TO SAVEPOINT. MVCC reads inside InnoDB are only covered by MDL and page latches, not by any table or record locks. FIXME: It would be nice if storage engines were specifically asked which MDL can be released, instead of only offering a choice between all or nothing. InnoDB should be able to release any locks for tables that are no longer in trx_t::mod_tables, except if another transaction had converted some implicit record locks to explicit ones, before the ROLLBACK TO SAVEPOINT had been completed. Reviewed by: Sergei Golubchik
-
Marko Mäkelä authored
Fixup for commit 768c5188
-
Daniel Black authored
C:\projects\server\sql\sql_show.cc(7913): error C2220: warning treated as error - no 'object' file generated [C:\projects\server\win_build\sql\sql.vcxproj] C:\projects\server\sql\sql_show.cc(7913): warning C4267: 'initializing': conversion from 'size_t' to 'uint', possible loss of data [C:\projects\server\win_build\sql\sql.vcxproj] caused by 768c5188
-