summaryrefslogtreecommitdiff
path: root/mysql-test/r/subselect_partial_match.result
Commit message (Collapse)AuthorAgeFilesLines
* Fixed bug lp:1000649unknown2012-06-051-3/+3
| | | | | | | | | | | | | | | Analysis: When the method JOIN::choose_subquery_plan() decided to apply the IN-TO-EXISTS strategy, it set the unit and select_lex uncacheable flag to UNCACHEABLE_DEPENDENT_INJECTED unconditionally. As result, even if IN-TO-EXISTS injected non-correlated predicates, the subquery was still treated as correlated. Solution: Set the subquery as correlated only if the injected predicate(s) depend on the outer query.
* Make subquery Materialization, as well as semi-join Materialization be shownSergey Petrunya2011-12-051-25/+25
| | | | | | | in EXPLAIN as select_type==MATERIALIZED. Before, we had select_type==SUBQUERY and it was difficult to tell materialized subqueries from uncorrelated scalar-context subqueries.
* Set new default values for the optimizer switch flags 'derived_merge'Igor Babaev2011-11-261-0/+3
| | | | and 'derived_with_keys'. Now they are set on by default.
* Fix bug lp:893486unknown2011-11-231-0/+31
| | | | | | | | | | | | | | | | | | | | | | | Analysis: The bug is a result of an incomplete fix for bug lp:869036. That fix didn't take into account that there may be a case when ther are no NULLs in the materialized subquery, however all columns without NULLs may not be grouped in the only non-null index. This is the case when the left subquery expression has nullable columns. Solution: The patch handles two missing sub-cases of the case when there are no value (non-null matches) for any outer expression, and there are both NULLs and non-NUll values in the outer reference. a) If the materialized subquery contains no NULLs there cannot be a partial match, because there are no NULLs in those columns where the outer reference has no NULLs. b) If the materialized subquery contains NULLs, but there exists a column, such that its corresponding outer expression has no NULL, and this column also has no NULL. Then there cannot be a partial match either.
* Fix bug lp:869036unknown2011-11-171-17/+593
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Apart from the fix, the patch also adds few more unrelated test cases for partial matching, and fixes few typos. Analysis: This bug uncovered that partial matching via rowid intersection didn't handle the case when: - the left IN argument has some NULLs, - there are no non-null value matches, and there is no non-null column, - the subquery columns that are not covered with the NULLs in the left IN argument contain at least one row, such that it has NULL values in all columns where the left IN operand has no NULLs. In this case there is a partial match. In addition the analysis of the related code uncovered incorrect handling of few other related cases. Solution: The solution for the bug is to check if there exists a row with NULLs in all columns other than the ones having NULL in the let IN operand. The check is implemented via checking whether the bitmaps that store NULL information in class Ordered_key have a non-empty intersection for the relevant columns. The intersection itself is implemented via the function bitmap_exists_intersection() in my_bitmap.c.
* Fix bug lp:856152unknown2011-10-041-0/+24
| | | | | | | | | | | | | | | | | | | | | | Analysis: The cause of the bug was that the method subselect_rowid_merge_engine::partial_match() was not designed for re-execution within the same query. Specifically, it didn't cleanup the bitmap of matching keys after completion. The test query requires double execution of the IN predicate because it first checks the predicate as a constant condition. The second execution during regular execution used the bitmap of matching keys produced by the first execution instead of starting with a clean one. Solution: Cleanup the bitmap of matching keys at the end of the partial matching procedure.
* Made the optimizer switches 'derived_merge' and 'derived_with_keys'Igor Babaev2011-07-211-2/+3
| | | | | off by default.
* MWL#68 efficient partial matchingunknown2011-07-151-0/+202
| | | | | | | | - Added an initial set of feature-specific test cases - Handled the special case where the materialized subquery of an IN predicates consists of only NULL values. - Fixed a bug where making Item_in_subselect a constant, didn't respect its null_value value.
* Fix bug lp:809266unknown2011-07-141-0/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | Analysis: This is a bug in MWL#68, where it was incorrectly assumed that if there is a match in the only non-null key, then if there is a covering NULL row on all remaining NULL-able columns there is a partial match. However, this is not the case, because even if there is such a null-only sub-row, it is not guaranteed to be part of the matched sub-row. The matched sub-row and the NULL-only sub-row may be parts of different rows. In fact there are two cases: - there is a complete row with only NULL values, and - all nullable columns contain only NULL values. These two cases were incorrectly mixed up in the class member subselect_partial_match_engine::covering_null_row_width. Solution: The solution is to: - split covering_null_row_width into two members: has_covering_null_row, and has_covering_null_columns, and - take into account each state during initialization and execution.
* Fixed bug lp:809245unknown2011-07-131-9/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In addition to the bug fix explained below, the patch performs few renames, and adds some comments to avoid similar problems. Analysis: The failed assert was due to a bug in MWL#68, where it was incorrectly assumed that the size of the bitmap subselect_rowid_merge_engine::null_only_columns should be the same as the size of the array of Ordered_keys. The bitmap null_only_columns contains bits to mark columns that contain only NULLs. Therefore the indexes of the bits to be set in null_only_columns are different from the indexes of the Ordered_keys. If there is a NULL-only column that appears in a table after the last partial match column with Ordered_key, this NULL-only column would require setting a bit with index bigger than the size of the bitmap null_only_columns. Accessing such a bit caused the failed assert. Solution: Upon analysis, it turns out that null_only_columns is not needed at all, because we are looking for partial matches, and having such columns guarantees that there is a partial match for any corresponding outer value. Therefore the patch removes subselect_rowid_merge_engine::null_only_columns.
* Merged the code of mwl 106 into the latest 5.3 with mwl 90 pushed.Igor Babaev2011-06-041-3/+2
|\ | | | | | | | | | | Resolved all conflicts and failures.
| * MergeIgor Babaev2011-05-201-3/+2
| |\ |/ /
| * Merged the code of MWL#106 into 5.3Igor Babaev2011-05-161-3/+2
| |\ |/ / | | | | | | | | | | | | | | | | Resolved all conflicts, bad merges and fixed a few minor bugs in the code. Commented out the queries from multi_update, view, subselect_sj, func_str, derived_view, view_grant that failed either with crashes in ps-protocol or with wrong results. The failures are clear indications of some bugs in the code and these bugs are to be fixed.
* | Fix LP BUG#680058unknown2010-11-251-0/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Analysis: The send_data method of the result sink class used to collect data statistics about materialized subqueries incorrectly assumed that duplicate rows are removed prior to calling send_data. As a result the collected statistics was wrong, which resulted in an incorrect maximal number of keys in the Ordered_key buffer. Solution: Try to insert each row into the materialized temp table before collecting statistics, and if the insertion results in a duplicate row, do not count the current row.
* | Fixed LP bug #613009unknown2010-10-271-1/+18
| | | | | | | | | | | | | | | | | | | | The set of Ordered keys of a rowid merge engine is dense. Thus when we decide not to create a key for a column that has only NULLs, this column shouldn't be counted. Notice that the caller has already precomputed the correct total number of keys that should be created.
* | Fixed LP bug #601156unknown2010-10-261-1/+22
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | The cause for this bug is that MariaDB 5.3 still processes derived tables (subqueries in the FROM clause) by fully executing them during the parse phase. This will be remedied by MWL#106 once merged into the main 5.3. The assert statement is triggered when MATERIALIZATION is ON for EXPLAIN EXTENDED for derived tables with an IN subquery as follows: - mysql_parse calls JOIN::exec for the derived table as if it is regular execution (not explain). - When materialization is ON, this call goes all the way to subselect_hash_sj_engine::exec, which creates a partial match engine because of NULL presence. - In order to proceed with normal execution, the hash_sj engine substitutes itself with the created partial match engine. - After the parse phase it turns out that this execution was part of EXPLAIN EXTENDED, which in turn calls Item_cond::print -> ... -> Item_subselect::print, which calls engine->print(). Since subselect_hash_sj_engine::exec substituted the current Item_subselect engine with a partial match engine, eventually we call its ::print() method. However the partial match engines are designed only for execution, hence there is no implementation of this print() method. The fix temporarily removes the assert, until this code is merged with MWL#106.
* Fixed LP bug #608744unknown2010-08-301-0/+12
The bug is a result of the following change by Monty: Revision Id: monty@askmonty.org-20100716073301-gstby2062nqd42qv Timestamp: Fri 2010-07-16 10:33:01 +0300 Where Monty changed the queues interface and implementation. The fix adjusts the queue_remove call to the new interface. mysql-test/r/subselect_partial_match.result: Added new file for tests related to MWL#89. mysql-test/t/subselect_partial_match.test: Added new file for tests related to MWL#89.