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 | |
QuickSelectDescending (QuickRangeSelect *q, uint32_t used_key_parts, bool *create_err) | |
int | get_next () |
bool | reverse_sorted () const |
int | get_type () const |
int | init () |
void | range_end () |
int | get_next_prefix (uint32_t prefix_length, key_part_map keypart_map, unsigned char *cur_prefix) |
bool | unique_key_range () const |
int | init_ror_merged_scan (bool reuse_handler) |
void | save_last_pos () |
void | add_keys_and_lengths (std::string *key_names, std::string *used_lengths) |
void | add_info_string (std::string *str) |
void | resetCursor () |
virtual bool | is_keys_used (const boost::dynamic_bitset<> &fields) |
Public Attributes | |
uint32_t | mrr_flags |
memory::Root | alloc |
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 |
Protected Member Functions | |
int | cmp_next (QuickRange *range) |
int | cmp_prev (QuickRange *range) |
bool | row_in_ranges () |
Protected Attributes | |
Cursor * | cursor |
DYNAMIC_ARRAY | ranges |
bool | in_ror_merged_scan |
boost::dynamic_bitset * | column_bitmap |
boost::dynamic_bitset * | save_read_set |
boost::dynamic_bitset * | save_write_set |
bool | free_file |
QuickRange ** | cur_range |
QuickRange * | last_range |
QuickRangeSequenceContext | qr_traversal_ctx |
uint32_t | mrr_buf_size |
KEY_PART * | key_parts |
KeyPartInfo * | key_part_info |
bool | dont_free |
Private Member Functions | |
bool | range_reads_after_key (QuickRange *range) |
int | reset (void) |
Private Attributes | |
std::vector< QuickRange * > | rev_ranges |
std::vector< QuickRange * > ::iterator | rev_it |
Friends | |
class | ::drizzled::RorIntersectReadPlan |
Definition at line 272 of file quick_range_select.h.
void drizzled::optimizer::QuickRangeSelect::add_info_string | ( | std::string * | ) | [virtual, inherited] |
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 424 of file quick_range_select.cc.
void drizzled::optimizer::QuickRangeSelect::add_keys_and_lengths | ( | std::string * | key_names, |
std::string * | used_lengths | ||
) | [virtual, inherited] |
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 431 of file quick_range_select.cc.
int drizzled::optimizer::QuickRangeSelect::cmp_next | ( | optimizer::QuickRange * | range_arg | ) | [protected, inherited] |
Compare if found key is over max-value
Definition at line 374 of file quick_range_select.cc.
References drizzled::store_length().
int drizzled::optimizer::QuickRangeSelect::cmp_prev | ( | optimizer::QuickRange * | range_arg | ) | [protected, inherited] |
Definition at line 410 of file quick_range_select.cc.
References drizzled::key_cmp().
int drizzled::optimizer::QuickSelectDescending::get_next | ( | ) | [virtual] |
Get next possible record using quick-struct.
SYNOPSIS QuickRangeSelect::get_next()
NOTES Record is read into table->getInsertRecord()
RETURN
0 | Found row |
HA_ERR_END_OF_FILE | No (more) rows in range # Error code |
Reimplemented from drizzled::optimizer::QuickRangeSelect.
Definition at line 481 of file quick_range_select.cc.
int drizzled::optimizer::QuickRangeSelect::get_next_prefix | ( | uint32_t | prefix_length, |
key_part_map | keypart_map, | ||
unsigned char * | cur_prefix | ||
) | [inherited] |
Get the next record with a different prefix.
SYNOPSIS QuickRangeSelect::get_next_prefix()
[in] | prefix_length | length of cur_prefix |
[in] | cur_prefix | prefix of a key to be searched for |
DESCRIPTION Each subsequent call to the method retrieves the first record that has a prefix with length prefix_length different from cur_prefix, such that the record with the new prefix is within the ranges described by this->ranges. The record found is stored into the buffer pointed by this->record. The method is useful for GROUP-BY queries with range conditions to discover the prefix of the next group that satisfies the range conditions.
RETURN
0 | on success |
HA_ERR_END_OF_FILE | if returned all keys |
other | if some error occurred |
Definition at line 292 of file quick_range_select.cc.
int drizzled::optimizer::QuickSelectDescending::get_type | ( | ) | const [inline, virtual] |
Returns the type of this quick select - one of the QS_TYPE_* values
Reimplemented from drizzled::optimizer::QuickRangeSelect.
Definition at line 287 of file quick_range_select.h.
int drizzled::optimizer::QuickRangeSelect::init | ( | ) | [virtual, inherited] |
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 |
Implements drizzled::optimizer::QuickSelectInterface.
Definition at line 88 of file quick_range_select.cc.
Referenced by drizzled::optimizer::QuickIndexMergeSelect::read_keys_and_merge().
int drizzled::optimizer::QuickRangeSelect::init_ror_merged_scan | ( | bool | reuse_handler | ) | [virtual, inherited] |
Initialize this quick select to be a ROR-merged scan.
SYNOPSIS QuickRangeSelect::init_ror_merged_scan()
[in] | reuse_handler | If true, use head->cursor, otherwise create a separate Cursor object |
NOTES This function creates and prepares for subsequent use a separate Cursor object if it can't reuse head->cursor. The reason for this is that during ROR-merge several key scans are performed simultaneously, and a single Cursor is only capable of preserving context of a single key scan.
In ROR-merge the quick select doing merge does full records retrieval, merged quick selects read only keys.
RETURN 0 ROR child scan initialized, ok to use.
1 | error |
Reimplemented from drizzled::optimizer::QuickSelectInterface.
Definition at line 131 of file quick_range_select.cc.
References drizzled::Session::mem_root.
Referenced by drizzled::optimizer::QuickRorIntersectSelect::init_ror_merged_scan().
bool drizzled::optimizer::QuickSelectInterface::is_keys_used | ( | const boost::dynamic_bitset<> & | fields | ) | [virtual, inherited] |
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 4217 of file range.cc.
Referenced by drizzled::update_query().
void drizzled::optimizer::QuickRangeSelect::range_end | ( | ) | [virtual, inherited] |
Range end should be called when we have looped over the whole index
Reimplemented from drizzled::optimizer::QuickSelectInterface.
Definition at line 96 of file quick_range_select.cc.
Referenced by drizzled::optimizer::QuickIndexMergeSelect::read_keys_and_merge().
int drizzled::optimizer::QuickSelectDescending::reset | ( | void | ) | [inline, private, 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 |
Reimplemented from drizzled::optimizer::QuickRangeSelect.
Definition at line 296 of file quick_range_select.h.
bool drizzled::optimizer::QuickRangeSelect::row_in_ranges | ( | ) | [protected, inherited] |
Check if current row will be retrieved by this QuickRangeSelect
NOTES It is assumed that currently a scan is being done on another index which reads all necessary parts of the index that is scanned by this quick select. The implementation does a binary search on sorted array of disjoint ranges, without taking size of range into account.
This function is used to filter out clustered PK scan rows in index_merge quick select.
RETURN
true | if current row will be retrieved by this quick select false if not |
Definition at line 351 of file quick_range_select.cc.
void drizzled::optimizer::QuickRangeSelect::save_last_pos | ( | ) | [virtual, inherited] |
Save ROWID of last retrieved row in file->ref. This used in ROR-merging.
Reimplemented from drizzled::optimizer::QuickSelectInterface.
Definition at line 213 of file quick_range_select.cc.
bool drizzled::optimizer::QuickRangeSelect::unique_key_range | ( | ) | const [virtual, inherited] |
Reimplemented from drizzled::optimizer::QuickSelectInterface.
Definition at line 219 of file quick_range_select.cc.
QuickRange** drizzled::optimizer::QuickRangeSelect::cur_range [protected, inherited] |
current element in ranges
Definition at line 56 of file quick_range_select.h.
bool drizzled::optimizer::QuickRangeSelect::dont_free [protected, inherited] |
Used by QuickSelectDescending
Definition at line 67 of file quick_range_select.h.
bool drizzled::optimizer::QuickRangeSelect::free_file [protected, inherited] |
True when this->file is "owned" by this quick select
Definition at line 53 of file quick_range_select.h.
bool drizzled::optimizer::QuickRangeSelect::in_ror_merged_scan [protected, inherited] |
Members to deal with case when this quick select is a ROR-merged scan
Definition at line 49 of file quick_range_select.h.
uint32_t drizzled::optimizer::QuickSelectInterface::index [inherited] |
Index this quick select uses, or MAX_KEY for quick selects that use several indexes
Definition at line 120 of file range.h.
Referenced by drizzled::best_access_path(), drizzled::optimizer::Scan::getStats(), drizzled::test_if_skip_sort_order(), and drizzled::update_query().
KEY_PART* drizzled::optimizer::QuickRangeSelect::key_parts [protected, inherited] |
Info about index we're scanning
Definition at line 64 of file quick_range_select.h.
unsigned char* drizzled::optimizer::QuickSelectInterface::last_rowid [inherited] |
The rowid of last row retrieved by this quick select. This is used only when doing ROR-index_merge selects
Definition at line 138 of file range.h.
Referenced by drizzled::optimizer::QuickRorUnionSelect::get_next().
uint32_t drizzled::optimizer::QuickSelectInterface::max_used_key_length [inherited] |
uint32_t drizzled::optimizer::QuickRangeSelect::mrr_buf_size [protected, inherited] |
copy from session->variables.read_rnd_buff_size
Definition at line 61 of file quick_range_select.h.
uint32_t drizzled::optimizer::QuickRangeSelect::mrr_flags [inherited] |
Flags to be used with MRR interface
Definition at line 102 of file quick_range_select.h.
QuickRangeSequenceContext drizzled::optimizer::QuickRangeSelect::qr_traversal_ctx [protected, inherited] |
Members needed to use the MRR interface
Definition at line 60 of file quick_range_select.h.
DYNAMIC_ARRAY drizzled::optimizer::QuickRangeSelect::ranges [protected, inherited] |
ordered array of range ptrs
Definition at line 46 of file quick_range_select.h.
double drizzled::optimizer::QuickSelectInterface::read_time [inherited] |
time to perform this retrieval
Definition at line 114 of file range.h.
Referenced by drizzled::best_access_path(), and drizzled::make_join_statistics().
unsigned char* drizzled::optimizer::QuickSelectInterface::record [inherited] |
Table record buffer used by this quick select.
Reimplemented in drizzled::optimizer::QuickGroupMinMaxSelect.
Definition at line 143 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 [inherited] |
estimate of # of records to be retrieved
Definition at line 113 of file range.h.
Referenced by drizzled::FileSort::run().
uint32_t drizzled::optimizer::QuickSelectInterface::used_key_parts [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 133 of file range.h.
Referenced by drizzled::test_if_skip_sort_order().