CUBRID Engine  latest
query_graph.h File Reference
#include <setjmp.h>
#include "work_space.h"
#include "statistics.h"
#include "optimizer.h"
#include "parser.h"
#include "query_bitset.h"
Include dependency graph for query_graph.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  qo_class_info_entry
 
struct  qo_class_info
 
struct  qo_attr_info
 
struct  qo_index_entry
 
struct  qo_index
 
struct  qo_node_index_entry
 
struct  qo_node_index
 
struct  qo_using_index_entry
 
struct  qo_using_index
 
struct  qo_node
 
struct  qo_segment
 
struct  qo_eqclass
 
struct  qo_term
 
struct  qo_subquery
 
struct  qo_partition
 
struct  qo_env
 
struct  qo_xasl_index_info
 

Macros

#define QO_ENTRY_MULTI_COL(entry)   ((entry)->col_num > 1 ? true : false)
 
#define QO_INDEX_INDEX(ind, n)   (&(ind)->index[(n)])
 
#define QO_GET_CLASS_STATS(entryp)   ((entryp)->self_allocated ? (entryp)->stats : (entryp)->smclass->stats)
 
#define QO_NI_N(ni)   ((ni)->n)
 
#define QO_NI_ENTRY(ni, n)   (&(ni)->index[(n)])
 
#define QO_UI_N(ui)   ((ui)->n)
 
#define QO_UI_INDEX(ui, n)   ((ui)->index[(n)].name)
 
#define QO_UI_FORCE(ui, n)   ((ui)->index[(n)].force)
 
#define QO_UI_KEYLIMIT(ui, n)   ((ui)->index[(n)].key_limit)
 
#define QO_NODE_ENV(node)   (node)->env
 
#define QO_NODE_ENTITY_SPEC(node)   (node)->entity_spec
 
#define QO_NODE_PT_JOIN_TYPE(node)   (node)->entity_spec->info.spec.join_type
 
#define QO_NODE_LOCATION(node)   (node)->entity_spec->info.spec.location
 
#define QO_NODE_OID_SEG(node)   (node)->oid_seg
 
#define QO_NODE_EQCLASSES(node)   (node)->eqclasses
 
#define QO_NODE_PARTITION(node)   (node)->partition
 
#define QO_NODE_DEP_SET(node)   (node)->dep_set
 
#define QO_NODE_SARGS(node)   (node)->sargs
 
#define QO_NODE_SELECTIVITY(node)   (node)->selectivity
 
#define QO_NODE_SUBQUERIES(node)   (node)->subqueries
 
#define QO_NODE_SEGS(node)   (node)->segs
 
#define QO_NODE_IDX(node)   (node)->idx
 
#define QO_NODE_REL_IDX(node)   (node)->rel_idx
 
#define QO_NODE_INDEXES(node)   (node)->indexes
 
#define QO_NODE_USING_INDEX(node)   (node)->using_index
 
#define QO_NODE_OUTER_DEP_SET(node)   (node)->outer_dep_set
 
#define QO_NODE_RIGHT_DEP_SET(node)   (node)->right_dep_set
 
#define QO_NODE_SARGABLE(node)   (node)->sargable
 
#define QO_NODE_NAME(node)   (node)->class_name
 
#define QO_NODE_OIDP(node)   (&(node)->info->info[0].oid)
 
#define QO_NODE_INFO(node)   (node)->info
 
#define QO_NODE_INFO_N(node)   (node)->info->n
 
#define QO_NODE_NCARD(node)   (node)->ncard
 
#define QO_NODE_TCARD(node)   (node)->tcard
 
#define QO_NODE_HINT(node)   (node)->hint
 
#define QO_NODE_INFO_SMCLASS(node)   (node)->info[0].info->smclass
 
#define QO_NODE_SORT_LIMIT_CANDIDATE(node)   (node)->sort_limit_candidate
 
#define QO_NODE_IS_CLASS_HIERARCHY(node)
 
#define QO_NODE_IS_CLASS_PARTITIONED(node)
 
#define QO_NODE_IS_OUTER_JOIN(node)
 
#define QO_ADD_OUTER_DEP_SET(tail, head)
 
#define QO_ADD_RIGHT_DEP_SET(tail, head)
 
