- 19 Jul, 2021 1 commit
-
-
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
-
- 30 Jun, 2021 1 commit
-
-
Sergei Petrunia authored
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.
-
- 29 Jun, 2021 2 commits
-
-
xing-zhi, jiang authored
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)
-
Marko Mäkelä authored
os_file_set_size(): Trim the current size down to the file system block size, to obey the constraints for unbuffered I/O.
-
- 28 Jun, 2021 1 commit
-
-
Alexey Botchkov authored
Handle invalid GEOJSON-s in Geometry::create_from_json().
-
- 27 Jun, 2021 1 commit
-
-
Igor Babaev authored
-
- 26 Jun, 2021 2 commits
-
-
Igor Babaev authored
-
Igor Babaev authored
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+.
-
- 25 Jun, 2021 1 commit
-
-
Julius Goryavsky authored
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.
-
- 23 Jun, 2021 3 commits
-
-
Jan Lindström authored
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.
-
Jan Lindström authored
-
Daniel Bartholomew authored
-
- 22 Jun, 2021 1 commit
-
-
Alexey Bychko authored
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.
-