CUBRID Engine  latest
query_evaluator.c File Reference
#include "config.h"
#include <stdio.h>
#include <string.h>
#include "system_parameter.h"
#include "error_manager.h"
#include "heap_file.h"
#include "fetch.h"
#include "list_file.h"
#include "object_primitive.h"
#include "object_representation.h"
#include "regu_var.hpp"
#include "set_object.h"
#include "xasl.h"
#include "dbtype.h"
#include "query_executor.h"
#include "thread_entry.hpp"
#include "xasl_predicate.hpp"
Include dependency graph for query_evaluator.c:

Go to the source code of this file.

Macros

#define UNKNOWN_CARD   -2 /* Unknown cardinality of a set member */
 

Functions

static DB_LOGICAL eval_negative (DB_LOGICAL res)
 
static DB_LOGICAL eval_logical_result (DB_LOGICAL res1, DB_LOGICAL res2)
 
static DB_LOGICAL eval_value_rel_cmp (DB_VALUE *dbval1, DB_VALUE *dbval2, REL_OP rel_operator, const COMP_EVAL_TERM *et_comp)
 
static DB_LOGICAL eval_some_eval (DB_VALUE *item, DB_SET *set, REL_OP rel_operator)
 
static DB_LOGICAL eval_all_eval (DB_VALUE *item, DB_SET *set, REL_OP rel_operator)
 
static int eval_item_card_set (DB_VALUE *item, DB_SET *set, REL_OP rel_operator)
 
static DB_LOGICAL eval_some_list_eval (THREAD_ENTRY *thread_p, DB_VALUE *item, QFILE_LIST_ID *list_id, REL_OP rel_operator)
 
static DB_LOGICAL eval_all_list_eval (THREAD_ENTRY *thread_p, DB_VALUE *item, QFILE_LIST_ID *list_id, REL_OP rel_operator)
 
static int eval_item_card_sort_list (THREAD_ENTRY *thread_p, DB_VALUE *item, QFILE_LIST_ID *list_id)
 
static DB_LOGICAL eval_sub_multi_set_to_sort_list (THREAD_ENTRY *thread_p, DB_SET *set1, QFILE_LIST_ID *list_id)
 
static DB_LOGICAL eval_sub_sort_list_to_multi_set (THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id, DB_SET *set)
 
static DB_LOGICAL eval_sub_sort_list_to_sort_list (THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id1, QFILE_LIST_ID *list_id2)
 
static DB_LOGICAL eval_eq_multi_set_to_sort_list (THREAD_ENTRY *thread_p, DB_SET *set, QFILE_LIST_ID *list_id)
 
static DB_LOGICAL eval_ne_multi_set_to_sort_list (THREAD_ENTRY *thread_p, DB_SET *set, QFILE_LIST_ID *list_id)
 
static DB_LOGICAL eval_le_multi_set_to_sort_list (THREAD_ENTRY *thread_p, DB_SET *set, QFILE_LIST_ID *list_id)
 
static DB_LOGICAL eval_lt_multi_set_to_sort_list (THREAD_ENTRY *thread_p, DB_SET *set, QFILE_LIST_ID *list_id)
 
static DB_LOGICAL eval_le_sort_list_to_multi_set (THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id, DB_SET *set)
 
static DB_LOGICAL eval_lt_sort_list_to_multi_set (THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id, DB_SET *set)
 
static DB_LOGICAL eval_eq_sort_list_to_sort_list (THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id1, QFILE_LIST_ID *list_id2)
 
static DB_LOGICAL eval_ne_sort_list_to_sort_list (THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id1, QFILE_LIST_ID *list_id2)
 
static DB_LOGICAL eval_le_sort_list_to_sort_list (THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id1, QFILE_LIST_ID *list_id2)
 
static DB_LOGICAL eval_lt_sort_list_to_sort_list (THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id1, QFILE_LIST_ID *list_id2)
 
static DB_LOGICAL eval_multi_set_to_sort_list (THREAD_ENTRY *thread_p, DB_SET *set, QFILE_LIST_ID *list_id, REL_OP rel_operator)
 
static DB_LOGICAL eval_sort_list_to_multi_set (THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id, DB_SET *set, REL_OP rel_operator)
 
static DB_LOGICAL eval_sort_list_to_sort_list (THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id1, QFILE_LIST_ID *list_id2, REL_OP rel_operator)
 
