Drizzled Public API Documentation

drizzled::TableList Class Reference

#include <table_list.h>

List of all members.

Public Member Functions

const char * getSchemaName ()
char ** getSchemaNamePtr ()
void setSchemaName (char *arg)
const char * getTableName ()
void setTableName (const char *arg)
bool isCartesian () const
void set_underlying_merge ()
bool setup_underlying (Session *session)
bool placeholder ()
void print (Session *session, String *str)
bool set_insert_values (memory::Root *mem_root)
TableListfind_underlying_table (Table *table)
TableListfirst_leaf_for_name_resolution ()
TableListlast_leaf_for_name_resolution ()
bool is_leaf_for_name_resolution ()
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
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.
size_t db_length
size_t table_name_length

Private Attributes

char * db
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 74 of file table_list.h.


Member Function Documentation

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 146 of file table_list.cc.

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

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 51 of file table_list.cc.

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 113 of file table_list.cc.

References nested_join.

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 46 of file table_list.cc.

Referenced by 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 75 of file table_list.cc.

References is_leaf_for_name_resolution(), nested_join, and outer_join.

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

Definition at line 65 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 264 of file table_list.cc.

References drizzled::print_join().

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 151 of file table_list.cc.

Sets insert_values buffer

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

Definition at line 36 of file table_list.cc.


Member Data Documentation

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 549 of file table_list.h.

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

Definition at line 226 of file table_list.h.

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

Definition at line 221 of file table_list.h.

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

Definition at line 536 of file table_list.h.

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

Definition at line 542 of file table_list.h.

true if join_columns contains all columns of this table reference.

Definition at line 193 of file table_list.h.

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 190 of file table_list.h.

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

Definition at line 210 of file table_list.h.

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

Definition at line 205 of file table_list.h.

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 184 of file table_list.h.

Referenced by drizzled::add_join_natural().

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 236 of file table_list.h.

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

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 124 of file table_list.h.

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

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 219 of file table_list.h.

Referenced by drizzled::insert_query().

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 176 of file table_list.h.

Referenced by drizzled::simplify_joins().


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