Drizzled Public API Documentation

drizzled::TableList Class Reference

#include <table_list.h>

Public Member Functions

const char * getSchemaName () const
 
void setSchemaName (const char *v)
 
const char * getTableName () const
 
void setTableName (const char *v)
 
bool isCartesian () const
 
void set_underlying_merge ()
 
bool setup_underlying (Session *session)
 
bool placeholder ()
 
void print (Session *session, String *str)
 
void set_insert_values ()
 
TableListfind_underlying_table (Table *table)
 
TableListfirst_leaf_for_name_resolution ()
 
TableListlast_leaf_for_name_resolution ()
 
bool is_leaf_for_name_resolution () const
 
TableListtop_table ()
 
Item_subselectcontaining_subselect ()
 
bool process_index_hints (Table *table)
 
void setIsAlias (bool in_is_alias)
 
void setIsFqtn (bool in_is_fqtn)
 
void setCreate (bool in_create)
 
void setInternalTmpTable (bool in_internal_tmp_table)
 
void setDbType (plugin::StorageEngine *in_db_type)
 
void setJoinList (List< TableList > *in_join_list)
 
void setEmbedding (TableList *in_embedding)
 
void setNestedJoin (NestedJoin *in_nested_join)
 
void setDepTables (table_map in_dep_tables)
 
void setOnExprDepTables (table_map in_on_expr_dep_tables)
 
bool getIsAlias () const
 
bool getIsFqtn () const
 
bool isCreate () const
 
bool getInternalTmpTable () const
 
plugin::StorageEnginegetDbType () const
 
TableListgetEmbedding () const
 
List< TableList > * getJoinList () const
 
NestedJoingetNestedJoin () const
 
table_map getDepTables () const
 
table_map getOnExprDepTables () const
 
void unlock_table_name ()
 
void unlock_table_names (TableList *last_table=NULL)
 

Public Attributes

TableListnext_local
 
TableListnext_global
 
TableList ** prev_global
 
const char * alias
 
const char * option
 Used by cache index.
 
Itemon_expr
 Used with outer join.
 
Tabletable
 opened table
 
Itemprep_on_expr
 
COND_EQUALcond_equal
 Used with outer join.
 
TableListnatural_join
 
bool is_natural_join
 
bool is_join_columns_complete
 
bool straight
 optimize with prev table
 
bool force_index
 prefer index over table scan
 
bool ignore_leaves
 preload only non-leaf nodes
 
List< String > * join_using_fields
 
List< Natural_join_column > * join_columns
 
TableListnext_name_resolution_table
 
List< Index_hint > * index_hints
 
select_unionderived_result
 
Select_Lex_Unit * derived
 Select_Lex_Unit of derived table */.
 
Select_Lex * schema_select_lex
 
Select_Lex * select_lex
 
TableListnext_leaf
 
thr_lock_type lock_type
 
uint32_t outer_join
 Which join type.
 

Private Attributes

const char * schema
 
const char * table_name
 
table_map dep_tables
 tables the table depends on
 
table_map on_expr_dep_tables
 tables on expression depends on
 
NestedJoinnested_join
 if the element is a nested join
 
TableListembedding
 nested join containing the table
 
List< TableList > * join_list
 join list the table belongs to
 
plugin::StorageEnginedb_type
 table_type for handler
 
bool internal_tmp_table
 
bool is_alias
 
bool is_fqtn
 
bool create
 

Friends

std::ostream & operator<< (std::ostream &output, const TableList &list)
 

Detailed Description

A Table referenced in the FROM clause.

These table references can be of several types that correspond to different SQL elements. Below we list all types of TableLists with the necessary conditions to determine when a TableList instance belongs to a certain type.

1) table (TableList::view == NULL)

Note

for schema tables TableList::field_translation may be != NULL

2) Was VIEW 3) nested table reference (TableList::nested_join != NULL)

  • table sequence - e.g. (t1, t2, t3)
    Todo:
    how to distinguish from a JOIN?

Definition at line 58 of file table_list.h.

Member Function Documentation

Item_subselect * drizzled::TableList::containing_subselect ( )

