24 #ifndef _QUERY_LIST_H_ 25 #define _QUERY_LIST_H_ 42 #define IS_OUTER_JOIN_TYPE(t) ((t) == JOIN_LEFT || (t) == JOIN_RIGHT || (t) == JOIN_OUTER) 47 #define QFILE_PAGE_HEADER_SIZE 32 50 #define QFILE_TUPLE_COUNT_OFFSET 0 51 #define QFILE_PREV_PAGE_ID_OFFSET 4 52 #define QFILE_NEXT_PAGE_ID_OFFSET 8 53 #define QFILE_LAST_TUPLE_OFFSET 12 54 #define QFILE_OVERFLOW_PAGE_ID_OFFSET 16 55 #define QFILE_PREV_VOL_ID_OFFSET 20 56 #define QFILE_NEXT_VOL_ID_OFFSET 22 57 #define QFILE_OVERFLOW_VOL_ID_OFFSET 24 58 #define QFILE_RESERVED_OFFSET 26 61 #define QFILE_NULL_PAGE_OFFSET -1 67 #define QFILE_GET_TUPLE_COUNT(ptr) \ 68 OR_GET_INT ((ptr) + QFILE_TUPLE_COUNT_OFFSET) 70 #define QFILE_GET_PREV_PAGE_ID(ptr) \ 71 (PAGEID) OR_GET_INT ((ptr) + QFILE_PREV_PAGE_ID_OFFSET) 73 #define QFILE_GET_NEXT_PAGE_ID(ptr) \ 74 (PAGEID) OR_GET_INT ((ptr) + QFILE_NEXT_PAGE_ID_OFFSET) 76 #define QFILE_GET_LAST_TUPLE_OFFSET(ptr) \ 77 (PAGEID) OR_GET_INT ((ptr) + QFILE_LAST_TUPLE_OFFSET) 79 #define QFILE_GET_OVERFLOW_PAGE_ID(ptr) \ 80 (PAGEID) OR_GET_INT ((ptr) + QFILE_OVERFLOW_PAGE_ID_OFFSET) 82 #define QFILE_GET_PREV_VOLUME_ID(ptr) \ 83 (VOLID) OR_GET_SHORT ((ptr) + QFILE_PREV_VOL_ID_OFFSET) 85 #define QFILE_GET_NEXT_VOLUME_ID(ptr) \ 86 (VOLID) OR_GET_SHORT ((ptr) + QFILE_NEXT_VOL_ID_OFFSET) 88 #define QFILE_GET_OVERFLOW_VOLUME_ID(ptr) \ 89 (VOLID) OR_GET_SHORT ((ptr) + QFILE_OVERFLOW_VOL_ID_OFFSET) 96 #define QFILE_GET_PREV_VPID(des,ptr) \ 99 (des)->pageid = (PAGEID) OR_GET_INT ((ptr) + QFILE_PREV_PAGE_ID_OFFSET); \ 100 (des)->volid = (VOLID) OR_GET_SHORT ((ptr) + QFILE_PREV_VOL_ID_OFFSET); \ 104 #define QFILE_GET_NEXT_VPID(des,ptr) \ 107 (des)->pageid = (PAGEID) OR_GET_INT ((ptr) + QFILE_NEXT_PAGE_ID_OFFSET); \ 108 (des)->volid = (VOLID) OR_GET_SHORT ((ptr) + QFILE_NEXT_VOL_ID_OFFSET); \ 112 #define QFILE_GET_OVERFLOW_VPID(des,ptr) \ 115 (des)->pageid = (PAGEID) OR_GET_INT ((ptr) + QFILE_OVERFLOW_PAGE_ID_OFFSET); \ 116 (des)->volid = (VOLID) OR_GET_SHORT ((ptr) + QFILE_OVERFLOW_VOL_ID_OFFSET); \ 120 #define QFILE_PUT_TUPLE_COUNT(ptr,val) \ 121 OR_PUT_INT ((ptr) + QFILE_TUPLE_COUNT_OFFSET, (val)) 123 #define QFILE_PUT_PREV_PAGE_ID(ptr,val) \ 124 OR_PUT_INT ((ptr) + QFILE_PREV_PAGE_ID_OFFSET, (val)) 126 #define QFILE_PUT_NEXT_PAGE_ID(ptr,val) \ 127 OR_PUT_INT ((ptr) + QFILE_NEXT_PAGE_ID_OFFSET, (val)) 129 #define QFILE_PUT_LAST_TUPLE_OFFSET(ptr,val) \ 130 OR_PUT_INT ((ptr) + QFILE_LAST_TUPLE_OFFSET, (val)) 132 #define QFILE_PUT_OVERFLOW_PAGE_ID(ptr,val) \ 133 OR_PUT_INT ((ptr) + QFILE_OVERFLOW_PAGE_ID_OFFSET, (val)) 135 #define QFILE_PUT_PREV_VOLUME_ID(ptr,val) \ 136 OR_PUT_SHORT ((ptr) + QFILE_PREV_VOL_ID_OFFSET, (val)) 138 #define QFILE_PUT_NEXT_VOLUME_ID(ptr,val) \ 139 OR_PUT_SHORT ((ptr) + QFILE_NEXT_VOL_ID_OFFSET, (val)) 141 #define QFILE_PUT_OVERFLOW_VOLUME_ID(ptr,val) \ 142 OR_PUT_SHORT ((ptr) + QFILE_OVERFLOW_VOL_ID_OFFSET, (val)) 149 #define QFILE_PUT_PREV_VPID(ptr,vpid) \ 152 OR_PUT_SHORT ((ptr) + QFILE_PREV_VOL_ID_OFFSET, (vpid)->volid); \ 153 OR_PUT_INT ((ptr) + QFILE_PREV_PAGE_ID_OFFSET, (vpid)->pageid); \ 157 #define QFILE_PUT_NEXT_VPID(ptr,vpid) \ 160 OR_PUT_SHORT ((ptr) + QFILE_NEXT_VOL_ID_OFFSET, (vpid)->volid); \ 161 OR_PUT_INT ((ptr) + QFILE_NEXT_PAGE_ID_OFFSET, (vpid)->pageid); \ 165 #define QFILE_PUT_OVERFLOW_VPID(ptr,vpid) \ 168 OR_PUT_SHORT ((ptr) + QFILE_OVERFLOW_VOL_ID_OFFSET, (vpid)->volid); \ 169 OR_PUT_INT ((ptr) + QFILE_OVERFLOW_PAGE_ID_OFFSET, (vpid)->pageid); \ 173 #define QFILE_PUT_PREV_VPID_NULL(ptr) \ 176 OR_PUT_SHORT ((ptr) + QFILE_PREV_VOL_ID_OFFSET, NULL_VOLID); \ 177 OR_PUT_INT ((ptr) + QFILE_PREV_PAGE_ID_OFFSET, NULL_PAGEID); \ 181 #define QFILE_PUT_NEXT_VPID_NULL(ptr) \ 184 OR_PUT_SHORT ((ptr) + QFILE_NEXT_VOL_ID_OFFSET, NULL_VOLID); \ 185 OR_PUT_INT ((ptr) + QFILE_NEXT_PAGE_ID_OFFSET, NULL_PAGEID); \ 189 #define QFILE_PUT_OVERFLOW_VPID_NULL(ptr) \ 192 OR_PUT_SHORT ((ptr) + QFILE_OVERFLOW_VOL_ID_OFFSET, NULL_VOLID); \ 193 OR_PUT_INT ((ptr) + QFILE_OVERFLOW_PAGE_ID_OFFSET, NULL_PAGEID); \ 197 #define QFILE_COPY_VPID(ptr1, ptr2) \ 200 (ptr1)->pageid = (ptr2)->pageid; \ 201 (ptr1)->volid = (ptr2)->volid; \ 207 #define QFILE_OVERFLOW_TUPLE_PAGE_SIZE_OFFSET 12 209 #define QFILE_GET_OVERFLOW_TUPLE_PAGE_SIZE(ptr) \ 210 (int) OR_GET_INT ((ptr) + QFILE_OVERFLOW_TUPLE_PAGE_SIZE_OFFSET) 212 #define QFILE_PUT_OVERFLOW_TUPLE_PAGE_SIZE(ptr,val) \ 213 OR_PUT_INT ((ptr) + QFILE_OVERFLOW_TUPLE_PAGE_SIZE_OFFSET, (val)) 217 #define QFILE_MAX_TUPLE_SIZE_IN_PAGE (DB_PAGESIZE - QFILE_PAGE_HEADER_SIZE) 224 #define QFILE_TUPLE_LENGTH_SIZE 8 225 #define QFILE_TUPLE_LENGTH_OFFSET 0 226 #define QFILE_TUPLE_PREV_LENGTH_OFFSET 4 228 #define QFILE_TUPLE_VALUE_HEADER_LENGTH 8 229 #define QFILE_TUPLE_VALUE_HEADER_SIZE 8 230 #define QFILE_TUPLE_VALUE_FLAG_SIZE 4 231 #define QFILE_TUPLE_VALUE_LENGTH_SIZE 4 233 #define QFILE_TUPLE_VALUE_FLAG_OFFSET 0 234 #define QFILE_TUPLE_VALUE_LENGTH_OFFSET 4 238 #define QFILE_GET_TUPLE_LENGTH(tpl) \ 239 OR_GET_INT ((tpl) + QFILE_TUPLE_LENGTH_OFFSET) 241 #define QFILE_GET_PREV_TUPLE_LENGTH(tpl) \ 242 OR_GET_INT ((tpl) + QFILE_TUPLE_PREV_LENGTH_OFFSET) 244 #define QFILE_PUT_TUPLE_LENGTH(tpl,val) \ 245 OR_PUT_INT ((tpl) + QFILE_TUPLE_LENGTH_OFFSET,val) 247 #define QFILE_PUT_PREV_TUPLE_LENGTH(tpl,val) \ 248 OR_PUT_INT ((tpl) + QFILE_TUPLE_PREV_LENGTH_OFFSET,val) 250 #define QFILE_GET_TUPLE_VALUE_FLAG(ptr) \ 251 (QFILE_TUPLE_VALUE_FLAG) OR_GET_INT ((ptr) + QFILE_TUPLE_VALUE_FLAG_OFFSET) 253 #define QFILE_GET_TUPLE_VALUE_LENGTH(ptr) \ 254 (int) OR_GET_INT ((ptr) + QFILE_TUPLE_VALUE_LENGTH_OFFSET) 256 #define QFILE_PUT_TUPLE_VALUE_FLAG(ptr,val) \ 257 OR_PUT_INT ((ptr) + QFILE_TUPLE_VALUE_FLAG_OFFSET, (val)) 259 #define QFILE_PUT_TUPLE_VALUE_LENGTH(ptr,val) \ 260 OR_PUT_INT ((ptr) + QFILE_TUPLE_VALUE_LENGTH_OFFSET, (val)) 262 #define QFILE_GET_TUPLE_VALUE_HEADER_POSITION(tpl,ind,valp) \ 266 (valp) = (char*) (tpl) + QFILE_TUPLE_LENGTH_SIZE; \ 267 for (_k = 0; _k < (ind); _k++) \ 269 (valp) += QFILE_TUPLE_VALUE_HEADER_SIZE + QFILE_GET_TUPLE_VALUE_LENGTH ((valp)); \ 275 #define QFILE_OVERFLOW_TUPLE_COUNT_FLAG -2 445 #define QFILE_CLEAR_LIST_ID(list_id) \ 448 (list_id)->type_list.type_cnt = 0; \ 449 (list_id)->type_list.domp = NULL; \ 450 (list_id)->sort_list = NULL; \ 451 (list_id)->tuple_cnt = 0; \ 452 (list_id)->page_cnt = 0; \ 453 (list_id)->first_vpid.pageid = NULL_PAGEID; \ 454 (list_id)->first_vpid.volid = NULL_VOLID; \ 455 (list_id)->last_vpid.pageid = NULL_PAGEID; \ 456 (list_id)->last_vpid.volid = NULL_VOLID; \ 457 (list_id)->last_pgptr = NULL; \ 458 (list_id)->last_offset = QFILE_NULL_PAGE_OFFSET; \ 459 (list_id)->lasttpl_len = 0; \ 460 (list_id)->query_id = 0; \ 461 (list_id)->temp_vfid.fileid = NULL_PAGEID; \ 462 (list_id)->temp_vfid.volid = NULL_VOLID; \ 463 (list_id)->tfile_vfid = NULL; \ 464 (list_id)->tpl_descr.item = NULL; \ 465 (list_id)->tpl_descr.item_size = 0; \ 466 (list_id)->tpl_descr.tpl_size = 0; \ 467 (list_id)->tpl_descr.f_cnt = 0; \ 468 (list_id)->tpl_descr.f_valp = NULL; \ 469 (list_id)->tpl_descr.clear_f_val_at_clone_decache = NULL; \ 470 (list_id)->tpl_descr.sortkey_info = NULL; \ 471 (list_id)->tpl_descr.sort_rec = NULL; \ 472 (list_id)->tpl_descr.tplrec1 = NULL; \ 473 (list_id)->tpl_descr.tplrec2 = NULL; \ 474 (list_id)->tpl_descr.merge_info = NULL; \ 475 (list_id)->is_domain_resolved = false; \ 491 #define QFILE_OUTER_LIST 0 492 #define QFILE_INNER_LIST 1 522 #define QFILE_SET_FLAG(var, flag) ((var) |= (flag)) 523 #define QFILE_CLEAR_FLAG(var, flag) ((var) &= (flag)) 524 #define QFILE_IS_FLAG_SET(var, flag) ((var) & (flag)) 525 #define QFILE_IS_FLAG_SET_BOTH(var, flag1, flag2) (((var) & (flag1)) && ((var) & (flag2))) 573 #define DO_NOT_COLLECT_EXEC_STATS(flag) ((flag) & DONT_COLLECT_EXEC_STATS) 575 #define IS_XASL_TRACE_TEXT(flag) (((flag) & XASL_TRACE_TEXT) != 0) 576 #define IS_XASL_TRACE_JSON(flag) (((flag) & XASL_TRACE_JSON) != 0) 578 #define IS_TRIGGER_INVOLVED(flag) (((flag) & TRIGGER_IS_INVOLVED) != 0) 580 #define IS_XASL_CACHE_PINNED_REFERENCE(flag) (((flag) & XASL_CACHE_PINNED_REFERENCE) != 0) 581 #define IS_QUERY_EXECUTED_WITHOUT_DATA_BUFFERS(flag) (((flag) & EXECUTE_QUERY_WITHOUT_DATA_BUFFERS) != 0) 582 #define IS_QUERY_EXECUTE_WITH_COMMIT(flag) (((flag) & EXECUTE_QUERY_WITH_COMMIT) != 0) 583 #define IS_TRAN_AUTO_COMMIT(flag) (((flag) & TRAN_AUTO_COMMIT) != 0) QPROC_SINGLE_FETCH single_fetch
QFILE_TUPLE_RECORD tplrec
TP_DOMAIN * original_domain
struct qmgr_temp_file * tfile_vfid
QFILE_TUPLE_VALUE_TYPE_LIST type_list
bool * clear_f_val_at_clone_decache
QFILE_TUPLE_DESCRIPTOR tpl_descr
QFILE_TUPLE_RECORD * tplrec1
QFILE_TUPLE_RECORD tplrec
QFILE_TUPLE_VALUE_POSITION pos_descr
int * ls_outer_inner_list
struct sort_list * local_next
QFILE_TUPLE_RECORD * tplrec2
QFILE_LIST_SCAN_ID * s_id
QFILE_LIST_MERGE_INFO * merge_info