#include <range.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 | |
virtual int | init ()=0 |
virtual int | reset (void)=0 |
virtual int | get_next ()=0 |
virtual void | range_end () |
virtual bool | reverse_sorted () const =0 |
virtual bool | unique_key_range () const |
virtual int | get_type () const =0 |
virtual int | init_ror_merged_scan (bool) |
virtual void | save_last_pos () |
virtual void | add_keys_and_lengths (std::string *key_names, std::string *used_lengths)=0 |
virtual void | add_info_string (std::string *) |
virtual bool | is_keys_used (const boost::dynamic_bitset<> &fields) |
Public Attributes | |
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 |
Quick select interface. This class is a parent for all QUICK_*_SELECT classes.
The usage scenario is as follows:
perform the scan do { res= quick->get_next(); } while (res && ...) }
|
inlinevirtual |
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 in drizzled::optimizer::QuickRangeSelect, drizzled::optimizer::QuickIndexMergeSelect, drizzled::optimizer::QuickRorIntersectSelect, and drizzled::optimizer::QuickRorUnionSelect.
Definition at line 241 of file range.h.
Referenced by drizzled::optimizer::QuickRorUnionSelect::add_info_string().
|
pure 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.
Implemented in drizzled::optimizer::QuickGroupMinMaxSelect, drizzled::optimizer::QuickRangeSelect, drizzled::optimizer::QuickIndexMergeSelect, drizzled::optimizer::QuickRorIntersectSelect, and drizzled::optimizer::QuickRorUnionSelect.
Referenced by drizzled::optimizer::QuickRorUnionSelect::add_keys_and_lengths().
|
pure virtual |
Gets next record to retrieve
Implemented in drizzled::optimizer::QuickGroupMinMaxSelect, drizzled::optimizer::QuickSelectDescending, drizzled::optimizer::QuickRangeSelect, drizzled::optimizer::QuickIndexMergeSelect, drizzled::optimizer::QuickRorIntersectSelect, and drizzled::optimizer::QuickRorUnionSelect.
Referenced by drizzled::optimizer::QuickRorUnionSelect::get_next(), drizzled::optimizer::QuickRorUnionSelect::reset(), and drizzled::rr_quick().
|
pure virtual |
Returns the type of this quick select - one of the QS_TYPE_* values
Implemented in drizzled::optimizer::QuickGroupMinMaxSelect, drizzled::optimizer::QuickSelectDescending, drizzled::optimizer::QuickRangeSelect, drizzled::optimizer::QuickIndexMergeSelect, drizzled::optimizer::QuickRorIntersectSelect, and drizzled::optimizer::QuickRorUnionSelect.
Referenced by drizzled::Join::optimize(), and drizzled::test_if_skip_sort_order().
|
pure virtual |
Do post-constructor initialization.
Performs initializations that should have been in constructor if it was possible to return errors from constructors. The join optimizer may create and then delete quick selects without retrieving any rows so init() must not contain any IO or CPU intensive code.
If init() call fails the only valid action is to delete this quick select, reset() and get_next() must not be called.
0 | OK |
other | Error code |
Implemented in drizzled::optimizer::QuickGroupMinMaxSelect, drizzled::optimizer::QuickRangeSelect, drizzled::optimizer::QuickIndexMergeSelect, drizzled::optimizer::QuickRorIntersectSelect, and drizzled::optimizer::QuickRorUnionSelect.
|
inlinevirtual |
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 drizzled::optimizer::QuickRorUnionSelect::reset().
|
virtual |
Returns true if any index used by this quick select uses field which is marked in passed bitmap.
Reimplemented in drizzled::optimizer::QuickIndexMergeSelect, drizzled::optimizer::QuickRorIntersectSelect, and drizzled::optimizer::QuickRorUnionSelect.
Definition at line 4125 of file range.cc.
Referenced by drizzled::optimizer::QuickRorUnionSelect::is_keys_used(), and drizzled::update_query().
|
inlinevirtual |
Range end should be called when we have looped over the whole index
Reimplemented in drizzled::optimizer::QuickRangeSelect.
|
pure virtual |
Initializes quick select for row retrieval.
Should be called when it is certain that row retrieval will be necessary. This call may do heavyweight initialization like buffering first N records etc. If reset() call fails get_next() must not be called. Note that reset() may be called several times if
0 | OK |
other | Error code |
Implemented in drizzled::optimizer::QuickGroupMinMaxSelect, drizzled::optimizer::QuickSelectDescending, drizzled::optimizer::QuickRangeSelect, drizzled::optimizer::QuickIndexMergeSelect, drizzled::optimizer::QuickRorIntersectSelect, and drizzled::optimizer::QuickRorUnionSelect.
Referenced by drizzled::delete_query(), drizzled::FileSort::find_all_keys(), drizzled::optimizer::QuickRorUnionSelect::reset(), and drizzled::update_query().
|
inlinevirtual |
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 drizzled::optimizer::QuickRorUnionSelect::get_next(), and drizzled::optimizer::QuickRorUnionSelect::reset().
uint32_t drizzled::optimizer::QuickSelectInterface::index |
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().
unsigned char* drizzled::optimizer::QuickSelectInterface::last_rowid |
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 drizzled::optimizer::QuickRorUnionSelect::get_next().
uint32_t drizzled::optimizer::QuickSelectInterface::max_used_key_length |
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().
double drizzled::optimizer::QuickSelectInterface::read_time |
time to perform this retrieval
Definition at line 100 of file range.h.
Referenced by drizzled::best_access_path(), and drizzled::make_join_statistics().
unsigned char* drizzled::optimizer::QuickSelectInterface::record |
Table record buffer used by this quick select.
Definition at line 129 of file range.h.
Referenced by drizzled::optimizer::QuickRorUnionSelect::get_next(), drizzled::optimizer::QuickRorIntersectSelect::get_next(), and drizzled::optimizer::QuickIndexMergeSelect::read_keys_and_merge().
ha_rows drizzled::optimizer::QuickSelectInterface::records |
estimate of # of records to be retrieved
Definition at line 99 of file range.h.
Referenced by drizzled::FileSort::run().
uint32_t drizzled::optimizer::QuickSelectInterface::used_key_parts |
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().