Return subselect that contains the FROM list this table is taken from

Return values
Subselectitem for the subquery that contains the FROM list this table is taken from if there is any
NULLotherwise

Definition at line 140 of file table_list.cc.

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

TableList * drizzled::TableList::find_underlying_table ( Table table)

Find underlying base tables (TableList) which represent given table_to_find (Table)

Parameters
[in]tableto find
Return values
NULLif table is not found
Pointerto found table reference

Definition at line 45 of file table_list.cc.

TableList * drizzled::TableList::first_leaf_for_name_resolution ( )

Retrieve the first (left-most) leaf in a nested join tree with respect to name resolution.

Given that 'this' is a nested table reference, recursively walk down the left-most children of 'this' until we reach a leaf table reference with respect to name resolution.

Return values
If'this' is a nested table reference - the left-most child of the tree rooted in 'this', else return 'this'

Definition at line 107 of file table_list.cc.

References nested_join.

bool drizzled::TableList::is_leaf_for_name_resolution ( ) const

Test if this is a leaf with respect to name resolution.

A table reference is a leaf with respect to name resolution if it is either a leaf node in a nested join tree (table, view, schema table, subquery), or an inner node that represents a NATURAL/USING join, or a nested join with materialized join columns.

Return values
trueif a leaf, false otherwise.

Definition at line 40 of file table_list.cc.

Referenced by last_leaf_for_name_resolution().

TableList * drizzled::TableList::last_leaf_for_name_resolution ( )

Retrieve the last (right-most) leaf in a nested join tree with respect to name resolution.

Given that 'this' is a nested table reference, recursively walk down the right-most children of 'this' until we reach a leaf table reference with respect to name resolution.

Return values
If'this' is a nested table reference - the right-most child of the tree rooted in 'this', else 'this'

Definition at line 69 of file table_list.cc.

References is_leaf_for_name_resolution(), nested_join, and outer_join.

bool drizzled::TableList::placeholder ( )

If you change placeholder(), please check the condition in check_transactional_lock() too.

Definition at line 59 of file table_list.cc.

void drizzled::TableList::print ( Session session,
String str 
)

Print table as it should be in join list.

Parameters
strstring where table should be printed

Definition at line 254 of file table_list.cc.

References drizzled::print_join().

bool drizzled::TableList::process_index_hints ( Table table)

Compiles the tagged hints list and fills up st_table::keys_in_use_for_query, st_table::keys_in_use_for_group_by, st_table::keys_in_use_for_order_by, st_table::force_index and st_table::covering_keys.

Parameters
theTable to operate on.

The parser collects the index hints for each table in a "tagged list" (TableList::index_hints). Using the information in this tagged list this function sets the members Table::keys_in_use_for_query, Table::keys_in_use_for_group_by, Table::keys_in_use_for_order_by, Table::force_index and Table::covering_keys.

Current implementation of the runtime does not allow mixing FORCE INDEX and USE INDEX, so this is checked here. Then the FORCE INDEX list (if non-empty) is appended to the USE INDEX list and a flag is set.

Multiple hints of the same kind are processed so that each clause is applied to what is computed in the previous clause.

For example: USE INDEX (i1) USE INDEX (i2) is equivalent to USE INDEX (i1,i2) and means "consider only i1 and i2".

Similarly USE INDEX () USE INDEX (i1) is equivalent to USE INDEX (i1) and means "consider only the index i1"

It is OK to have the same index several times, e.g. "USE INDEX (i1,i1)" is not an error.

Different kind of hints (USE/FORCE/IGNORE) are processed in the following order:

  1. All indexes in USE (or FORCE) INDEX are added to the mask.
  2. All IGNORE INDEX e.g. "USE INDEX i1, IGNORE INDEX i1, USE INDEX i1" will not use i1 at all as if we had "USE INDEX i1, USE INDEX i1, IGNORE INDEX i1". As an optimization if there is a covering index, and we have IGNORE INDEX FOR GROUP/order_st, and this index is used for the JOIN part, then we have to ignore the IGNORE INDEX FROM GROUP/order_st.
