Skip to content

File query_graph.h

FileList > cubrid > src > optimizer > query_graph.h

Go to the source code of this file

  • #include <setjmp.h>
  • #include "work_space.h"
  • #include "statistics.h"
  • #include "optimizer.h"
  • #include "parser.h"

Classes

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

Public Types

Type Name
typedef struct qo_class_info_entry QO_CLASS_INFO_ENTRY
enum QO_SORT_LIMIT_USE
enum QO_TERMCLASS

Public Attributes

Type Name
double QO_INFINITY

Public Functions

Type Name
void qo_check_coll_optimization (QO_INDEX_ENTRY * ent, COLL_OPT * collation_opt)
bool qo_check_type_index_covering (QO_INDEX_ENTRY * ent)
void qo_env_free (QO_ENV * env)
void qo_eqclass_fprint_wrt (QO_EQCLASS * eqclass, BITSET * nodeset, FILE * f)
bool qo_is_filter_index (QO_INDEX_ENTRY * ent)
bool qo_is_prefix_index (QO_INDEX_ENTRY * ent)
void qo_node_fprint (QO_NODE * node, FILE * f)
void qo_print_stats (FILE * f)
void qo_seg_fprint (QO_SEGMENT * seg, FILE * f)
int qo_seg_width (QO_SEGMENT * seg)
void qo_term_fprint (QO_TERM * term, FILE * f)
void qo_termset_fprint (QO_ENV * env, BITSET * terms, FILE * f)

Macros

Type Name
define OID_SEG_NAME "OID$"
define QO_ADD_OUTER_DEP_SET (tail, head) /* multi line expression */
define QO_ENTRY_MULTI_COL (entry) ((entry)-&gt;col\_num &gt; 1 ? [**true**](broker__monitor_8c.md#function-timeout) : [**false**](broker__monitor_8c.md#function-timeout))
define QO_ENV_EQCLASS (env, n) (&(env)-&gt;eqclasses[(n)])
define QO_ENV_LIMIT_VALUE (env) (env)-&gt;limit\_value
define QO_ENV_NODE (env, n) (&(env)-&gt;nodes[(n)])
define QO_ENV_PARSER (env) (env)-&gt;[**parser**](shard__proxy__handler_8c.md#variable-parser)
define QO_ENV_PARTITION (env, n) (&(env)-&gt;partitions[(n)])
define QO_ENV_PREV_SEG (env) (env)-&gt;[**prev\_seg**](broker__monitor_8c.md#function-timeout)
define QO_ENV_PT_TREE (env) (env)-&gt;pt\_tree
define QO_ENV_SEG (env, n) (&(env)-&gt;segs[(n)])
define QO_ENV_SORT_LIMIT_NODES (env) (env)-&gt;sort\_limit\_nodes
define QO_ENV_SUBQUERY (env, n) (&(env)-&gt;subqueries[(n)])
define QO_ENV_TERM (env, n) (&(env)-&gt;terms[(n)])
define QO_ENV_TMP_BITSET (env) (env)-&gt;tmp\_bitset
define QO_ENV_USE_SORT_LIMIT (env) ((env)-&gt;use\_sort\_limit == QO\_SL\_USE)
define QO_EQCLASS_ENV (e) ([**e**](broker__monitor_8c.md#function-timeout))-&gt;env
define QO_EQCLASS_IDX (e) ([**e**](broker__monitor_8c.md#function-timeout))-&gt;idx
define QO_EQCLASS_SEGS (e) ([**e**](broker__monitor_8c.md#function-timeout))-&gt;segs
define QO_EQCLASS_TERM (e) ([**e**](broker__monitor_8c.md#function-timeout))-&gt;[**term**](broker__monitor_8c.md#variable-term)
define QO_FULL_OUTER_JOIN_TERM (term) /* multi line expression */
define QO_GET_CLASS_STATS (entryp) (([**entryp**](broker__monitor_8c.md#function-timeout))-&gt;self\_allocated ? ([**entryp**](broker__monitor_8c.md#function-timeout))-&gt;stats : ([**entryp**](broker__monitor_8c.md#function-timeout))-&gt;smclass-&gt;stats)
define QO_INDEX_INDEX (ind, n) (&([**ind**](broker__monitor_8c.md#function-timeout))-&gt;index[(n)])
define QO_INNER_JOIN_TERM (term) /* multi line expression */
define QO_IS_DEP_TERM (t) ([**QO\_TERM\_CLASS**](query__graph_8h.md#define-qo_term_class)([**t**](broker__monitor_8c.md#function-timeout)) == QO\_TC\_DEP\_LINK \|\| [**QO\_TERM\_CLASS**](query__graph_8h.md#define-qo_term_class)([**t**](broker__monitor_8c.md#function-timeout)) == QO\_TC\_DEP\_JOIN)
define QO_IS_EDGE_TERM (t) ([**QO\_TERM\_CLASS**](query__graph_8h.md#define-qo_term_class)([**t**](broker__monitor_8c.md#function-timeout)) & 0x10)
define QO_IS_FAKE_TERM (t) ([**QO\_TERM\_CLASS**](query__graph_8h.md#define-qo_term_class)([**t**](broker__monitor_8c.md#function-timeout)) & 0x08)
define QO_IS_NL_JOIN (p) /* multi line expression */
define QO_IS_PATH_TERM (t) ([**QO\_TERM\_CLASS**](query__graph_8h.md#define-qo_term_class)([**t**](broker__monitor_8c.md#function-timeout)) & 0x20)
define QO_JOIN_INFO_SIZE (_partition) ([**int**](broker__monitor_8c.md#function-timeout))(1 &lt;&lt; [**bitset\_cardinality**](query__bitset_8c.md#function-bitset_cardinality)(&([**QO\_PARTITION\_NODES**](query__graph_8h.md#define-qo_partition_nodes)([**\_partition**](broker__monitor_8c.md#function-timeout)))))
define QO_LEFT_OUTER_JOIN_TERM (term) /* multi line expression */
define QO_NI_ENTRY (ni, n) (&([**ni**](broker__monitor_8c.md#function-timeout))-&gt;index[(n)])
define QO_NI_N (ni) (([**ni**](broker__monitor_8c.md#function-timeout))-&gt;n)
define QO_NODE_DEP_SET (node) (node)-&gt;dep\_set
define QO_NODE_ENTITY_SPEC (node) (node)-&gt;entity\_spec
define QO_NODE_ENV (node) (node)-&gt;env
define QO_NODE_EQCLASSES (node) (node)-&gt;eqclasses
define QO_NODE_HINT (node) (node)-&gt;hint
define QO_NODE_IDX (node) (node)-&gt;idx
define QO_NODE_INDEXES (node) (node)-&gt;indexes
define QO_NODE_INFO (node) (node)-&gt;info
define QO_NODE_INFO_N (node) (node)-&gt;info-&gt;n
define QO_NODE_INFO_SMCLASS (node) (node)-&gt;info[0].info-&gt;smclass
define QO_NODE_IS_ANSI_JOIN (node) /* multi line expression */
define QO_NODE_IS_CLASS_HIERARCHY (node) /* multi line expression */
define QO_NODE_IS_CLASS_PARTITIONED (node) /* multi line expression */
define QO_NODE_IS_OUTER_JOIN (node) /* multi line expression */
define QO_NODE_LOCATION (node) (node)-&gt;entity\_spec-&gt;info.spec.location
define QO_NODE_NAME (node) (node)-&gt;class\_name
define QO_NODE_NCARD (node) (node)-&gt;ncard
define QO_NODE_OIDP (node) (&(node)-&gt;info-&gt;info[0].oid)
define QO_NODE_OID_SEG (node) (node)-&gt;oid\_seg
define QO_NODE_OUTER_DEP_SET (node) (node)-&gt;outer\_dep\_set
define QO_NODE_PARTITION (node) (node)-&gt;partition
define QO_NODE_PT_JOIN_TYPE (node) (node)-&gt;entity\_spec-&gt;info.spec.join\_type
define QO_NODE_REL_IDX (node) (node)-&gt;rel\_idx
define QO_NODE_SARGABLE (node) (node)-&gt;sargable
define QO_NODE_SARGS (node) (node)-&gt;sargs
define QO_NODE_SEGS (node) (node)-&gt;segs
define QO_NODE_SELECTIVITY (node) (node)-&gt;selectivity
define QO_NODE_SORT_LIMIT_CANDIDATE (node) (node)-&gt;sort\_limit\_candidate
define QO_NODE_SUBQUERIES (node) (node)-&gt;subqueries
define QO_NODE_TCARD (node) (node)-&gt;tcard
define QO_NODE_USING_INDEX (node) (node)-&gt;using\_index
define QO_ON_COND_TERM (term) ([**QO\_TERM\_LOCATION**](query__graph_8h.md#define-qo_term_location)([**term**](broker__monitor_8c.md#variable-term)) &gt; 0)
define QO_OUTER_JOIN_TERM (term) /* multi line expression */
define QO_PARTITION_DEPENDENCIES (p) ([**p**](dynamic__load_8c.md#variable-p))-&gt;dependencies
define QO_PARTITION_EDGES (p) ([**p**](dynamic__load_8c.md#variable-p))-&gt;edges
define QO_PARTITION_IDX (p) ([**p**](dynamic__load_8c.md#variable-p))-&gt;idx
define QO_PARTITION_M_OFFSET (p) ([**p**](dynamic__load_8c.md#variable-p))-&gt;M\_offset
define QO_PARTITION_NODES (p) ([**p**](dynamic__load_8c.md#variable-p))-&gt;nodes
define QO_PARTITION_PLAN (p) ([**p**](dynamic__load_8c.md#variable-p))-&gt;plan
define QO_RIGHT_OUTER_JOIN_TERM (term) /* multi line expression */
define QO_SEG_ATTR_ID (seg) [**QO\_SEG\_ATTR\_STATS**](broker__monitor_8c.md#function-timeout)(seg)-&gt;[**id**](thread__worker__pool__impl_8hpp.md#enum-id)
define QO_SEG_CLASS_ATTR (seg) (seg)-&gt;class\_attr
define QO_SEG_ENV (seg) (seg)-&gt;env
define QO_SEG_EQCLASS (seg) (seg)-&gt;eqclass
define QO_SEG_EQ_ROOT (seg) (seg)-&gt;eq\_root
define QO_SEG_FUNC_INDEX (seg) (seg)-&gt;is\_function\_index
define QO_SEG_HEAD (seg) (seg)-&gt;head
define QO_SEG_IDX (seg) (seg)-&gt;idx
define QO_SEG_INDEX_TERMS (seg) (seg)-&gt;index\_terms
define QO_SEG_INFO (seg) (seg)-&gt;info
define QO_SEG_IS_NOT_NULL (seg) (seg)-&gt;is\_not\_null
define QO_SEG_IS_OID_SEG (seg) ([**QO\_NODE\_OID\_SEG**](query__graph_8h.md#define-qo_node_oid_seg)([**QO\_SEG\_HEAD**](query__graph_8h.md#define-qo_seg_head)(seg)) == seg)
define QO_SEG_IS_SET_VALUED (seg) (seg)-&gt;set\_valued
define QO_SEG_NAME (seg) (seg)-&gt;name
define QO_SEG_PT_NODE (seg) (seg)-&gt;pt\_node
define QO_SEG_SET_VALUED (seg) (seg)-&gt;set\_valued
define QO_SEG_SHARED_ATTR (seg) (seg)-&gt;shared\_attr
define QO_SEG_TAIL (seg) (seg)-&gt;tail
define QO_TERM_CAN_USE_INDEX (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;can\_use\_index
define QO_TERM_CLASS (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;term\_class
define QO_TERM_CLEAR_FLAG (t, f) [**QO\_TERM\_FLAG**](query__graph_8h.md#define-qo_term_flag)([**t**](broker__monitor_8c.md#function-timeout)) &= ([**int**](broker__monitor_8c.md#function-timeout)) ~(f)
define QO_TERM_COPY_PT_EXPR 8 /\* pt\_expr [**is**](broker__monitor_8c.md#function-timeout) [**copyed**](broker__monitor_8c.md#function-timeout) ? \*/
define QO_TERM_ENV (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;env
define QO_TERM_EQCLASS (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;eqclass
define QO_TERM_EQUAL_OP 1 /\* [**is**](broker__monitor_8c.md#function-timeout) equal op ? \*/
define QO_TERM_FLAG (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;[**flag**](classflag.md)
define QO_TERM_HEAD (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;head
define QO_TERM_IDX (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;idx
define QO_TERM_INDEX_SEG (t, i) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;index\_seg[([**i**](dynamic__load_8c.md#variable-i))]
define QO_TERM_IS_FLAGED (t, f) ([**QO\_TERM\_FLAG**](query__graph_8h.md#define-qo_term_flag)([**t**](broker__monitor_8c.md#function-timeout)) & ([**int**](broker__monitor_8c.md#function-timeout)) (f))
define QO_TERM_JOIN_TYPE (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;join\_type
define QO_TERM_LOCATION (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;location
define QO_TERM_MERGEABLE_EDGE 16 /\* [**suitable**](broker__monitor_8c.md#function-timeout) [**as**](broker__monitor_8c.md#function-timeout) [**a**](broker__monitor_8c.md#function-timeout) m-join [**edge**](broker__monitor_8c.md#function-timeout) ? \*/
define QO_TERM_MULTI_COLL_CONST 128 /\* [**multi**](broker__monitor_8c.md#function-timeout) column && [**have**](broker__monitor_8c.md#function-timeout) constant value, ([**a**](broker__monitor_8c.md#function-timeout),1) in .. \*/
define QO_TERM_MULTI_COLL_PRED 64 /\* [**multi**](broker__monitor_8c.md#function-timeout) column && in [**OP**](broker__monitor_8c.md#function-timeout), ([**a**](broker__monitor_8c.md#function-timeout),b) in .. \*/
define QO_TERM_MULTI_COL_CNT (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;multi\_col\_cnt
define QO_TERM_MULTI_COL_SEGS (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;multi\_col\_segs
define QO_TERM_NODES (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;nodes
define QO_TERM_NOMINAL_SEG (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;nominal\_seg
define QO_TERM_NON_IDX_SARG_COLL 32 /\* [**not**](broker__monitor_8c.md#function-timeout) [**suitable**](broker__monitor_8c.md#function-timeout) [**for**](dynamic__load_8c.md#function-for) key range/filter \*/
define QO_TERM_OID_SEG (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;oid\_seg
define QO_TERM_OR_PRED 256 /\* [**or**](broker__monitor_8c.md#function-timeout) predicate. e.g.) [**a**](broker__monitor_8c.md#function-timeout)=1 [**or**](broker__monitor_8c.md#function-timeout) b=2 \*/
define QO_TERM_PRED_ORDER (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;pred\_order
define QO_TERM_PT_EXPR (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;pt\_expr
define QO_TERM_RANGELIST 2 /\* [**is**](broker__monitor_8c.md#function-timeout) [**RANGE**](access__spec_8hpp.md#enum-range) ([**r1**](broker__monitor_8c.md#function-timeout), [**r2**](broker__monitor_8c.md#function-timeout), ...) ? \*/
define QO_TERM_RANK (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;rank
define QO_TERM_SEG (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;seg
define QO_TERM_SEGS (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;segments
define QO_TERM_SELECTIVITY (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;selectivity
define QO_TERM_SET_FLAG (t, f) [**QO\_TERM\_FLAG**](query__graph_8h.md#define-qo_term_flag)([**t**](broker__monitor_8c.md#function-timeout)) \|= ([**int**](broker__monitor_8c.md#function-timeout)) (f)
define QO_TERM_SINGLE_PRED 4 /\* [**is**](broker__monitor_8c.md#function-timeout) [**single\_pred**](broker__monitor_8c.md#function-timeout) ? \*/
define QO_TERM_SUBQUERIES (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;subqueries
define QO_TERM_TAIL (t) ([**t**](broker__monitor_8c.md#function-timeout))-&gt;tail
define QO_UI_FORCE (ui, n) (([**ui**](broker__monitor_8c.md#function-timeout))-&gt;index[(n)].force)
define QO_UI_INDEX (ui, n) (([**ui**](broker__monitor_8c.md#function-timeout))-&gt;index[(n)].name)
define QO_UI_KEYLIMIT (ui, n) (([**ui**](broker__monitor_8c.md#function-timeout))-&gt;index[(n)].key\_limit)
define QO_UI_N (ui) (([**ui**](broker__monitor_8c.md#function-timeout))-&gt;n)
define QO_UNORDERED (([**QO\_EQCLASS**](optimizer_8h.md#typedef-qo_eqclass)\*)[**NULL**](freelistheap_8h.md#define-null))

Public Types Documentation

typedef QO_CLASS_INFO_ENTRY

typedef struct qo_class_info_entry QO_CLASS_INFO_ENTRY;

enum QO_SORT_LIMIT_USE

enum QO_SORT_LIMIT_USE {
    QO_SL_INVALID,
    QO_SL_USE,
    QO_SL_POSSIBLE
};

enum QO_TERMCLASS

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
};

Public Attributes Documentation

variable QO_INFINITY

double QO_INFINITY;

Public Functions Documentation

function qo_check_coll_optimization

void qo_check_coll_optimization (
    QO_INDEX_ENTRY * ent,
    COLL_OPT * collation_opt
) 

function qo_check_type_index_covering

bool qo_check_type_index_covering (
    QO_INDEX_ENTRY * ent
) 

function qo_env_free

void qo_env_free (
    QO_ENV * env
) 

function qo_eqclass_fprint_wrt

void qo_eqclass_fprint_wrt (
    QO_EQCLASS * eqclass,
    BITSET * nodeset,
    FILE * f
) 

function qo_is_filter_index

bool qo_is_filter_index (
    QO_INDEX_ENTRY * ent
) 

function qo_is_prefix_index

bool qo_is_prefix_index (
    QO_INDEX_ENTRY * ent
) 

function qo_node_fprint

void qo_node_fprint (
    QO_NODE * node,
    FILE * f
) 

function qo_print_stats

void qo_print_stats (
    FILE * f
) 

function qo_seg_fprint

void qo_seg_fprint (
    QO_SEGMENT * seg,
    FILE * f
) 

function qo_seg_width

int qo_seg_width (
    QO_SEGMENT * seg
) 

function qo_term_fprint

void qo_term_fprint (
    QO_TERM * term,
    FILE * f
) 

function qo_termset_fprint

void qo_termset_fprint (
    QO_ENV * env,
    BITSET * terms,
    FILE * f
) 

Macro Definition Documentation

define OID_SEG_NAME

#define OID_SEG_NAME `"OID$"`

define QO_ADD_OUTER_DEP_SET

#define QO_ADD_OUTER_DEP_SET (
    tail,
    head
) `bitset_union (&( QO_NODE_OUTER_DEP_SET (tail)), &( QO_NODE_OUTER_DEP_SET (head))); \ bitset_add (&( QO_NODE_OUTER_DEP_SET (tail)), QO_NODE_IDX (head));`

define QO_ENTRY_MULTI_COL

#define QO_ENTRY_MULTI_COL (
    entry
) `((entry)->col_num > 1 ? true : false )`

define QO_ENV_EQCLASS

#define QO_ENV_EQCLASS (
    env,
    n
) `(&(env)->eqclasses[(n)])`

define QO_ENV_LIMIT_VALUE

#define QO_ENV_LIMIT_VALUE (
    env
) `(env)->limit_value`

define QO_ENV_NODE

#define QO_ENV_NODE (
    env,
    n
) `(&(env)->nodes[(n)])`

define QO_ENV_PARSER

#define QO_ENV_PARSER (
    env
) `(env)-> parser`

define QO_ENV_PARTITION

#define QO_ENV_PARTITION (
    env,
    n
) `(&(env)->partitions[(n)])`

define QO_ENV_PREV_SEG

#define QO_ENV_PREV_SEG (
    env
) `(env)-> prev_seg`

define QO_ENV_PT_TREE

#define QO_ENV_PT_TREE (
    env
) `(env)->pt_tree`

define QO_ENV_SEG

#define QO_ENV_SEG (
    env,
    n
) `(&(env)->segs[(n)])`

define QO_ENV_SORT_LIMIT_NODES

#define QO_ENV_SORT_LIMIT_NODES (
    env
) `(env)->sort_limit_nodes`

define QO_ENV_SUBQUERY

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

define QO_ENV_TERM

#define QO_ENV_TERM (
    env,
    n
) `(&(env)->terms[(n)])`

define QO_ENV_TMP_BITSET

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

define QO_ENV_USE_SORT_LIMIT

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

define QO_EQCLASS_ENV

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

define QO_EQCLASS_IDX

#define QO_EQCLASS_IDX (
    e
) `( e )->idx`

define QO_EQCLASS_SEGS

#define QO_EQCLASS_SEGS (
    e
) `( e )->segs`

define QO_EQCLASS_TERM

#define QO_EQCLASS_TERM (
    e
) `( e )-> term`

define QO_FULL_OUTER_JOIN_TERM

#define QO_FULL_OUTER_JOIN_TERM (
    term
) `(( QO_TERM_CLASS ( term ) == QO_TC_JOIN || \ QO_TERM_CLASS ( term ) == QO_TC_DUMMY_JOIN ) && \ QO_TERM_JOIN_TYPE ( term ) == JOIN_OUTER )`

define QO_GET_CLASS_STATS

#define QO_GET_CLASS_STATS (
    entryp
) `(( entryp )->self_allocated ? ( entryp )->stats : ( entryp )->smclass->stats)`

define QO_INDEX_INDEX

#define QO_INDEX_INDEX (
    ind,
    n
) `(&( ind )->index[(n)])`

define QO_INNER_JOIN_TERM

#define QO_INNER_JOIN_TERM (
    term
) `( QO_TERM_CLASS ( term ) == QO_TC_JOIN && \ QO_TERM_JOIN_TYPE ( term ) == JOIN_INNER )`

define QO_IS_DEP_TERM

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

define QO_IS_EDGE_TERM

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

define QO_IS_FAKE_TERM

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

define QO_IS_NL_JOIN

#define QO_IS_NL_JOIN (
    p
) `( p ->plan_un.join.join_method == QO_JOINMETHOD_IDX_JOIN || \ p ->plan_un.join.join_method == QO_JOINMETHOD_NL_JOIN )`

define QO_IS_PATH_TERM

#define QO_IS_PATH_TERM (
    t
) `( QO_TERM_CLASS ( t ) & 0x20)`

define QO_JOIN_INFO_SIZE

#define QO_JOIN_INFO_SIZE (
    _partition
) `( int )(1 << bitset_cardinality (&( QO_PARTITION_NODES ( _partition ))))`

define QO_LEFT_OUTER_JOIN_TERM

#define QO_LEFT_OUTER_JOIN_TERM (
    term
) `(( QO_TERM_CLASS ( term ) == QO_TC_JOIN || \ QO_TERM_CLASS ( term ) == QO_TC_DUMMY_JOIN ) && \ QO_TERM_JOIN_TYPE ( term ) == JOIN_LEFT )`

define QO_NI_ENTRY

#define QO_NI_ENTRY (
    ni,
    n
) `(&( ni )->index[(n)])`

define QO_NI_N

#define QO_NI_N (
    ni
) `(( ni )->n)`

define QO_NODE_DEP_SET

#define QO_NODE_DEP_SET (
    node
) `(node)->dep_set`

define QO_NODE_ENTITY_SPEC

#define QO_NODE_ENTITY_SPEC (
    node
) `(node)->entity_spec`

define QO_NODE_ENV

#define QO_NODE_ENV (
    node
) `(node)->env`

define QO_NODE_EQCLASSES

#define QO_NODE_EQCLASSES (
    node
) `(node)->eqclasses`

define QO_NODE_HINT

#define QO_NODE_HINT (
    node
) `(node)->hint`

define QO_NODE_IDX

#define QO_NODE_IDX (
    node
) `(node)->idx`

define QO_NODE_INDEXES

#define QO_NODE_INDEXES (
    node
) `(node)->indexes`

define QO_NODE_INFO

#define QO_NODE_INFO (
    node
) `(node)->info`

define QO_NODE_INFO_N

#define QO_NODE_INFO_N (
    node
) `(node)->info->n`

define QO_NODE_INFO_SMCLASS

#define QO_NODE_INFO_SMCLASS (
    node
) `(node)->info[0].info->smclass`

define QO_NODE_IS_ANSI_JOIN

#define QO_NODE_IS_ANSI_JOIN (
    node
) `( QO_NODE_PT_JOIN_TYPE (node) == PT_JOIN_LEFT_OUTER || \ QO_NODE_PT_JOIN_TYPE (node) == PT_JOIN_RIGHT_OUTER || \ QO_NODE_PT_JOIN_TYPE (node) == PT_JOIN_FULL_OUTER || \ QO_NODE_PT_JOIN_TYPE (node) == PT_JOIN_NATURAL || \ QO_NODE_PT_JOIN_TYPE (node) == PT_JOIN_INNER )`

define QO_NODE_IS_CLASS_HIERARCHY

#define QO_NODE_IS_CLASS_HIERARCHY (
    node
) `/* multi line expression */`

define QO_NODE_IS_CLASS_PARTITIONED

#define QO_NODE_IS_CLASS_PARTITIONED (
    node
) `/* multi line expression */`

define QO_NODE_IS_OUTER_JOIN

#define QO_NODE_IS_OUTER_JOIN (
    node
) `( QO_NODE_PT_JOIN_TYPE (node) == PT_JOIN_LEFT_OUTER || \ QO_NODE_PT_JOIN_TYPE (node) == PT_JOIN_RIGHT_OUTER || \ QO_NODE_PT_JOIN_TYPE (node) == PT_JOIN_FULL_OUTER )`

define QO_NODE_LOCATION

#define QO_NODE_LOCATION (
    node
) `(node)->entity_spec->info.spec.location`

define QO_NODE_NAME

#define QO_NODE_NAME (
    node
) `(node)->class_name`

define QO_NODE_NCARD

#define QO_NODE_NCARD (
    node
) `(node)->ncard`

define QO_NODE_OIDP

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

define QO_NODE_OID_SEG

#define QO_NODE_OID_SEG (
    node
) `(node)->oid_seg`

define QO_NODE_OUTER_DEP_SET

#define QO_NODE_OUTER_DEP_SET (
    node
) `(node)->outer_dep_set`

define QO_NODE_PARTITION

#define QO_NODE_PARTITION (
    node
) `(node)->partition`

define QO_NODE_PT_JOIN_TYPE

#define QO_NODE_PT_JOIN_TYPE (
    node
) `(node)->entity_spec->info.spec.join_type`

define QO_NODE_REL_IDX

#define QO_NODE_REL_IDX (
    node
) `(node)->rel_idx`

define QO_NODE_SARGABLE

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

define QO_NODE_SARGS

#define QO_NODE_SARGS (
    node
) `(node)->sargs`

define QO_NODE_SEGS

#define QO_NODE_SEGS (
    node
) `(node)->segs`

define QO_NODE_SELECTIVITY

#define QO_NODE_SELECTIVITY (
    node
) `(node)->selectivity`

define QO_NODE_SORT_LIMIT_CANDIDATE

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

define QO_NODE_SUBQUERIES

#define QO_NODE_SUBQUERIES (
    node
) `(node)->subqueries`

define QO_NODE_TCARD

#define QO_NODE_TCARD (
    node
) `(node)->tcard`

define QO_NODE_USING_INDEX

#define QO_NODE_USING_INDEX (
    node
) `(node)->using_index`

define QO_ON_COND_TERM

#define QO_ON_COND_TERM (
    term
) `( QO_TERM_LOCATION ( term ) > 0)`

define QO_OUTER_JOIN_TERM

#define QO_OUTER_JOIN_TERM (
    term
) `/* multi line expression */`

define QO_PARTITION_DEPENDENCIES

#define QO_PARTITION_DEPENDENCIES (
    p
) `( p )->dependencies`

define QO_PARTITION_EDGES

#define QO_PARTITION_EDGES (
    p
) `( p )->edges`

define QO_PARTITION_IDX

#define QO_PARTITION_IDX (
    p
) `( p )->idx`

define QO_PARTITION_M_OFFSET

#define QO_PARTITION_M_OFFSET (
    p
) `( p )->M_offset`

define QO_PARTITION_NODES

#define QO_PARTITION_NODES (
    p
) `( p )->nodes`

define QO_PARTITION_PLAN

#define QO_PARTITION_PLAN (
    p
) `( p )->plan`

define QO_RIGHT_OUTER_JOIN_TERM

#define QO_RIGHT_OUTER_JOIN_TERM (
    term
) `(( QO_TERM_CLASS ( term ) == QO_TC_JOIN || \ QO_TERM_CLASS ( term ) == QO_TC_DUMMY_JOIN ) && \ QO_TERM_JOIN_TYPE ( term ) == JOIN_RIGHT )`

define QO_SEG_ATTR_ID

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

define QO_SEG_CLASS_ATTR

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

define QO_SEG_ENV

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

define QO_SEG_EQCLASS

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

define QO_SEG_EQ_ROOT

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

define QO_SEG_FUNC_INDEX

#define QO_SEG_FUNC_INDEX (
    seg
) `(seg)->is_function_index`

define QO_SEG_HEAD

#define QO_SEG_HEAD (
    seg
) `(seg)->head`

define QO_SEG_IDX

#define QO_SEG_IDX (
    seg
) `(seg)->idx`

define QO_SEG_INDEX_TERMS

#define QO_SEG_INDEX_TERMS (
    seg
) `(seg)->index_terms`

define QO_SEG_INFO

#define QO_SEG_INFO (
    seg
) `(seg)->info`

define QO_SEG_IS_NOT_NULL

#define QO_SEG_IS_NOT_NULL (
    seg
) `(seg)->is_not_null`

define QO_SEG_IS_OID_SEG

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

define QO_SEG_IS_SET_VALUED

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

define QO_SEG_NAME

#define QO_SEG_NAME (
    seg
) `(seg)->name`

define QO_SEG_PT_NODE

#define QO_SEG_PT_NODE (
    seg
) `(seg)->pt_node`

define QO_SEG_SET_VALUED

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

define QO_SEG_SHARED_ATTR

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

define QO_SEG_TAIL

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

define QO_TERM_CAN_USE_INDEX

#define QO_TERM_CAN_USE_INDEX (
    t
) `( t )->can_use_index`

define QO_TERM_CLASS

#define QO_TERM_CLASS (
    t
) `( t )->term_class`

define QO_TERM_CLEAR_FLAG

#define QO_TERM_CLEAR_FLAG (
    t,
    f
) `QO_TERM_FLAG ( t ) &= ( int ) ~(f)`

define QO_TERM_COPY_PT_EXPR

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

define QO_TERM_ENV

#define QO_TERM_ENV (
    t
) `( t )->env`

define QO_TERM_EQCLASS

#define QO_TERM_EQCLASS (
    t
) `( t )->eqclass`

define QO_TERM_EQUAL_OP

#define QO_TERM_EQUAL_OP `1 /* is equal op ? */`

define QO_TERM_FLAG

#define QO_TERM_FLAG (
    t
) `( t )-> flag`

define QO_TERM_HEAD

#define QO_TERM_HEAD (
    t
) `( t )->head`

define QO_TERM_IDX

#define QO_TERM_IDX (
    t
) `( t )->idx`

define QO_TERM_INDEX_SEG

#define QO_TERM_INDEX_SEG (
    t,
    i
) `( t )->index_seg[( i )]`

define QO_TERM_IS_FLAGED

#define QO_TERM_IS_FLAGED (
    t,
    f
) `( QO_TERM_FLAG ( t ) & ( int ) (f))`

define QO_TERM_JOIN_TYPE

#define QO_TERM_JOIN_TYPE (
    t
) `( t )->join_type`

define QO_TERM_LOCATION

#define QO_TERM_LOCATION (
    t
) `( t )->location`

define QO_TERM_MERGEABLE_EDGE

#define QO_TERM_MERGEABLE_EDGE `16  /* suitable  as  a m-join edge ? */`

define QO_TERM_MULTI_COLL_CONST

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

define QO_TERM_MULTI_COLL_PRED

#define QO_TERM_MULTI_COLL_PRED `64 /* multi column && in OP , ( a ,b) in .. */`

define QO_TERM_MULTI_COL_CNT

#define QO_TERM_MULTI_COL_CNT (
    t
) `( t )->multi_col_cnt`

define QO_TERM_MULTI_COL_SEGS

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

define QO_TERM_NODES

#define QO_TERM_NODES (
    t
) `( t )->nodes`

define QO_TERM_NOMINAL_SEG

#define QO_TERM_NOMINAL_SEG (
    t
) `( t )->nominal_seg`

define QO_TERM_NON_IDX_SARG_COLL

#define QO_TERM_NON_IDX_SARG_COLL `32   /* not  suitable  for key range/filter */`

define QO_TERM_OID_SEG

#define QO_TERM_OID_SEG (
    t
) `( t )->oid_seg`

define QO_TERM_OR_PRED

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

define QO_TERM_PRED_ORDER

#define QO_TERM_PRED_ORDER (
    t
) `( t )->pred_order`

define QO_TERM_PT_EXPR

#define QO_TERM_PT_EXPR (
    t
) `( t )->pt_expr`

define QO_TERM_RANGELIST

#define QO_TERM_RANGELIST `2    /* is  RANGE ( r1 , r2 , ...) ? */`

define QO_TERM_RANK

#define QO_TERM_RANK (
    t
) `( t )->rank`

define QO_TERM_SEG

#define QO_TERM_SEG (
    t
) `( t )->seg`

define QO_TERM_SEGS

#define QO_TERM_SEGS (
    t
) `( t )->segments`

define QO_TERM_SELECTIVITY

#define QO_TERM_SELECTIVITY (
    t
) `( t )->selectivity`

define QO_TERM_SET_FLAG

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

define QO_TERM_SINGLE_PRED

#define QO_TERM_SINGLE_PRED `4  /* is  single_pred ? */`

define QO_TERM_SUBQUERIES

#define QO_TERM_SUBQUERIES (
    t
) `( t )->subqueries`

define QO_TERM_TAIL

#define QO_TERM_TAIL (
    t
) `( t )->tail`

define QO_UI_FORCE

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

define QO_UI_INDEX

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

define QO_UI_KEYLIMIT

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

define QO_UI_N

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

define QO_UNORDERED

#define QO_UNORDERED `(( QO_EQCLASS *) NULL )`


The documentation for this class was generated from the following file cubrid/src/optimizer/query_graph.h