select_query and join optimization More...
#include <config.h>
#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
#include <drizzled/sql_select.h>
#include <drizzled/error.h>
#include <drizzled/gettext.h>
#include <drizzled/util/test.h>
#include <drizzled/name_resolution_context_state.h>
#include <drizzled/nested_join.h>
#include <drizzled/probes.h>
#include <drizzled/show.h>
#include <drizzled/item/cache.h>
#include <drizzled/item/cmpfunc.h>
#include <drizzled/item/copy_string.h>
#include <drizzled/item/uint.h>
#include <drizzled/cached_item.h>
#include <drizzled/sql_base.h>
#include <drizzled/field/blob.h>
#include <drizzled/check_stack_overrun.h>
#include <drizzled/lock.h>
#include <drizzled/item/outer_ref.h>
#include <drizzled/index_hint.h>
#include <drizzled/records.h>
#include <drizzled/internal/iocache.h>
#include <drizzled/drizzled.h>
#include <drizzled/plugin/storage_engine.h>
#include <drizzled/sql_union.h>
#include <drizzled/optimizer/key_field.h>
#include <drizzled/optimizer/position.h>
#include <drizzled/optimizer/sargable_param.h>
#include <drizzled/optimizer/key_use.h>
#include <drizzled/optimizer/range.h>
#include <drizzled/optimizer/quick_range_select.h>
#include <drizzled/optimizer/quick_ror_intersect_select.h>
#include <drizzled/filesort.h>
#include <drizzled/sql_lex.h>
#include <drizzled/session.h>
#include <drizzled/sort_field.h>
#include <drizzled/select_result.h>
#include <drizzled/key.h>
#include <drizzled/my_hash.h>
Go to the source code of this file.
Namespaces | |
drizzled | |
TODO: Rename this file - func.h is stupid. | |
Functions | |
static int | drizzled::sort_keyuse (optimizer::KeyUse *a, optimizer::KeyUse *b) |
static COND * | drizzled::build_equal_items (Session *session, COND *cond, COND_EQUAL *inherited, List< TableList > *join_list, COND_EQUAL **cond_equal_ref) |
static Item * | drizzled::part_of_refkey (Table *form, Field *field) |
static bool | drizzled::cmp_buffer_with_ref (JoinTable *tab) |
static void | drizzled::change_cond_ref_to_const (Session *session, list< COND_CMP > &save_list, Item *and_father, Item *cond, Item *field, Item *value) |
static void | drizzled::copy_blobs (Field **ptr) |
static bool | drizzled::eval_const_cond (COND *cond) |
bool | drizzled::handle_select (Session *session, LEX *lex, select_result *result, uint64_t setup_tables_done_option) |
bool | drizzled::fix_inner_refs (Session *session, List< Item > &all_fields, Select_Lex *select, Item **ref_pointer_array) |
void | drizzled::save_index_subquery_explain_info (JoinTable *join_tab, Item *where) |
bool | drizzled::select_query (Session *session, Item ***rref_pointer_array, TableList *tables, uint32_t wild_num, List< Item > &fields, COND *conds, uint32_t og_num, Order *order, Order *group, Item *having, uint64_t select_options, select_result *result, Select_Lex_Unit *unit, Select_Lex *select_lex) |
Item * | drizzled::and_items (Item *cond, Item *item) |
ha_rows | drizzled::get_quick_record_count (Session *session, optimizer::SqlSelect *select, Table *table, const key_map *keys, ha_rows limit) |
uint32_t | drizzled::max_part_bit (key_part_map bits) |
void | drizzled::update_ref_and_keys (Session *session, DYNAMIC_ARRAY *keyuse, JoinTable *join_tab, uint32_t tables, COND *cond, COND_EQUAL *, table_map normal_tables, Select_Lex *select_lex, vector< optimizer::SargableParam > &sargables) |
void | drizzled::optimize_keyuse (Join *join, DYNAMIC_ARRAY *keyuse_array) |
void | drizzled::add_group_and_distinct_keys (Join *join, JoinTable *join_tab) |
int | drizzled::join_tab_cmp (const void *ptr1, const void *ptr2) |
int | drizzled::join_tab_cmp_straight (const void *ptr1, const void *ptr2) |
void | drizzled::calc_used_field_length (Session *, JoinTable *join_tab) |
StoredKey * | drizzled::get_store_key (Session *session, optimizer::KeyUse *keyuse, table_map used_tables, KeyPartInfo *key_part, unsigned char *key_buff, uint32_t maybe_null) |
bool | drizzled::store_val_in_field (Field *field, Item *item, enum_check_fields check_flag) |
void | drizzled::add_cond_and_fix (Item **e1, Item *e2) |
bool | drizzled::create_ref_for_key (Join *join, JoinTable *j, optimizer::KeyUse *org_keyuse, table_map used_tables) |
bool | drizzled::eq_ref_table (Join *join, Order *start_order, JoinTable *tab) |
static Item_equal * | drizzled::find_item_equal (COND_EQUAL *cond_equal, Field *field, bool *inherited_fl) |
static bool | drizzled::check_simple_equality (Item *left_item, Item *right_item, Item *item, COND_EQUAL *cond_equal) |
static bool | drizzled::check_row_equality (Session *session, Item *left_row, Item_row *right_row, COND_EQUAL *cond_equal, List< Item > *eq_list) |
static bool | drizzled::check_equality (Session *session, Item *item, COND_EQUAL *cond_equal, List< Item > *eq_list) |
static COND * | drizzled::build_equal_items_for_cond (Session *session, COND *cond, COND_EQUAL *inherited) |
static int | drizzled::compare_fields_by_table_order (Item_field *field1, Item_field *field2, void *table_join_idx) |
static Item * | drizzled::eliminate_item_equal (COND *cond, COND_EQUAL *upper_levels, Item_equal *item_equal) |
COND * | drizzled::substitute_for_best_equal_field (COND *cond, COND_EQUAL *cond_equal, void *table_join_idx) |
void | drizzled::update_const_equal_items (COND *cond, JoinTable *tab) |
Item * | drizzled::remove_additional_cond (Item *conds) |
static void | drizzled::propagate_cond_constants (Session *session, list< COND_CMP > &save_list, COND *and_father, COND *cond) |
bool | drizzled::check_interleaving_with_nj (JoinTable *next_tab) |
COND * | drizzled::optimize_cond (Join *join, COND *conds, List< TableList > *join_list, Item::cond_result *cond_value) |
COND * | drizzled::remove_eq_conds (Session *session, COND *cond, Item::cond_result *cond_value) |
static bool | drizzled::test_if_equality_guarantees_uniqueness (Item *l, Item *r) |
bool | drizzled::const_expression_in_where (COND *cond, Item *comp_item, Item **const_item) |
Next_select_func | drizzled::setup_end_select_func (Join *join) |
int | drizzled::do_select (Join *join, List< Item > *fields, Table *table) |
enum_nested_loop_state | drizzled::sub_select_cache (Join *join, JoinTable *join_tab, bool end_of_records) |
enum_nested_loop_state | drizzled::sub_select (Join *join, JoinTable *join_tab, bool end_of_records) |
int | drizzled::safe_index_read (JoinTable *tab) |
int | drizzled::join_read_const (JoinTable *tab) |
int | drizzled::join_read_key (JoinTable *tab) |
int | drizzled::join_read_always_key (JoinTable *tab) |
int | drizzled::join_read_last_key (JoinTable *tab) |
int | drizzled::join_no_more_records (ReadRecord *) |
int | drizzled::join_read_next_same_diff (ReadRecord *info) |
int | drizzled::join_read_next_same (ReadRecord *info) |
int | drizzled::join_read_prev_same (ReadRecord *info) |
int | drizzled::join_init_quick_read_record (JoinTable *tab) |
int | drizzled::init_read_record_seq (JoinTable *tab) |
int | drizzled::test_if_quick_select (JoinTable *tab) |
int | drizzled::join_init_read_record (JoinTable *tab) |
int | drizzled::join_read_first (JoinTable *tab) |
int | drizzled::join_read_next_different (ReadRecord *info) |
int | drizzled::join_read_next (ReadRecord *info) |
int | drizzled::join_read_last (JoinTable *tab) |
int | drizzled::join_read_prev (ReadRecord *info) |
int | drizzled::join_read_always_key_or_null (JoinTable *tab) |
int | drizzled::join_read_next_same_or_null (ReadRecord *info) |
enum_nested_loop_state | drizzled::end_send_group (Join *join, JoinTable *, bool end_of_records) |
enum_nested_loop_state | drizzled::end_write_group (Join *join, JoinTable *, bool end_of_records) |
bool | drizzled::test_if_ref (Item_field *left_item, Item *right_item) |
COND * | drizzled::make_cond_for_table (COND *cond, table_map tables, table_map used_table, bool exclude_expensive_cond) |
static int | drizzled::test_if_order_by_key (Order *order, Table *table, uint32_t idx, uint32_t *used_key_parts) |
bool | drizzled::is_subkey (KeyPartInfo *key_part, KeyPartInfo *ref_key_part, KeyPartInfo *ref_key_part_end) |
static uint32_t | drizzled::test_if_subkey (Order *order, Table *table, uint32_t ref, uint32_t ref_key_parts, const key_map *usable_keys) |
bool | drizzled::list_contains_unique_index (Table *table, bool(*find_func)(Field *, void *), void *data) |
bool | drizzled::find_field_in_order_list (Field *field, void *data) |
bool | drizzled::find_field_in_item_list (Field *field, void *data) |
bool | drizzled::test_if_skip_sort_order (JoinTable *tab, Order *order, ha_rows select_limit, bool no_changes, const key_map *map) |
int | drizzled::create_sort_index (Session *session, Join *join, Order *order, ha_rows filesort_limit, ha_rows select_limit, bool is_order_by) |
int | drizzled::remove_dup_with_compare (Session *session, Table *table, Field **first_field, uint32_t offset, Item *having) |
int | drizzled::remove_dup_with_hash_index (Session *session, Table *table, uint32_t field_count, Field **first_field, uint32_t key_length, Item *having) |
SortField * | drizzled::make_unireg_sortorder (Order *order, uint32_t *length, SortField *sortorder) |
bool | drizzled::cp_buffer_from_ref (Session *session, table_reference_st *ref) |
static bool | drizzled::find_order_in_list (Session *session, Item **ref_pointer_array, TableList *tables, Order *order, List< Item > &fields, List< Item > &all_fields, bool is_group_field) |
int | drizzled::setup_order (Session *session, Item **ref_pointer_array, TableList *tables, List< Item > &fields, List< Item > &all_fields, Order *order) |
int | drizzled::setup_group (Session *session, Item **ref_pointer_array, TableList *tables, List< Item > &fields, List< Item > &all_fields, Order *order, bool *hidden_group_fields) |
Order * | drizzled::create_distinct_group (Session *session, Item **ref_pointer_array, Order *order_list, List< Item > &fields, List< Item > &, bool *all_order_by_fields_used) |
void | drizzled::count_field_types (Select_Lex *select_lex, Tmp_Table_Param *param, List< Item > &fields, bool reset_with_sum_func) |
int | drizzled::test_if_item_cache_changed (List< Cached_item > &list) |
bool | drizzled::setup_copy_fields (Session *session, Tmp_Table_Param *param, Item **ref_pointer_array, List< Item > &res_selected_fields, List< Item > &res_all_fields, uint32_t elements, List< Item > &all_fields) |
void | drizzled::copy_fields (Tmp_Table_Param *param) |
bool | drizzled::change_to_use_tmp_fields (Session *session, Item **ref_pointer_array, List< Item > &res_selected_fields, List< Item > &res_all_fields, uint32_t elements, List< Item > &all_fields) |
bool | drizzled::change_refs_to_tmp_fields (Session *session, Item **ref_pointer_array, List< Item > &res_selected_fields, List< Item > &res_all_fields, uint32_t elements, List< Item > &all_fields) |
bool | drizzled::setup_sum_funcs (Session *session, Item_sum **func_ptr) |
void | drizzled::init_tmptable_sum_functions (Item_sum **func_ptr) |
void | drizzled::update_tmptable_sum_func (Item_sum **func_ptr, Table *) |
void | drizzled::copy_sum_funcs (Item_sum **func_ptr, Item_sum **end_ptr) |
bool | drizzled::init_sum_functions (Item_sum **func_ptr, Item_sum **end_ptr) |
bool | drizzled::update_sum_func (Item_sum **func_ptr) |
bool | drizzled::copy_funcs (Item **func_ptr, const Session *session) |
void | drizzled::free_underlaid_joins (Session *session, Select_Lex *select) |
bool | drizzled::change_group_ref (Session *session, Item_func *expr, Order *group_list, bool *changed) |
static void | drizzled::print_table_array (Session *session, String *str, TableList **table, TableList **end) |
void | drizzled::print_join (Session *session, String *str, List< TableList > *tables) |
Variables | |
const char * | drizzled::subq_sj_cond_name = "0123456789ABCDEF0123456789abcdef0123456789ABCDEF0123456789abcdef-sj-cond" |
select_query and join optimization
Definition in file sql_select.cc.