Return values
falseno errors found
truefound and reported an error.

Definition at line 145 of file table_list.cc.

void drizzled::TableList::set_insert_values ( )

Sets insert_values buffer

Parameters
[in]memorypool for allocating
Return values
false- OK
true- out of memory

Definition at line 32 of file table_list.cc.

Member Data Documentation

bool drizzled::TableList::create
private

This TableList object corresponds to the table to be created so it is possible that it does not exist (used in CREATE TABLE ... SELECT implementation).

Definition at line 525 of file table_list.h.

select_union* drizzled::TableList::derived_result

select_result for derived table to pass it from table creation to table filling procedure

Definition at line 204 of file table_list.h.

List<Index_hint>* drizzled::TableList::index_hints

Index names in a "... JOIN ... USE/IGNORE INDEX ..." clause.

Definition at line 199 of file table_list.h.

bool drizzled::TableList::is_alias
private

true if an alias for this table was specified in the SQL.

Definition at line 512 of file table_list.h.

bool drizzled::TableList::is_fqtn
private

true if the table is referred to in the statement using a fully qualified name (<db_name>.<table_name>).

Definition at line 518 of file table_list.h.

bool drizzled::TableList::is_join_columns_complete

true if join_columns contains all columns of this table reference.

Definition at line 171 of file table_list.h.

bool drizzled::TableList::is_natural_join

True if 'this' represents a nested join that is a NATURAL JOIN. For one of the operands of 'this', the member 'natural_join' points to the other operand of 'this'.

Definition at line 168 of file table_list.h.

List<Natural_join_column>* drizzled::TableList::join_columns

Explicitly store the result columns of either a NATURAL/USING join or an operand of such a join.

Definition at line 188 of file table_list.h.

List<String>* drizzled::TableList::join_using_fields

Field names in a USING clause for JOIN ... USING.

Definition at line 183 of file table_list.h.

TableList* drizzled::TableList::natural_join

During parsing - left operand of NATURAL/USING join where 'this' is the right operand. After parsing (this->natural_join == this) iff 'this' represents a NATURAL or USING join operation. Thus after parsing 'this' is a NATURAL/USING join iff (natural_join != NULL).

Definition at line 162 of file table_list.h.

Referenced by drizzled::add_join_natural().

TableList* drizzled::TableList::next_global

link in a global list of all queries tables

Definition at line 110 of file table_list.h.

Referenced by drizzled::Session::close_tables_for_reopen(), and drizzled::Session::lock_table_names_exclusively().

TableList* drizzled::TableList::next_leaf

List of all base tables local to a subquery including all view tables. Unlike 'next_local', this in this list views are not leaves. Created in setup_tables() -> make_leaves_list().

Definition at line 214 of file table_list.h.

Referenced by drizzled::get_sort_by_table(), drizzled::make_join_statistics(), and drizzled::Join::prepare().

TableList* drizzled::TableList::next_local

List of tables local to a subquery (used by SQL_LIST). Considers views as leaves (unlike 'next_leaf' below). Created at parse time in Select_Lex::add_table_to_list() -> table_list.link_in_list().

Definition at line 107 of file table_list.h.

Referenced by drizzled::statement::InsertSelect::execute(), drizzled::statement::ReplaceSelect::execute(), drizzled::statement::RenameTable::execute(), drizzled::insert_query(), and unlock_table_names().

TableList* drizzled::TableList::next_name_resolution_table

List of nodes in a nested join tree, that should be considered as leaves with respect to name resolution. The leaves are: views, top-most nodes representing NATURAL/USING joins, subqueries, and base tables. All of these TableList instances contain a materialized list of columns. The list is local to a subquery.

Definition at line 197 of file table_list.h.

Referenced by drizzled::insert_query().

Item* drizzled::TableList::prep_on_expr

The structure of ON expression presented in the member above can be changed during certain optimizations. This member contains a snapshot of AND-OR structure of the ON expression made after permanent transformations of the parse tree, and is used to restore ON clause before every reexecution of a prepared statement or stored procedure.

Definition at line 154 of file table_list.h.


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