MWL#90: Address review feedback part #1
This commit is contained in:
parent
125bfa2ce7
commit
792c67ff61
@ -1532,12 +1532,6 @@ INSERT INTO t1 VALUES (1,1,1), (1,1,1), (1,1,2), (1,1,1), (1,1,2);
|
||||
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
--echo # MariaDB note:
|
||||
--echo # This will show 2 for table which has 5 rows.
|
||||
--echo # This is because the access method employed is actually range access
|
||||
--echo # which scans 2 records (yes, EXPLAIN displays it incorrectly).
|
||||
--echo # our correct printing is an artifact of changing in select_describe()
|
||||
--echo # from printing table->starts.records() to tab->records.
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
@ -1551,7 +1545,6 @@ INSERT INTO t1 VALUES (1,1,1), (1,1,1), (1,1,2), (1,1,1), (1,1,2);
|
||||
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
--echo # See above "MariaDB note"
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
@ -1566,7 +1559,6 @@ INSERT INTO t1 VALUES (1,1,1), (1,1,1), (1,1,2), (1,1,1), (1,1,2);
|
||||
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
--echo # See above "MariaDB note"
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
|
@ -1735,12 +1735,6 @@ SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
1
|
||||
1
|
||||
# MariaDB note:
|
||||
# This will show 2 for table which has 5 rows.
|
||||
# This is because the access method employed is actually range access
|
||||
# which scans 2 records (yes, EXPLAIN displays it incorrectly).
|
||||
# our correct printing is an artifact of changing in select_describe()
|
||||
# from printing table->starts.records() to tab->records.
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
@ -1755,7 +1749,6 @@ SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
1
|
||||
1
|
||||
# See above "MariaDB note"
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
@ -1771,7 +1764,6 @@ SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
1
|
||||
1
|
||||
# See above "MariaDB note"
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
|
@ -1735,12 +1735,6 @@ SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
1
|
||||
1
|
||||
# MariaDB note:
|
||||
# This will show 2 for table which has 5 rows.
|
||||
# This is because the access method employed is actually range access
|
||||
# which scans 2 records (yes, EXPLAIN displays it incorrectly).
|
||||
# our correct printing is an artifact of changing in select_describe()
|
||||
# from printing table->starts.records() to tab->records.
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
@ -1755,7 +1749,6 @@ SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
1
|
||||
1
|
||||
# See above "MariaDB note"
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
@ -1771,7 +1764,6 @@ SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
1
|
||||
1
|
||||
# See above "MariaDB note"
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
|
@ -1022,7 +1022,7 @@ Item_in_subselect::Item_in_subselect(Item * left_exp,
|
||||
st_select_lex *select_lex):
|
||||
Item_exists_subselect(), left_expr_cache(0), first_execution(TRUE),
|
||||
is_constant(FALSE), optimizer(0), pushed_cond_guards(NULL),
|
||||
exec_method(NOT_TRANSFORMED), upper_item(0)
|
||||
exec_method(NOT_TRANSFORMED), is_flattenable_semijoin(FALSE), upper_item(0)
|
||||
{
|
||||
DBUG_ENTER("Item_in_subselect::Item_in_subselect");
|
||||
left_expr= left_exp;
|
||||
@ -4080,7 +4080,7 @@ void subselect_hash_sj_engine::cleanup()
|
||||
|
||||
int subselect_hash_sj_engine::optimize()
|
||||
{
|
||||
int res= 0;
|
||||
int res;
|
||||
SELECT_LEX *save_select= thd->lex->current_select;
|
||||
thd->lex->current_select= materialize_join->select_lex;
|
||||
res= materialize_join->optimize();
|
||||
|
@ -406,11 +406,6 @@ public:
|
||||
*/
|
||||
bool is_flattenable_semijoin;
|
||||
|
||||
/*
|
||||
Cost to populate the temporary table (set on if-needed basis).
|
||||
*/
|
||||
//double startup_cost;
|
||||
|
||||
bool *get_cond_guard(int i)
|
||||
{
|
||||
return pushed_cond_guards ? pushed_cond_guards + i : NULL;
|
||||
|
@ -650,8 +650,6 @@ public:
|
||||
buff= 0;
|
||||
}
|
||||
|
||||
// JOIN_TAB *get_next_table(JOIN_TAB *tab);
|
||||
|
||||
friend class JOIN_CACHE_HASHED;
|
||||
friend class JOIN_CACHE_BNL;
|
||||
friend class JOIN_CACHE_BKA;
|
||||
|
@ -242,9 +242,6 @@ static uint make_join_orderinfo(JOIN *join);
|
||||
Item_equal *find_item_equal(COND_EQUAL *cond_equal, Field *field,
|
||||
bool *inherited_fl);
|
||||
|
||||
JOIN_TAB *first_linear_tab(JOIN *join, bool after_const_tables);
|
||||
JOIN_TAB *next_linear_tab(JOIN* join, JOIN_TAB* tab, bool include_bush_roots);
|
||||
|
||||
/**
|
||||
This handles SELECT with and without UNION.
|
||||
*/
|
||||
@ -8569,6 +8566,12 @@ make_join_readinfo(JOIN *join, ulonglong options, uint no_jbuf_after)
|
||||
tab->sorted= sorted;
|
||||
sorted= 0; // only first must be sorted
|
||||
|
||||
|
||||
/*
|
||||
We should not set tab->next_select for the last table in the
|
||||
SMJ-nest, as setup_sj_materialization() has already set it to
|
||||
end_sj_materialize.
|
||||
*/
|
||||
if (!(tab->bush_root_tab &&
|
||||
tab->bush_root_tab->bush_children->end == tab + 1))
|
||||
{
|
||||
@ -12910,7 +12913,6 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
||||
i < field_count;
|
||||
i++, reg_field++, key_part_info++)
|
||||
{
|
||||
key_part_info->null_bit=0;
|
||||
key_part_info->field= *reg_field;
|
||||
(*reg_field)->flags |= PART_KEY_FLAG;
|
||||
if (key_part_info == keyinfo->key_part)
|
||||
|
@ -616,7 +616,6 @@ inline bool sj_is_materialize_strategy(uint strategy)
|
||||
return strategy >= SJ_OPT_MATERIALIZE;
|
||||
}
|
||||
|
||||
|
||||
class JOIN_TAB_RANGE: public Sql_alloc
|
||||
{
|
||||
public:
|
||||
@ -1050,6 +1049,9 @@ private:
|
||||
};
|
||||
|
||||
|
||||
JOIN_TAB *first_linear_tab(JOIN *join, bool after_const_tables);
|
||||
JOIN_TAB *next_linear_tab(JOIN* join, JOIN_TAB* tab, bool include_bush_roots);
|
||||
|
||||
typedef struct st_select_check {
|
||||
uint const_ref,reg_ref;
|
||||
} SELECT_CHECK;
|
||||
|
@ -6584,9 +6584,6 @@ int make_schema_select(THD *thd, SELECT_LEX *sel,
|
||||
}
|
||||
|
||||
|
||||
JOIN_TAB *first_linear_tab(JOIN *join, bool after_const_tables);
|
||||
JOIN_TAB *next_linear_tab(JOIN* join, JOIN_TAB* tab, bool include_bush_roots);
|
||||
|
||||
/*
|
||||
Fill temporary schema tables before SELECT
|
||||
|
||||
|
@ -5335,6 +5335,13 @@ bool st_table::is_children_attached(void)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Return TRUE if the table is filled at execution phase
|
||||
|
||||
(and so, the optimizer must not do anything that depends on the contents of
|
||||
the table, like range analysis or constant table detection)
|
||||
*/
|
||||
|
||||
bool st_table::is_filled_at_execution()
|
||||
{
|
||||
return test(pos_in_table_list->jtbm_subselect);
|
||||
|
@ -968,9 +968,9 @@ struct st_table {
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
/*
|
||||
If TRUE, the table is filled at execution phase (and so, the optimizer
|
||||
should not do things like range analysis or constant table detection on
|
||||
it).
|
||||
Returns TRUE if the table is filled at execution phase (and so, the
|
||||
optimizer must not do anything that depends on the contents of the table,
|
||||
like range analysis or constant table detection)
|
||||
*/
|
||||
bool is_filled_at_execution();
|
||||
inline void disable_keyread()
|
||||
|
Loading…
x
Reference in New Issue
Block a user