diff options
author | Sergey Petrunya <psergey@askmonty.org> | 2011-05-28 20:34:04 +0400 |
---|---|---|
committer | Sergey Petrunya <psergey@askmonty.org> | 2011-05-28 20:34:04 +0400 |
commit | 77c4c4d8ea042fc1f3cb16aa0681e8516c0cc923 (patch) | |
tree | ce6933075d6e78eb3a9f86f12b9af11e256208c7 /sql/sql_base.cc | |
parent | aa551f1b9ecb1452dcf514c189f4be934e89dd74 (diff) | |
download | mariadb-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.cc | 36 |
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; } } |