summaryrefslogtreecommitdiff
path: root/sql
Commit message (Collapse)AuthorAgeFilesLines
* MDEV-17399 Add support for JSON_TABLE.bb-mdev-17399-hfAlexey Botchkov2020-07-284-1/+10
| | | | EXPLAIN and EXPLAIN FORMAT=JSON added for the JSON_TABLE.
* testing commit.Alexey Botchkov2020-07-161-0/+1
|
* MDEV-17399 Add support for JSON_TABLE.Alexey Botchkov2020-07-1620-34/+1659
| | | | | ha_json_table handler implemented. JSON_TABLE() added to SQL syntax.
* MDEV-21902 Nested JSON_ARRAYAGG in JSON_OBJECT should not get escaped.Alexey Botchkov2020-06-041-0/+1
|
* MDEV-21914 JSON_ARRAYAGG doesn't reject ORDER BY clause, but doesn't work ↵Alexey Botchkov2020-06-044-18/+76
| | | | | | either. ORDER BY fixed for JSON_ARRAYAGG.
* MDEV-22084 Squared brackets missing from JSON_ARRAYAGG when used in a view.Alexey Botchkov2020-06-041-4/+8
| | | | | Item_func_groupconcat::print() should be fixed to work for the derived classes.
* MDEV-22640, MDEV-22449, MDEV-21528 JSON_ARRAYAGG crashes with NULL values.Alexey Botchkov2020-06-044-28/+32
| | | | | | We have to include NULL in the result which the GOUP_CONCAT doesn't always do. Also converting should be done into another String instance as these can be same.
* Merge 10.4 into 10.5Marko Mäkelä2020-06-039-294/+283
|\
| * Merge 10.3 into 10.4Marko Mäkelä2020-06-039-296/+283
| |\
| | * Merge 10.2 into 10.3Marko Mäkelä2020-06-029-307/+292
| | |\
| | | * Merge 10.1 into 10.2Marko Mäkelä2020-06-019-304/+288
| | | |\
| | | | * Thread safe histograms loadingSergey Vojtovich2020-05-294-103/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously multiple threads were allowed to load histograms concurrently. There were no known problems caused by this. But given amount of data races in this code, it'd happen sooner or later. To avoid scalability bottleneck, histograms loading is protected by per-TABLE_SHARE atomic variable. Whenever histograms were loaded by preceding statement (hot-path), a scalable load-acquire check is performed. Whenever histograms have to be loaded anew, mutual exclusion for loaders is established by atomic variable. If histograms are being loaded concurrently, statement waits until load is completed. - Table_statistics::total_hist_size moved to TABLE_STATISTICS_CB: only meaningful within TABLE_SHARE (not used for collected stats). - TABLE_STATISTICS_CB::histograms_can_be_read and TABLE_STATISTICS_CB::histograms_are_read are replaced with a tri state atomic variable. - Simplified away alloc_histograms_for_table_share(). Note: there's still likely a data race if a thread attempts accessing histograms data after it failed to load it (because of concurrent load). It was there previously and goes out of the scope of this effort. One way of fixing it could be reviving TABLE::histograms_are_read and adding appropriate checks whenever it is needed. Part of MDEV-19061 - table_share used for reading statistical tables is not protected
| | | | * Thread safe statistics loadingSergey Vojtovich2020-05-293-60/+116
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously multiple threads were allowed to load statistics concurrently. There were no known problems caused by this. But given amount of data races in this code, it'd happen sooner or later. To avoid scalability bottleneck, statistics loading is protected by per-TABLE_SHARE atomic variable. Whenever statistics were loaded by preceding statement (hot-path), a scalable load-acquire check is performed. Whenever statistics have to be loaded anew, mutual exclusion for loaders is established by atomic variable. If statistics are being loaded concurrently, statement waits until load is completed. TABLE_STATISTICS_CB::stats_can_be_read and TABLE_STATISTICS_CB::stats_is_read are replaced with a tri state atomic variable. Part of MDEV-19061 - table_share used for reading statistical tables is not protected
| | | | * Simplified away statistics_for_tables_is_needed()Sergey Vojtovich2020-05-291-81/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Removed redundant loops, integrated logics into the caller instead. Unified condition in read_statistics_for_tables(), less "table_share != NULL" checks, no more potential "table_share == NULL" dereferencing. Part of MDEV-19061 - table_share used for reading statistical tables is not protected
| | | | * MDEV-22744 *SAN: sql/item_xmlfunc.cc:791:43: runtime error: downcast of ↵Alexander Barkov2020-05-291-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | address ... which does not point to an object of type 'Item_func' note: object is of type 'Item_bool' (on optimized builds) In Item_nodeset_func_predicate::val_nodeset, args[1] is not necessarily an Item_func descendant. It can be Item_bool. Removing a wrong cast. It was not really needed anyway.
| | | | * fix pre-definition for embedded server for find_user_or_anon()Anel Husakovic2020-05-281-28/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Pre-definitions are allowed for non-embedded. Failur catched with: ``` cmake ../../10.1 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=g++-9 -DCMAKE_C_COMPILER=gcc-9 -DWITH_EMBEDDED_SERVER=ON -DCMAKE_BUILD_TYPE=Debug -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,PERFSCHEMA,SPIDER,SPHINX}=N -DMYSQL_MAINTAINER_MODE=ON -DNOT_FOR_DISTRIBUTION=ON ``` Alternative fix would be ``` --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -201,8 +201,10 @@ LEX_STRING current_user= { C_STRING_WITH_LEN("*current_user") }; LEX_STRING current_role= { C_STRING_WITH_LEN("*current_role") }; LEX_STRING current_user_and_current_role= { C_STRING_WITH_LEN("*current_user_and_current_role") }; +#ifndef EMBEDDED_LIBRARY class ACL_USER; static ACL_USER *find_user_or_anon(const char *host, const char *user, const char *ip); +#endif ```
| | | | * MDEV-22312: Bad error message for SET DEFAULT ROLE when user account is not ↵Anel Husakovic2020-05-284-42/+97
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | granted the role - `SET DEFAULT ROLE xxx [FOR yyy]` should say: "User yyy has not been granted a role xxx" if: - The current user (not the user `yyy` in the FOR clause) can see the role xxx. It can see the role if: * role exists in `mysql.roles_mappings` (traverse the graph), * If the current user has read access on `mysql.user` table - in that case, it can see all roles, granted or not. - Otherwise it should be "Invalid role specification". In other words, it should not be possible to use `SET DEFAULT ROLE` to discover whether a specific role exist or not.
| | | | * MDEV-15152 Optimistic parallel slave doesnt cope well with START SLAVE UNTILAndrei Elkin2020-05-264-19/+102
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The immediate bug was caused by a failure to recognize a correct position to stop the slave applier run in optimistic parallel mode. There were the following set of issues that the analysis unveil. 1 incorrect estimate for the event binlog position passed to is_until_satisfied 2 wait for workers to complete by the driver thread did not account non-group events that could be left unprocessed and thus to mix up the last executed binlog group's file and position: the file remained old and the position related to the new rotated file 3 incorrect 'slave reached file:pos' by the parallel slave report in the error log 4 relay log UNTIL missed out the parallel slave branch in is_until_satisfied. The patch addresses all of them to simplify logics of log change notification in either the master and relay-log until case. P.1 is addressed with passing the event into is_until_satisfied() for proper analisis by the function. P.2 is fixed by changes in handle_queued_pos_update(). P.4 required removing relay-log change notification by workers. Instead the driver thread updates the notion of the current relay-log fully itself with aid of introduced bool Relay_log_info::until_relay_log_names_defer. An extra print out of the requested until file:pos is arranged with --log-warning=3.
* | | | | MDEV-22509: Server crashes in Field_inet6::store_inet6_null_with_warn / ↵Varun Gupta2020-06-023-16/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Field::maybe_null For field with type INET, during EITS collection the min and max values are store in text representation in the statistical table. While retrieving the value from the statistical table, the value is stored back in the original field using binary form instead of text and this was resulting in the crash. Introduced 2 functions in the Field structure: 1) store_to_statistical_minmax_field 2) store_from_statistical_minmax_field
* | | | | MDEV-22303: Incorrect ordering with REGEXP_REPLACE and OFFSET/LIMITVarun Gupta2020-06-012-32/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For character sets and collation where character to weight mapping > 1, there we need to make sure while creating a sort key, a temporary buffer is created to store the value of the item by val_str function and then copy that value back to the sort buffer. In this case when using a priority queue Sort_param::tmp_buffer was not allocated. Minor refactoring: Changed Sort_param::tmp_buffer from char* to String
* | | | | MDEV-20280 PERCENTILE_DISC() rejects temporal and string inputAlexander Barkov2020-06-012-8/+12
| | | | |
* | | | | MDEV-22764 Crash with a stored aggregate function returning INET6Alexander Barkov2020-06-011-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Item_sum_sp did not override val_native(). So the reported script crashed in the default implementation in Item::val_native() on DBUG_ASSERT(). Implementing a correct Item_sum_sp::val_native().
* | | | | MDEV-20809 EXTRACT from INET6 value does not produce any warningsAlexander Barkov2020-06-014-0/+22
| | | | | | | | | | | | | | | | | | | | | | | | | Disallowing EXTRACT(xxx FROM inet6arg) as fix time. Adding a new method Type_handler::can_return_extract_source().
* | | | | Merge 10.4 into 10.5Marko Mäkelä2020-05-3134-374/+685
|\ \ \ \ \ | |/ / / /
| * | | | Merge 10.3 into 10.4Marko Mäkelä2020-05-3016-74/+207
| |\ \ \ \ | | |/ / /
| | * | | Merge 10.2 into 10.3Marko Mäkelä2020-05-295-10/+33
| | |\ \ \ | | | |/ /
| | | * | Fix cmake warning - custom command succeeds without creating own OUTPUT.Vladislav Vaintroub2020-05-291-0/+1
| | | | |
| | | * | assert(a && b); -> assert(a); assert(b);Sergei Golubchik2020-05-271-7/+10
| | | | |
| | | * | Revert "MDEV-12445 : Rocksdb does not shutdown worker threads and aborts in ↵Sergei Golubchik2020-05-271-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | memleak check on server shutdown" This reverts commit 6f1f9114971c3c158e9ac97313c92a24f6554415. because it doesn't do anything now (the server doesn't check my_disable_leak_check) and it never did anything before (because without `extern` it simply created a local instance of my_disable_leak_check, did not affect server's my_disable_leak_check).
| | | * | MDEV-21958 Query having many NOT-IN clauses running forever and causing ↵Sergei Golubchik2020-05-271-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | available free memory to use completely let thd->killed to abort range optimizer
| | | * | bugfix: use THD::main_mem_root for kill error messageSergei Golubchik2020-05-271-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | cannot use the current THD::mem_root, because it can be temporarily reassigned to something with a very different life time (e.g. to TABLE::mem_root or range optimizer mem_root).
| | | * | MDEV-22558 wrong error for invalid utf8 table commentSergei Golubchik2020-05-271-0/+19
| | | | |
| | * | | MDEV-16937 Strict SQL with system versioned tables causes issuesAleksey Midenkov2020-05-284-1/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Respect system fields in NO_ZERO_DATE mode. This is the subject for refactoring in MDEV-19597
| | * | | MDEV-22413 Server hangs upon UPDATE on a view reading from versioned ↵Aleksey Midenkov2020-05-281-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | partitioned table UPDATE gets access to history records because versioning conditions are not set for VIEW. This leads to endless loop of inserting history records when clustered index is rebuilt and ha_rnd_next() returns newly inserted history record. Return back original behavior of failing on write-locked table in historical query. 35b679b9 assumed that SELECT_LEX::lock_type influences anything, but actually at this point table is already locked. Original bug report was tempesta-tech/mariadb#102
| | * | | MDEV-18794 append_drop_column() small refactoringAleksey Midenkov2020-05-281-14/+11
| | | | | | | | | | | | | | | | | | | | Bogus if() logic inside the func.
| | * | | MDEV-18794 Assertion `!m_innodb' failed in ha_partition::cmp_ref upon SELECT ↵Aleksey Midenkov2020-05-281-29/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | from partitioned table System versioning assertion fix. Since DROP SYSTEM VERSIONING does not change list of dropped keys we should handle a special case. Caused by MDEV-19751. This fix deprecates MDEV-17091.
| | * | | Merge 10.2 into 10.3Marko Mäkelä2020-05-279-30/+145
| | |\ \ \ | | | |/ /
| | | * | Fixed crash in aria recovery when using bulk insertMonty2020-05-262-7/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | MDEV-20578 Got error 126 when executing undo undo_key_delete upon Aria crash recovery The crash happens in this scenario: - Table with unique keys and non unique keys - Batch insert (LOAD DATA or INSERT ... SELECT) with REPLACE - Some insert succeeds followed by duplicate key error In the above scenario the table gets corrupted. The bug was that we don't generate any undo entry for the failed insert as the whole insert can be ignored by undo. The code did however not take into account that when bulk insert is used, we would write cached keys to the file on failure and undo would wrongly ignore these. Fixed by moving the writing of the cache keys after we write the aborted-insert event to the log.
| | | * | MDEV-15152 Optimistic parallel slave doesnt cope well with START SLAVE UNTILAndrei Elkin2020-05-264-20/+103
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The immediate bug was caused by a failure to recognize a correct position to stop the slave applier run in optimistic parallel mode. There were the following set of issues that the analysis unveil. 1 incorrect estimate for the event binlog position passed to is_until_satisfied 2 wait for workers to complete by the driver thread did not account non-group events that could be left unprocessed and thus to mix up the last executed binlog group's file and position: the file remained old and the position related to the new rotated file 3 incorrect 'slave reached file:pos' by the parallel slave report in the error log 4 relay log UNTIL missed out the parallel slave branch in is_until_satisfied. The patch addresses all of them to simplify logics of log change notification in either the master and relay-log until case. P.1 is addressed with passing the event into is_until_satisfied() for proper analisis by the function. P.2 is fixed by changes in handle_queued_pos_update(). P.4 required removing relay-log change notification by workers. Instead the driver thread updates the notion of the current relay-log fully itself with aid of introduced bool Relay_log_info::until_relay_log_names_defer. An extra print out of the requested until file:pos is arranged with --log-warning=3.
| | | * | MDEV-20015 Assertion `!in_use->is_error()' failed in TABLE::update_virtual_fieldAleksey Midenkov2020-05-261-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | update_virtual_field() is called as part of index rebuild in ha_myisam::repair() (MDEV-5800) which is done on bulk INSERT finish. Assertion in update_virtual_field() was put as part of MDEV-16222 because update_virtual_field() returns in_use->is_error(). The idea: wrongly mixed semantics of error status before update_virtual_field() and the status returned by update_virtual_field(). The former can falsely influence the latter.
| | | * | Merge 10.1 into 10.2Marko Mäkelä2020-05-261-0/+1
| | | |\ \ | | | | |/
| | | | * MDEV-21495: Conditional jump or move depends on uninitialised value in ↵Varun Gupta2020-05-261-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | sel_arg_range_seq_next Initialize the parameter PARAM::max_key_part when we iterate over the ranges to get estimates from EITS.
| | | * | MDEV-19751 Wrong partitioning by KEY() after primary key droppedAleksey Midenkov2020-05-261-0/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Default (empty) field list in partitioning by KEY() clause is assigned from primary key. If primary key is changed the partitioning field list is changed as well, so repartitioning required. Not applicable to any non-primary keys as default field list may be taken only from primary key.
| * | | | MDEV-22283 Server crashes in key_copy or unexpected error 156Aleksey Midenkov2020-05-291-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (The table already existed in the storage engine) Wrong algorithm of closing partitions on error doesn't close last partition.
| * | | | Merge branch 'codership-10.4-MDEV-22666-v2' into 10.4Julius Goryavsky2020-05-291-0/+1
| |\ \ \ \
| | * \ \ \ Merge branch '10.4-MDEV-22666-v2' of ↵Julius Goryavsky2020-05-261-0/+1
| | |\ \ \ \ | | | | | | | | | | | | | | | | | | | | | https://github.com/codership/mariadb-server into codership-10.4-MDEV-22666-v2
| | | * | | | MDEV-22666 galera.MW-328A hangsjaakola2020-05-251-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The hang can happen between a lock connection issuing KILL CONNECTION for a victim, which is in committing phase. There happens two resource deadlockwhere killer is holding victim's LOCK_thd_data and requires trx mutex for the victim. The victim, otoh, holds his own trx mutex, but requires LOCK_thd_data in wsrep_commit_ordered(). Hence a classic two thread deadlock happens. The fix in this commit changes innodb commit so that wsrep_commit_ordered() is not called while holding trx mutex. With this, wsrep patch commit time mutex locking does not violate the locking protocol of KILL command (i.e. LOCK_thd_data -> trx mutex) Also, a new test case has been added in galera.galera_bf_kill.test for scenario where a client connection is killed in committting phase.
| * | | | | | MDEV-16937 Strict SQL with system versioned tables causes issues (10.4)Aleksey Midenkov2020-05-294-4/+13
| |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Respect system fields in NO_ZERO_DATE mode. This is the subject for refactoring in MDEV-19597 Conflict resolution from 7d5223310789f967106d86ce193ef31b315ecff0
| * | | | | Merge 10.3 into 10.4Marko Mäkelä2020-05-2620-291/+457
| |\ \ \ \ \ | | | |/ / / | | |/| | |
| | * | | | Merge 10.2 into 10.3Marko Mäkelä2020-05-2519-291/+455
| | |\ \ \ \ | | | | |/ / | | | |/| |