#define QO_ADD_RIGHT_TO_OUTER(tail, head)   bitset_union (&(QO_NODE_OUTER_DEP_SET (tail)), &(QO_NODE_RIGHT_DEP_SET (head)));
 
#define QO_SEG_ENV(seg)   (seg)->env
 
#define QO_SEG_PT_NODE(seg)   (seg)->pt_node
 
#define QO_SEG_HEAD(seg)   (seg)->head
 
#define QO_SEG_TAIL(seg)   (seg)->tail
 
#define QO_SEG_EQ_ROOT(seg)   (seg)->eq_root
 
#define QO_SEG_EQCLASS(seg)   (seg)->eqclass
 
#define QO_SEG_NAME(seg)   (seg)->name
 
#define QO_SEG_SET_VALUED(seg)   (seg)->set_valued
 
#define QO_SEG_CLASS_ATTR(seg)   (seg)->class_attr
 
#define QO_SEG_SHARED_ATTR(seg)   (seg)->shared_attr
 
#define QO_SEG_INFO(seg)   (seg)->info
 
#define QO_SEG_IDX(seg)   (seg)->idx
 
#define QO_SEG_IS_SET_VALUED(seg)   (seg)->set_valued
 
#define QO_SEG_ATTR_ID(seg)   QO_SEG_ATTR_STATS(seg)->id
 
#define QO_SEG_IS_OID_SEG(seg)   (QO_NODE_OID_SEG(QO_SEG_HEAD(seg)) == seg)
 
#define QO_SEG_INDEX_TERMS(seg)   (seg)->index_terms
 
#define QO_SEG_FUNC_INDEX(seg)   (seg)->is_function_index
 
#define OID_SEG_NAME   "OID$"
 
#define QO_UNORDERED   ((QO_EQCLASS*)NULL)
 
#define QO_EQCLASS_ENV(e)   (e)->env
 
#define QO_EQCLASS_SEGS(e)   (e)->segs
 
#define QO_EQCLASS_TERM(e)   (e)->term
 
#define QO_EQCLASS_IDX(e)   (e)->idx
 
#define QO_IS_PATH_TERM(t)   (QO_TERM_CLASS(t) & 0x20)
 
#define QO_IS_EDGE_TERM(t)   (QO_TERM_CLASS(t) & 0x10)
 
#define QO_IS_FAKE_TERM(t)   (QO_TERM_CLASS(t) & 0x08)
 
#define QO_IS_DEP_TERM(t)   (QO_TERM_CLASS(t) == QO_TC_DEP_LINK || QO_TERM_CLASS(t) == QO_TC_DEP_JOIN)
 
#define QO_TERM_ENV(t)   (t)->env
 
#define QO_TERM_CLASS(t)   (t)->term_class
 
#define QO_TERM_NODES(t)   (t)->nodes
 
#define QO_TERM_SEGS(t)   (t)->segments
 
#define QO_TERM_SELECTIVITY(t)   (t)->selectivity
 
#define QO_TERM_RANK(t)   (t)->rank
 
#define QO_TERM_HEAD(t)   (t)->head
 
#define QO_TERM_TAIL(t)   (t)->tail
 
#define QO_TERM_IDX(t)   (t)->idx
 
#define QO_TERM_PT_EXPR(t)   (t)->pt_expr
 
#define QO_TERM_LOCATION(t)   (t)->location
 
#define QO_TERM_SUBQUERIES(t)   (t)->subqueries
 
#define QO_TERM_SEG(t)   (t)->seg
 
#define QO_TERM_OID_SEG(t)   (t)->oid_seg
 
#define QO_TERM_EQCLASS(t)   (t)->eqclass
 
#define QO_TERM_NOMINAL_SEG(t)   (t)->nominal_seg
 
#define QO_TERM_CAN_USE_INDEX(t)   (t)->can_use_index
 
#define QO_TERM_INDEX_SEG(t, i)   (t)->index_seg[(i)]
 
#define QO_TERM_JOIN_TYPE(t)   (t)->join_type
 
#define QO_TERM_FLAG(t)   (t)->flag
 
#define QO_TERM_MULTI_COL_SEGS(t)   (t)->multi_col_segs
 
#define QO_TERM_MULTI_COL_CNT(t)   (t)->multi_col_cnt
 
#define QO_TERM_EQUAL_OP   1 /* is equal op ? */
 
