#include <quick_ror_union_select.h>
Public Types | |
enum | { QS_TYPE_RANGE = 0, QS_TYPE_INDEX_MERGE = 1, QS_TYPE_RANGE_DESC = 2, QS_TYPE_ROR_INTERSECT = 4, QS_TYPE_ROR_UNION = 5, QS_TYPE_GROUP_MIN_MAX = 6 } |
Public Member Functions | |
QuickRorUnionSelect (Session *session, Table *table) | |
int | init () |
int | reset (void) |
int | get_next () |
bool | reverse_sorted () const |
bool | unique_key_range () const |
int | get_type () const |
void | add_keys_and_lengths (std::string *key_names, std::string *used_lengths) |
void | add_info_string (std::string *str) |
bool | is_keys_used (const boost::dynamic_bitset<> &fields) |
void | push_quick_back (QuickSelectInterface *quick_sel_range) |
virtual void | range_end () |
virtual int | init_ror_merged_scan (bool) |
virtual void | save_last_pos () |
Public Attributes | |
std::vector < QuickSelectInterface * > | quick_selects |
std::priority_queue < QuickSelectInterface *, std::vector < QuickSelectInterface * > , compare_functor > * | queue |
memory::Root | alloc |
Session * | session |
unsigned char * | cur_rowid |
unsigned char * | prev_rowid |
bool | have_prev_rowid |
uint32_t | rowid_length |
bool | sorted |
ha_rows | records |
double | read_time |
Table * | head |
uint32_t | index |
uint32_t | max_used_key_length |
uint32_t | used_key_parts |
unsigned char * | last_rowid |
unsigned char * | record |
Private Attributes | |
bool | scans_inited |
Rowid-Ordered Retrieval index union select. This quick select produces union of row sequences returned by several quick select it "merges".
All merged quick selects must return rowids in rowid order. QuickRorUnionSelect will return rows in rowid order, too.
All merged quick selects are set not to retrieve full table records. ROR-union quick select always retrieves full records.
Definition at line 41 of file quick_ror_union_select.h.
|
virtual |
Append text representation of quick select structure (what and how is merged) to str. The result is added to "Extra" field in EXPLAIN output.
This function is implemented only by quick selects that merge other quick selects output and/or can produce output suitable for merging.
Reimplemented from drizzled::optimizer::QuickSelectInterface.
Definition at line 204 of file quick_ror_union_select.cc.
References drizzled::optimizer::QuickSelectInterface::add_info_string().
|
virtual |
Append comma-separated list of keys this quick select uses to key_names; append comma-separated list of corresponding used lengths to used_lengths.
Implements drizzled::optimizer::QuickSelectInterface.
Definition at line 220 of file quick_ror_union_select.cc.
References drizzled::optimizer::QuickSelectInterface::add_keys_and_lengths().
|
virtual |
Retrieve next record. SYNOPSIS QuickRorUnionSelect::get_next()
NOTES Enter/exit invariant: For each quick select in the queue a {key,rowid} tuple has been retrieved but the corresponding row hasn't been passed to output.
RETURN
0 | - Ok |
other | - Error code if any error occurred. |
Implements drizzled::optimizer::QuickSelectInterface.
Definition at line 152 of file quick_ror_union_select.cc.
References drizzled::optimizer::QuickSelectInterface::get_next(), drizzled::optimizer::QuickSelectInterface::last_rowid, drizzled::optimizer::QuickSelectInterface::record, and drizzled::optimizer::QuickSelectInterface::save_last_pos().
|
inlinevirtual |
Returns the type of this quick select - one of the QS_TYPE_* values
Implements drizzled::optimizer::QuickSelectInterface.
Definition at line 95 of file quick_ror_union_select.h.
|
virtual |
Do post-constructor initialization. SYNOPSIS QuickRorUnionSelect::init()
RETURN
0 | OK |
other | Error code |
Implements drizzled::optimizer::QuickSelectInterface.
Definition at line 70 of file quick_ror_union_select.cc.
|
inlinevirtualinherited |
Initialize this quick select as a merged scan inside a ROR-union or a ROR- intersection scan. The caller must not additionally call init() if this function is called.
If | true, the quick select may use table->Cursor, otherwise it must create and use a separate Cursor object. |
0 | Ok |
other | Error |
Reimplemented in drizzled::optimizer::QuickRangeSelect, and drizzled::optimizer::QuickRorIntersectSelect.
Definition at line 212 of file range.h.
Referenced by reset().
|
virtual |
Returns true if any index used by this quick select uses field which is marked in passed bitmap.
Reimplemented from drizzled::optimizer::QuickSelectInterface.
Definition at line 141 of file quick_ror_union_select.cc.
References drizzled::optimizer::QuickSelectInterface::is_keys_used().
|
inlinevirtualinherited |
Range end should be called when we have looped over the whole index
Reimplemented in drizzled::optimizer::QuickRangeSelect.
|
virtual |
Initialize quick select for row retrieval. SYNOPSIS reset()
RETURN
0 | OK |
other | Error code |
Implements drizzled::optimizer::QuickSelectInterface.
Definition at line 79 of file quick_ror_union_select.cc.
References drizzled::optimizer::QuickSelectInterface::get_next(), drizzled::optimizer::QuickSelectInterface::init_ror_merged_scan(), drizzled::optimizer::QuickSelectInterface::reset(), and drizzled::optimizer::QuickSelectInterface::save_last_pos().
|
inlinevirtualinherited |
Save ROWID of last retrieved row in file->ref. This used in ROR-merging.
Reimplemented in drizzled::optimizer::QuickRangeSelect.
Definition at line 221 of file range.h.
Referenced by get_next(), and reset().
memory::Root drizzled::optimizer::QuickRorUnionSelect::alloc |
Memory pool for this and merged quick selects data.
Definition at line 110 of file quick_ror_union_select.h.
unsigned char* drizzled::optimizer::QuickRorUnionSelect::cur_rowid |
buffer used in get_next()
Definition at line 113 of file quick_ror_union_select.h.
bool drizzled::optimizer::QuickRorUnionSelect::have_prev_rowid |
true if prev_rowid has valid data
Definition at line 115 of file quick_ror_union_select.h.
|
inherited |
Index this quick select uses, or MAX_KEY for quick selects that use several indexes
Definition at line 106 of file range.h.
Referenced by drizzled::optimizer::QuickRorIntersectSelect::add_info_string(), drizzled::optimizer::QuickRorIntersectSelect::add_keys_and_lengths(), drizzled::optimizer::QuickIndexMergeSelect::add_keys_and_lengths(), drizzled::best_access_path(), drizzled::optimizer::Scan::getStats(), drizzled::optimizer::QuickRorIntersectSelect::is_keys_used(), drizzled::optimizer::QuickIndexMergeSelect::is_keys_used(), drizzled::optimizer::QuickGroupMinMaxSelect::reset(), drizzled::test_if_skip_sort_order(), and drizzled::update_query().
|
inherited |
The rowid of last row retrieved by this quick select. This is used only when doing ROR-index_merge selects
Definition at line 124 of file range.h.
Referenced by get_next().
|
inherited |
Total length of first used_key_parts parts of the key. Applicable if index!= MAX_KEY.
Definition at line 111 of file range.h.
Referenced by drizzled::optimizer::QuickRorIntersectSelect::add_keys_and_lengths(), drizzled::optimizer::QuickIndexMergeSelect::add_keys_and_lengths(), drizzled::optimizer::QuickGroupMinMaxSelect::add_keys_and_lengths(), drizzled::optimizer::QuickGroupMinMaxSelect::adjust_prefix_ranges(), and drizzled::optimizer::QuickGroupMinMaxSelect::update_key_stat().
unsigned char* drizzled::optimizer::QuickRorUnionSelect::prev_rowid |
rowid of last row returned by get_next()
Definition at line 114 of file quick_ror_union_select.h.
std::priority_queue<QuickSelectInterface *, std::vector<QuickSelectInterface *>, compare_functor >* drizzled::optimizer::QuickRorUnionSelect::queue |
Priority queue for merge operation
Definition at line 109 of file quick_ror_union_select.h.
std::vector<QuickSelectInterface *> drizzled::optimizer::QuickRorUnionSelect::quick_selects |
Merged quick selects
Definition at line 106 of file quick_ror_union_select.h.
|
inherited |
time to perform this retrieval
Definition at line 100 of file range.h.
Referenced by drizzled::best_access_path(), and drizzled::make_join_statistics().
|
inherited |
Table record buffer used by this quick select.
Definition at line 129 of file range.h.
Referenced by get_next(), drizzled::optimizer::QuickRorIntersectSelect::get_next(), and drizzled::optimizer::QuickIndexMergeSelect::read_keys_and_merge().
|
inherited |
estimate of # of records to be retrieved
Definition at line 99 of file range.h.
Referenced by drizzled::FileSort::run().
uint32_t drizzled::optimizer::QuickRorUnionSelect::rowid_length |
table rowid length
Definition at line 116 of file quick_ror_union_select.h.
Session* drizzled::optimizer::QuickRorUnionSelect::session |
current thread
Definition at line 112 of file quick_ror_union_select.h.
|
inherited |
Maximum number of (first) key parts this quick select uses for retrieval. eg. for "(key1p1=c1 AND key1p2=c2) OR key1p1=c2" used_key_parts == 2. Applicable if index!= MAX_KEY.
For QUICK_GROUP_MIN_MAX_SELECT it includes MIN/MAX argument keyparts.
Definition at line 119 of file range.h.
Referenced by drizzled::test_if_skip_sort_order(), and drizzled::optimizer::QuickGroupMinMaxSelect::update_key_stat().