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
Public Types
Public Attributes
Public Functions
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)->col\_num > 1 ? [**true**](broker__monitor_8c.md#function-timeout) : [**false**](broker__monitor_8c.md#function-timeout))
|
| define |
QO_ENV_EQCLASS (env, n) (&(env)->eqclasses[(n)])
|
| define |
QO_ENV_LIMIT_VALUE (env) (env)->limit\_value
|
| define |
QO_ENV_NODE (env, n) (&(env)->nodes[(n)])
|
| define |
QO_ENV_PARSER (env) (env)->[**parser**](shard__proxy__handler_8c.md#variable-parser)
|
| define |
QO_ENV_PARTITION (env, n) (&(env)->partitions[(n)])
|
| define |
QO_ENV_PREV_SEG (env) (env)->[**prev\_seg**](broker__monitor_8c.md#function-timeout)
|
| define |
QO_ENV_PT_TREE (env) (env)->pt\_tree
|
| define |
QO_ENV_SEG (env, n) (&(env)->segs[(n)])
|
| define |
QO_ENV_SORT_LIMIT_NODES (env) (env)->sort\_limit\_nodes
|
| define |
QO_ENV_SUBQUERY (env, n) (&(env)->subqueries[(n)])
|
| define |
QO_ENV_TERM (env, n) (&(env)->terms[(n)])
|
| define |
QO_ENV_TMP_BITSET (env) (env)->tmp\_bitset
|
| define |
QO_ENV_USE_SORT_LIMIT (env) ((env)->use\_sort\_limit == QO\_SL\_USE)
|
| define |
QO_EQCLASS_ENV (e) ([**e**](broker__monitor_8c.md#function-timeout))->env
|
| define |
QO_EQCLASS_IDX (e) ([**e**](broker__monitor_8c.md#function-timeout))->idx
|
| define |
QO_EQCLASS_SEGS (e) ([**e**](broker__monitor_8c.md#function-timeout))->segs
|
| define |
QO_EQCLASS_TERM (e) ([**e**](broker__monitor_8c.md#function-timeout))->[**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))->self\_allocated ? ([**entryp**](broker__monitor_8c.md#function-timeout))->stats : ([**entryp**](broker__monitor_8c.md#function-timeout))->smclass->stats)
|
| define |
QO_INDEX_INDEX (ind, n) (&([**ind**](broker__monitor_8c.md#function-timeout))->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 << [**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))->index[(n)])
|
| define |
QO_NI_N (ni) (([**ni**](broker__monitor_8c.md#function-timeout))->n)
|
| define |
QO_NODE_DEP_SET (node) (node)->dep\_set
|
| define |
QO_NODE_ENTITY_SPEC (node) (node)->entity\_spec
|
| define |
QO_NODE_ENV (node) (node)->env
|
| define |
QO_NODE_EQCLASSES (node) (node)->eqclasses
|
| define |
QO_NODE_HINT (node) (node)->hint
|
| define |
QO_NODE_IDX (node) (node)->idx
|
| define |
QO_NODE_INDEXES (node) (node)->indexes
|
| define |
QO_NODE_INFO (node) (node)->info
|
| define |
QO_NODE_INFO_N (node) (node)->info->n
|
| define |
QO_NODE_INFO_SMCLASS (node) (node)->info[0].info->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)->entity\_spec->info.spec.location
|
| define |
QO_NODE_NAME (node) (node)->class\_name
|
| define |
QO_NODE_NCARD (node) (node)->ncard
|
| define |
QO_NODE_OIDP (node) (&(node)->info->info[0].oid)
|
| define |
QO_NODE_OID_SEG (node) (node)->oid\_seg
|
| define |
QO_NODE_OUTER_DEP_SET (node) (node)->outer\_dep\_set
|
| define |
QO_NODE_PARTITION (node) (node)->partition
|
| 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_SARGABLE (node) (node)->sargable
|
| define |
QO_NODE_SARGS (node) (node)->sargs
|
| define |
QO_NODE_SEGS (node) (node)->segs
|
| define |
QO_NODE_SELECTIVITY (node) (node)->selectivity
|
| define |
QO_NODE_SORT_LIMIT_CANDIDATE (node) (node)->sort\_limit\_candidate
|
| 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**](query__graph_8h.md#define-qo_term_location)([**term**](broker__monitor_8c.md#variable-term)) > 0)
|
| define |
QO_OUTER_JOIN_TERM (term) /* multi line expression */
|
| define |
QO_PARTITION_DEPENDENCIES (p) ([**p**](dynamic__load_8c.md#variable-p))->dependencies
|
| define |
QO_PARTITION_EDGES (p) ([**p**](dynamic__load_8c.md#variable-p))->edges
|
| define |
QO_PARTITION_IDX (p) ([**p**](dynamic__load_8c.md#variable-p))->idx
|
| define |
QO_PARTITION_M_OFFSET (p) ([**p**](dynamic__load_8c.md#variable-p))->M\_offset
|
| define |
QO_PARTITION_NODES (p) ([**p**](dynamic__load_8c.md#variable-p))->nodes
|
| define |
QO_PARTITION_PLAN (p) ([**p**](dynamic__load_8c.md#variable-p))->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)->[**id**](thread__worker__pool__impl_8hpp.md#enum-id)
|
| define |
QO_SEG_CLASS_ATTR (seg) (seg)->class\_attr
|
| define |
QO_SEG_ENV (seg) (seg)->env
|
| define |
QO_SEG_EQCLASS (seg) (seg)->eqclass
|
| define |
QO_SEG_EQ_ROOT (seg) (seg)->eq\_root
|
| define |
QO_SEG_FUNC_INDEX (seg) (seg)->is\_function\_index
|
| define |
QO_SEG_HEAD (seg) (seg)->head
|
| define |
QO_SEG_IDX (seg) (seg)->idx
|
| define |
QO_SEG_INDEX_TERMS (seg) (seg)->index\_terms
|
| define |
QO_SEG_INFO (seg) (seg)->info
|
| define |
QO_SEG_IS_NOT_NULL (seg) (seg)->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)->set\_valued
|
| define |
QO_SEG_NAME (seg) (seg)->name
|
| define |
QO_SEG_PT_NODE (seg) (seg)->pt\_node
|
| define |
QO_SEG_SET_VALUED (seg) (seg)->set\_valued
|
| define |
QO_SEG_SHARED_ATTR (seg) (seg)->shared\_attr
|
| define |
QO_SEG_TAIL (seg) (seg)->tail
|
| define |
QO_TERM_CAN_USE_INDEX (t) ([**t**](broker__monitor_8c.md#function-timeout))->can\_use\_index
|
| define |
QO_TERM_CLASS (t) ([**t**](broker__monitor_8c.md#function-timeout))->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))->env
|
| define |
QO_TERM_EQCLASS (t) ([**t**](broker__monitor_8c.md#function-timeout))->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))->[**flag**](classflag.md)
|
| define |
QO_TERM_HEAD (t) ([**t**](broker__monitor_8c.md#function-timeout))->head
|
| define |
QO_TERM_IDX (t) ([**t**](broker__monitor_8c.md#function-timeout))->idx
|
| define |
QO_TERM_INDEX_SEG (t, i) ([**t**](broker__monitor_8c.md#function-timeout))->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))->join\_type
|
| define |
QO_TERM_LOCATION (t) ([**t**](broker__monitor_8c.md#function-timeout))->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))->multi\_col\_cnt
|
| define |
QO_TERM_MULTI_COL_SEGS (t) ([**t**](broker__monitor_8c.md#function-timeout))->multi\_col\_segs
|
| define |
QO_TERM_NODES (t) ([**t**](broker__monitor_8c.md#function-timeout))->nodes
|
| define |
QO_TERM_NOMINAL_SEG (t) ([**t**](broker__monitor_8c.md#function-timeout))->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))->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))->pred\_order
|
| define |
QO_TERM_PT_EXPR (t) ([**t**](broker__monitor_8c.md#function-timeout))->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))->rank
|
| define |
QO_TERM_SEG (t) ([**t**](broker__monitor_8c.md#function-timeout))->seg
|
| define |
QO_TERM_SEGS (t) ([**t**](broker__monitor_8c.md#function-timeout))->segments
|
| define |
QO_TERM_SELECTIVITY (t) ([**t**](broker__monitor_8c.md#function-timeout))->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))->subqueries
|
| define |
QO_TERM_TAIL (t) ([**t**](broker__monitor_8c.md#function-timeout))->tail
|
| define |
QO_UI_FORCE (ui, n) (([**ui**](broker__monitor_8c.md#function-timeout))->index[(n)].force)
|
| define |
QO_UI_INDEX (ui, n) (([**ui**](broker__monitor_8c.md#function-timeout))->index[(n)].name)
|
| define |
QO_UI_KEYLIMIT (ui, n) (([**ui**](broker__monitor_8c.md#function-timeout))->index[(n)].key\_limit)
|
| define |
QO_UI_N (ui) (([**ui**](broker__monitor_8c.md#function-timeout))->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
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