#define QO_TERM_RANGELIST   2 /* is RANGE (r1, r2, ...) ? */
 
#define QO_TERM_SINGLE_PRED   4 /* is single_pred ? */
 
#define QO_TERM_COPY_PT_EXPR   8 /* pt_expr is copyed ? */
 
#define QO_TERM_MERGEABLE_EDGE   16 /* suitable as a m-join edge ? */
 
#define QO_TERM_NON_IDX_SARG_COLL   32 /* not suitable for key range/filter */
 
#define QO_TERM_MULTI_COLL_PRED   64 /* multi column && in OP, (a,b) in .. */
 
#define QO_TERM_MULTI_COLL_CONST   128 /* multi column && have constant value, (a,1) in .. */
 
#define QO_TERM_OR_PRED   256 /* or predicate. e.g.) a=1 or b=2 */
 
#define QO_TERM_IS_FLAGED(t, f)   (QO_TERM_FLAG(t) & (int) (f))
 
#define QO_TERM_SET_FLAG(t, f)   QO_TERM_FLAG(t) |= (int) (f)
 
#define QO_TERM_CLEAR_FLAG(t, f)   QO_TERM_FLAG(t) &= (int) ~(f)
 
#define QO_PARTITION_NODES(p)   (p)->nodes
 
#define QO_PARTITION_EDGES(p)   (p)->edges
 
#define QO_PARTITION_DEPENDENCIES(p)   (p)->dependencies
 
#define QO_PARTITION_M_OFFSET(p)   (p)->M_offset
 
#define QO_PARTITION_PLAN(p)   (p)->plan
 
#define QO_PARTITION_IDX(p)   (p)->idx
 
#define QO_ENV_SEG(env, n)   (&(env)->segs[(n)])
 
#define QO_ENV_NODE(env, n)   (&(env)->nodes[(n)])
 
#define QO_ENV_EQCLASS(env, n)   (&(env)->eqclasses[(n)])
 
#define QO_ENV_TERM(env, n)   (&(env)->terms[(n)])
 
#define QO_ENV_PARTITION(env, n)   (&(env)->partitions[(n)])
 
#define QO_ENV_SUBQUERY(env, n)   (&(env)->subqueries[(n)])
 
#define QO_ENV_PREV_SEG(env)   (env)->prev_seg
 
#define QO_ENV_PARSER(env)   (env)->parser
 
#define QO_ENV_PT_TREE(env)   (env)->pt_tree
 
#define QO_ENV_TMP_BITSET(env)   (env)->tmp_bitset
 
#define QO_ENV_LIMIT_VALUE(env)   (env)->limit_value
 
#define QO_ENV_SORT_LIMIT_NODES(env)   (env)->sort_limit_nodes
 
#define QO_ENV_USE_SORT_LIMIT(env)   ((env)->use_sort_limit == QO_SL_USE)
 
#define QO_ON_COND_TERM(term)   (QO_TERM_LOCATION(term) > 0)
 
#define QO_INNER_JOIN_TERM(term)
 
#define QO_OUTER_JOIN_TERM(term)
 
#define QO_LEFT_OUTER_JOIN_TERM(term)
 
#define QO_RIGHT_OUTER_JOIN_TERM(term)
 
#define QO_FULL_OUTER_JOIN_TERM(term)
 
#define QO_JOIN_INFO_SIZE(_partition)   (int)(1 << bitset_cardinality(&(QO_PARTITION_NODES(_partition))))
 

Typedefs

typedef struct qo_class_info_entry QO_CLASS_INFO_ENTRY
 

Enumerations

enum  QO_TERMCLASS {
  QO_TC_PATH = 0x30, QO_TC_JOIN = 0x11, QO_TC_SARG = 0x02, QO_TC_OTHER = 0x03,
  QO_TC_DEP_LINK = 0x1c, QO_TC_DEP_JOIN = 0x1d, QO_TC_DURING_JOIN = 0x04, QO_TC_AFTER_JOIN = 0x05,
  QO_TC_TOTALLY_AFTER_JOIN = 0x06, QO_TC_DUMMY_JOIN = 0x1f
}
 
enum  QO_SORT_LIMIT_USE { QO_SL_INVALID, QO_SL_USE, QO_SL_POSSIBLE }
 

Functions

void qo_env_free (QO_ENV *)
 
