Drizzled Public API Documentation

drizzled::optimizer::QuickSelectDescending Class Reference
Inheritance diagram for drizzled::optimizer::QuickSelectDescending:
drizzled::optimizer::QuickRangeSelect drizzled::optimizer::QuickSelectInterface

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
 
Tablehead
 
uint32_t index
 
uint32_t max_used_key_length
 
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

Cursorcursor
 
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
 
QuickRangelast_range
 
QuickRangeSequenceContext qr_traversal_ctx
 
uint32_t mrr_buf_size
 
KEY_PARTkey_parts
 
KeyPartInfokey_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
 
uint32_t used_key_parts
 

Detailed Description

Definition at line 267 of file quick_range_select.h.

Member Function Documentation

void drizzled::optimizer::QuickRangeSelect::add_info_string ( std::string *  )
virtualinherited

Append text representation of quick select structure (what and how is merged) to str. The result is added to "Extra" field in EXPLAIN output.

Note

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 426 of file quick_range_select.cc.

Referenced by drizzled::optimizer::QuickIndexMergeSelect::add_info_string().

void drizzled::optimizer::QuickRangeSelect::add_keys_and_lengths ( std::string *  key_names,
std::string *  used_lengths 
)
virtualinherited

Append comma-separated list of keys this quick select uses to key_names; append comma-separated list of corresponding used lengths to used_lengths.

Note
This is used by during explain plan.

Implements drizzled::optimizer::QuickSelectInterface.

Definition at line 433 of file quick_range_select.cc.

int drizzled::optimizer::QuickRangeSelect::cmp_next ( optimizer::QuickRange range_arg)
protectedinherited

Compare if found key is over max-value

Returns
0 if key <= range->max_key
Todo:
: Figure out why can't this function be as simple as cmp_prev().

Definition at line 376 of file quick_range_select.cc.

References drizzled::store_length().

int drizzled::optimizer::QuickRangeSelect::cmp_prev ( optimizer::QuickRange range_arg)
protectedinherited
Returns
0 if found key is inside range (found key >= range->min_key).

Definition at line 412 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

Return values
0Found row
HA_ERR_END_OF_FILENo (more) rows in range # Error code

Reimplemented from drizzled::optimizer::QuickRangeSelect.

Definition at line 480 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()

Parameters
[in]prefix_lengthlength of cur_prefix
[in]cur_prefixprefix 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.

Todo:
This method is a modified copy of QuickRangeSelect::get_next(), so both methods should be unified into a more general one to reduce code duplication.

RETURN

Return values
0on success
HA_ERR_END_OF_FILEif returned all keys
otherif some error occurred

Definition at line 294 of file quick_range_select.cc.

Referenced by drizzled::optimizer::QuickGroupMinMaxSelect::next_prefix().

int drizzled::optimizer::QuickSelectDescending::get_type ( ) const
inlinevirtual

Returns the type of this quick select - one of the QS_TYPE_* values

Reimplemented from drizzled::optimizer::QuickRangeSelect.

Definition at line 282 of file quick_range_select.h.

int drizzled::optimizer::QuickRangeSelect::init ( )
virtualinherited

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.

Return values
0OK
otherError code

Implements drizzled::optimizer::QuickSelectInterface.

Definition at line 89 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)
virtualinherited

Initialize this quick select to be a ROR-merged scan.

SYNOPSIS QuickRangeSelect::init_ror_merged_scan()

Parameters
[in]reuse_handlerIf 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.

Return values
1error

Reimplemented from drizzled::optimizer::QuickSelectInterface.

Definition at line 132 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)
virtualinherited

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().

void drizzled::optimizer::QuickRangeSelect::range_end ( )
virtualinherited

Range end should be called when we have looped over the whole index

Reimplemented from drizzled::optimizer::QuickSelectInterface.

Definition at line 97 of file quick_range_select.cc.

Referenced by drizzled::optimizer::QuickIndexMergeSelect::read_keys_and_merge().

int drizzled::optimizer::QuickSelectDescending::reset ( void  )
inlineprivatevirtual

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

  • the quick select is executed in a subselect
  • a JOIN buffer is used
Return values
0OK
otherError code

Reimplemented from drizzled::optimizer::QuickRangeSelect.

Definition at line 291 of file quick_range_select.h.

References drizzled::optimizer::QuickRangeSelect::reset().

bool drizzled::optimizer::QuickRangeSelect::row_in_ranges ( )
protectedinherited

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

Return values
trueif current row will be retrieved by this quick select false if not

Definition at line 353 of file quick_range_select.cc.

void drizzled::optimizer::QuickRangeSelect::save_last_pos ( )
virtualinherited

Save ROWID of last retrieved row in file->ref. This used in ROR-merging.

Reimplemented from drizzled::optimizer::QuickSelectInterface.

Definition at line 215 of file quick_range_select.cc.

bool drizzled::optimizer::QuickRangeSelect::unique_key_range ( ) const
virtualinherited
Returns
true if there is only one range and this uses the whole primary key

Reimplemented from drizzled::optimizer::QuickSelectInterface.

Definition at line 221 of file quick_range_select.cc.

Member Data Documentation

QuickRange** drizzled::optimizer::QuickRangeSelect::cur_range
protectedinherited

current element in ranges

Definition at line 51 of file quick_range_select.h.

bool drizzled::optimizer::QuickRangeSelect::dont_free
protectedinherited

Used by QuickSelectDescending

Definition at line 62 of file quick_range_select.h.

bool drizzled::optimizer::QuickRangeSelect::free_file
protectedinherited

True when this->file is "owned" by this quick select

Definition at line 48 of file quick_range_select.h.

bool drizzled::optimizer::QuickRangeSelect::in_ror_merged_scan
protectedinherited

Members to deal with case when this quick select is a ROR-merged scan

Definition at line 44 of file quick_range_select.h.

KEY_PART* drizzled::optimizer::QuickRangeSelect::key_parts
protectedinherited

Info about index we're scanning

Definition at line 59 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 124 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
protectedinherited

copy from session->variables.read_rnd_buff_size

Definition at line 56 of file quick_range_select.h.

uint32_t drizzled::optimizer::QuickRangeSelect::mrr_flags
inherited

Flags to be used with MRR interface

Definition at line 97 of file quick_range_select.h.

QuickRangeSequenceContext drizzled::optimizer::QuickRangeSelect::qr_traversal_ctx
protectedinherited

Members needed to use the MRR interface

Definition at line 55 of file quick_range_select.h.

DYNAMIC_ARRAY drizzled::optimizer::QuickRangeSelect::ranges
protectedinherited

ordered array of range ptrs

Definition at line 41 of file quick_range_select.h.

Referenced by drizzled::optimizer::QuickGroupMinMaxSelect::adjust_prefix_ranges().

double drizzled::optimizer::QuickSelectInterface::read_time
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().

unsigned char* drizzled::optimizer::QuickSelectInterface::record
inherited
ha_rows drizzled::optimizer::QuickSelectInterface::records
inherited

estimate of # of records to be retrieved

Definition at line 99 of file range.h.

Referenced by drizzled::FileSort::run().


The documentation for this class was generated from the following files: