From: Martin Hansson Date: January 27 2011 1:40pm Subject: bzr commit into mysql-trunk branch (martin.hansson:3279) List-Archive: http://lists.mysql.com/commits/129766 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1454865163==" --===============1454865163== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///data0/martin/bzrroot/lisjoin/n-mr-o-t-read_state/ based on revid:jorgen.loland@stripped 3279 Martin Hansson 2011-01-27 Mystery with missing vtable. added: sql/read_state.cc sql/read_state.h modified: sql/CMakeLists.txt sql/opt_range.cc sql/opt_range.h === modified file 'sql/CMakeLists.txt' --- a/sql/CMakeLists.txt 2011-01-03 13:12:01 +0000 +++ b/sql/CMakeLists.txt 2011-01-27 13:40:19 +0000 @@ -50,6 +50,7 @@ SET (SQL_SOURCE message.h mf_iocache.cc my_decimal.cc ../sql-common/my_time.c mysqld.cc net_serv.cc keycaches.cc ../sql-common/client_plugin.c + read_state.cc read_state.h opt_range.cc opt_range.h opt_sum.cc ../sql-common/pack.c parse_file.cc password.c procedure.cc protocol.cc records.cc set_var.cc === modified file 'sql/opt_range.cc' --- a/sql/opt_range.cc 2010-12-29 00:38:59 +0000 +++ b/sql/opt_range.cc 2011-01-27 13:40:19 +0000 @@ -10665,7 +10665,12 @@ QUICK_GROUP_MIN_MAX_SELECT(TABLE *table, seen_first_key(FALSE), min_max_arg_part(min_max_arg_part_arg), key_infix(key_infix_arg), key_infix_len(key_infix_len_arg), min_functions_it(NULL), max_functions_it(NULL), - is_index_scan(is_index_scan_arg) + is_index_scan(is_index_scan_arg), + min_read_state(*this), + max_read_state(*this), + prefix_read_state(*this), + read_state(NULL) + { head= table; index= use_index; === modified file 'sql/opt_range.h' --- a/sql/opt_range.h 2010-12-17 12:58:04 +0000 +++ b/sql/opt_range.h 2011-01-27 13:40:19 +0000 @@ -23,6 +23,7 @@ #pragma interface /* gcc class implementation */ #endif +#include "read_state.h" #include "thr_malloc.h" /* sql_memdup */ #include "records.h" /* READ_RECORD */ #include "queues.h" /* QUEUE */ @@ -845,6 +846,13 @@ private: int next_max(); void update_min_result(); void update_max_result(); + + Min_read_state min_read_state; + Max_read_state max_read_state; + Prefix_read_state prefix_read_state; + + Read_state *read_state; + public: QUICK_GROUP_MIN_MAX_SELECT(TABLE *table, JOIN *join, bool have_min, bool have_max, bool have_agg_distinct, @@ -876,6 +884,10 @@ public: if (is_index_scan) str->append(STRING_WITH_LEN(" (scanning)")); } + friend class Read_state; + friend class Min_read_state; + friend class Max_read_state; + friend class Prefix_read_state; }; === added file 'sql/read_state.cc' --- a/sql/read_state.cc 1970-01-01 00:00:00 +0000 +++ b/sql/read_state.cc 2011-01-27 13:40:19 +0000 @@ -0,0 +1,25 @@ +#include "read_state.h" +#include "opt_range.h" + +Min_read_state::Min_read_state(QUICK_GROUP_MIN_MAX_SELECT &owner) : + Read_state(owner) {} + +Max_read_state::Max_read_state(QUICK_GROUP_MIN_MAX_SELECT &owner) : + Read_state(owner) {} + +Prefix_read_state::Prefix_read_state(QUICK_GROUP_MIN_MAX_SELECT &owner) : + Read_state(owner) {} + +int Min_read_state::read() { return m_owner.next_min(); } +int Max_read_state::read() { return m_owner.next_max(); } + +/** + If this is just a GROUP BY or DISTINCT without MIN or MAX and there + are equality predicates for the key parts after the group, find the + first sub-group with the extended prefix. +*/ +int Prefix_read_state::read() { + return m_owner.file->ha_index_read_map(m_owner.record, m_owner.group_prefix, + make_prev_keypart_map(m_owner.real_key_parts), + HA_READ_KEY_EXACT); +} === added file 'sql/read_state.h' --- a/sql/read_state.h 1970-01-01 00:00:00 +0000 +++ b/sql/read_state.h 2011-01-27 13:40:19 +0000 @@ -0,0 +1,33 @@ +#ifndef READ_STATE_H +#define READ_STATE_H + +class QUICK_GROUP_MIN_MAX_SELECT; + +class Read_state { +protected: + QUICK_GROUP_MIN_MAX_SELECT &m_owner; +public: + Read_state(QUICK_GROUP_MIN_MAX_SELECT &owner) : m_owner(owner) {} + virtual int read() =0; + virtual ~Read_state() {}; +}; + +class Min_read_state : public Read_state { +public: + Min_read_state(QUICK_GROUP_MIN_MAX_SELECT &owner); + int read(); +}; + +class Max_read_state : public Read_state { +public: + Max_read_state(QUICK_GROUP_MIN_MAX_SELECT &owner); + int read(); +}; + +class Prefix_read_state : public Read_state { +public: + Prefix_read_state(QUICK_GROUP_MIN_MAX_SELECT &owner); + int read(); +}; + +#endif // READ_STATE_H --===============1454865163== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/martin.hansson@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: martin.hansson@stripped\ # 40ba2w6pek62idb6 # target_branch: file:///data0/martin/bzrroot/lisjoin/n-mr-o-t-\ # read_state/ # testament_sha1: 80e7ec48a606b8e58b9b3e912024ebf2f09a6fdc # timestamp: 2011-01-27 14:40:27 +0100 # base_revision_id: jorgen.loland@stripped\ # bqrxjjn3zak8wuih # # Begin bundle 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 --===============1454865163==--