summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* fix index corruption during insertbb-10.2-nikita-MDEV-26205Nikita Malyavin2021-07-226-6/+40
|
* Fix switch case statement in trx_flush_log_if_needed_low()Jagdeep Sidhu2021-07-201-1/+1
| | | | | | | | | | | | | | | | | | | | | In commit 2e814d4702d71a04388386a9f591d14a35980bfe 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.
* fix libmariadb compilation, on GCC.Vladislav Vaintroub2021-07-201-0/+0
|
* MDEV-20787 Script dgcov.pl does not workSergei Golubchik2021-07-201-1/+1
| | | | | | | | | 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.
* MDEV-20787 Script dgcov.pl does not workSergei Golubchik2021-07-201-18/+20
| | | | | | | | | | | | 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.
* Update libmariadbVladislav Vaintroub2021-07-201-0/+0
|
* MDEV-26135 Assertion failure when executing PS with a hanging recursive CTEIgor Babaev2021-07-193-2/+52
| | | | | | | | | | | | | | 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
* fix mysqld_safe --helpSergei Golubchik2021-07-191-1/+3
| | | | | put defaults* options first (and together). list --defaults-group-suffix too
* MDEV-26145: Incorrect metadata is sent on running query with union in PS modeDmitry Shulga2021-07-194-1/+81
| | | | | | | | | | | | | | | | | | | 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.
* MDEV-23597 Assertion `marked_for_read()' failed while evaluating DEFAULTNikita Malyavin2021-07-1611-10/+111
| | | | | | | | | | | | | | | | | | | | | | | | | | 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().
* MDEV-25858: Query results are incorrect when indexes are addedSergei Petrunia2021-07-153-0/+115
| | | | | | | | 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.
* Typo fix in extrabackup.cc and innobackupex.ccOli Sennhauser2021-07-152-2/+2
| | | | | Thanks to @shinguz for helping with this. This a backport commit from 10.7
* MDEV-25985 Spider handle ">=" as ">" in some casesNayuta Yanagisawa2021-07-144-9/+107
| | | | | | | | | | | | | | | | | | | | 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.
* MDEV-26119 RPM packages on RHEL-8 require the latest minorAlexey Bychko2021-07-131-1/+1
| | | | changed rpm db query to output only version for libsepol and not release/buildnumber
* MDEV-18249 ASSERT_COLUMN_MARKED_FOR_READ failed in ANALYZE TABLENikita Malyavin2021-07-124-2/+29
| | | | | | | | | | | 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+.
* follow-up MDEV-18166: rename marking functionsNikita Malyavin2021-07-126-24/+24
| | | | | | | | | | 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
* [2/2] MDEV-18166 ASSERT_COLUMN_MARKED_FOR_READ failed on tables with vcolsNikita Malyavin2021-07-128-13/+152
| | | | | | | | | | | | 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+
* [1/2] MDEV-18166 ASSERT_COLUMN_MARKED_FOR_READ failed on tables with vcolsNikita Malyavin2021-07-1211-4/+146
| | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* MDEV-17890 Server crash on DELETE with YEAR field with truncated exprNikita Malyavin2021-07-128-7/+225
| | | | | | | | | | | | | | | | | 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.
* MDEV-21206 Can't link zlib library during DBD::mysql installationRobert Bindar2021-07-121-1/+1
| | | | | | | | 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.
* MDEV-25998 encryption.innodb_encryption_filekeys failure in buildbotThirunarayanan Balathandayuthapani2021-07-091-0/+18
| | | | | | | - 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.
* Update description of mariadb-common packageAnel Husakovic2021-07-091-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - 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
* MDEV-26080: SHOW GRANTS does not quote role names properly for DEFAULT ROLEAnel Husakovic2021-07-0938-333/+387
| | | | | | | - Used single quotes, back quotes are used with commit fafb35ee517f309d9e507f6e3908caca5d8cd257 in 10.3 and will be changed. Reviewed by: serg@mariadb.org
* MDEV-26095 Infinite recursion when processing embedded recursive CTEIgor Babaev2021-07-083-1/+51
| | | | | | | | | | | | | | | | | | | | | | 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>
* MDEV-25802 mtr: race condition if the test quickly restarts twiceSergei Golubchik2021-07-062-10/+10
| | | | | | | | | | | | 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`)
* MDEV-25802 mtr: race condition if the test quickly restarts twiceSergei Golubchik2021-07-062-7/+10
| | | | | | | | | | | | | 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)
* MDEV-25857 MTR should report at least last test that was executed in case of ↵Sergei Golubchik2021-07-061-56/+46
| | | | | | | | | | | | | 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
* MDEV-25595 DROP part of failed CREATE OR REPLACE is not written into binary logAleksey Midenkov2021-07-067-0/+83
| | | | Do log_drop_table() in case of failed mysql_prepare_create_table().
* MDEV-25013: SIGSEGV in best_extension_by_limited_search | SIGSEGV in ↵Sergei Petrunia2021-07-032-0/+43
| | | | | | restore_prev_nj_state Add testcase
* MDEV-23937: SIGSEGV in looped best_extension_by_limited_search from ↵Sergei Petrunia2021-07-032-0/+41
| | | | | | greedy_search Add a testcase (fixed by fix for MDEV-17783)
* MDEV-17783: AddressSanitizer: stack-buffer-overflow in table_cond_selectivitySergei Petrunia2021-07-033-2/+92
| | | | | | | | | | | 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)
* MDEV-26081 set role crashes when a hostname cannot be resolvedSergei Golubchik2021-07-026-14/+55
| | | | host can be NULL
* submodules.cmake: add missing --depth=1Eugene Kosov2021-07-021-1/+1
|
* MDEV-26077 Assertion err != DB_DUPLICATE_KEY or unexpected ER_TABLE_EXISTS_ERRORMarko Mäkelä2021-07-023-27/+80
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a backport of 161e4bfafd261aa5204827086637d4d7dcceb949. trans_rollback_to_savepoint(): Only release metadata locks (MDL) if the storage engines agree, after the changes were already rolled back. Ever since commit 3792693f311a90cf195ec6d2f9b3762255a249c7 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 1bd681c8b3c5213ce1f7976940a7dc38b48a0d39 (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 3792693f311a90cf195ec6d2f9b3762255a249c7 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
* MDEV-25129 fixup: Adjust test resultMarko Mäkelä2021-07-021-0/+4
| | | | Fixup for commit 768c51880a5aa6d25d4c0fe7de7a88561ff46422
* MDEV-25129 postfix for windowsDaniel Black2021-07-021-1/+1
| | | | | | | 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 768c51880a5aa6d25d4c0fe7de7a88561ff46422
* MDEV-25969: Condition pushdown into derived table doesn't work if select ↵Sergei Petrunia2021-06-303-6/+289
| | | | | | | | | | | | | | | | | | | | | list uses SP Consider a query of the form: select ... from (select item2 as COL1) as T where COL1=123 Condition pushdown into derived table will try to push "COL1=123" condition down into table T. The process of pushdown involves "substituting" the item, that is, replacing Item_field("T.COL1") with its "producing item" item2. In order to use item2, one needs to clone it (call Item::build_clone). If the item is not cloneable (e.g. Item_func_sp is not), the pushdown process will fail and nothing at all will be pushed. Fixed by introducing transform_condition_or_part() which will try to apply the transformation for as many parts of condition as possible. The parts of condition that couldn't be transformed are dropped.
* MDEV-25129 Add KEYWORDS view to the INFORMATION_SCHEMAxing-zhi, jiang2021-06-2912-11/+306
| | | | | | | Add KEYWORDS table and SQL_FUNCTIONS table to INFORMATION_SCHEMA. This commits needs some minor changes when propagated upwards (e.g. func_array in item_create.cc has a termination element that doesn't exist in later versions of MariaDB)
* MDEV-26040 os_file_set_size() may not work on O_DIRECT filesMarko Mäkelä2021-06-291-5/+33
| | | | | os_file_set_size(): Trim the current size down to the file system block size, to obey the constraints for unbuffered I/O.
* MDEV-25461 Assertion `je->state == JST_KEY' failed in ↵Alexey Botchkov2021-06-283-0/+23
| | | | | | Geometry::create_from_json. Handle invalid GEOJSON-s in Geometry::create_from_json().
* Adjusted test results after the fix for MDEV-20411 (2)Igor Babaev2021-06-261-4/+4
|
* Adjusted test results after the fix for MDEV-20411Igor Babaev2021-06-264-15/+14
|
* MDEV-20411 Procedure containing CTE incorrectly stored in mysql.procIgor Babaev2021-06-254-3/+87
| | | | | | | | | | | | | If the first token of the body of a stored procedure was 'WITH' then the beginning of the body was determined incorrectly and that token was missing in the string representing the body of the SP in mysql.proc. As a resultnany call of such procedure failed as the string representing the body could not be parsed. The patch corrects the code of the functions get_tok_start() and get_cpp_tok_start() of the class Lex_input_stream to make them take into account look ahead tokens. The patch is needed only for 10.2 as this problem has neen resolved in 10.3+.
* MDEV-26019: Upgrading MariaDB breaks TLS mariabackup SSTJulius Goryavsky2021-06-253-8/+7
| | | | | | | | Fixed typo in variable name that breaks SST in some scenatios. Also fixed one small inaccuracy after MDEV-25978 which leads to the use of an uninitialized variable when the --log-bin option is specified without an argument.
* MDEV-25978 : rsync SST does not work with custom binlog nameJan Lindström2021-06-238-6/+259
| | | | | | | | wsrep_sst_common did not correctly set name for binlog index file if custom binlog name was used and this name was not added to script command line. Added test case for both log_basename and log_binlog.
* Fix try for Galera test lp1376747-4Jan Lindström2021-06-232-2/+2
|
* bump the VERSIONDaniel Bartholomew2021-06-221-1/+1
|
* MDEV-25960 yum update overwrites customized logrotation config ↵Alexey Bychko2021-06-221-1/+5
| | | | | | | | (/etc/logrotate.d/mysql) added %config directive to /etc/logrotate.d/mysql and put it to server package. if file is edited by customer and defaults are changed - new .rpmnew file with defaults will be created next to old one.
* MDEV-25982 Upgrade of MariaDB 10.1 log crashes due to missing encryption keyMarko Mäkelä2021-06-221-1/+7
| | | | | | | | init_crypt_key(): On failure, set info->key_version to ENCRYPTION_KEY_VERSION_INVALID. log_crypt_101_read_block(): Refuse to attempt decryption if info->key_version is ENCRYPTION_KEY_VERSION_INVALID.
* MDEV-25679 Wrong result selecting from simple view with LIMIT and ORDER BYIgor Babaev2021-06-213-1/+39
| | | | | | | | | | | | This bug affected queries with views / derived_tables / CTEs whose specifications were of the form (SELECT ... LIMIT <n>) ORDER BY ... Units representing such specifications contains one SELECT_LEX structure for (SELECT ... LIMIT <n>) and additionally SELECT_LEX structure for fake_select_lex. This fact should have been taken into account in the function mysql_derived_fill(). This patch has to be applied to 10.2 and 10.3 only.