#At file:///home/tsk/mprog/src/5.3/ based on revid:[email protected]
2805 [email protected] 2010-07-16 Fixed a problem where the temp table of a materialized subquery was not cleaned up between PS re-executions. The reason was two-fold: - a merge with mysql-6.0 missed select_union::cleanup() that should have cleaned up the temp table, and - the subclass of select_union used by materialization didn't call the base class cleanup() method. modified: mysql-test/r/subselect_mat.result mysql-test/t/subselect_mat.test sql/sql_class.cc sql/sql_class.h sql/sql_union.cc === modified file 'mysql-test/r/subselect_mat.result' --- a/mysql-test/r/subselect_mat.result 2010-06-26 10:05:41 +0000 +++ b/mysql-test/r/subselect_mat.result 2010-07-16 11:02:15 +0000 @@ -1246,3 +1246,29 @@ i 4 set session optimizer_swit...@save_optimizer_switch; drop table t1, t2, t3; +create table t0 (a int); +insert into t0 values (0),(1),(2); +create table t1 (a int); +insert into t1 values (0),(1),(2); +explain select a, a in (select a from t1) from t0; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t0 ALL NULL NULL NULL NULL 3 +2 SUBQUERY t1 ALL NULL NULL NULL NULL 3 +select a, a in (select a from t1) from t0; +a a in (select a from t1) +0 1 +1 1 +2 1 +prepare s from 'select a, a in (select a from t1) from t0'; +execute s; +a a in (select a from t1) +0 1 +1 1 +2 1 +update t1 set a=123; +execute s; +a a in (select a from t1) +0 0 +1 0 +2 0 +drop table t0, t1; === modified file 'mysql-test/t/subselect_mat.test' --- a/mysql-test/t/subselect_mat.test 2010-03-13 20:04:52 +0000 +++ b/mysql-test/t/subselect_mat.test 2010-07-16 11:02:15 +0000 @@ -905,3 +905,19 @@ select * from t1 where t1.i in (select t set session optimizer_swit...@save_optimizer_switch; drop table t1, t2, t3; +# +# Test that the contents of the temp table of a materialized subquery is +# cleaned up between PS re-executions. +# + +create table t0 (a int); +insert into t0 values (0),(1),(2); +create table t1 (a int); +insert into t1 values (0),(1),(2); +explain select a, a in (select a from t1) from t0; +select a, a in (select a from t1) from t0; +prepare s from 'select a, a in (select a from t1) from t0'; +execute s; +update t1 set a=123; +execute s; +drop table t0, t1; === modified file 'sql/sql_class.cc' --- a/sql/sql_class.cc 2010-07-10 10:37:30 +0000 +++ b/sql/sql_class.cc 2010-07-16 11:02:15 +0000 @@ -2994,14 +2994,28 @@ create_result_table(THD *thd_arg, List<I if (!stat) return TRUE; - cleanup(); - + reset(); table->file->extra(HA_EXTRA_WRITE_CACHE); table->file->extra(HA_EXTRA_IGNORE_DUP_KEY); return FALSE; } +void select_materialize_with_stats::reset() +{ + memset(col_stat, 0, table->s->fields * sizeof(Column_statistics)); + max_nulls_in_row= 0; + count_rows= 0; +} + + +void select_materialize_with_stats::cleanup() +{ + reset(); + select_union::cleanup(); +} + + /** Override select_union::send_data to analyze each row for NULLs and to update null_statistics before sending data to the client. === modified file 'sql/sql_class.h' --- a/sql/sql_class.h 2010-07-10 10:37:30 +0000 +++ b/sql/sql_class.h 2010-07-16 11:02:15 +0000 @@ -2905,7 +2905,7 @@ public: bool send_data(List<Item> &items); bool send_eof(); bool flush(); - + void cleanup(); virtual bool create_result_table(THD *thd, List<Item> *column_types, bool is_distinct, ulonglong options, const char *alias, bool bit_fields_as_long); @@ -2968,6 +2968,9 @@ protected: */ ha_rows count_rows; +protected: + void reset(); + public: select_materialize_with_stats() {} virtual bool create_result_table(THD *thd, List<Item> *column_types, @@ -2975,12 +2978,7 @@ public: const char *alias, bool bit_fields_as_long); bool init_result_table(ulonglong select_options); bool send_data(List<Item> &items); - void cleanup() - { - memset(col_stat, 0, table->s->fields * sizeof(Column_statistics)); - max_nulls_in_row= 0; - count_rows= 0; - } + void cleanup(); ha_rows get_null_count_of_col(uint idx) { DBUG_ASSERT(idx < table->s->fields); === modified file 'sql/sql_union.cc' --- a/sql/sql_union.cc 2010-07-10 10:37:30 +0000 +++ b/sql/sql_union.cc 2010-07-16 11:02:15 +0000 @@ -136,6 +136,22 @@ select_union::create_result_table(THD *t } +/** + Reset and empty the temporary table that stores the materialized query result. + + @note The cleanup performed here is exactly the same as for the two temp + tables of JOIN - exec_tmp_table_[1 | 2]. +*/ + +void select_union::cleanup() +{ + table->file->extra(HA_EXTRA_RESET_STATE); + table->file->ha_delete_all_rows(); + free_io_cache(table); + filesort_free_buffers(table,0); +} + + /* initialization procedures before fake_select_lex preparation()
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: [email protected] # target_branch: file:///home/tsk/mprog/src/5.3/ # testament_sha1: 4da21b796be3f63d90b16399940dc87c7d8d6c65 # timestamp: 2010-07-16 14:02:20 +0300 # base_revision_id: [email protected]\ # 5ijpspzyvmoi5mix # # Begin bundle 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
_______________________________________________ Mailing list: https://launchpad.net/~maria-developers Post to : [email protected] Unsubscribe : https://launchpad.net/~maria-developers More help : https://help.launchpad.net/ListHelp