void qo_seg_fprint (QO_SEGMENT *, FILE *)
 
void qo_node_fprint (QO_NODE *, FILE *)
 
void qo_term_fprint (QO_TERM *, FILE *)
 
void qo_print_stats (FILE *)
 
void qo_eqclass_fprint_wrt (QO_EQCLASS *, BITSET *, FILE *)
 
void qo_termset_fprint (QO_ENV *, BITSET *, FILE *)
 
int qo_seg_width (QO_SEGMENT *seg)
 
bool qo_is_prefix_index (QO_INDEX_ENTRY *)
 
bool qo_is_filter_index (QO_INDEX_ENTRY *)
 
void qo_check_coll_optimization (QO_INDEX_ENTRY *ent, COLL_OPT *collation_opt)
 
bool qo_check_type_index_covering (QO_INDEX_ENTRY *ent)
 

Variables

double QO_INFINITY
 

Macro Definition Documentation

#define OID_SEG_NAME   "OID$"

Definition at line 525 of file query_graph.h.

#define QO_ADD_OUTER_DEP_SET (   tail,
  head 
)
Value:
void bitset_union(BITSET *dst, const BITSET *src)
Definition: query_bitset.c:176
#define QO_NODE_IDX(node)
Definition: query_graph.h:392
#define QO_NODE_OUTER_DEP_SET(node)
Definition: query_graph.h:397
void bitset_add(BITSET *dst, int x)
Definition: query_bitset.c:138

Definition at line 427 of file query_graph.h.

Referenced by qo_add_dummy_join_term(), and qo_analyze_term().

#define QO_ADD_RIGHT_DEP_SET (   tail,
  head 
)
Value:
#define QO_NODE_RIGHT_DEP_SET(node)
Definition: query_graph.h:398
void bitset_union(BITSET *dst, const BITSET *src)
Definition: query_bitset.c:176
#define QO_NODE_IDX(node)
Definition: query_graph.h:392
void bitset_add(BITSET *dst, int x)
Definition: query_bitset.c:138

Definition at line 431 of file query_graph.h.

Referenced by qo_add_dummy_join_term(), and qo_analyze_term().

#define QO_ADD_RIGHT_TO_OUTER (   tail,
  head 
)    bitset_union (&(QO_NODE_OUTER_DEP_SET (tail)), &(QO_NODE_RIGHT_DEP_SET (head)));

Definition at line 435 of file query_graph.h.

Referenced by qo_add_dummy_join_term(), and qo_analyze_term().

#define QO_ENV_EQCLASS (   env,
 
)    (&(env)->eqclasses[(n)])
#define QO_ENV_LIMIT_VALUE (   env)    (env)->limit_value
#define QO_ENV_PARTITION (   env,
 
)    (&(env)->partitions[(n)])
#define QO_ENV_PREV_SEG (   env)    (env)->prev_seg

Definition at line 963 of file query_graph.h.

#define QO_ENV_SORT_LIMIT_NODES (   env)    (env)->sort_limit_nodes
#define QO_ENV_SUBQUERY (   env,
 
)    (&(env)->subqueries[(n)])

Definition at line 962 of file query_graph.h.

Referenced by qo_check_subqueries_for_multi_range_opt().

#define QO_ENV_TMP_BITSET (   env)    (env)->tmp_bitset

Definition at line 966 of file query_graph.h.

Referenced by qo_expr_segs(), and set_seg_expr().

#define QO_ENV_USE_SORT_LIMIT (   env)    ((env)->use_sort_limit == QO_SL_USE)

Definition at line 969 of file query_graph.h.

Referenced by qo_check_new_best_plan_on_info(), qo_join_new(), and qo_search_planner().

#define QO_EQCLASS_ENV (   e)    (e)->env

Definition at line 555 of file query_graph.h.

Referenced by qo_eqclass_dump(), qo_eqclass_new(), and qo_eqclass_wrt().

#define QO_EQCLASS_IDX (   e)    (e)->idx
#define QO_EQCLASS_TERM (   e)    (e)->term
#define QO_FULL_OUTER_JOIN_TERM (   term)
Value:
((QO_TERM_CLASS(term) == QO_TC_JOIN || \
#define QO_TERM_CLASS(t)
Definition: query_graph.h:716
#define QO_TERM_JOIN_TYPE(t)
Definition: query_graph.h:733

Definition at line 1019 of file query_graph.h.

#define QO_GET_CLASS_STATS (   entryp)    ((entryp)->self_allocated ? (entryp)->stats : (entryp)->smclass->stats)
#define QO_INDEX_INDEX (   ind,
 
)    (&(ind)->index[(n)])
#define QO_INNER_JOIN_TERM (   term)
Value:
#define QO_TERM_CLASS(t)
Definition: query_graph.h:716
#define QO_TERM_JOIN_TYPE(t)
Definition: query_graph.h:733

Definition at line 998 of file query_graph.h.

#define QO_IS_DEP_TERM (   t)    (QO_TERM_CLASS(t) == QO_TC_DEP_LINK || QO_TERM_CLASS(t) == QO_TC_DEP_JOIN)

Definition at line 586 of file query_graph.h.

Referenced by get_term_subqueries().

#define QO_IS_EDGE_TERM (   t)    (QO_TERM_CLASS(t) & 0x10)

Definition at line 584 of file query_graph.h.

Referenced by planner_visit_node(), qo_discover_edges(), and qo_search_partition_join().

#define QO_IS_FAKE_TERM (   t)    (QO_TERM_CLASS(t) & 0x08)

Definition at line 585 of file query_graph.h.

Referenced by gen_outer(), get_term_rank(), and make_pred_from_bitset().

#define QO_IS_PATH_TERM (   t)    (QO_TERM_CLASS(t) & 0x20)
#define QO_JOIN_INFO_SIZE (   _partition)    (int)(1 << bitset_cardinality(&(QO_PARTITION_NODES(_partition))))

Definition at line 1024 of file query_graph.h.

Referenced by qo_discover_partitions(), qo_dump_planner_info(), and qo_search_planner().

#define QO_LEFT_OUTER_JOIN_TERM (   term)
Value:
((QO_TERM_CLASS(term) == QO_TC_JOIN || \
#define QO_TERM_CLASS(t)
Definition: query_graph.h:716
#define QO_TERM_JOIN_TYPE(t)
Definition: query_graph.h:733

Definition at line 1009 of file query_graph.h.

#define QO_NI_ENTRY (   ni,
 
)    (&(ni)->index[(n)])
#define QO_NODE_ENV (   node)    (node)->env
#define QO_NODE_EQCLASSES (   node)    (node)->eqclasses

Definition at line 385 of file query_graph.h.

Referenced by qo_eqclass_add(), qo_node_clear(), qo_node_free(), and qo_search_planner().

#define QO_NODE_INDEXES (   node)    (node)->indexes
#define QO_NODE_INFO_N (   node)    (node)->info->n
#define QO_NODE_INFO_SMCLASS (   node)    (node)->info[0].info->smclass

Definition at line 408 of file query_graph.h.

#define QO_NODE_IS_CLASS_HIERARCHY (   node)
Value:
(QO_NODE_INFO(node) != NULL \
&& (QO_NODE_INFO_N(node) > 1 \
|| (QO_NODE_INFO_SMCLASS(node)->partition != NULL \
&& QO_NODE_INFO_SMCLASS(node)->users != NULL)))
#define QO_NODE_INFO_N(node)
Definition: query_graph.h:404
#define QO_NODE_INFO(node)
Definition: query_graph.h:403
#define NULL
Definition: freelistheap.h:34
#define QO_NODE_INFO_SMCLASS(node)
Definition: query_graph.h:408

Definition at line 411 of file query_graph.h.

Referenced by pt_instnum_to_key_limit(), qo_check_iscan_for_multi_range_opt(), qo_generate_join_index_scan(), qo_join_new(), and qo_plan_compute_iscan_sort_list().

#define QO_NODE_IS_CLASS_PARTITIONED (   node)
Value:
(QO_NODE_INFO(node) != NULL \
&& QO_NODE_INFO_SMCLASS(node)->partition != NULL \
&& QO_NODE_INFO_SMCLASS(node)->users != NULL)
#define QO_NODE_INFO(node)
Definition: query_graph.h:403
#define NULL
Definition: freelistheap.h:34
#define QO_NODE_INFO_SMCLASS(node)
Definition: query_graph.h:408

Definition at line 417 of file query_graph.h.

Referenced by qo_generate_join_index_scan().

#define QO_NODE_IS_OUTER_JOIN (   node)
#define QO_NODE_LOCATION (   node)    (node)->entity_spec->info.spec.location
#define QO_NODE_NAME (   node)    (node)->class_name
#define QO_NODE_NCARD (   node)    (node)->ncard
#define QO_NODE_OID_SEG (   node)    (node)->oid_seg

Definition at line 384 of file query_graph.h.

Referenced by qo_insert_segment(), and qo_node_clear().

#define QO_NODE_OIDP (   node)    (&(node)->info->info[0].oid)

Definition at line 402 of file query_graph.h.

#define QO_NODE_OUTER_DEP_SET (   node)    (node)->outer_dep_set
#define QO_NODE_PARTITION (   node)    (node)->partition

Definition at line 386 of file query_graph.h.

Referenced by qo_discover_partitions(), and qo_node_clear().

#define QO_NODE_PT_JOIN_TYPE (   node)    (node)->entity_spec->info.spec.join_type
#define QO_NODE_REL_IDX (   node)    (node)->rel_idx
#define QO_NODE_RIGHT_DEP_SET (   node)    (node)->right_dep_set

Definition at line 398 of file query_graph.h.

Referenced by qo_node_clear(), qo_node_dump(), and qo_node_free().

#define QO_NODE_SARGABLE (   node)    (node)->sargable

Definition at line 399 of file query_graph.h.

Referenced by qo_add_node(), and qo_discover_edges().

#define QO_NODE_SARGS (   node)    (node)->sargs
#define QO_NODE_SEGS (   node)    (node)->segs
#define QO_NODE_SELECTIVITY (   node)    (node)->selectivity

Definition at line 389 of file query_graph.h.

Referenced by qo_node_add_sarg(), qo_node_clear(), and qo_search_planner().

#define QO_NODE_SORT_LIMIT_CANDIDATE (   node)    (node)->sort_limit_candidate

Definition at line 409 of file query_graph.h.

Referenced by qo_add_node(), qo_discover_sort_limit_nodes(), and qo_search_planner().

#define QO_NODE_SUBQUERIES (   node)    (node)->subqueries
#define QO_NODE_TCARD (   node)    (node)->tcard
#define QO_NODE_USING_INDEX (   node)    (node)->using_index
#define QO_ON_COND_TERM (   term)    (QO_TERM_LOCATION(term) > 0)
#define QO_OUTER_JOIN_TERM (   term)
Value:

Definition at line 1002 of file query_graph.h.

Referenced by qo_classify_outerjoin_terms().

#define QO_PARTITION_DEPENDENCIES (   p)    (p)->dependencies
#define QO_PARTITION_EDGES (   p)    (p)->edges
#define QO_PARTITION_IDX (   p)    (p)->idx

Definition at line 833 of file query_graph.h.

Referenced by qo_partition_init().

#define QO_PARTITION_M_OFFSET (   p)    (p)->M_offset
#define QO_PARTITION_PLAN (   p)    (p)->plan
#define QO_RIGHT_OUTER_JOIN_TERM (   term)
Value:
((QO_TERM_CLASS(term) == QO_TC_JOIN || \
#define QO_TERM_CLASS(t)
Definition: query_graph.h:716
#define QO_TERM_JOIN_TYPE(t)
Definition: query_graph.h:733

Definition at line 1014 of file query_graph.h.

#define QO_SEG_ATTR_ID (   seg)    QO_SEG_ATTR_STATS(seg)->id

Definition at line 521 of file query_graph.h.

#define QO_SEG_CLASS_ATTR (   seg)    (seg)->class_attr

Definition at line 516 of file query_graph.h.

Referenced by build_graph_for_entity(), and qo_seg_clear().

#define QO_SEG_ENV (   seg)    (seg)->env

Definition at line 508 of file query_graph.h.

Referenced by qo_seg_clear(), qo_seg_free(), and qo_seg_width().

#define QO_SEG_EQ_ROOT (   seg)    (seg)->eq_root

Definition at line 512 of file query_graph.h.

Referenced by qo_assign_eq_classes(), qo_equivalence(), and qo_seg_clear().

#define QO_SEG_EQCLASS (   seg)    (seg)->eqclass

Definition at line 513 of file query_graph.h.

Referenced by qo_assign_eq_classes(), qo_eqclass_add(), and qo_seg_clear().

#define QO_SEG_FUNC_INDEX (   seg)    (seg)->is_function_index
#define QO_SEG_INDEX_TERMS (   seg)    (seg)->index_terms
#define QO_SEG_INFO (   seg)    (seg)->info

Definition at line 518 of file query_graph.h.

Referenced by qo_index_cardinality(), qo_insert_segment(), qo_seg_clear(), and qo_seg_free().

#define QO_SEG_IS_OID_SEG (   seg)    (QO_NODE_OID_SEG(QO_SEG_HEAD(seg)) == seg)

Definition at line 522 of file query_graph.h.

Referenced by qo_is_coverage_index().

#define QO_SEG_IS_SET_VALUED (   seg)    (seg)->set_valued

Definition at line 520 of file query_graph.h.

#define QO_SEG_SET_VALUED (   seg)    (seg)->set_valued

Definition at line 515 of file query_graph.h.

Referenced by build_graph_for_entity(), and qo_seg_clear().

#define QO_SEG_SHARED_ATTR (   seg)    (seg)->shared_attr

Definition at line 517 of file query_graph.h.

Referenced by build_graph_for_entity(), and qo_seg_clear().

#define QO_SEG_TAIL (   seg)    (seg)->tail

Definition at line 511 of file query_graph.h.

Referenced by qo_insert_segment(), qo_join_segment(), and qo_seg_clear().

#define QO_TERM_CAN_USE_INDEX (   t)    (t)->can_use_index
#define QO_TERM_CLEAR_FLAG (   t,
 
)    QO_TERM_FLAG(t) &= (int) ~(f)

Definition at line 751 of file query_graph.h.

Referenced by qo_analyze_term(), qo_classify_outerjoin_terms(), and qo_discover_edges().

#define QO_TERM_COPY_PT_EXPR   8 /* pt_expr is copyed ? */

Definition at line 742 of file query_graph.h.

Referenced by qo_term_free().

#define QO_TERM_ENV (   t)    (t)->env
#define QO_TERM_EQCLASS (   t)    (t)->eqclass

Definition at line 729 of file query_graph.h.

Referenced by qo_assign_eq_classes(), qo_examine_merge_join(), and qo_term_clear().

#define QO_TERM_EQUAL_OP   1 /* is equal op ? */
#define QO_TERM_FLAG (   t)    (t)->flag

Definition at line 734 of file query_graph.h.

Referenced by qo_add_dep_term(), qo_add_dummy_join_term(), qo_add_term(), and qo_term_clear().

#define QO_TERM_INDEX_SEG (   t,
  i 
)    (t)->index_seg[(i)]
#define QO_TERM_MERGEABLE_EDGE   16 /* suitable as a m-join edge ? */
#define QO_TERM_MULTI_COL_CNT (   t)    (t)->multi_col_cnt

Definition at line 736 of file query_graph.h.

Referenced by qo_add_term(), qo_analyze_term(), and qo_term_clear().

#define QO_TERM_MULTI_COL_SEGS (   t)    (t)->multi_col_segs

Definition at line 735 of file query_graph.h.

Referenced by qo_add_term(), qo_analyze_term(), qo_term_clear(), and qo_term_free().

#define QO_TERM_MULTI_COLL_CONST   128 /* multi column && have constant value, (a,1) in .. */

Definition at line 746 of file query_graph.h.

Referenced by qo_analyze_term(), and qo_get_xasl_index_info().

#define QO_TERM_MULTI_COLL_PRED   64 /* multi column && in OP, (a,b) in .. */
#define QO_TERM_NOMINAL_SEG (   t)    (t)->nominal_seg

Definition at line 730 of file query_graph.h.

Referenced by qo_analyze_term(), qo_assign_eq_classes(), and qo_term_clear().

#define QO_TERM_NON_IDX_SARG_COLL   32 /* not suitable for key range/filter */
#define QO_TERM_OID_SEG (   t)    (t)->oid_seg

Definition at line 728 of file query_graph.h.

Referenced by qo_analyze_term(), and qo_term_clear().

#define QO_TERM_OR_PRED   256 /* or predicate. e.g.) a=1 or b=2 */

Definition at line 747 of file query_graph.h.

Referenced by qo_analyze_term(), and qo_classify_outerjoin_terms().

#define QO_TERM_RANGELIST   2 /* is RANGE (r1, r2, ...) ? */
#define QO_TERM_RANK (   t)    (t)->rank
#define QO_TERM_SEG (   t)    (t)->seg

Definition at line 727 of file query_graph.h.

Referenced by qo_analyze_term(), qo_term_clear(), qo_term_dump(), and qo_term_fprint().

#define QO_TERM_SET_FLAG (   t,
 
)    QO_TERM_FLAG(t) |= (int) (f)

Definition at line 750 of file query_graph.h.

Referenced by qo_analyze_term().

#define QO_TERM_SINGLE_PRED   4 /* is single_pred ? */

Definition at line 741 of file query_graph.h.

Referenced by qo_analyze_term(), and qo_is_equi_join_term().

#define QO_UI_FORCE (   ui,
 
)    ((ui)->index[(n)].force)

