mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Subquery cache (MWL#66) added.
libmysqld/Makefile.am: The new file added. mysql-test/r/index_merge_myisam.result: subquery_cache optimization option added. mysql-test/r/myisam_mrr.result: subquery_cache optimization option added. mysql-test/r/subquery_cache.result: The subquery cache tests added. mysql-test/r/subselect3.result: Subquery cache switched off to avoid changing read statistics. mysql-test/r/subselect3_jcl6.result: Subquery cache switched off to avoid changing read statistics. mysql-test/r/subselect_no_mat.result: subquery_cache optimization option added. mysql-test/r/subselect_no_opts.result: subquery_cache optimization option added. mysql-test/r/subselect_no_semijoin.result: subquery_cache optimization option added. mysql-test/r/subselect_sj.result: subquery_cache optimization option added. mysql-test/r/subselect_sj_jcl6.result: subquery_cache optimization option added. mysql-test/t/subquery_cache.test: The subquery cache tests added. mysql-test/t/subselect3.test: Subquery cache switched off to avoid changing read statistics. sql/CMakeLists.txt: The new file added. sql/Makefile.am: The new files added. sql/item.cc: Expression cache item (Item_cache_wrapper) added. Item_ref and Item_field fixed for correct usage of result field and fast resolwing in SP. sql/item.h: Expression cache item (Item_cache_wrapper) added. Item_ref and Item_field fixed for correct usage of result field and fast resolwing in SP. sql/item_cmpfunc.cc: Subquery cache added. sql/item_cmpfunc.h: Subquery cache added. sql/item_subselect.cc: Subquery cache added. sql/item_subselect.h: Subquery cache added. sql/item_sum.cc: Registration of subquery parameters added. sql/mysql_priv.h: subquery_cache optimization option added. sql/mysqld.cc: subquery_cache optimization option added. sql/opt_range.cc: Fix due to subquery cache. sql/opt_subselect.cc: Parameters of the function cahnged. sql/procedure.h: .h file guard added. sql/sql_base.cc: Registration of subquery parameters added. sql/sql_class.cc: Option to allow add indeces to temporary table. sql/sql_class.h: Item iterators added. Option to allow add indeces to temporary table. sql/sql_expression_cache.cc: Expression cache for caching subqueries added. sql/sql_expression_cache.h: Expression cache for caching subqueries added. sql/sql_lex.cc: Registration of subquery parameters added. sql/sql_lex.h: Registration of subqueries and subquery parameters added. sql/sql_select.cc: Subquery cache added. sql/sql_select.h: Subquery cache added. sql/sql_union.cc: A new parameter to the function added. sql/sql_update.cc: A new parameter to the function added. sql/table.cc: Procedures to manage temporarty tables index added. sql/table.h: Procedures to manage temporarty tables index added. storage/maria/ha_maria.cc: Fix of handler to allow destoy a table in case of error during the table creation. storage/maria/ha_maria.h: .h file guard added. storage/myisam/ha_myisam.cc: Fix of handler to allow destoy a table in case of error during the table creation.
This commit is contained in:
@ -14,6 +14,8 @@
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
|
||||
#ifndef SQL_SELECT_INCLUDED
|
||||
#define SQL_SELECT_INCLUDED
|
||||
/**
|
||||
@file
|
||||
|
||||
@ -114,6 +116,9 @@ typedef struct st_table_ref
|
||||
|
||||
*/
|
||||
bool disable_cache;
|
||||
|
||||
bool tmp_table_index_lookup_init(THD *thd, KEY *tmp_key, Item_iterator &it,
|
||||
bool value);
|
||||
} TABLE_REF;
|
||||
|
||||
|
||||
@ -1729,6 +1734,7 @@ public:
|
||||
((group || tmp_table_param.sum_func_count) && !group_list)) ?
|
||||
NULL : join_tab+const_tables;
|
||||
}
|
||||
bool setup_subquery_caches();
|
||||
private:
|
||||
/**
|
||||
TRUE if the query contains an aggregate function but has no GROUP
|
||||
@ -1736,6 +1742,8 @@ private:
|
||||
*/
|
||||
bool implicit_grouping;
|
||||
bool make_simple_join(JOIN *join, TABLE *tmp_table);
|
||||
void transform_and_change_in_all_fields(Item** item,
|
||||
Item_transformer transformer);
|
||||
};
|
||||
|
||||
|
||||
@ -1867,12 +1875,17 @@ class store_key_item :public store_key
|
||||
{
|
||||
protected:
|
||||
Item *item;
|
||||
/*
|
||||
Flag that forces usage of save_val() method which save value of the
|
||||
item instead of save_in_field() method which saves result.
|
||||
*/
|
||||
bool use_value;
|
||||
public:
|
||||
store_key_item(THD *thd, Field *to_field_arg, uchar *ptr,
|
||||
uchar *null_ptr_arg, uint length, Item *item_arg)
|
||||
uchar *null_ptr_arg, uint length, Item *item_arg, bool val)
|
||||
:store_key(thd, to_field_arg, ptr,
|
||||
null_ptr_arg ? null_ptr_arg : item_arg->maybe_null ?
|
||||
&err : (uchar*) 0, length), item(item_arg)
|
||||
&err : (uchar*) 0, length), item(item_arg), use_value(val)
|
||||
{}
|
||||
const char *name() const { return "func"; }
|
||||
|
||||
@ -1882,7 +1895,11 @@ public:
|
||||
TABLE *table= to_field->table;
|
||||
my_bitmap_map *old_map= dbug_tmp_use_all_columns(table,
|
||||
table->write_set);
|
||||
int res= item->save_in_field(to_field, 1);
|
||||
int res= FALSE;
|
||||
if (use_value)
|
||||
item->save_val(to_field);
|
||||
else
|
||||
res= item->save_in_field(to_field, 1);
|
||||
/*
|
||||
Item::save_in_field() may call Item::val_xxx(). And if this is a subquery
|
||||
we need to check for errors executing it and react accordingly
|
||||
@ -1906,7 +1923,7 @@ public:
|
||||
Item *item_arg)
|
||||
:store_key_item(thd, to_field_arg,ptr,
|
||||
null_ptr_arg ? null_ptr_arg : item_arg->maybe_null ?
|
||||
&err : (uchar*) 0, length, item_arg), inited(0)
|
||||
&err : (uchar*) 0, length, item_arg, FALSE), inited(0)
|
||||
{
|
||||
}
|
||||
const char *name() const { return "const"; }
|
||||
@ -1997,6 +2014,4 @@ bool create_internal_tmp_table(TABLE *table, KEY *keyinfo,
|
||||
bool open_tmp_table(TABLE *table);
|
||||
void setup_tmp_table_column_bitmaps(TABLE *table, uchar *bitmaps);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /* SQL_SELECT_INCLUDED */
|
||||
|
Reference in New Issue
Block a user