File plan_generation.c
FileList > cubrid > src > optimizer > plan_generation.c
Go to the source code of this file
#include <assert.h>
#include "optimizer.h"
#include "config.h"
#include "object_primitive.h"
#include "query_bitset.h"
#include "query_graph.h"
#include "query_planner.h"
#include "parser.h"
#include "parser_support.h"
#include "system_parameter.h"
#include "xasl.h"
#include "xasl_generation.h"
#include "xasl_predicate.hpp"
Public Types
Public Functions
Public Static Functions
| Type |
Name |
| XASL_NODE * |
add_access_spec (QO_ENV * env, XASL_NODE * xasl, QO_PLAN * plan)
|
| XASL_NODE * |
add_after_join_predicate (QO_ENV * env, XASL_NODE * xasl, PT_NODE * pred)
|
| XASL_NODE * |
add_during_join_predicate (QO_ENV * env, XASL_NODE * xasl, PT_NODE * pred)
|
| XASL_NODE * |
add_fetch_proc (QO_ENV * env, XASL_NODE * xasl, XASL_NODE * proc)
|
| XASL_NODE * |
add_if_predicate (QO_ENV * env, XASL_NODE * xasl, PT_NODE * pred)
|
| XASL_NODE * |
add_scan_proc (QO_ENV * env, XASL_NODE * xasl, XASL_NODE * scan)
|
| XASL_NODE * |
add_sort_spec (QO_ENV * env, XASL_NODE * xasl, QO_PLAN * plan, DB_VALUE * ordby_val, bool instnum_flag)
|
| XASL_NODE * |
add_subqueries (QO_ENV * env, XASL_NODE * xasl, BITSET * subqueries)
|
| XASL_NODE * |
add_uncorrelated (QO_ENV * env, XASL_NODE * xasl, XASL_NODE * sub)
|
| int |
bitset_has_path (QO_ENV * env, BITSET * predset)
|
| XASL_NODE * |
check_hashjoin_xasl (QO_ENV * env, XASL_NODE * xasl)
|
| XASL_NODE * |
check_merge_xasl (QO_ENV * env, XASL_NODE * xasl)
|
| XASL_NODE * |
gen_hashjoin (QO_ENV * env, QO_PLAN * plan, BITSET * pred_set, BITSET * subqueries, XASL_NODE * inner_scans, XASL_NODE * fetches, XASL_NODE * xasl)
|
| XASL_NODE * |
gen_inner (QO_ENV * env, QO_PLAN * plan, BITSET * predset, BITSET * subqueries, XASL_NODE * inner_scans, XASL_NODE * fetches)
|
| XASL_NODE * |
gen_outer (QO_ENV * env, QO_PLAN * plan, BITSET * subqueries, XASL_NODE * inner_scans, XASL_NODE * fetches, XASL_NODE * xasl)
|
| XASL_NODE * |
init_class_scan_proc (QO_ENV * env, XASL_NODE * xasl, QO_PLAN * plan)
|
| XASL_NODE * |
init_list_scan_proc (QO_ENV * env, XASL_NODE * xasl, XASL_NODE * list, PT_NODE * namelist, BITSET * predset, int * poslist)
|
| int |
is_after_join_term (QO_TERM * term)
|
| int |
is_always_true (QO_TERM * term)
|
| int |
is_follow_if_term (QO_TERM * term)
|
| int |
is_normal_access_term (QO_TERM * term)
|
| int |
is_normal_if_term (QO_TERM * term)
|
| int |
is_totally_after_join_term (QO_TERM * term)
|
| XASL_NODE * |
make_buildlist_proc (QO_ENV * env, PT_NODE * namelist)
|
| XASL_NODE * |
make_fetch_proc (QO_ENV * env, QO_PLAN * plan)
|
| XASL_NODE * |
make_hashjoin_proc (QO_ENV * env, QO_PLAN * plan, XASL_NODE * outer_xasl, XASL_NODE * inner_xasl, PROJECTION_INFO * projection_info)
|
| PT_NODE * |
make_if_pred_from_plan (QO_ENV * env, QO_PLAN * plan)
|
| PT_NODE * |
make_instnum_pred_from_plan (QO_ENV * env, QO_PLAN * plan)
|
| XASL_NODE * |
make_mergelist_proc (QO_ENV * env, QO_PLAN * plan, XASL_NODE * left, PT_NODE * left_list, BITSET * left_exprs, PT_NODE * left_elist, XASL_NODE * rght, PT_NODE * rght_list, BITSET * rght_exprs, PT_NODE * rght_elist)
|
| PT_NODE * |
make_namelist_from_bitset (QO_ENV * env, BITSET * bitset)
|
| PT_NODE * |
make_namelist_from_projected_segs (QO_ENV * env, QO_PLAN * plan)
|
| void |
make_outer_instnum (QO_ENV * env, QO_PLAN * outer, QO_PLAN * plan)
|
| PT_NODE * |
make_pred_from_bitset (QO_ENV * env, BITSET * predset, ELIGIBILITY_FN safe)
|
| void |
make_pred_from_plan (QO_ENV * env, QO_PLAN * plan, PT_NODE ** key_access_pred, PT_NODE ** access_pred, QO_XASL_INDEX_INFO * qo_index_infop, PT_NODE ** hash_pred)
|
| XASL_NODE * |
make_scan_proc (QO_ENV * env)
|
| XASL_NODE * |
make_sort_limit_proc (QO_ENV * env, QO_PLAN * plan, PT_NODE * namelist, XASL_NODE * xasl)
|
| void |
mark_access_as_outer_join (PARSER_CONTEXT * parser, XASL_NODE * xasl)
|
| int |
path_access_term (QO_TERM * term)
|
| int |
path_if_term (QO_TERM * term)
|
| XASL_NODE * |
preserve_info (QO_ENV * env, QO_PLAN * plan, XASL_NODE * xasl)
|
| bool |
qo_check_parent_eq_class_for_multi_range_opt (QO_PLAN * parent, QO_PLAN * subplan, QO_PLAN * sort_plan)
|
| int |
qo_check_plan_index_for_multi_range_opt (PT_NODE * orderby_nodes, PT_NODE * orderby_sort_list, QO_PLAN * plan, bool * is_valid, int * first_col_idx_pos, bool * reverse)
|
| bool |
qo_check_seg_belongs_to_range_term (QO_PLAN * subplan, QO_ENV * env, int seg_idx)
|
| bool |
qo_check_subplan_join_cond_for_multi_range_opt (QO_PLAN * parent, QO_PLAN * subplan, QO_PLAN * sort_plan)
|
| int |
qo_check_subplans_for_multi_range_opt (QO_PLAN * parent, QO_PLAN * plan, QO_PLAN * sortplan, bool * is_valid, bool * seen)
|
| bool |
qo_check_subqueries_for_multi_range_opt (QO_PLAN * plan, int sort_col_idx_pos)
|
| int |
qo_check_terms_for_multiple_range_opt (QO_PLAN * plan, int first_sort_col_idx, bool * can_optimize)
|
| void |
qo_clear_projection_final_info (PARSER_CONTEXT * parser, PROJECTION_FINAL_INFO * final_info)
|
| void |
qo_clear_projection_info (QO_ENV * env, PROJECTION_INFO * info)
|
| void |
qo_clear_projection_part_info (PARSER_CONTEXT * parser, PROJECTION_PART_INFO * part_info)
|
| void |
qo_free_xasl_index_info (QO_ENV * env, QO_XASL_INDEX_INFO * info)
|
| bool |
qo_get_limit_from_eval_term (PARSER_CONTEXT * parser, PRED_EXPR * pred, REGU_PTR_LIST * lower, REGU_PTR_LIST * upper)
|
| bool |
qo_get_limit_from_instnum_pred (PARSER_CONTEXT * parser, PRED_EXPR * pred, REGU_PTR_LIST * lower, REGU_PTR_LIST * upper)
|
| int |
qo_get_multi_col_range_segs (QO_ENV * env, QO_PLAN * plan, QO_INDEX_ENTRY * index_entryp, BITSET * multi_col_segs, BITSET * multi_col_range_segs, BITSET * index_segs)
|
| PT_NODE * |
qo_get_orderby_num_upper_bound_node (PARSER_CONTEXT * parser, PT_NODE * orderby_for, bool * is_new_node)
|
| QO_XASL_INDEX_INFO * |
qo_get_xasl_index_info (QO_ENV * env, QO_PLAN * plan)
|
| int |
qo_init_merge_info (QO_ENV * env, QO_PLAN * plan, PROJECTION_INFO * projection_info, QFILE_LIST_MERGE_INFO * merge_info)
|
| int |
qo_init_projection_info (QO_ENV * env, QO_PLAN * plan, BITSET * pred_set, PROJECTION_INFO * info)
|
| bool |
qo_validate_regu_var_for_limit (REGU_VARIABLE * var_p)
|
| REGU_PTR_LIST |
regu_ptr_list_add_regu (REGU_VARIABLE * var_p, REGU_PTR_LIST list)
|
| REGU_PTR_LIST |
regu_ptr_list_create ()
|
| void |
regu_ptr_list_free (REGU_PTR_LIST list)
|
Public Types Documentation
typedef ELIGIBILITY_FN
typedef int(* ELIGIBILITY_FN) (QO_TERM *);
Public Functions Documentation
function qo_add_hq_iterations_access_spec
xasl_node * qo_add_hq_iterations_access_spec (
QO_PLAN * plan,
xasl_node * xasl
)
function qo_check_iscan_for_multi_range_opt
bool qo_check_iscan_for_multi_range_opt (
QO_PLAN * plan
)
function qo_check_join_for_multi_range_opt
bool qo_check_join_for_multi_range_opt (
QO_PLAN * plan
)
function qo_find_subplan_using_multi_range_opt
int qo_find_subplan_using_multi_range_opt (
QO_PLAN * plan,
QO_PLAN ** result,
int * join_idx
)
function qo_get_key_limit_from_instnum
QO_LIMIT_INFO * qo_get_key_limit_from_instnum (
PARSER_CONTEXT * parser,
QO_PLAN * plan,
xasl_node * xasl
)
function qo_get_key_limit_from_ordbynum
QO_LIMIT_INFO * qo_get_key_limit_from_ordbynum (
PARSER_CONTEXT * parser,
QO_PLAN * plan,
xasl_node * xasl,
bool ignore_lower
)
function qo_is_index_covering_scan
bool qo_is_index_covering_scan (
QO_PLAN * plan
)
function qo_is_index_iss_scan
bool qo_is_index_iss_scan (
QO_PLAN * plan
)
function qo_is_index_loose_scan
bool qo_is_index_loose_scan (
QO_PLAN * plan
)
function qo_is_index_mro_scan
bool qo_is_index_mro_scan (
QO_PLAN * plan
)
function qo_plan_iscan_sort_list
PT_NODE * qo_plan_iscan_sort_list (
QO_PLAN * plan
)
function qo_plan_multi_range_opt
bool qo_plan_multi_range_opt (
QO_PLAN * plan
)
function qo_plan_skip_groupby
bool qo_plan_skip_groupby (
QO_PLAN * plan
)
function qo_plan_skip_orderby
bool qo_plan_skip_orderby (
QO_PLAN * plan
)
function qo_to_xasl
xasl_node * qo_to_xasl (
QO_PLAN * plan,
xasl_node * xasl
)
function qo_xasl_get_num_terms
int qo_xasl_get_num_terms (
QO_XASL_INDEX_INFO * info
)
function qo_xasl_get_terms
PT_NODE ** qo_xasl_get_terms (
QO_XASL_INDEX_INFO * info
)
Public Static Functions Documentation
function add_access_spec
static XASL_NODE * add_access_spec (
QO_ENV * env,
XASL_NODE * xasl,
QO_PLAN * plan
)
function add_after_join_predicate
static XASL_NODE * add_after_join_predicate (
QO_ENV * env,
XASL_NODE * xasl,
PT_NODE * pred
)
function add_during_join_predicate
static XASL_NODE * add_during_join_predicate (
QO_ENV * env,
XASL_NODE * xasl,
PT_NODE * pred
)
function add_fetch_proc
static XASL_NODE * add_fetch_proc (
QO_ENV * env,
XASL_NODE * xasl,
XASL_NODE * proc
)
function add_if_predicate
static XASL_NODE * add_if_predicate (
QO_ENV * env,
XASL_NODE * xasl,
PT_NODE * pred
)
function add_scan_proc
static XASL_NODE * add_scan_proc (
QO_ENV * env,
XASL_NODE * xasl,
XASL_NODE * scan
)
function add_sort_spec
static XASL_NODE * add_sort_spec (
QO_ENV * env,
XASL_NODE * xasl,
QO_PLAN * plan,
DB_VALUE * ordby_val,
bool instnum_flag
)
function add_subqueries
static XASL_NODE * add_subqueries (
QO_ENV * env,
XASL_NODE * xasl,
BITSET * subqueries
)
static XASL_NODE * add_uncorrelated (
QO_ENV * env,
XASL_NODE * xasl,
XASL_NODE * sub
)
function bitset_has_path
static int bitset_has_path (
QO_ENV * env,
BITSET * predset
)
function check_hashjoin_xasl
static XASL_NODE * check_hashjoin_xasl (
QO_ENV * env,
XASL_NODE * xasl
)
function check_merge_xasl
static XASL_NODE * check_merge_xasl (
QO_ENV * env,
XASL_NODE * xasl
)
function gen_hashjoin
static XASL_NODE * gen_hashjoin (
QO_ENV * env,
QO_PLAN * plan,
BITSET * pred_set,
BITSET * subqueries,
XASL_NODE * inner_scans,
XASL_NODE * fetches,
XASL_NODE * xasl
)
function gen_inner
static XASL_NODE * gen_inner (
QO_ENV * env,
QO_PLAN * plan,
BITSET * predset,
BITSET * subqueries,
XASL_NODE * inner_scans,
XASL_NODE * fetches
)
function gen_outer
static XASL_NODE * gen_outer (
QO_ENV * env,
QO_PLAN * plan,
BITSET * subqueries,
XASL_NODE * inner_scans,
XASL_NODE * fetches,
XASL_NODE * xasl
)
function init_class_scan_proc
static XASL_NODE * init_class_scan_proc (
QO_ENV * env,
XASL_NODE * xasl,
QO_PLAN * plan
)
function init_list_scan_proc
static XASL_NODE * init_list_scan_proc (
QO_ENV * env,
XASL_NODE * xasl,
XASL_NODE * list,
PT_NODE * namelist,
BITSET * predset,
int * poslist
)
function is_after_join_term
static int is_after_join_term (
QO_TERM * term
)
function is_always_true
static int is_always_true (
QO_TERM * term
)
function is_follow_if_term
static int is_follow_if_term (
QO_TERM * term
)
function is_normal_access_term
static int is_normal_access_term (
QO_TERM * term
)
function is_normal_if_term
static int is_normal_if_term (
QO_TERM * term
)
function is_totally_after_join_term
static int is_totally_after_join_term (
QO_TERM * term
)
function make_buildlist_proc
static XASL_NODE * make_buildlist_proc (
QO_ENV * env,
PT_NODE * namelist
)
function make_fetch_proc
static XASL_NODE * make_fetch_proc (
QO_ENV * env,
QO_PLAN * plan
)
function make_hashjoin_proc
static XASL_NODE * make_hashjoin_proc (
QO_ENV * env,
QO_PLAN * plan,
XASL_NODE * outer_xasl,
XASL_NODE * inner_xasl,
PROJECTION_INFO * projection_info
)
function make_if_pred_from_plan
static PT_NODE * make_if_pred_from_plan (
QO_ENV * env,
QO_PLAN * plan
)
function make_instnum_pred_from_plan
static PT_NODE * make_instnum_pred_from_plan (
QO_ENV * env,
QO_PLAN * plan
)
function make_mergelist_proc
static XASL_NODE * make_mergelist_proc (
QO_ENV * env,
QO_PLAN * plan,
XASL_NODE * left,
PT_NODE * left_list,
BITSET * left_exprs,
PT_NODE * left_elist,
XASL_NODE * rght,
PT_NODE * rght_list,
BITSET * rght_exprs,
PT_NODE * rght_elist
)
function make_namelist_from_bitset
static PT_NODE * make_namelist_from_bitset (
QO_ENV * env,
BITSET * bitset
)
function make_namelist_from_projected_segs
static PT_NODE * make_namelist_from_projected_segs (
QO_ENV * env,
QO_PLAN * plan
)
function make_outer_instnum
static void make_outer_instnum (
QO_ENV * env,
QO_PLAN * outer,
QO_PLAN * plan
)
function make_pred_from_bitset
static PT_NODE * make_pred_from_bitset (
QO_ENV * env,
BITSET * predset,
ELIGIBILITY_FN safe
)
function make_pred_from_plan
static void make_pred_from_plan (
QO_ENV * env,
QO_PLAN * plan,
PT_NODE ** key_access_pred,
PT_NODE ** access_pred,
QO_XASL_INDEX_INFO * qo_index_infop,
PT_NODE ** hash_pred
)
function make_scan_proc
static XASL_NODE * make_scan_proc (
QO_ENV * env
)
function make_sort_limit_proc
static XASL_NODE * make_sort_limit_proc (
QO_ENV * env,
QO_PLAN * plan,
PT_NODE * namelist,
XASL_NODE * xasl
)
function mark_access_as_outer_join
static void mark_access_as_outer_join (
PARSER_CONTEXT * parser,
XASL_NODE * xasl
)
function path_access_term
static int path_access_term (
QO_TERM * term
)
function path_if_term
static int path_if_term (
QO_TERM * term
)
function preserve_info
static XASL_NODE * preserve_info (
QO_ENV * env,
QO_PLAN * plan,
XASL_NODE * xasl
)
function qo_check_parent_eq_class_for_multi_range_opt
static bool qo_check_parent_eq_class_for_multi_range_opt (
QO_PLAN * parent,
QO_PLAN * subplan,
QO_PLAN * sort_plan
)
function qo_check_plan_index_for_multi_range_opt
static int qo_check_plan_index_for_multi_range_opt (
PT_NODE * orderby_nodes,
PT_NODE * orderby_sort_list,
QO_PLAN * plan,
bool * is_valid,
int * first_col_idx_pos,
bool * reverse
)
function qo_check_seg_belongs_to_range_term
static bool qo_check_seg_belongs_to_range_term (
QO_PLAN * subplan,
QO_ENV * env,
int seg_idx
)
function qo_check_subplan_join_cond_for_multi_range_opt
static bool qo_check_subplan_join_cond_for_multi_range_opt (
QO_PLAN * parent,
QO_PLAN * subplan,
QO_PLAN * sort_plan
)
function qo_check_subplans_for_multi_range_opt
static int qo_check_subplans_for_multi_range_opt (
QO_PLAN * parent,
QO_PLAN * plan,
QO_PLAN * sortplan,
bool * is_valid,
bool * seen
)
function qo_check_subqueries_for_multi_range_opt
static bool qo_check_subqueries_for_multi_range_opt (
QO_PLAN * plan,
int sort_col_idx_pos
)
function qo_check_terms_for_multiple_range_opt
static int qo_check_terms_for_multiple_range_opt (
QO_PLAN * plan,
int first_sort_col_idx,
bool * can_optimize
)
function qo_clear_projection_final_info
static void qo_clear_projection_final_info (
PARSER_CONTEXT * parser,
PROJECTION_FINAL_INFO * final_info
)
function qo_clear_projection_info
static void qo_clear_projection_info (
QO_ENV * env,
PROJECTION_INFO * info
)
function qo_clear_projection_part_info
static void qo_clear_projection_part_info (
PARSER_CONTEXT * parser,
PROJECTION_PART_INFO * part_info
)
function qo_free_xasl_index_info
static void qo_free_xasl_index_info (
QO_ENV * env,
QO_XASL_INDEX_INFO * info
)
function qo_get_limit_from_eval_term
static bool qo_get_limit_from_eval_term (
PARSER_CONTEXT * parser,
PRED_EXPR * pred,
REGU_PTR_LIST * lower,
REGU_PTR_LIST * upper
)
function qo_get_limit_from_instnum_pred
static bool qo_get_limit_from_instnum_pred (
PARSER_CONTEXT * parser,
PRED_EXPR * pred,
REGU_PTR_LIST * lower,
REGU_PTR_LIST * upper
)
function qo_get_multi_col_range_segs
static int qo_get_multi_col_range_segs (
QO_ENV * env,
QO_PLAN * plan,
QO_INDEX_ENTRY * index_entryp,
BITSET * multi_col_segs,
BITSET * multi_col_range_segs,
BITSET * index_segs
)
function qo_get_orderby_num_upper_bound_node
static PT_NODE * qo_get_orderby_num_upper_bound_node (
PARSER_CONTEXT * parser,
PT_NODE * orderby_for,
bool * is_new_node
)
function qo_get_xasl_index_info
static QO_XASL_INDEX_INFO * qo_get_xasl_index_info (
QO_ENV * env,
QO_PLAN * plan
)
function qo_init_merge_info
static int qo_init_merge_info (
QO_ENV * env,
QO_PLAN * plan,
PROJECTION_INFO * projection_info,
QFILE_LIST_MERGE_INFO * merge_info
)
function qo_init_projection_info
static int qo_init_projection_info (
QO_ENV * env,
QO_PLAN * plan,
BITSET * pred_set,
PROJECTION_INFO * info
)
function qo_validate_regu_var_for_limit
static bool qo_validate_regu_var_for_limit (
REGU_VARIABLE * var_p
)
function regu_ptr_list_add_regu
static REGU_PTR_LIST regu_ptr_list_add_regu (
REGU_VARIABLE * var_p,
REGU_PTR_LIST list
)
function regu_ptr_list_create
static REGU_PTR_LIST regu_ptr_list_create ()
function regu_ptr_list_free
static void regu_ptr_list_free (
REGU_PTR_LIST list
)
The documentation for this class was generated from the following file cubrid/src/optimizer/plan_generation.c