Definition at line 261 of file query_graph.h.

Referenced by add_using_index(), and qo_find_node_indexes().

#define QO_UI_INDEX (   ui,
 
)    ((ui)->index[(n)].name)

Definition at line 260 of file query_graph.h.

Referenced by add_using_index(), and qo_find_node_indexes().

#define QO_UI_KEYLIMIT (   ui,
 
)    ((ui)->index[(n)].key_limit)

Definition at line 262 of file query_graph.h.

Referenced by add_using_index(), and qo_find_node_indexes().

#define QO_UI_N (   ui)    ((ui)->n)

Definition at line 259 of file query_graph.h.

Referenced by add_using_index(), and qo_find_node_indexes().

Typedef Documentation

Definition at line 42 of file query_graph.h.

Enumeration Type Documentation

Enumerator
QO_SL_INVALID 
QO_SL_USE 
QO_SL_POSSIBLE 

Definition at line 835 of file query_graph.h.

Enumerator
QO_TC_PATH 
QO_TC_JOIN 
QO_TC_SARG 
QO_TC_OTHER 
QO_TC_DEP_LINK 
QO_TC_DEP_JOIN 
QO_TC_DURING_JOIN 
QO_TC_AFTER_JOIN 
QO_TC_TOTALLY_AFTER_JOIN 
QO_TC_DUMMY_JOIN 

