Drizzled Public API Documentation

drizzled::optimizer::QuickSelectInterface Class Reference

#include <range.h>

Inheritance diagram for drizzled::optimizer::QuickSelectInterface:
drizzled::optimizer::QuickGroupMinMaxSelect drizzled::optimizer::QuickIndexMergeSelect drizzled::optimizer::QuickRangeSelect drizzled::optimizer::QuickRorIntersectSelect drizzled::optimizer::QuickRorUnionSelect drizzled::optimizer::QuickSelectDescending

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
Tablehead
uint32_t index
uint32_t max_used_key_length
uint32_t used_key_parts
unsigned char * last_rowid
unsigned char * record

Detailed Description

Quick select interface. This class is a parent for all QUICK_*_SELECT classes.

The usage scenario is as follows:

  1. Create quick select quick= new QUICK_XXX_SELECT(...);
  1. Perform lightweight initialization. This can be done in 2 ways: 2.a: Regular initialization if (quick->init()) { the only valid action after failed init() call is delete delete quick; } 2.b: Special initialization for quick selects merged by QUICK_ROR_*_SELECT if (quick->init_ror_merged_scan()) delete quick;
  1. Perform zero, one, or more scans. while (...) { initialize quick select for scan. This may allocate buffers and/or prefetch rows. if (quick->reset()) { the only valid action after failed reset() call is delete delete quick; abort query }

perform the scan do { res= quick->get_next(); } while (res && ...) }

  1. Delete the select: delete quick;

Definition at line 95 of file range.h.

Member Function Documentation

virtual void drizzled::optimizer::QuickSelectInterface::add_info_string ( std::string *  )
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.

Note

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

virtual void drizzled::optimizer::QuickSelectInterface::add_keys_and_lengths ( std::string *  key_names,
std::string *  used_lengths 
)
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.

Note
This is used by during explain plan.

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

virtual int drizzled::optimizer::QuickSelectInterface::get_type ( ) const
pure virtual
virtual int drizzled::optimizer::QuickSelectInterface::init ( )
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.

Return values
0OK
otherError code

Implemented in drizzled::optimizer::QuickGroupMinMaxSelect, drizzled::optimizer::QuickRangeSelect, drizzled::optimizer::QuickIndexMergeSelect, drizzled::optimizer::QuickRorIntersectSelect, and drizzled::optimizer::QuickRorUnionSelect.

virtual int drizzled::optimizer::QuickSelectInterface::init_ror_merged_scan ( bool  )
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.

Parameters
Iftrue, the quick select may use table->Cursor, otherwise it must create and use a separate Cursor object.
Return values
0Ok
otherError

Reimplemented in drizzled::optimizer::QuickRangeSelect, and drizzled::optimizer::QuickRorIntersectSelect.

Definition at line 212 of file range.h.

Referenced by drizzled::optimizer::QuickRorUnionSelect::reset().

bool drizzled::optimizer::QuickSelectInterface::is_keys_used ( const boost::dynamic_bitset<> &  fields)
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().

virtual void drizzled::optimizer::QuickSelectInterface::range_end ( )
inlinevirtual

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

Reimplemented in drizzled::optimizer::QuickRangeSelect.

Definition at line 176 of file range.h.

virtual int drizzled::optimizer::QuickSelectInterface::reset ( void  )
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

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

Implemented in drizzled::optimizer::QuickGroupMinMaxSelect, 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().

virtual void drizzled::optimizer::QuickSelectInterface::save_last_pos ( )
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().

Member Data Documentation

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

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


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