53 #if !defined(SERVER_MODE) 54 #define pthread_mutex_init(a, b) 55 #define pthread_mutex_destroy(a) 56 #define pthread_mutex_lock(a) 0 57 #define pthread_mutex_unlock(a) 64 #define UT_CAST_TO_NULL_HEAP_OID(hfidp,oidp) \ 67 (oidp)->pageid = NULL_PAGEID; \ 68 (oidp)->volid = (hfidp)->vfid.volid; \ 69 (oidp)->slotid = NULL_SLOTID; \ 73 #define GET_NTH_OID(oid_setp, n) ((OID *)((OID *)(oid_setp) + (n))) 132 #if defined(SERVER_MODE) 133 static pthread_mutex_t scan_Iscan_oid_buf_list_mutex = PTHREAD_MUTEX_INITIALIZER;
139 #define SCAN_ISCAN_OID_BUF_LIST_DEFAULT_SIZE 10 161 int key_minmax,
bool is_iss,
DB_VALUE * fetched_values);
192 bool use_range_opt,
int max_size);
199 bool should_go_to_next_value);
392 bool descending_skip_key =
false;
393 bool descending_scan =
false;
452 if (descending_skip_key)
454 descending_scan = !descending_scan;
572 for (i = 0; i < scan_range_det.
key_cnt; i++)
696 int num_membuf_pages = 0;
698 if (indx_cov ==
NULL)
708 if (coverage_enabled ==
false)
749 assert (num_membuf_pages > 0);
751 if (max_key_len > 0 && num_membuf_pages > 0)
822 bool is_lower_limit_negative =
false;
869 is_lower_limit_negative =
true;
953 if (*oid_list_p ==
NULL)
961 (*oid_list_p)->oidp = (
OID *) malloc ((*oid_list_p)->capacity *
OR_OID_SIZE);
962 if ((*oid_list_p)->oidp ==
NULL)
973 (*oid_list_p)->next_list =
NULL;
974 (*oid_list_p)->max_oid_cnt = (*oid_list_p)->capacity;
975 (*oid_list_p)->oid_cnt = 0;
1005 #if defined (SERVER_MODE) 1014 if (scan_Iscan_oid_buf_list !=
NULL)
1020 if (scan_Iscan_oid_buf_list !=
NULL)
1027 scan_Iscan_oid_buf_list = scan_Iscan_oid_buf_list->
next_list;
1028 scan_Iscan_oid_buf_list_count--;
1032 (*oid_list)->next_list =
NULL;
1049 assert ((*oid_list)->capacity > 0);
1064 #if defined (SERVER_MODE) 1071 if (scan_Iscan_oid_buf_list_count <
MAX_NTRANS)
1075 scan_Iscan_oid_buf_list = oid_list;
1076 scan_Iscan_oid_buf_list_count++;
1150 int dummy_diff_column;
1151 bool dummy_dom_is_desc, dummy_next_dom_is_desc;
1153 static int coerce = (ignore_trailing_space) ? 1 : 3;
1183 NULL, &dummy_diff_column, &dummy_dom_is_desc, &dummy_next_dom_is_desc);
1263 else if (rc ==
DB_LT)
1268 else if (rc ==
DB_GT)
1287 int p1_num_index_term, p2_num_index_term;
1312 static int coerce = (ignore_trailing_space) ? 1 : 3;
1315 nextp = key_vals + 1;
1317 while (key_cnt > 1 && n < key_cnt - 1)
1327 memmove (nextp, nextp + 1,
sizeof (
KEY_VAL_RANGE) * (key_cnt - n - 2));
1352 ROP_TYPE cur_op1, cur_op2, next_op1, next_op2;
1353 ROP_TYPE cmp_1, cmp_2, cmp_3, cmp_4;
1356 cmp_1 = cmp_2 = cmp_3 = cmp_4 =
ROP_NA;
1360 while (key_cnt > 1 && cur_n < key_cnt - 1)
1366 while (next_n < key_cnt)
1371 is_mergeable =
true;
1372 cmp_1 = cmp_2 = cmp_3 = cmp_4 =
ROP_NA;
1374 if (is_mergeable ==
true)
1379 is_mergeable =
false;
1383 if (is_mergeable ==
true)
1388 is_mergeable =
false;
1392 if (is_mergeable ==
true)
1398 is_mergeable =
false;
1402 if (is_mergeable ==
true)
1408 is_mergeable =
false;
1412 if (is_mergeable ==
false)
1449 memmove (nextp, nextp + 1,
sizeof (
KEY_VAL_RANGE) * (key_cnt - next_n - 1));
1477 return ((*key_val_fn) (key_vals, key_cnt));
1503 int idx_ncols = 0, natts,
i, j;
1504 int buf_size, nullmap_size;
1505 unsigned char *bits;
1514 bool need_new_setdomain =
false;
1519 bool *has_coerced_values =
NULL;
1536 idx_setdomain = btree_domainp->
setdomain;
1538 #if !defined(NDEBUG) 1542 for (idx_dom = idx_setdomain; idx_dom !=
NULL; idx_dom = idx_dom->
next)
1558 assert (dom_ncols == idx_ncols);
1568 buf_size = nullmap_size;
1571 for (operand = func->
value.funcp->operand, idx_dom = idx_setdomain, i = 0; operand !=
NULL && idx_dom !=
NULL;
1572 operand = operand->
next, idx_dom = idx_dom->
next, i++)
1589 if (is_iss && i == 0)
1619 if (has_coerced_values ==
NULL)
1623 if (coerced_values ==
NULL)
1627 for (j = 0; j < idx_ncols; j++)
1632 has_coerced_values = (
bool *)
db_private_alloc (thread_p,
sizeof (
bool) * idx_ncols);
1633 if (has_coerced_values ==
NULL)
1637 memset (has_coerced_values, 0x0,
sizeof (
bool) * idx_ncols);
1644 need_new_setdomain =
true;
1648 has_coerced_values[
i] =
true;
1657 if (val_dom ==
NULL)
1664 need_new_setdomain =
true;
1674 for (operand = func->
value.funcp->operand, idx_dom = idx_setdomain, natts = 0;
1677 operand = operand->
next, idx_dom = idx_dom->
next, natts++)
1680 if (has_coerced_values !=
NULL && has_coerced_values[natts] ==
true)
1683 val = &coerced_values[natts];
1688 val = &fetched_values[natts];
1691 if (need_new_setdomain ==
true)
1695 if (val_dom ==
NULL)
1701 if (val_dom ==
NULL)
1705 val_dom->is_desc = idx_dom->
is_desc;
1708 if (vals_setdomain ==
NULL)
1711 vals_setdomain = val_dom;
1716 dom->next = val_dom;
1728 if (is_iss && natts == 0)
1741 buf_size += dom->type->get_index_size_of_value (val);
1745 if (need_new_setdomain ==
true)
1748 if (idx_dom !=
NULL)
1751 if (val_dom ==
NULL)
1756 dom->next = val_dom;
1767 nullmap_ptr = midxkey.
buf;
1768 key_ptr = nullmap_ptr + nullmap_size;
1770 OR_BUF_INIT (buf, key_ptr, buf_size - nullmap_size);
1772 if (nullmap_size > 0)
1774 bits = (
unsigned char *) nullmap_ptr;
1775 for (i = 0; i < nullmap_size; i++)
1777 bits[
i] = (
unsigned char) 0;
1782 for (operand = func->
value.funcp->operand, i = 0, dom = (vals_setdomain !=
NULL) ? vals_setdomain : idx_setdomain;
1783 operand !=
NULL && dom !=
NULL && (i < natts); operand = operand->
next, dom = dom->
next, i++)
1785 if (has_coerced_values !=
NULL && has_coerced_values[i] ==
true)
1788 val = &coerced_values[
i];
1793 val = &fetched_values[
i];
1798 if (is_iss && i == 0)
1812 dom->type->index_writeval (&buf, val);
1819 midxkey.
size = buf_size;
1822 if (vals_setdomain !=
NULL)
1834 midxkey.
domain = btree_domainp;
1849 if (has_coerced_values)
1867 if (vals_setdomain !=
NULL)
1869 for (dom = vals_setdomain; dom !=
NULL; dom = next)
1876 if (has_coerced_values)
1905 bool indexable =
true;
1907 int curr_key_prefix_length = 0;
1923 if (key_ranges->
key1)
1939 if (key_ranges->
key2)
1956 if (key_ranges->
key1)
1979 if (ret ==
NO_ERROR && curr_key_prefix_length > 0)
1985 if (key_len > curr_key_prefix_length)
1996 if (ret !=
NO_ERROR || indexable ==
false)
2004 if (key_ranges->
key2)
2028 if (ret ==
NO_ERROR && curr_key_prefix_length > 0)
2034 if (key_len > curr_key_prefix_length)
2045 if (ret !=
NO_ERROR || indexable ==
false)
2204 RANGE range, saved_range;
2206 int curr_key_prefix_length = 0;
2209 iscan_id = &s_id->
s.
isid;
2233 if (key_cnt < 1 || !key_vals || !key_ranges)
2258 if (key_vals[i].range ==
INF_INF)
2357 range = key_vals[0].
range;
2374 &iscan_id->
cls_oid, key_limit_upper, key_limit_lower,
true,
NULL);
2408 saved_range = range = key_vals[0].
range;
2417 if (key_cnt != 1 || range < GE_LE || range >
INF_INF)
2435 if (key_vals[0].is_truncated ==
true)
2440 if (range == INF_INF)
2457 key_vals[0].
range = range;
2460 &iscan_id->
cls_oid, key_limit_upper, key_limit_lower,
true,
NULL);
2467 key_vals[0].
range = saved_range;
2516 &key_filter, &iscan_id->
cls_oid, key_limit_upper, key_limit_lower,
true,
NULL);
2587 if (range < GE_LE || range > INF_INF)
2610 if (range == INF_INF)
2635 &key_filter, &iscan_id->
cls_oid, key_limit_upper, key_limit_lower,
true,
NULL);
2698 if (key_limit_upper !=
NULL && *key_limit_upper == 0)
2764 scan_id->
fixed = fixed;
2827 scan_id->
type = scan_type;
2830 scan_init_scan_id (scan_id, mvcc_select_lock_needed, scan_op_type, fixed, grouped, single_fetch, join_dbval, val_list,
2834 hsidp = &scan_id->
s.
hsid;
2840 hsidp->
hfid = *hfid;
2847 ((pr) ?
eval_fnc (thread_p, pr, &single_node_type) :
NULL));
2894 scan_id->
type = scan_type;
2898 hpsidp = &scan_id->
s.
hpsid;
2901 hpsidp->
hfid = *hfid;
2954 hsidp = &scan_id->
s.
hsid;
2959 hsidp->
hfid = *hfid;
2965 ((pr) ?
eval_fnc (thread_p, pr, &single_node_type) :
NULL));
3042 int coverage_enabled;
3043 int func_index_col_id;
3049 scan_init_scan_id (scan_id, mvcc_select_lock_needed, scan_op_type, fixed, grouped, single_fetch, join_dbval, val_list,
3053 btid = &indx_info->
btid;
3067 if (root_header ==
NULL)
3074 isidp = &scan_id->
s.
isid;
3140 coverage_enabled = (indx_info->
coverage != 0) && (scan_op_type ==
S_SELECT) && !mvcc_select_lock_needed;
3151 if (coverage_enabled)
3183 isidp->
hfid = *hfid;
3187 ((pr_key) ?
eval_fnc (thread_p, pr_key, &single_node_type) :
NULL));
3194 ((pr) ?
eval_fnc (thread_p, pr, &single_node_type) : NULL));
3201 ((pr_range) ?
eval_fnc (thread_p, pr_range, &single_node_type) : NULL));
3228 need_copy_buf =
false;
3239 need_copy_buf =
true;
3260 need_copy_buf =
true;
3391 valptr_list_node * output_val_list,
bool iscan_oid_order, QUERY_ID query_id,
3401 int func_index_col_id;
3410 btid = &indx_info->
btid;
3416 if (root_page ==
NULL)
3424 isidp = &scan_id->
s.
isid;
3494 isidp->
hfid = *hfid;
3611 idx_nsid_p = &scan_id->
s.
insid;
3620 btid = &indx_info->
btid;
3626 if (root_page == NULL)
3683 llsidp = &scan_id->
s.
llsid;
3690 ((pr) ?
eval_fnc (thread_p, pr, &single_node_type) :
NULL));
3775 int i, arg_cnt, out_cnt;
3791 stsidp = &scan_id->
s.
stsid;
3793 for (regu_var_p = arg_list, i = 0; regu_var_p; regu_var_p = regu_var_p->
next)
3802 if (arg_values ==
NULL)
3808 for (regu_var_p = arg_list, i = 0; regu_var_p; regu_var_p = regu_var_p->
next, i++)
3810 regu = ®u_var_p->
value;
3824 if (out_values ==
NULL)
3830 for (valp = val_list->
valp, i = 0; valp; valp = valp->
next, i++)
3832 out_values[
i] = valp->
val;
3850 if (arg_values != NULL)
3855 if (out_values != NULL)
3893 rvsidp = &scan_id->
s.
rvsid;
3932 ssidp = &scan_id->
s.
ssid;
3938 ((pr) ?
eval_fnc (thread_p, pr, &single_node_type) :
NULL));
3968 ((pr) ?
eval_fnc (thread_p, pr, &single_node_type) :
NULL));
4029 switch (scan_id->
type)
4033 hsidp = &scan_id->
s.
hsid;
4038 if (mvcc_snapshot ==
NULL)
4100 hsidp = &scan_id->
s.
hsid;
4125 isidp = &scan_id->
s.
isid;
4129 if (mvcc_snapshot ==
NULL)
4214 isidp = &scan_id->
s.
isid;
4230 insidp = &scan_id->
s.
insid;
4244 llsidp = &scan_id->
s.
llsid;
4261 rvsidp = &scan_id->
s.
rvsid;
4268 for (list_node = rvsidp->
regu_list; list_node; list_node = list_node->
next)
4270 regu_value_list = list_node->
value.value.reguval_list;
4278 ssidp = &scan_id->
s.
ssid;
4283 jtidp = &scan_id->
s.
jtid;
4605 if (scan_id ==
NULL)
4615 switch (scan_id->
type)
4619 hsidp = &scan_id->
s.
hsid;
4654 isidp = &scan_id->
s.
isid;
4665 for (i = 0; i < isidp->
key_cnt; i++)
4678 llsidp = &scan_id->
s.
llsid;
4688 rvsidp = &scan_id->
s.
rvsid;
4692 ssidp = &scan_id->
s.
ssid;
4697 jtidp = &scan_id->
s.
jtid;
4698 jtidp->
end (thread_p);
4730 switch (scan_id->
type)
4740 isidp = &scan_id->
s.
isid;
4847 llsidp = &scan_id->
s.
llsid;
4854 printf (
"temp file : tuple count = %d, file_size = %dK\n", llsidp->
list_id->
tuple_cnt,
4875 stsidp = &scan_id->
s.
stsid;
4933 bool should_go_to_next_value)
4962 if (isidp->
iss.
use && should_go_to_next_value)
4986 should_go_to_next_value =
true;
5011 UINT64 old_fetches = 0, old_ioreads = 0;
5024 switch (scan_id->
type)
5121 OID current_oid, *p_current_oid =
NULL;
5131 hsidp = &scan_id->
s.
hsid;
5134 p_current_oid = ¤t_oid;
5145 is_peeking = scan_id->
fixed;
5239 goto restart_scan_oid;
5285 upd_reev.
init (*scan_id);
5366 #if defined (SERVER_MODE) 5415 goto restart_scan_oid;
5437 goto restart_scan_oid;
5454 goto restart_scan_oid;
5475 goto restart_scan_oid;
5499 hpsidp = &scan_id->
s.
hpsid;
5531 else if (ev_res !=
V_TRUE)
5568 hsidp = &scan_id->
s.
hsid;
5671 isidp = &scan_id->
s.
isid;
5837 bool go_to_next_iss_value;
5949 return lookup_status;
6020 if (scan_id->
fixed ==
false)
6063 else if (ev_res !=
V_TRUE)
6074 upd_reev.
init (*scan_id);
6117 if (sp_scan ==
S_END)
6124 btid = &indx_infop->
btid;
6126 class_name_p =
NULL;
6141 (indx_name_p) ? indx_name_p :
"*UNKNOWN-INDEX*", (class_name_p) ? class_name_p :
"*UNKNOWN-CLASS*",
6263 isidp = &scan_id->
s.
isid;
6283 else if (ev_res !=
V_TRUE)
6318 insidp = &scan_id->
s.
insid;
6336 else if (ev_res !=
V_TRUE)
6369 llsidp = &scan_id->
s.
llsid;
6478 rvsidp = &scan_id->
s.
rvsid;
6485 for (i = 0, list_node = rvsidp->
regu_list; list_node; ++i, list_node = list_node->
next)
6487 regu_value_list = list_node->
value.value.reguval_list;
6488 if (regu_value_list ==
NULL)
6541 stsidp = &scan_id->
s.
stsid;
6635 ssidp = &scan_id->
s.
ssid;
6644 for (ptr = func->
value.funcp->operand; ptr; ptr = ptr->
next)
6761 vaidp = &scan_id->
s.
vaid;
6768 if (qp_scan ==
S_END)
6780 for (src_valp = vl.
valp, dest_valp = scan_id->
val_list->
valp; src_valp && dest_valp;
6781 src_valp = src_valp->
next, dest_valp = dest_valp->
next)
6830 result = (*next_scan) (thread_p, s_id);
6856 result = (*next_scan) (thread_p, s_id);
6863 if (result ==
S_END)
6888 result = (*next_scan) (thread_p, s_id);
6911 result = (*next_scan) (thread_p, s_id);
6918 if (result ==
S_END)
6939 if (result ==
S_END)
6985 switch (scan_id->
type)
6988 llsidp = &scan_id->
s.
llsid;
7073 if (qp_scan ==
S_END)
7146 if (qp_scan ==
S_END)
7239 if (qp_scan ==
S_END)
7258 scan_Iscan_oid_buf_list =
NULL;
7259 scan_Iscan_oid_buf_list_count = 0;
7265 new_oid_list =
NULL;
7282 scan_Iscan_oid_buf_list = new_oid_list;
7283 scan_Iscan_oid_buf_list_count++;
7298 while (scan_Iscan_oid_buf_list !=
NULL)
7304 scan_Iscan_oid_buf_list = oid_list_p->
next_list;
7311 scan_Iscan_oid_buf_list_count = 0;
7326 for (i = 0, j = key_cnt - 1; i < j; i++, j--)
7329 key_vals[
i] = key_vals[j];
7364 int pos = scan_regu->
value.value.pos_descr.pos_no;
7367 assert (pos < llsidp->list_id->type_list.type_cnt);
7376 scan_regu->
value.value.pos_descr.dom = new_dom;
7377 scan_regu->
value.domain = new_dom;
7388 int pos = scan_regu->
value.value.pos_descr.pos_no;
7391 assert (pos < llsidp->list_id->type_list.type_cnt);
7399 scan_regu->
value.value.pos_descr.dom = new_dom;
7400 scan_regu->
value.domain = new_dom;
7456 for (value_list = ref_val_list->
valp; value_list !=
NULL; value_list = value_list->
next, pos++)
7458 if (regu_var->value.dbvalptr == ref_val_list->
valp->
val)
7467 assert (pos < p_type_list->type_cnt);
7468 regu_var->domain = p_type_list->
domp[pos];
7488 if (multi_range_opt ==
NULL)
7494 multi_range_opt->
use = use_range_opt;
7495 multi_range_opt->
cnt = 0;
7499 multi_range_opt->
size = max_size;
7597 #if defined (SERVER_MODE) 7606 json_t *scan, *lookup;
7608 if (scan_id ==
NULL || scan_stats ==
NULL)
7616 switch (scan_id->
type)
7625 json_object_set_new (scan_stats,
"heap", scan);
7629 json_object_set_new (scan_stats,
"temp", scan);
7637 json_object_set_new (scan_stats,
"btree", scan);
7641 json_object_set_new (scan_stats,
"covered", json_true ());
7648 json_object_set_new (scan_stats,
"lookup", lookup);
7653 json_object_set_new (scan_stats,
"mro", json_true ());
7658 json_object_set_new (scan_stats,
"iss", json_true ());
7663 json_object_set_new (scan_stats,
"loose", json_true ());
7668 json_object_set_new (scan_stats,
"show", scan);
7672 json_object_set_new (scan_stats,
"set", scan);
7676 json_object_set_new (scan_stats,
"method", scan);
7680 json_object_set_new (scan_stats,
"class_attr", scan);
7684 json_object_set_new (scan_stats,
"noscan", scan);
7695 scan_print_stats_text (FILE * fp,
SCAN_ID * scan_id)
7697 if (scan_id ==
NULL)
7702 switch (scan_id->
type)
7705 fprintf (fp,
"(heap");
7709 fprintf (fp,
"(btree");
7723 fprintf (fp,
"(temp");
7728 fprintf (fp,
"(show");
7732 fprintf (fp,
"(set");
7736 fprintf (fp,
"(method");
7740 fprintf (fp,
"(class_attr");
7744 fprintf (fp,
"(noscan");
7751 switch (scan_id->
type)
7764 fprintf (fp,
", covered: true");
7769 fprintf (fp,
", mro: true");
7774 fprintf (fp,
", iss: true");
7779 fprintf (fp,
", loose: true");
7813 llsidp = &scan_id->
s.
llsid;
7845 if (new_key ==
NULL)
7869 if (new_value ==
NULL)
7901 llsidp = &scan_id->
s.
llsid;
8002 llsidp = &scan_id->
s.
llsid;
8004 scan_id_p = &llsidp->
lsid;
8027 *tuple = hvalue->
tuple;
8036 *tuple = tplrec.
tpl;
8068 *tuple = tplrec.
tpl;
8120 if (hash_list_scan_yn == 0)
8139 for (build_cnt = 0; build && probe; build_cnt++)
8152 if (vtype1 != vtype2)
8156 build = build->
next;
8157 probe = probe->
next;
8160 if (build !=
NULL || probe !=
NULL)
8164 *val_cnt = build_cnt;
static void scan_init_scan_attrs(SCAN_ATTRS *scan_attrs_p, int num_attrs, ATTR_ID *attr_ids, HEAP_CACHE_ATTRINFO *attr_cache)
QPROC_QUALIFICATION qualification
regu_variable_node * set_ptr
REGU_VALUES_SCAN_ID rvsid
int scan_initialize(void)
regu_variable_node * key1
int btree_coerce_key(DB_VALUE *keyp, int keysize, TP_DOMAIN *btree_domainp, int key_minmax)
unsigned int qdata_hash_scan_key(const void *key, unsigned int ht_size)
MIN_MAX_COLUMN_INFO min_max_val
SCAN_CODE(* QP_SCAN_FUNC)(THREAD_ENTRY *thread_p, SCAN_ID *s_id)
static int eliminate_duplicated_keys(KEY_VAL_RANGE *key_vals, int key_cnt)
int scan_open_list_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, int grouped, QPROC_SINGLE_FETCH single_fetch, DB_VALUE *join_dbval, val_list_node *val_list, VAL_DESCR *vd, QFILE_LIST_ID *list_id, regu_variable_list_node *regu_list_pred, PRED_EXPR *pr, regu_variable_list_node *regu_list_rest, regu_variable_list_node *regu_list_build, regu_variable_list_node *regu_list_probe, int hash_list_scan_yn)
int qdata_get_valptr_type_list(THREAD_ENTRY *thread_p, valptr_list_node *valptr_list_p, qfile_tuple_value_type_list *type_list_p)
#define pthread_mutex_lock(a)
void mht_destroy_hls(MHT_HLS_TABLE *ht)
HASH_SCAN_VALUE * qdata_alloc_hscan_value(cubthread::entry *thread_p, QFILE_TUPLE tpl)
SCAN_CODE heap_scanrange_next(THREAD_ENTRY *thread_p, OID *next_oid, RECDES *recdes, HEAP_SCANRANGE *scan_range, int ispeeking)
TP_DOMAIN_STATUS tp_value_coerce(const DB_VALUE *src, DB_VALUE *dest, const TP_DOMAIN *desired_domain)
void * mht_get_hls(const MHT_HLS_TABLE *ht, const void *key, void **last)
static SCAN_CODE scan_next_value_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
REGU_VALUE_ITEM * regu_list
DB_TYPE REGU_VARIABLE_GET_TYPE(const regu_variable_node *regu)
SCAN_CODE method_scan_next(THREAD_ENTRY *thread_p, METHOD_SCAN_BUFFER *scan_buffer_p, val_list_node *value_list_p)
MVCC_SNAPSHOT * logtb_get_mvcc_snapshot(THREAD_ENTRY *thread_p)
regu_variable_list_node * rest_regu_list
#define pgbuf_ordered_fix(thread_p, req_vpid, fetch_mode, requestmode, req_watcher)
DB_VALUE ** key_info_values
void scan_init_filter_info(FILTER_INFO *filter_info_p, SCAN_PRED *scan_pred, SCAN_ATTRS *scan_attrs, val_list_node *val_list, VAL_DESCR *val_descr, OID *class_oid, int btree_num_attrs, ATTR_ID *btree_attr_ids, int *num_vstr_ptr, ATTR_ID *vstr_ids)
METHOD_SCAN_BUFFER scan_buf
static SCAN_CODE scan_next_index_lookup_heap(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, INDX_SCAN_ID *isidp, FILTER_INFO *data_filter, TRAN_ISOLATION isolation)
HASH_SCAN_KEY * qdata_alloc_hscan_key(cubthread::entry *thread_p, int val_cnt, bool alloc_vals)
QFILE_TUPLE_POSITION ls_tplpos
REGU_VARIABLE_LIST operand
DB_MIDXKEY * db_get_midxkey(const DB_VALUE *value)
BTREE_ISCAN_OID_LIST * next_list
SCAN_OPERATION_TYPE scan_op_type
DB_VALUE_COMPARE_RESULT tp_value_compare(const DB_VALUE *value1, const DB_VALUE *value2, int allow_coercion, int total_order)
struct qmgr_temp_file * tfile_vfid
regu_variable_node * key_limit_u
SCAN_CODE heap_scanrange_to_prior(THREAD_ENTRY *thread_p, HEAP_SCANRANGE *scan_range, OID *last_oid)
static void scan_free_oid_list(BTREE_ISCAN_OID_LIST *oid_list_p)
#define IDX_COV_DEFAULT_TUPLES
QFILE_TUPLE_VALUE_TYPE_LIST type_list
void end(cubthread::entry *thread_p)
DB_BIGINT key_limit_lower
#define ISCAN_OID_BUFFER_COUNT
#define QFILE_FREE_AND_INIT_LIST_ID(list_id)
valptr_list_node * output_val_list
static int scan_save_range_details(INDX_SCAN_ID *isidp_src, ISS_RANGE_DETAILS *rdp_dest)
HASH_SCAN_KEY * qdata_copy_hscan_key_without_alloc(cubthread::entry *thread_p, HASH_SCAN_KEY *key, REGU_VARIABLE_LIST probe_regu_list, HASH_SCAN_KEY *new_key)
void LSA_COPY(log_lsa *plsa1, const log_lsa *plsa2)
QFILE_TUPLE_VALUE_TYPE_LIST * type_list
SCAN_CODE heap_get_visible_version(THREAD_ENTRY *thread_p, const OID *oid, OID *class_oid, RECDES *recdes, HEAP_SCANCACHE *scan_cache, int ispeeking, int old_chn)
DB_VALUE ** cache_page_info
HASH_SCAN_VALUE * qdata_alloc_hscan_value_OID(cubthread::entry *thread_p, QFILE_LIST_SCAN_ID *scan_id_p)
QFILE_TUPLE_SIMPLE_POS * pos
void qdata_free_hscan_key(cubthread::entry *thread_p, HASH_SCAN_KEY *key, int val_count)
int scan_open_heap_page_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, val_list_node *val_list, VAL_DESCR *vd, OID *cls_oid, HFID *hfid, PRED_EXPR *pr, SCAN_TYPE scan_type, DB_VALUE **cache_page_info, regu_variable_list_node *regu_list_page_info)
BTREE_ROOT_HEADER * btree_get_root_header(THREAD_ENTRY *thread_p, PAGE_PTR page_ptr)
bool mvcc_is_mvcc_disabled_class(const OID *class_oid)
struct tp_domain * setdomain
SCAN_CODE qfile_scan_list_next(THREAD_ENTRY *thread_p, QFILE_LIST_SCAN_ID *scan_id_p, QFILE_TUPLE_RECORD *tuple_record_p, int peek)
#define SCAN_IS_INDEX_COVERED(iscan_id_p)
void set_filters(upddel_mvcc_cond_reeval &ureev)
#define OR_BUF_INIT(buf, data, size)
MULTI_RANGE_OPT multi_range_opt
#define ER_QPROC_INVALID_XASLNODE
static int check_key_vals(KEY_VAL_RANGE *key_vals, int key_cnt, QPROC_KEY_VAL_FU *chk_fn)
int btree_glean_root_header_info(THREAD_ENTRY *thread_p, BTREE_ROOT_HEADER *root_header, BTID_INT *btid)
int btree_attrinfo_read_dbvalues(THREAD_ENTRY *thread_p, DB_VALUE *curr_key, int *btree_att_ids, int btree_num_att, HEAP_CACHE_ATTRINFO *attr_info, int func_index_col_id)
void set_value_descriptor(val_descr *vd)
#define assert_release(e)
void scan_init_index_scan(INDX_SCAN_ID *isidp, struct btree_iscan_oid_list *oid_list, MVCC_SNAPSHOT *mvcc_snapshot)
int fetch_copy_dbval(THREAD_ENTRY *thread_p, REGU_VARIABLE *regu_var, val_descr *vd, OID *class_oid, OID *obj_oid, QFILE_TUPLE tpl, DB_VALUE *dbval)
DB_BIGINT key_limit_upper
union regu_variable_node::regu_data_value value
int lock_object(THREAD_ENTRY *thread_p, const OID *oid, const OID *class_oid, LOCK lock, int cond_flag)
SCAN_CODE locator_lock_and_get_object_with_evaluation(THREAD_ENTRY *thread_p, OID *oid, OID *class_oid, RECDES *recdes, HEAP_SCANCACHE *scan_cache, int ispeeking, int old_chn, MVCC_REEV_DATA *mvcc_reev_data, NON_EXISTENT_HANDLING non_ex_handling_type)
#define ER_LC_INCONSISTENT_BTREE_ENTRY_TYPE2
QFILE_TUPLE_RECORD * tplrec
void set_scan_reevaluation(mvcc_scan_reev_data &scan)
bool oid_is_serial(const OID *oid)
struct timeval TSCTIMEVAL
#define OID_SET_NULL(oidp)
int tp_value_coerce_strict(const DB_VALUE *src, DB_VALUE *dest, const TP_DOMAIN *desired_domain)
#define GET_NTH_OID(oid_setp, n)
DB_LOGICAL(* PR_EVAL_FNC)(THREAD_ENTRY *thread_p, const PRED_EXPR *, val_descr *, OID *)
DISK_ISVALID not_vacuumed_res
SCAN_CODE qproc_next_set_scan(THREAD_ENTRY *thread_p, SCAN_ID *s_id)
TP_DOMAIN * tp_domain_resolve_value(const DB_VALUE *val, TP_DOMAIN *dbuf)
DB_VALUE ** cache_recordinfo
static SCAN_CODE scan_next_json_table_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
static SCAN_CODE scan_hash_probe_next(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, QFILE_TUPLE *tuple)
#define TP_IS_STRING_TYPE(typeid)
void tsc_elapsed_time_usec(TSCTIMEVAL *tv, TSC_TICKS end_tick, TSC_TICKS start_tick)
static int scan_alloc_oid_list(BTREE_ISCAN_OID_LIST **oid_list_p)
TP_DOMAIN * tp_domain_copy(const TP_DOMAIN *domain, bool check_cache)
int mht_dump_hls(THREAD_ENTRY *thread_p, FILE *out_fp, const MHT_HLS_TABLE *ht, const int print_id_opt, int(*print_func)(THREAD_ENTRY *thread_p, FILE *fp, const void *data, void *args), void *func_args)
int qdata_copy_valptr_list_to_tuple(THREAD_ENTRY *thread_p, valptr_list_node *valptr_list_p, val_descr *val_desc_p, qfile_tuple_record *tuple_record_p)
void qdata_set_value_list_to_null(val_list_node *val_list_p)
#define OR_MULTI_BOUND_BIT_BYTES(count)
static int scan_dbvals_to_midxkey(THREAD_ENTRY *thread_p, DB_VALUE *retval, bool *indexal, TP_DOMAIN *btree_domainp, int num_term, REGU_VARIABLE *func, VAL_DESCR *vd, int key_minmax, bool is_iss, DB_VALUE *fetched_values)
void scan_end_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
int qdata_free_hscan_entry(const void *key, void *data, void *args)
static void resolve_domain_on_regu_operand(REGU_VARIABLE *regu_var, val_list_node *ref_val_list, QFILE_TUPLE_VALUE_TYPE_LIST *p_type_list)
static SCAN_CODE scan_next_class_attr_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
void lock_unlock_object_donot_move_to_non2pl(THREAD_ENTRY *thread_p, const OID *oid, const OID *class_oid, LOCK lock)
int QPROC_KEY_VAL_FU(KEY_VAL_RANGE *key_vals, int key_cnt)
TRAN_ISOLATION logtb_find_isolation(int tran_index)
static int scan_init_index_key_limit(THREAD_ENTRY *thread_p, INDX_SCAN_ID *isidp, KEY_INFO *key_infop, VAL_DESCR *vd)
bool thread_is_on_trace(cubthread::entry *thread_p)
enum tp_domain_status TP_DOMAIN_STATUS
static void rop_to_range(RANGE *range, ROP_TYPE left, ROP_TYPE right)
bool heap_does_exist(THREAD_ENTRY *thread_p, OID *class_oid, const OID *oid)
static void resolve_domains_on_list_scan(LLIST_SCAN_ID *llsidp, val_list_node *ref_val_list)
int heap_scancache_end(THREAD_ENTRY *thread_p, HEAP_SCANCACHE *scan_cache)
bool mvcc_select_lock_needed
#define COPY_OID(dest_oid_ptr, src_oid_ptr)
int btree_range_scan_select_visible_oids(THREAD_ENTRY *thread_p, BTREE_SCAN *bts)
int scan_open_index_key_info_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, val_list_node *val_list, VAL_DESCR *vd, indx_info *indx_info, OID *cls_oid, HFID *hfid, PRED_EXPR *pr, valptr_list_node *output_val_list, bool iscan_oid_order, QUERY_ID query_id, DB_VALUE **key_info_values, regu_variable_list_node *key_info_regu_list)
SCAN_CODE heap_next_record_info(THREAD_ENTRY *thread_p, const HFID *hfid, OID *class_oid, OID *next_oid, RECDES *recdes, HEAP_SCANCACHE *scan_cache, int ispeeking, DB_VALUE **cache_recordinfo)
mht_hls_table * hash_table
#define pgbuf_unfix_and_init(thread_p, pgptr)
static SCAN_CODE scan_next_heap_page_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
static void scan_init_scan_id(SCAN_ID *scan_id, bool force_select_lock, SCAN_OPERATION_TYPE scan_op_type, int fixed, int grouped, QPROC_SINGLE_FETCH single_fetch, DB_VALUE *join_dbval, val_list_node *val_list, VAL_DESCR *vd)
#define ER_QPROC_INVALID_CRSPOS
int heap_scancache_start(THREAD_ENTRY *thread_p, HEAP_SCANCACHE *scan_cache, const HFID *hfid, const OID *class_oid, int cache_last_fix_page, int is_indexscan, MVCC_SNAPSHOT *mvcc_snapshot)
regu_variable_list_node * regu_list
#define MAKE_TUPLE_POSTION(tuple_pos, simple_pos, scan_id_p)
UINT64 prm_get_bigint_value(PARAM_ID prm_id)
#define BTREE_NODE_SCAN_INIT(bns)
enum hash_method HASH_METHOD
void qfile_end_scan_fix(THREAD_ENTRY *thread_p, QFILE_LIST_SCAN_ID *scan_id_p)
static int scan_dump_key_into_tuple(THREAD_ENTRY *thread_p, INDX_SCAN_ID *iscan_id, DB_VALUE *key, OID *oid, QFILE_TUPLE_RECORD *tplrec)
int heap_attrinfo_start(THREAD_ENTRY *thread_p, const OID *class_oid, int requested_num_attrs, const ATTR_ID *attrids, HEAP_CACHE_ATTRINFO *attr_info)
static SCAN_CODE scan_next_index_key_info_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
#define RECDES_INITIALIZER
int qmgr_get_temp_file_membuf_pages(QMGR_TEMP_FILE *temp_file_p)
TP_DOMAIN * tp_domain_resolve_default(DB_TYPE type)
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
SCAN_CODE scan_reset_scan_block(THREAD_ENTRY *thread_p, SCAN_ID *s_id)
QPROC_QUALIFICATION * qualification
#define ER_QPROC_INVALID_PARAMETER
SCAN_CODE qfile_scan_list_prev(THREAD_ENTRY *thread_p, QFILE_LIST_SCAN_ID *scan_id_p, QFILE_TUPLE_RECORD *tuple_record_p, int peek)
static int scan_regu_key_to_index_key(THREAD_ENTRY *thread_p, KEY_RANGE *key_ranges, KEY_VAL_RANGE *key_val_range, INDX_SCAN_ID *iscan_id, TP_DOMAIN *btree_domainp, VAL_DESCR *vd)
int qdata_print_hash_scan_entry(THREAD_ENTRY *thread_p, FILE *fp, const void *data, void *args)
SCAN_CODE heap_page_prev(THREAD_ENTRY *thread_p, const OID *class_oid, const HFID *hfid, VPID *prev_vpid, DB_VALUE **cache_pageinfo)
HEAP_SCANCACHE scan_cache
int scan_open_showstmt_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, int grouped, QPROC_SINGLE_FETCH single_fetch, DB_VALUE *join_dbval, val_list_node *val_list, VAL_DESCR *vd, PRED_EXPR *pr, SHOWSTMT_TYPE show_type, regu_variable_list_node *arg_list)
bool pgbuf_check_page_ptype(THREAD_ENTRY *thread_p, PAGE_PTR pgptr, PAGE_TYPE ptype)
#define OR_ENABLE_BOUND_BIT(bitptr, element)
key_range * skipped_range
regu_variable_list_node * key_info_regu_list
HENTRY_HLS_PTR curr_hash_entry
int heap_scanrange_start(THREAD_ENTRY *thread_p, HEAP_SCANRANGE *scan_range, const HFID *hfid, const OID *class_oid, MVCC_SNAPSHOT *mvcc_snapshot)
#define SCAN_ISCAN_OID_BUF_LIST_DEFAULT_SIZE
#define OID_IS_ROOTOID(oidp)
LOG_LSA * pgbuf_get_lsa(PAGE_PTR pgptr)
bool scan_immediately_stop
#define pthread_mutex_unlock(a)
int tp_domain_status_er_set(TP_DOMAIN_STATUS status, const char *file_name, const int line_no, const DB_VALUE *src, const TP_DOMAIN *domain)
static SCAN_CODE scan_next_scan_local(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
int scan_open_method_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, int grouped, QPROC_SINGLE_FETCH single_fetch, DB_VALUE *join_dbval, val_list_node *val_list, VAL_DESCR *vd, QFILE_LIST_ID *list_id, method_sig_list *meth_sig_list)
void scan_save_scan_pos(SCAN_ID *s_id, SCAN_POS *scan_pos)
void qfile_destroy_list(THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id_p)
static int scan_Iscan_oid_buf_list_count
regu_variable_list_node * regu_list
#define ER_OUT_OF_VIRTUAL_MEMORY
hash_scan_key * temp_new_key
#define UT_CAST_TO_NULL_HEAP_OID(hfidp, oidp)
TRAN_ISOLATION logtb_find_current_isolation(THREAD_ENTRY *thread_p)
union cubxasl::pred_expr::@185 pe
int fetch_peek_dbval(THREAD_ENTRY *thread_p, REGU_VARIABLE *regu_var, val_descr *vd, OID *class_oid, OID *obj_oid, QFILE_TUPLE tpl, DB_VALUE **peek_dbval)
RANGE_OPT_ITEM ** top_n_items
#define DB_VALUE_DOMAIN_TYPE(value)
int scan_open_set_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, int grouped, QPROC_SINGLE_FETCH single_fetch, DB_VALUE *join_dbval, val_list_node *val_list, VAL_DESCR *vd, REGU_VARIABLE *set_ptr, regu_variable_list_node *regu_list_pred, PRED_EXPR *pr)
struct function_node * funcp
void qfile_save_current_scan_tuple_position(QFILE_LIST_SCAN_ID *scan_id_p, QFILE_TUPLE_POSITION *tuple_position_p)
regu_variable_list_node * regu_val_list
int lock_hold_object_instant(THREAD_ENTRY *thread_p, const OID *oid, const OID *class_oid, LOCK lock)
struct timeval elapsed_hash_build
int n_oids_read_last_iteration
int scan_open_class_attr_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, int grouped, QPROC_SINGLE_FETCH single_fetch, DB_VALUE *join_dbval, val_list_node *val_list, VAL_DESCR *vd, OID *cls_oid, HFID *hfid, regu_variable_list_node *regu_list_pred, PRED_EXPR *pr, regu_variable_list_node *regu_list_rest, int num_attrs_pred, ATTR_ID *attrids_pred, HEAP_CACHE_ATTRINFO *cache_pred, int num_attrs_rest, ATTR_ID *attrids_rest, HEAP_CACHE_ATTRINFO *cache_rest)
struct rop_range_struct rop_range_table[]
SCAN_CODE scan_next_scan_block(THREAD_ENTRY *thread_p, SCAN_ID *s_id)
int heap_attrinfo_read_dbvalues(THREAD_ENTRY *thread_p, const OID *inst_oid, RECDES *recdes, HEAP_SCANCACHE *scan_cache, HEAP_CACHE_ATTRINFO *attr_info)
#define TP_DOMAIN_TYPE(dom)
static void range_to_rop(ROP_TYPE *left, ROP_TYPE *rightk, RANGE range)
SCAN_CODE qfile_jump_scan_tuple_position(THREAD_ENTRY *thread_p, QFILE_LIST_SCAN_ID *scan_id_p, QFILE_TUPLE_POSITION *tuple_position_p, QFILE_TUPLE_RECORD *tuple_record_p, int peek)
#define BTREE_RESET_SCAN(bts)
SCAN_CODE btree_get_next_node_info(THREAD_ENTRY *thread_p, BTID *btid, BTREE_NODE_SCAN *btns, DB_VALUE **node_info)
int scan_open_values_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, int grouped, QPROC_SINGLE_FETCH single_fetch, DB_VALUE *join_dbval, val_list_node *val_list, VAL_DESCR *vd, valptr_list_node *valptr_list)
int db_string_truncate(DB_VALUE *value, const int precision)
#define ER_QPROC_UNKNOWN_CRSPOS
HEAP_SCANCACHE scan_cache
int scan_init_iss(INDX_SCAN_ID *isidp)
void tsc_getticks(TSC_TICKS *tck)
static SCAN_CODE scan_next_method_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
static int scan_init_indx_coverage(THREAD_ENTRY *thread_p, int coverage_enabled, valptr_list_node *output_val_list, regu_variable_list_node *regu_val_list, VAL_DESCR *vd, QUERY_ID query_id, int max_key_len, int func_index_col_id, INDX_COV *indx_cov)
TP_DOMAIN * tp_domain_cache(TP_DOMAIN *transient)
#define db_private_free_and_init(thrd, ptr)
void PRIM_SET_NULL(DB_VALUE *value)
const void * mht_put_hls(MHT_HLS_TABLE *ht, const void *key, void *data)
int scan_open_index_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, bool mvcc_select_lock_needed, SCAN_OPERATION_TYPE scan_op_type, int fixed, int grouped, QPROC_SINGLE_FETCH single_fetch, DB_VALUE *join_dbval, val_list_node *val_list, VAL_DESCR *vd, indx_info *indx_info, OID *cls_oid, HFID *hfid, regu_variable_list_node *regu_list_key, PRED_EXPR *pr_key, regu_variable_list_node *regu_list_pred, PRED_EXPR *pr, regu_variable_list_node *regu_list_rest, PRED_EXPR *pr_range, regu_variable_list_node *regu_list_range, valptr_list_node *output_val_list, regu_variable_list_node *regu_val_list, int num_attrs_key, ATTR_ID *attrids_key, HEAP_CACHE_ATTRINFO *cache_key, int num_attrs_pred, ATTR_ID *attrids_pred, HEAP_CACHE_ATTRINFO *cache_pred, int num_attrs_rest, ATTR_ID *attrids_rest, HEAP_CACHE_ATTRINFO *cache_rest, int num_attrs_range, ATTR_ID *attrids_range, HEAP_CACHE_ATTRINFO *cache_range, bool iscan_oid_order, QUERY_ID query_id)
#define pgbuf_fix(thread_p, vpid, fetch_mode, requestmode, condition)
#define ISCAN_OID_BUFFER_CAPACITY
unsigned char is_max_string
int btree_prepare_bts(THREAD_ENTRY *thread_p, BTREE_SCAN *bts, BTID *btid, INDX_SCAN_ID *index_scan_id_p, key_val_range *kv_range, FILTER_INFO *filter, const OID *match_class_oid, DB_BIGINT *key_limit_upper, DB_BIGINT *key_limit_lower, bool need_to_check_null, void *bts_other)
#define db_private_alloc(thrd, size)
PGBUF_WATCHER page_watcher
SCAN_CODE scan_jump_scan_pos(THREAD_ENTRY *thread_p, SCAN_ID *s_id, SCAN_POS *scan_pos)
int pr_midxkey_get_element_nocopy(const DB_MIDXKEY *midxkey, int index, DB_VALUE *value, int *prev_indexp, char **prev_ptrp)
QFILE_LIST_SCAN_ID * lsid
need_clear_type need_clear
REGU_VALUE_ITEM * current_value
void btree_scan_clear_key(BTREE_SCAN *btree_scan)
TP_DOMAIN ** sort_col_dom
int count(int &result, const cub_regex_object ®, const std::string &src, const int position, const INTL_CODESET codeset)
int pr_clear_value(DB_VALUE *value)
int qfile_open_list_scan(QFILE_LIST_ID *list_id_p, QFILE_LIST_SCAN_ID *scan_id_p)
void heap_scanrange_end(THREAD_ENTRY *thread_p, HEAP_SCANRANGE *scan_range)
SCAN_CODE heap_scanrange_to_following(THREAD_ENTRY *thread_p, HEAP_SCANRANGE *scan_range, OID *start_oid)
DB_BIGINT db_get_bigint(const DB_VALUE *value)
QFILE_TUPLE_RECORD tplrec
void pgbuf_get_vpid(PAGE_PTR pgptr, VPID *vpid)
DB_LOGICAL update_logical_result(THREAD_ENTRY *thread_p, DB_LOGICAL ev_res, int *qualification)
int scan_open_json_table_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, int grouped, QPROC_SINGLE_FETCH single_fetch, DB_VALUE *join_dbval, val_list_node *val_list, VAL_DESCR *vd, PRED_EXPR *pr)
#define OR_CLEAR_BOUND_BIT(bitptr, element)
regu_variable_list_node * operand
void init(scan_id_struct &sid)
#define TP_IS_CHAR_TYPE(typeid)
regu_variable_list_node * rest_regu_list
int showstmt_start_scan(THREAD_ENTRY *thread_p, SCAN_ID *s_id)
int fetch_val_list(THREAD_ENTRY *thread_p, regu_variable_list_node *regu_list, val_descr *vd, OID *class_oid, OID *obj_oid, QFILE_TUPLE tpl, int peek)
static void error(const char *msg)
void scan_close_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
#define VPID_ISNULL(vpid_ptr)
STATIC_INLINE void perfmon_inc_stat(THREAD_ENTRY *thread_p, PERF_STAT_ID psid) __attribute__((ALWAYS_INLINE))
static int scan_alloc_iscan_oid_buf_list(BTREE_ISCAN_OID_LIST **oid_list)
static SCAN_CODE scan_next_hash_list_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
static void scan_init_scan_pred(SCAN_PRED *scan_pred_p, regu_variable_list_node *regu_list, PRED_EXPR *pred_expr, PR_EVAL_FNC pr_eval_fnc)
TP_DOMAIN * tp_domain_construct(DB_TYPE domain_type, DB_OBJECT *class_obj, int precision, int scale, TP_DOMAIN *setdomain)
void qfile_close_scan(THREAD_ENTRY *thread_p, QFILE_LIST_SCAN_ID *scan_id_p)
int db_make_midxkey(DB_VALUE *value, DB_MIDXKEY *midxkey)
#define LOG_FIND_THREAD_TRAN_INDEX(thrd)
#define TSC_ADD_TIMEVAL(total, diff)
QFILE_TUPLE_RECORD * tplrecp
SCAN_PRED & get_predicate()
int pr_clone_value(const DB_VALUE *src, DB_VALUE *dest)
PR_EVAL_FNC eval_fnc(THREAD_ENTRY *thread_p, const PRED_EXPR *pr, DB_TYPE *single_node_type)
static SCAN_CODE scan_next_index_node_info_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
regu_variable_node * key2
static SCAN_CODE scan_prev_scan_local(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
int qfile_start_scan_fix(THREAD_ENTRY *thread_p, QFILE_LIST_SCAN_ID *scan_id_p)
DB_VALUE * fetched_values
MVCC_SNAPSHOT * mvcc_snapshot
regu_variable_list_node * recordinfo_regu_list
int btree_range_scan(THREAD_ENTRY *thread_p, BTREE_SCAN *bts, BTREE_RANGE_SCAN_PROCESS_KEY_FUNC *key_func)
#define free_and_init(ptr)
bool is_user_given_keylimit
static SCAN_CODE scan_next_index_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
static void scan_free_iscan_oid_buf_list(BTREE_ISCAN_OID_LIST *oid_list)
int oid_compare(const void *a, const void *b)
SCAN_CODE scan_prev_scan(THREAD_ENTRY *thread_p, SCAN_ID *s_id)
int * bt_attrs_prefix_length
int mht_clear_hls(MHT_HLS_TABLE *ht, int(*rem_func)(const void *key, void *data, void *args), void *func_args)
int scan_open_index_node_info_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, val_list_node *val_list, VAL_DESCR *vd, indx_info *indx_info, PRED_EXPR *pr, DB_VALUE **node_info_values, regu_variable_list_node *node_info_regu_list)
#define ER_HEAP_UNKNOWN_OBJECT
regu_variable_list_node * page_info_regu_list
#define BTREE_END_OF_SCAN(bts)
regu_variable_list_node * rest_regu_list
bool prm_get_bool_value(PARAM_ID prm_id)
int showstmt_end_scan(THREAD_ENTRY *thread_p, SCAN_ID *s_id)
#define QSTR_IS_ANY_CHAR_OR_BIT(s)
int pgbuf_page_has_changed(PAGE_PTR pgptr, LOG_LSA *ref_lsa)
class regu_variable_node REGU_VARIABLE
SCAN_CODE heap_prev(THREAD_ENTRY *thread_p, const HFID *hfid, OID *class_oid, OID *next_oid, RECDES *recdes, HEAP_SCANCACHE *scan_cache, int ispeeking)
regu_variable_list_node * probe_regu_list
union scan_id_struct::@153 s
static ROP_TYPE compare_val_op(DB_VALUE *val1, ROP_TYPE op1, DB_VALUE *val2, ROP_TYPE op2, int num_index_term)
static BTREE_ISCAN_OID_LIST * scan_Iscan_oid_buf_list
int scan_start_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
int next_scan(cubthread::entry *thread_p, scan_id_struct &sid, SCAN_CODE &sc)
MHT_HLS_TABLE * mht_create_hls(const char *name, int est_size, unsigned int(*hash_func)(const void *key, unsigned int ht_size), int(*cmp_func)(const void *key1, const void *key2))
int qdata_hscan_key_eq(const void *key1, const void *key2)
QFILE_LIST_ID * qfile_open_list(THREAD_ENTRY *thread_p, QFILE_TUPLE_VALUE_TYPE_LIST *type_list_p, SORT_LIST *sort_list_p, QUERY_ID query_id, int flag)
#define DB_VALUE_TYPE(value)
int db_make_null(DB_VALUE *value)
void qfile_close_list(THREAD_ENTRY *thread_p, QFILE_LIST_ID *list_id_p)
static int reverse_key_list(KEY_VAL_RANGE *key_vals, int key_cnt)
#define DB_IS_NULL(value)
static const int rop_range_table_size
DB_LOGICAL eval_data_filter(THREAD_ENTRY *thread_p, OID *oid, RECDES *recdesp, HEAP_SCANCACHE *scan_cache, FILTER_INFO *filterp)
regu_variable_list_node * build_regu_list
bool qdata_copy_db_value(DB_VALUE *dest_p, const DB_VALUE *src_p)
heap_cache_attrinfo * attr_cache
DB_VALUE ** node_info_values
HEAP_SCANRANGE scan_range
struct timeval elapsed_lookup
static int scan_get_index_oidset(THREAD_ENTRY *thread_p, SCAN_ID *s_id, DB_BIGINT *key_limit_upper, DB_BIGINT *key_limit_lower)
static SCAN_CODE scan_next_heap_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
int db_get_string_length(const DB_VALUE *value)
void heap_attrinfo_end(THREAD_ENTRY *thread_p, HEAP_CACHE_ATTRINFO *attr_info)
QPROC_SINGLE_FETCH single_fetch
int method_close_scan(THREAD_ENTRY *thread_p, METHOD_SCAN_BUFFER *scan_buffer_p)
static int merge_key_ranges(KEY_VAL_RANGE *key_vals, int key_cnt)
static int scan_key_compare(DB_VALUE *val1, DB_VALUE *val2, int num_index_term)
SCAN_CODE scan_next_scan(THREAD_ENTRY *thread_p, SCAN_ID *s_id)
static SCAN_CODE call_get_next_index_oidset(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, INDX_SCAN_ID *isidp, bool should_go_to_next_value)
union cubxasl::eval_term::@184 et
static SCAN_CODE scan_next_list_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
SCAN_CODE heap_next(THREAD_ENTRY *thread_p, const HFID *hfid, OID *class_oid, OID *next_oid, RECDES *recdes, HEAP_SCANCACHE *scan_cache, int ispeeking)
int tp_domain_match_ignore_order(const TP_DOMAIN *dom1, const TP_DOMAIN *dom2, TP_MATCH exact)
int heap_get_indexinfo_of_btid(THREAD_ENTRY *thread_p, const OID *class_oid, const BTID *btid, BTREE_TYPE *type, int *num_attrs, ATTR_ID **attr_ids, int **attrs_prefix_length, char **btnamepp, int *func_index_col_id)
#define ER_QPROC_INVALID_DATATYPE
static int key_val_compare(const void *p1, const void *p2)
#define pgbuf_ordered_unfix(thread_p, watcher_object)
static SCAN_CODE scan_handle_single_scan(THREAD_ENTRY *thread_p, SCAN_ID *s_id, QP_SCAN_FUNC next_scan)
BTREE_ISCAN_OID_LIST * oid_list
SCAN_CODE btree_get_next_key_info(THREAD_ENTRY *thread_p, BTID *btid, BTREE_SCAN *bts, int num_classes, OID *class_oids_ptr, INDX_SCAN_ID *index_scan_id_p, DB_VALUE **key_info)
#define TP_IS_BIT_TYPE(typeid)
int heap_get_class_name(THREAD_ENTRY *thread_p, const OID *class_oid, char **class_name)
SCAN_CODE showstmt_next_scan(THREAD_ENTRY *thread_p, SCAN_ID *s_id)
#define VPID_SET_NULL(vpid_ptr)
int qdata_build_hscan_key(THREAD_ENTRY *thread_p, val_descr *vd, REGU_VARIABLE_LIST regu_list, HASH_SCAN_KEY *key)
REGU_VARIABLE_LIST valptrp
static SCAN_CODE scan_next_showstmt_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
static int scan_restore_range_details(ISS_RANGE_DETAILS *rdp_src, INDX_SCAN_ID *isidp_dest)
int scan_open_heap_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, bool mvcc_select_lock_needed, SCAN_OPERATION_TYPE scan_op_type, int fixed, int grouped, QPROC_SINGLE_FETCH single_fetch, DB_VALUE *join_dbval, val_list_node *val_list, VAL_DESCR *vd, OID *cls_oid, HFID *hfid, regu_variable_list_node *regu_list_pred, PRED_EXPR *pr, regu_variable_list_node *regu_list_rest, int num_attrs_pred, ATTR_ID *attrids_pred, HEAP_CACHE_ATTRINFO *cache_pred, int num_attrs_rest, ATTR_ID *attrids_rest, HEAP_CACHE_ATTRINFO *cache_rest, SCAN_TYPE scan_type, DB_VALUE **cache_recordinfo, regu_variable_list_node *regu_list_recordinfo)
regu_variable_list_node * node_info_regu_list
static SCAN_CODE scan_build_hash_list_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
static SCAN_CODE scan_next_set_scan(THREAD_ENTRY *thread_p, SCAN_ID *scan_id)
#define qmgr_free_old_page_and_init(thread_p, page_p, tfile_vfidp)
struct timeval elapsed_scan
void tp_domain_free(TP_DOMAIN *dom)
static SCAN_CODE scan_get_next_iss_value(THREAD_ENTRY *thread_p, SCAN_ID *scan_id, INDX_SCAN_ID *isidp)
static int scan_init_multi_range_optimization(THREAD_ENTRY *thread_p, MULTI_RANGE_OPT *multi_range_opt, bool use_range_opt, int max_size)
int method_open_scan(THREAD_ENTRY *thread_p, METHOD_SCAN_BUFFER *scan_buffer_p, qfile_list_id *list_id_p, method_sig_list *method_sig_list_p)
struct db_char::@54 medium
DB_VALUE_COMPARE_RESULT pr_midxkey_compare(DB_MIDXKEY *mul1, DB_MIDXKEY *mul2, int do_coercion, int total_order, int num_index_term, int *start_colp, int *result_size1, int *result_size2, int *diff_column, bool *dom_is_desc, bool *next_dom_is_desc)
#define HEAP_ISVALID_OID(thread_p, oid)
#define BTREE_INIT_SCAN(bts)
static HASH_METHOD check_hash_list_scan(LLIST_SCAN_ID *llsidp, int *val_cnt, int hash_list_scan_yn)
#define TP_DOMAIN_COLLATION_FLAG(dom)
SCAN_CODE heap_prev_record_info(THREAD_ENTRY *thread_p, const HFID *hfid, OID *class_oid, OID *next_oid, RECDES *recdes, HEAP_SCANCACHE *scan_cache, int ispeeking, DB_VALUE **cache_recordinfo)
SCAN_CODE heap_page_next(THREAD_ENTRY *thread_p, const OID *class_oid, const HFID *hfid, VPID *next_vpid, DB_VALUE **cache_pageinfo)
regu_variable_node * key_limit_l