diff options
author | unknown <knielsen@knielsen-hq.org> | 2012-03-24 18:21:22 +0100 |
---|---|---|
committer | unknown <knielsen@knielsen-hq.org> | 2012-03-24 18:21:22 +0100 |
commit | 335de5db1834d3aeac507f18fcd5143c22150500 (patch) | |
tree | 95ac83922a28c81982c9ad89fcaba6c040b5111b /sql/sql_select.h | |
parent | b34cfe9327f2dcedb6bebfacdc2e757b6285426d (diff) | |
parent | f72e0e686b2f3688fe98685107a293de5012be03 (diff) | |
download | mariadb-git-335de5db1834d3aeac507f18fcd5143c22150500.tar.gz |
Merge mariadb 5.3->mariadb 5.5
Diffstat (limited to 'sql/sql_select.h')
-rw-r--r-- | sql/sql_select.h | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/sql/sql_select.h b/sql/sql_select.h index 2f7d31de404..53f2356853e 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -742,7 +742,7 @@ public: Information about a position of table within a join order. Used in join optimization. */ -typedef struct st_position +typedef struct st_position :public Sql_alloc { /* The table that's put into join order */ JOIN_TAB *table; @@ -844,23 +844,36 @@ protected: */ class Join_plan_state { public: - DYNAMIC_ARRAY keyuse; /* Copy of the JOIN::keyuse array. */ - POSITION best_positions[MAX_TABLES+1]; /* Copy of JOIN::best_positions */ + DYNAMIC_ARRAY keyuse; /* Copy of the JOIN::keyuse array. */ + POSITION *best_positions; /* Copy of JOIN::best_positions */ /* Copies of the JOIN_TAB::keyuse pointers for each JOIN_TAB. */ - KEYUSE *join_tab_keyuse[MAX_TABLES]; + KEYUSE **join_tab_keyuse; /* Copies of JOIN_TAB::checked_keys for each JOIN_TAB. */ - key_map join_tab_checked_keys[MAX_TABLES]; - SJ_MATERIALIZATION_INFO *sj_mat_info[MAX_TABLES]; + key_map *join_tab_checked_keys; + SJ_MATERIALIZATION_INFO **sj_mat_info; + my_bool error; public: - Join_plan_state() + Join_plan_state(uint tables) : error(0) { keyuse.elements= 0; keyuse.buffer= NULL; + best_positions= 0; /* To detect errors */ + error= my_multi_malloc(MYF(MY_WME), + &best_positions, + sizeof(*best_positions) * (tables + 1), + &join_tab_keyuse, + sizeof(*join_tab_keyuse) * tables, + &join_tab_checked_keys, + sizeof(*join_tab_checked_keys) * tables, + &sj_mat_info, + sizeof(sj_mat_info) * tables, + NullS) == 0; } Join_plan_state(JOIN *join); ~Join_plan_state() { delete_dynamic(&keyuse); + my_free(best_positions); } }; @@ -958,7 +971,7 @@ public: */ ha_rows fetch_limit; /* Finally picked QEP. This is result of join optimization */ - POSITION best_positions[MAX_TABLES+1]; + POSITION *best_positions; /******* Join optimization state members start *******/ /* @@ -968,7 +981,7 @@ public: TABLE_LIST *emb_sjm_nest; /* Current join optimization state */ - POSITION positions[MAX_TABLES+1]; + POSITION *positions; /* Bitmap of nested joins embedding the position at the end of the current @@ -1238,6 +1251,7 @@ public: exec_const_cond= 0; group_optimized_away= 0; no_rows_in_result_called= 0; + positions= best_positions= 0; all_fields= fields_arg; if (&fields_list != &fields_arg) /* Avoid valgrind-warning */ |