summaryrefslogtreecommitdiff
path: root/sql/item_subselect.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/item_subselect.cc')
-rw-r--r--sql/item_subselect.cc17
1 files changed, 13 insertions, 4 deletions
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index c217d84ade3..9855251d404 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -3153,6 +3153,9 @@ int subselect_uniquesubquery_engine::exec()
DBUG_RETURN(0);
}
+ if (!tab->preread_init_done && tab->preread_init())
+ DBUG_RETURN(1);
+
if (null_keypart)
DBUG_RETURN(scan_table());
@@ -3285,7 +3288,7 @@ subselect_uniquesubquery_engine::~subselect_uniquesubquery_engine()
int subselect_indexsubquery_engine::exec()
{
- DBUG_ENTER("subselect_indexsubquery_engine::exec");
+ DBUG_ENTER("subselect_indexsubquery_engine");
int error;
bool null_finding= 0;
TABLE *table= tab->table;
@@ -3316,6 +3319,9 @@ int subselect_indexsubquery_engine::exec()
DBUG_RETURN(0);
}
+ if (!tab->preread_init_done && tab->preread_init())
+ DBUG_RETURN(1);
+
if (null_keypart)
DBUG_RETURN(scan_table());
@@ -3417,10 +3423,13 @@ void subselect_uniquesubquery_engine::exclude()
}
-table_map subselect_engine::calc_const_tables(TABLE_LIST *table)
+table_map subselect_engine::calc_const_tables(List<TABLE_LIST> &list)
{
table_map map= 0;
- for (; table; table= table->next_leaf)
+ List_iterator<TABLE_LIST> ti(list);
+ TABLE_LIST *table;
+ //for (; table; table= table->next_leaf)
+ while ((table= ti++))
{
TABLE *tbl= table->table;
if (tbl && tbl->const_table)
@@ -3999,7 +4008,7 @@ bool subselect_hash_sj_engine::init(List<Item> *tmp_columns)
result_sink->get_tmp_table_param()->materialized_subquery= true;
if (result_sink->create_result_table(thd, tmp_columns, TRUE,
tmp_create_options,
- "materialized subselect", TRUE))
+ "materialized subselect", TRUE, TRUE))
DBUG_RETURN(TRUE);
tmp_table= result_sink->table;