static DB_LOGICAL eval_set_list_cmp (THREAD_ENTRY *thread_p, const COMP_EVAL_TERM *et_comp, val_descr *vd, DB_VALUE *dbval1, DB_VALUE *dbval2)
 
DB_LOGICAL eval_pred (THREAD_ENTRY *thread_p, const PRED_EXPR *pr, val_descr *vd, OID *obj_oid)
 
DB_LOGICAL eval_pred_comp0 (THREAD_ENTRY *thread_p, const PRED_EXPR *pr, val_descr *vd, OID *obj_oid)
 
DB_LOGICAL eval_pred_comp1 (THREAD_ENTRY *thread_p, const PRED_EXPR *pr, val_descr *vd, OID *obj_oid)
 
DB_LOGICAL eval_pred_comp2 (THREAD_ENTRY *thread_p, const PRED_EXPR *pr, val_descr *vd, OID *obj_oid)
 
DB_LOGICAL eval_pred_comp3 (THREAD_ENTRY *thread_p, const PRED_EXPR *pr, val_descr *vd, OID *obj_oid)
 
DB_LOGICAL eval_pred_alsm4 (THREAD_ENTRY *thread_p, const PRED_EXPR *pr, val_descr *vd, OID *obj_oid)
 
DB_LOGICAL eval_pred_alsm5 (THREAD_ENTRY *thread_p, const PRED_EXPR *pr, val_descr *vd, OID *obj_oid)
 
DB_LOGICAL eval_pred_like6 (THREAD_ENTRY *thread_p, const PRED_EXPR *pr, val_descr *vd, OID *obj_oid)
 
DB_LOGICAL eval_pred_rlike7 (THREAD_ENTRY *thread_p, const PRED_EXPR *pr, val_descr *vd, OID *obj_oid)
 
PR_EVAL_FNC eval_fnc (THREAD_ENTRY *thread_p, const PRED_EXPR *pr, DB_TYPE *single_node_type)
 
DB_LOGICAL update_logical_result (THREAD_ENTRY *thread_p, DB_LOGICAL ev_res, int *qualification)
 
DB_LOGICAL eval_data_filter (THREAD_ENTRY *thread_p, OID *oid, RECDES *recdesp, HEAP_SCANCACHE *scan_cache, FILTER_INFO *filterp)
 
DB_LOGICAL eval_key_filter (THREAD_ENTRY *thread_p, DB_VALUE *value, FILTER_INFO *filterp)
 

Macro Definition Documentation

#define UNKNOWN_CARD   -2 /* Unknown cardinality of a set member */

Function Documentation

static DB_LOGICAL eval_all_eval ( DB_VALUE item,
DB_SET set,
REL_OP  rel_operator 
)
static

Definition at line 401 of file query_evaluator.c.

References eval_negative(), eval_some_eval(), R_EQ, R_EQ_TORDER, R_GE, R_GT, R_LE, R_LT, R_NE, and V_ERROR.

Referenced by eval_pred(), and eval_pred_alsm4().

Here is the caller graph for this function:

static DB_LOGICAL eval_all_list_eval ( THREAD_ENTRY thread_p,
DB_VALUE item,
QFILE_LIST_ID list_id,
REL_OP  rel_operator 
)
static

Definition at line 632 of file query_evaluator.c.

References eval_negative(), eval_some_list_eval(), R_EQ, R_EQ_TORDER, R_GE, R_GT, R_LE, R_LT, R_NE, and V_ERROR.

Referenced by eval_pred(), and eval_pred_alsm5().

Here is the caller graph for this function:

static DB_LOGICAL eval_eq_multi_set_to_sort_list ( THREAD_ENTRY thread_p,
DB_SET set,
QFILE_LIST_ID list_id 
)
static
static DB_LOGICAL eval_eq_sort_list_to_sort_list ( THREAD_ENTRY thread_p,
QFILE_LIST_ID list_id1,
QFILE_LIST_ID list_id2 
)
static

Definition at line 1350 of file query_evaluator.c.

References eval_logical_result(), and eval_sub_sort_list_to_sort_list().

Referenced by eval_ne_sort_list_to_sort_list(), and eval_sort_list_to_sort_list().

Here is the caller graph for this function:

static int eval_item_card_set ( DB_VALUE item,
DB_SET set,
REL_OP  rel_operator 
)
static
static DB_LOGICAL eval_le_multi_set_to_sort_list ( THREAD_ENTRY thread_p,
DB_SET set,
QFILE_LIST_ID list_id 
)
static

Definition at line 1281 of file query_evaluator.c.

References eval_sub_multi_set_to_sort_list().

Referenced by eval_multi_set_to_sort_list(), and eval_sort_list_to_multi_set().

Here is the caller graph for this function:

static DB_LOGICAL eval_le_sort_list_to_multi_set ( THREAD_ENTRY thread_p,
QFILE_LIST_ID list_id,
DB_SET set 
)
static

Definition at line 1314 of file query_evaluator.c.

References eval_sub_sort_list_to_multi_set().

Referenced by eval_multi_set_to_sort_list(), and eval_sort_list_to_multi_set().

Here is the caller graph for this function:

static DB_LOGICAL eval_le_sort_list_to_sort_list ( THREAD_ENTRY thread_p,
QFILE_LIST_ID list_id1,
QFILE_LIST_ID list_id2 
)
static

Definition at line 1387 of file query_evaluator.c.

References eval_sub_sort_list_to_sort_list().

Referenced by eval_sort_list_to_sort_list().

Here is the caller graph for this function:

static DB_LOGICAL eval_logical_result ( DB_LOGICAL  res1,
DB_LOGICAL  res2 
)
static
static DB_LOGICAL eval_lt_multi_set_to_sort_list ( THREAD_ENTRY thread_p,
DB_SET set,
QFILE_LIST_ID list_id 
)
static

Definition at line 1295 of file query_evaluator.c.

References eval_logical_result(), eval_ne_multi_set_to_sort_list(), and eval_sub_multi_set_to_sort_list().

Referenced by eval_multi_set_to_sort_list(), and eval_sort_list_to_multi_set().

Here is the caller graph for this function:

static DB_LOGICAL eval_lt_sort_list_to_multi_set ( THREAD_ENTRY thread_p,
QFILE_LIST_ID list_id,
DB_SET set 
)
static

Definition at line 1328 of file query_evaluator.c.

References eval_logical_result(), eval_ne_multi_set_to_sort_list(), and eval_sub_sort_list_to_multi_set().

Referenced by eval_multi_set_to_sort_list(), and eval_sort_list_to_multi_set().

Here is the caller graph for this function:

static DB_LOGICAL eval_lt_sort_list_to_sort_list ( THREAD_ENTRY thread_p,
QFILE_LIST_ID list_id1,
QFILE_LIST_ID list_id2 
)
static

Definition at line 1402 of file query_evaluator.c.

References eval_logical_result(), eval_ne_sort_list_to_sort_list(), and eval_sub_sort_list_to_sort_list().

Referenced by eval_sort_list_to_sort_list().

Here is the caller graph for this function:

static DB_LOGICAL eval_multi_set_to_sort_list ( THREAD_ENTRY thread_p,
DB_SET set,
QFILE_LIST_ID list_id,
REL_OP  rel_operator 
)
static
static DB_LOGICAL eval_ne_multi_set_to_sort_list ( THREAD_ENTRY thread_p,
DB_SET set,
QFILE_LIST_ID list_id 
)
static
static DB_LOGICAL eval_ne_sort_list_to_sort_list ( THREAD_ENTRY thread_p,
QFILE_LIST_ID list_id1,
QFILE_LIST_ID list_id2 
)
static

Definition at line 1369 of file query_evaluator.c.

References eval_eq_sort_list_to_sort_list(), and eval_negative().

Referenced by eval_lt_sort_list_to_sort_list(), and eval_sort_list_to_sort_list().

Here is the caller graph for this function:

static DB_LOGICAL eval_negative ( DB_LOGICAL  res)
static

Definition at line 93 of file query_evaluator.c.

References V_FALSE, and V_TRUE.

Referenced by eval_all_eval(), eval_all_list_eval(), eval_ne_multi_set_to_sort_list(), eval_ne_sort_list_to_sort_list(), and eval_pred().

Here is the caller graph for this function:

DB_LOGICAL eval_pred ( THREAD_ENTRY thread_p,
const PRED_EXPR pr,
val_descr vd,
OID obj_oid 
)

Definition at line 1650 of file query_evaluator.c.

References ARG_FILE_LINE, B_AND, B_IS, B_IS_NOT, B_OR, B_XOR, cubxasl::pred::bool_op, CHECK_REGU_VARIABLE_XASL_STATUS, db_get_set(), db_set_size(), db_string_like(), DB_TYPE_UNKNOWN, DB_VALUE_DOMAIN_TYPE, db_value_is_null(), DB_VALUE_TYPE, cubxasl::alsm_eval_term::elem, cubxasl::alsm_eval_term::elemset, cubxasl::alsm_eval_term::eq_flag, ER_ERROR_SEVERITY, ER_MAX_RECURSION_SQL_DEPTH, ER_QPROC_INVALID_DATATYPE, er_set(), cubxasl::like_eval_term::esc_char, cubxasl::eval_term::et, cubxasl::eval_term::et_alsm, cubxasl::eval_term::et_comp, cubxasl::eval_term::et_like, cubxasl::eval_term::et_type, eval_all_eval(), eval_all_list_eval(), eval_negative(), eval_pred(), eval_pred_comp1(), eval_pred_rlike7(), eval_set_list_cmp(), eval_some_eval(), eval_some_list_eval(), eval_value_rel_cmp(), EXECUTE_REGU_VARIABLE_XASL, F_ALL, fetch_peek_dbval(), cubxasl::pred::lhs, cubxasl::comp_eval_term::lhs, qfile_sorted_list_id::list_id, cubxasl::pred_expr::m_eval_term, cubxasl::pred_expr::m_not_term, cubxasl::pred_expr::m_pred, NO_ERROR, NULL, cubxasl::like_eval_term::pattern, cubxasl::pred_expr::pe, prm_get_integer_value(), PRM_ID_MAX_RECURSION_SQL_DEPTH, R_EQ_TORDER, R_EXISTS, R_NULL, R_NULLSAFE_EQ, cubxasl::comp_eval_term::rel_op, cubxasl::alsm_eval_term::rel_op, cubxasl::pred::rhs, cubxasl::comp_eval_term::rhs, set_size(), cubxasl::like_eval_term::src, regu_variable_node::regu_data_value::srlist_id, T_ALSM_EVAL_TERM, T_COMP_EVAL_TERM, T_EVAL_TERM, T_LIKE_EVAL_TERM, T_NOT_TERM, T_PRED, T_RLIKE_EVAL_TERM, thread_dec_recursion_depth(), thread_get_recursion_depth(), thread_inc_recursion_depth(), TP_IS_SET_TYPE, qfile_list_id::tuple_cnt, cubxasl::pred_expr::type, regu_variable_node::type, TYPE_LIST_ID, V_ERROR, V_FALSE, V_TRUE, V_UNKNOWN, and regu_variable_node::value.

Referenced by eval_fnc(), eval_pred(), fetch_peek_arith(), qexec_end_buildvalueblock_iterations(), qexec_eval_grbynum_pred(), qexec_eval_instnum_pred(), qexec_eval_ordbynum_pred(), qexec_execute_connect_by(), qexec_execute_duplicate_key_update(), qexec_execute_insert(), qexec_execute_obj_fetch(), qexec_execute_scan(), qexec_execute_update(), qexec_gby_finalize_group(), qexec_intprt_fnc(), qexec_iterate_connect_by_results(), qexec_merge_fnc(), qexec_merge_list_outer(), and qexec_update_connect_by_lists().

Here is the caller graph for this function:

static DB_LOGICAL eval_some_eval ( DB_VALUE item,
DB_SET set,
REL_OP  rel_operator 
)
static

Definition at line 337 of file query_evaluator.c.

References eval_value_rel_cmp(), i, NO_ERROR, NULL, pr_clear_value(), PRIM_SET_NULL(), set_get_element(), set_size(), V_ERROR, V_FALSE, V_TRUE, and V_UNKNOWN.

Referenced by eval_all_eval(), eval_pred(), and eval_pred_alsm4().

Here is the caller graph for this function:

static DB_LOGICAL eval_sort_list_to_multi_set ( THREAD_ENTRY thread_p,
QFILE_LIST_ID list_id,
DB_SET set,
REL_OP  rel_operator 
)
static
static DB_LOGICAL eval_sort_list_to_sort_list ( THREAD_ENTRY thread_p,
QFILE_LIST_ID list_id1,
QFILE_LIST_ID list_id2,
REL_OP  rel_operator 
)
static
DB_LOGICAL update_logical_result ( THREAD_ENTRY thread_p,
DB_LOGICAL  ev_res,
int *  qualification 
)

Definition at line 2618 of file query_evaluator.c.

References assert, NULL, QPROC_NOT_QUALIFIED, QPROC_QUALIFIED, QPROC_QUALIFIED_OR_NOT, V_ERROR, V_FALSE, and V_TRUE.

Referenced by locator_mvcc_reevaluate_filters(), and scan_next_index_lookup_heap().

Here is the caller graph for this function: