mirror of
https://github.com/MariaDB/server.git
synced 2026-05-03 13:45:34 +02:00
5.3 merge
This commit is contained in:
commit
4f435bddfd
750 changed files with 17312 additions and 7063 deletions
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef ITEM_SUBSELECT_INCLUDED
|
||||
#define ITEM_SUBSELECT_INCLUDED
|
||||
|
||||
/* Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
/* Copyright (c) 2002, 2011, Oracle and/or its affiliates.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -241,6 +241,10 @@ public:
|
|||
virtual bool expr_cache_is_needed(THD *);
|
||||
virtual void get_cache_parameters(List<Item> ¶meters);
|
||||
virtual bool is_subquery_processor (uchar *opt_arg) { return 1; }
|
||||
bool limit_index_condition_pushdown_processor(uchar *opt_arg)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
friend class select_result_interceptor;
|
||||
friend class Item_in_optimizer;
|
||||
|
|
@ -460,10 +464,44 @@ public:
|
|||
Same as above, but they also allow to scan the materialized table.
|
||||
*/
|
||||
bool sjm_scan_allowed;
|
||||
double jtbm_read_time;
|
||||
double jtbm_record_count;
|
||||
bool is_jtbm_merged;
|
||||
|
||||
/*
|
||||
JoinTaB Materialization (JTBM) members
|
||||
*/
|
||||
|
||||
/*
|
||||
TRUE <=> This subselect has been converted into non-mergeable semi-join
|
||||
table.
|
||||
*/
|
||||
bool is_jtbm_merged;
|
||||
|
||||
/* (Applicable if is_jtbm_merged==TRUE) Time required to run the materialized join */
|
||||
double jtbm_read_time;
|
||||
|
||||
/* (Applicable if is_jtbm_merged==TRUE) Number of output rows in materialized join */
|
||||
double jtbm_record_count;
|
||||
|
||||
/*
|
||||
(Applicable if is_jtbm_merged==TRUE) TRUE <=> The materialized subselect is
|
||||
a degenerate subselect which produces 0 or 1 rows, which we know at
|
||||
optimization phase.
|
||||
Examples:
|
||||
1. subquery has "Impossible WHERE":
|
||||
|
||||
SELECT * FROM ot WHERE ot.column IN (SELECT it.col FROM it WHERE 2 > 3)
|
||||
|
||||
2. Subquery produces one row which opt_sum.cc is able to get with one lookup:
|
||||
|
||||
SELECT * FROM ot WHERE ot.column IN (SELECT MAX(it.key_col) FROM it)
|
||||
*/
|
||||
bool is_jtbm_const_tab;
|
||||
|
||||
/*
|
||||
(Applicable if is_jtbm_const_tab==TRUE) Whether the subquery has produced
|
||||
the row (or not)
|
||||
*/
|
||||
bool jtbm_const_row_found;
|
||||
|
||||
/*
|
||||
TRUE<=>this is a flattenable semi-join, false overwise.
|
||||
*/
|
||||
|
|
@ -504,7 +542,7 @@ public:
|
|||
:Item_exists_subselect(), left_expr_cache(0), first_execution(TRUE),
|
||||
abort_on_null(0), in_strategy(SUBS_NOT_TRANSFORMED), optimizer(0),
|
||||
pushed_cond_guards(NULL), func(NULL), emb_on_expr_nest(NULL),
|
||||
is_jtbm_merged(FALSE),
|
||||
is_jtbm_merged(FALSE), is_jtbm_const_tab(FALSE),
|
||||
upper_item(0)
|
||||
{}
|
||||
void cleanup();
|
||||
|
|
@ -725,9 +763,9 @@ protected:
|
|||
|
||||
class subselect_single_select_engine: public subselect_engine
|
||||
{
|
||||
bool prepared; /* simple subselect is prepared */
|
||||
bool executed; /* simple subselect is executed */
|
||||
bool optimize_error; ///< simple subselect optimization failed
|
||||
bool prepared; /* simple subselect is prepared */
|
||||
bool executed; /* simple subselect is executed */
|
||||
bool optimize_error; /* simple subselect optimization failed */
|
||||
st_select_lex *select_lex; /* corresponding select_lex */
|
||||
JOIN * join; /* corresponding JOIN structure */
|
||||
public:
|
||||
|
|
@ -755,6 +793,9 @@ public:
|
|||
|
||||
friend class subselect_hash_sj_engine;
|
||||
friend class Item_in_subselect;
|
||||
friend bool setup_jtbm_semi_joins(JOIN *join, List<TABLE_LIST> *join_list,
|
||||
Item **join_where);
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue