#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 () |
TableList * | find_underlying_table (Table *table) |
TableList * | first_leaf_for_name_resolution () |
TableList * | last_leaf_for_name_resolution () |
bool | is_leaf_for_name_resolution () const |
TableList * | top_table () |
Item_subselect * | containing_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::StorageEngine * | getDbType () const |
TableList * | getEmbedding () const |
List< TableList > * | getJoinList () const |
NestedJoin * | getNestedJoin () const |
table_map | getDepTables () const |
table_map | getOnExprDepTables () const |
void | unlock_table_name () |
void | unlock_table_names (TableList *last_table=NULL) |
Public Attributes | |
TableList * | next_local |
TableList * | next_global |
TableList ** | prev_global |
const char * | alias |
const char * | option |
Used by cache index. | |
Item * | on_expr |
Used with outer join. | |
Table * | table |
opened table | |
Item * | prep_on_expr |
COND_EQUAL * | cond_equal |
Used with outer join. | |
TableList * | natural_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 |
TableList * | next_name_resolution_table |
List< Index_hint > * | index_hints |
select_union * | derived_result |
Select_Lex_Unit * | derived |
Select_Lex_Unit of derived table */. | |
Select_Lex * | schema_select_lex |
Select_Lex * | select_lex |
TableList * | next_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 | |
NestedJoin * | nested_join |
if the element is a nested join | |
TableList * | embedding |
nested join containing the table | |
List< TableList > * | join_list |
join list the table belongs to | |
plugin::StorageEngine * | db_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) |
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)
for schema tables TableList::field_translation may be != NULL
2) Was VIEW 3) nested table reference (TableList::nested_join != NULL)
Definition at line 58 of file table_list.h.
Item_subselect * drizzled::TableList::containing_subselect | ( | ) |
Return subselect that contains the FROM list this table is taken from
Subselect | item for the subquery that contains the FROM list this table is taken from if there is any |
NULL | otherwise |
Definition at line 140 of file table_list.cc.
Referenced by drizzled::FileSort::run().
Find underlying base tables (TableList) which represent given table_to_find (Table)
[in] | table | to find |
NULL | if table is not found |
Pointer | to 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.
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.
true | if 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.
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.
Print table as it should be in join list.
str | string 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.
the | Table 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:
false | no errors found |
true | found and reported an error. |
Definition at line 145 of file table_list.cc.
void drizzled::TableList::set_insert_values | ( | ) |
Sets insert_values buffer
[in] | memory | pool for allocating |
false | - OK |
true | - out of memory |
Definition at line 32 of file table_list.cc.
|
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.
|
private |
true if an alias for this table was specified in the SQL.
Definition at line 512 of file table_list.h.
|
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.
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.
Select_Lex* drizzled::TableList::select_lex |
link to select_lex where this table was used
Definition at line 208 of file table_list.h.
Referenced by drizzled::Item_sum::check_sum_func(), drizzled::statement::CreateIndex::execute(), drizzled::Item_field::fix_fields(), drizzled::Item_ref::fix_fields(), drizzled::Item_field::fix_outer_field(), and drizzled::statement::Flush::reloadCache().