Definition at line 562 of file query_graph.h.

Function Documentation

void qo_eqclass_fprint_wrt ( QO_EQCLASS ,
BITSET ,
FILE *   
)

Definition at line 8740 of file query_graph.c.

References bitset_is_empty(), QO_EQCLASS_SEGS, QO_EQCLASS_TERM, qo_eqclass_wrt(), qo_seg_fprint(), QO_TERM_IDX, and QO_UNORDERED.

Referenced by qo_sort_fprint(), and qo_sort_info().

Here is the caller graph for this function:

void qo_node_fprint ( QO_NODE ,
FILE *   
)

Definition at line 8162 of file query_graph.c.

References QO_NODE_IDX, and QO_NODE_NAME.

Referenced by qo_scan_fprint(), qo_term_dump(), and qo_term_fprint().

Here is the caller graph for this function:

void qo_print_stats ( FILE *  )

Definition at line 9166 of file query_graph.c.

References qo_info_stats(), and qo_plans_stats().

Referenced by qo_plan_discard().

Here is the caller graph for this function:

void qo_seg_fprint ( QO_SEGMENT ,
FILE *   
)

Definition at line 8361 of file query_graph.c.

References QO_NODE_IDX, QO_SEG_HEAD, and QO_SEG_NAME.

Referenced by qo_env_dump(), qo_eqclass_dump(), qo_eqclass_fprint_wrt(), qo_plan_print_projected_segs(), qo_subquery_dump(), and qo_term_dump().

Here is the caller graph for this function:

int qo_seg_width ( QO_SEGMENT seg)
void qo_term_fprint ( QO_TERM ,
FILE *   
)
void qo_termset_fprint ( QO_ENV ,
BITSET ,
FILE *   
)

Definition at line 8845 of file query_graph.c.

References bitset_iterate(), bitset_next_member(), QO_ENV_TERM, and qo_term_fprint().

Referenced by qo_join_fprint(), qo_plan_print_outer_join_terms(), qo_plan_print_sarged_terms(), and qo_scan_fprint().

Here is the caller graph for this function:

Variable Documentation