summaryrefslogtreecommitdiff
path: root/sql/sql_base.cc
diff options
context:
space:
mode:
authorSergey Petrunya <psergey@askmonty.org>2011-05-28 20:34:04 +0400
committerSergey Petrunya <psergey@askmonty.org>2011-05-28 20:34:04 +0400
commit77c4c4d8ea042fc1f3cb16aa0681e8516c0cc923 (patch)
treece6933075d6e78eb3a9f86f12b9af11e256208c7 /sql/sql_base.cc
parentaa551f1b9ecb1452dcf514c189f4be934e89dd74 (diff)
downloadmariadb-git-77c4c4d8ea042fc1f3cb16aa0681e8516c0cc923.tar.gz
post-merge fixes: get MWL#90 code to work with MWL#89's
way of processing prepared statements: - conversion subquery_predicate -> TABLE_LIST is once per-statement - However, the code must take into account that materialized temptable is dropped and re-created on each execution (the tricky part is that at start of n-th EXECUTE we have TABLE_LIST object but not its TABLE object) - IN-equality is injected into WHERE on every execution.
Diffstat (limited to 'sql/sql_base.cc')
-rw-r--r--sql/sql_base.cc36
1 files changed, 32 insertions, 4 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index c24fca1fb9a..49e12a8205f 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -7768,7 +7768,14 @@ bool setup_tables(THD *thd, Name_resolution_context *context,
first_select_table= 0;
tablenr= 0;
}
- setup_table_map(table, table_list, tablenr);
+
+ if (table_list->jtbm_subselect)
+ {
+ table_list->jtbm_table_no= tablenr;
+ }
+ else
+ setup_table_map(table, table_list, tablenr);
+
if (table_list->process_index_hints(table))
DBUG_RETURN(1);
}
@@ -7797,17 +7804,38 @@ bool setup_tables(THD *thd, Name_resolution_context *context,
if (res)
DBUG_RETURN(1);
}
+
if (table_list->jtbm_subselect)
{
- Item *item= table_list->jtbm_subselect;
- if (item->fix_fields(thd, &item))
+ Item *item= table_list->jtbm_subselect->optimizer;
+ if (table_list->jtbm_subselect->optimizer->fix_fields(thd, &item))
{
my_error(ER_TOO_MANY_TABLES,MYF(0),MAX_TABLES); /* psergey-todo: WHY ER_TOO_MANY_TABLES ???*/
DBUG_RETURN(1);
}
- DBUG_ASSERT(item == table_list->jtbm_subselect);
+ DBUG_ASSERT(item == table_list->jtbm_subselect->optimizer);
+ /*
+ {
+ Item_in_subselect *subq_pred= table_list->jtbm_subselect;
+ double rows;
+ double read_time;
+
+ // psergey-merge: disable IN->EXISTS for JTBM subqueries, for now.
+ subq_pred->in_strategy &= ~SUBS_IN_TO_EXISTS;
+ subq_pred->optimize(&rows, &read_time);
+
+ subq_pred->jtbm_read_time= read_time;
+ subq_pred->jtbm_record_count=rows;
+ subq_pred->is_jtbm_merged= TRUE;
+ }
+ // The following call should never ever be made on its own anymore:
if (table_list->jtbm_subselect->setup_mat_engine()) // dont_switch_arena=FALSE
DBUG_RETURN(1);
+ */
+ //psergey-merge: fix prepared statements:
+ //subselect_hash_sj_engine *mat_engine=
+ // (subselect_hash_sj_engine*)table_list->jtbm_subselect->engine;
+ //table= table_list->table= mat_engine->tmp_table;
}
}