39 #if defined (SERVER_MODE) || defined (SA_MODE) 42 #if defined (ENABLE_COMPOSITE_LOCK) 49 #if defined (SERVER_MODE) || defined (SA_MODE) 52 #endif // SERVER_MODE || SA_MODE 72 #define XASL_NODE_HEADER_SIZE OR_INT_SIZE 74 #define OR_PACK_XASL_NODE_HEADER(PTR, X) \ 81 ASSERT_ALIGN ((PTR), INT_ALIGNMENT); \ 82 (PTR) = or_pack_int ((PTR), (X)->xasl_flag); \ 86 #define OR_UNPACK_XASL_NODE_HEADER(PTR, X) \ 93 ASSERT_ALIGN ((PTR), INT_ALIGNMENT); \ 94 (PTR) = or_unpack_int ((PTR), &(X)->xasl_flag); \ 98 #define INIT_XASL_NODE_HEADER(X) \ 105 memset ((X), 0x00, XASL_NODE_HEADER_SIZE); \ 113 #if defined (SERVER_MODE) || defined (SA_MODE) 140 struct aggregate_list_node;
141 struct analytic_eval_type;
149 #if defined (SERVER_MODE) || defined (SA_MODE) 150 typedef struct groupby_stat GROUPBY_STATS;
151 typedef struct orderby_stat ORDERBY_STATS;
152 typedef struct xasl_stat XASL_STATS;
154 typedef struct topn_tuple TOPN_TUPLE;
155 typedef struct topn_tuples TOPN_TUPLES;
160 struct aggregate_hash_context;
165 typedef struct partition_spec_node PARTITION_SPEC_TYPE;
334 #if defined (SERVER_MODE) || defined (SA_MODE) 335 EHID *upddel_oid_locator_ehids;
454 #define XASL_WAIT_MSECS_NOCHANGE -2 456 #define XASL_ORDBYNUM_FLAG_SCAN_CONTINUE 0x01 457 #define XASL_ORDBYNUM_FLAG_SCAN_CHECK 0x02 458 #define XASL_ORDBYNUM_FLAG_SCAN_STOP 0x04 460 #define XASL_INSTNUM_FLAG_SCAN_CONTINUE 0x01 461 #define XASL_INSTNUM_FLAG_SCAN_CHECK 0x02 462 #define XASL_INSTNUM_FLAG_SCAN_STOP 0x04 463 #define XASL_INSTNUM_FLAG_SCAN_LAST_STOP 0x08 464 #define XASL_INSTNUM_FLAG_EVAL_DEFER 0x10 465 #define XASL_INSTNUM_FLAG_SCAN_STOP_AT_ANALYTIC 0x20 471 #define XASL_G_GRBYNUM_FLAG_SCAN_CONTINUE 0x01 472 #define XASL_G_GRBYNUM_FLAG_SCAN_CHECK 0x02 473 #define XASL_G_GRBYNUM_FLAG_SCAN_STOP 0x04 474 #define XASL_G_GRBYNUM_FLAG_LIMIT_LT 0x08 475 #define XASL_G_GRBYNUM_FLAG_LIMIT_GT_LT 0x10 477 #define XASL_LINK_TO_REGU_VARIABLE 0x01 478 #define XASL_SKIP_ORDERBY_LIST 0x02 479 #define XASL_ZERO_CORR_LEVEL 0x04 480 #define XASL_TOP_MOST_XASL 0x08 481 #define XASL_TO_BE_CACHED 0x10 482 #define XASL_HAS_NOCYCLE 0x20 483 #define XASL_HAS_CONNECT_BY 0x40 484 #define XASL_MULTI_UPDATE_AGG 0x80 485 #define XASL_IGNORE_CYCLES 0x100 486 #define XASL_OBJFETCH_IGNORE_CLASSOID 0x200 487 #define XASL_IS_MERGE_QUERY 0x400 488 #define XASL_USES_MRO 0x800 489 #define XASL_DECACHE_CLONE 0x1000 490 #define XASL_RETURN_GENERATED_KEYS 0x2000 491 #define XASL_NO_FIXED_SCAN 0x4000 492 #define XASL_NEED_SINGLE_TUPLE_SCAN 0x8000 493 #define XASL_INCLUDES_TDE_CLASS 0x10000 495 #define XASL_IS_FLAGED(x, f) (((x)->flag & (int) (f)) != 0) 496 #define XASL_SET_FLAG(x, f) (x)->flag |= (int) (f) 497 #define XASL_CLEAR_FLAG(x, f) (x)->flag &= (int) ~(f) 499 #define EXECUTE_REGU_VARIABLE_XASL(thread_p, r, v) \ 502 XASL_NODE *_x = (r)->xasl; \ 507 if (XASL_IS_FLAGED (_x, XASL_LINK_TO_REGU_VARIABLE)) \ 510 if ((_x)->status == XASL_CLEARED || (_x)->status == XASL_INITIALIZED) \ 513 if (qexec_execute_mainblock ((thread_p), _x, (v)->xasl_state, NULL) != NO_ERROR) \ 515 (_x)->status = XASL_FAILURE; \ 522 (_x)->status = XASL_FAILURE; \ 528 #define CHECK_REGU_VARIABLE_XASL_STATUS(r) \ 529 ((r)->xasl != NULL ? ((r)->xasl)->status : XASL_SUCCESS) 531 #define QPROC_IS_INTERPOLATION_FUNC(func_p) \ 532 (((func_p)->function == PT_MEDIAN) \ 533 || ((func_p)->function == PT_PERCENTILE_CONT) \ 534 || ((func_p)->function == PT_PERCENTILE_DISC)) 537 #define PCOL_ISCYCLE_TUPLE_OFFSET 1 538 #define PCOL_ISLEAF_TUPLE_OFFSET 2 539 #define PCOL_LEVEL_TUPLE_OFFSET 3 540 #define PCOL_INDEX_STRING_TUPLE_OFFSET 4 541 #define PCOL_PARENTPOS_TUPLE_OFFSET 5 542 #define PCOL_FIRST_TUPLE_OFFSET PCOL_PARENTPOS_TUPLE_OFFSET 546 #define XASL_ID_SET_NULL(X) \ 549 (X)->sha1.h[0] = 0; \ 550 (X)->sha1.h[1] = 0; \ 551 (X)->sha1.h[2] = 0; \ 552 (X)->sha1.h[3] = 0; \ 553 (X)->sha1.h[4] = 0; \ 554 (X)->cache_flag = 0; \ 555 (X)->time_stored.sec = 0; \ 556 (X)->time_stored.usec = 0; \ 560 #define XASL_ID_IS_NULL(X) (((XASL_ID *) (X) != NULL) && (X)->time_stored.sec == 0) 562 #define XASL_ID_COPY(X1, X2) \ 565 (X1)->sha1 = (X2)->sha1; \ 566 (X1)->time_stored = (X2)->time_stored; \ 572 #define XASL_ID_EQ(X1, X2) \ 574 || (SHA1Compare (&(X1)->sha1, &(X2)->sha1) == 0 \ 575 && (X1)->time_stored.sec == (X2)->time_stored.sec \ 576 && (X1)->time_stored.usec == (X2)->time_stored.usec)) 578 #define OR_XASL_ID_SIZE (OR_SHA1_SIZE + OR_CACHE_TIME_SIZE) 581 #define OR_PACK_XASL_ID(PTR, X) \ 584 assert ((X) != NULL); \ 585 PTR = or_pack_sha1 (PTR, &(X)->sha1); \ 586 OR_PACK_CACHE_TIME (PTR, &(X)->time_stored); \ 591 #define OR_UNPACK_XASL_ID(PTR, X) \ 594 assert ((X) != NULL); \ 595 PTR = or_unpack_sha1 (PTR, &(X)->sha1); \ 596 OR_UNPACK_CACHE_TIME (PTR, &((X)->time_stored)); \ 605 #define XASL_STREAM_HEADER 8 617 #define XASL_STREAM_HEADER_PTR(stream) \ 619 #define GET_XASL_STREAM_HEADER_SIZE(stream) \ 620 (*((int *) XASL_STREAM_HEADER_PTR(stream))) 621 #define SET_XASL_STREAM_HEADER_SIZE(stream, size) \ 622 (*((int *) XASL_STREAM_HEADER_PTR(stream)) = (size)) 623 #define GET_XASL_STREAM_HEADER_DATA(stream) \ 624 ((char *) XASL_STREAM_HEADER_PTR(stream) + sizeof(int)) 625 #define SET_XASL_STREAM_HEADER_DATA(stream, data, size) \ 626 SET_XASL_STREAM_HEADER_SIZE(stream, size); \ 627 (void) memcpy((void *) GET_XASL_STREAM_HEADER_DATA(stream), \ 628 (void *) (data), (size_t) (size)) 630 #define XASL_STREAM_BODY_PTR(stream) \ 631 (GET_XASL_STREAM_HEADER_DATA(stream) + GET_XASL_STREAM_HEADER_SIZE(stream)) 632 #define GET_XASL_STREAM_BODY_SIZE(stream) \ 633 (*((int *) XASL_STREAM_BODY_PTR(stream))) 634 #define SET_XASL_STREAM_BODY_SIZE(stream, size) \ 635 (*((int *) XASL_STREAM_BODY_PTR(stream)) = (size)) 636 #define GET_XASL_STREAM_BODY_DATA(stream) \ 637 ((char *) XASL_STREAM_BODY_PTR(stream) + sizeof(int)) 638 #define SET_XASL_STREAM_BODY_DATA(stream, data, size) \ 639 (void) memcpy((void *) GET_XASL_STREAM_BODY_DATA(stream), \ 640 (void *) (data), (size_t) (size)) 642 #define GET_XASL_HEADER_CREATOR_OID(header) \ 644 #define SET_XASL_HEADER_CREATOR_OID(header, oid) \ 645 (*((OID *) header) = *(oid)) 646 #define GET_XASL_HEADER_N_OID_LIST(header) \ 647 (*((int *) ((char *) (header) + sizeof(OID)))) 648 #define SET_XASL_HEADER_N_OID_LIST(header, n) \ 649 (*((int *) ((char *) (header) + sizeof(OID))) = (n)) 650 #define GET_XASL_HEADER_CLASS_OID_LIST(header) \ 651 ((OID *) ((char *) (header) + sizeof(OID) + sizeof(int))) 652 #define SET_XASL_HEADER_CLASS_OID_LIST(header, list, n) \ 653 (void) memcpy((void *) GET_XASL_HEADER_CLASS_OID_LIST(header), \ 654 (void *) (list), (size_t) sizeof(OID) * (n)) 655 #define GET_XASL_HEADER_REPR_ID_LIST(header) \ 656 ((int *) ((char *) (header) + sizeof(OID) + sizeof(int) + \ 657 GET_XASL_HEADER_N_OID_LIST(header) * sizeof(OID))) 658 #define SET_XASL_HEADER_REPR_ID_LIST(header, list, n) \ 659 (void) memcpy((void *) GET_XASL_HEADER_REPR_ID_LIST(header), \ 660 (void *) (list), (size_t) sizeof(int) * (n)) 661 #define GET_XASL_HEADER_DBVAL_CNT(header) \ 662 (*((int *) ((char *) (header) + sizeof(OID) + sizeof(int) + \ 663 GET_XASL_HEADER_N_OID_LIST(header) * sizeof(OID) + \ 664 GET_XASL_HEADER_N_OID_LIST(header) * sizeof(int)))) 665 #define SET_XASL_HEADER_DBVAL_CNT(header, cnt) \ 666 (*((int *) ((char *) (header) + sizeof(OID) + sizeof(int) + \ 667 GET_XASL_HEADER_N_OID_LIST(header) * sizeof(OID) + \ 668 GET_XASL_HEADER_N_OID_LIST(header) * sizeof(int))) = (cnt)) 699 #define IS_ANY_INDEX_ACCESS(access_) \ 700 ((access_) == ACCESS_METHOD_INDEX || (access_) == ACCESS_METHOD_INDEX_KEY_INFO \ 701 || (access_) == ACCESS_METHOD_INDEX_NODE_INFO) 797 #define ACCESS_SPEC_CLS_SPEC(ptr) \ 800 #define ACCESS_SPEC_CLS_REGU_LIST(ptr) \ 801 ((ptr)->s.cls_node.cls_regu_list) 803 #define ACCESS_SPEC_HFID(ptr) \ 804 ((ptr)->s.cls_node.hfid) 806 #define ACCESS_SPEC_CLS_OID(ptr) \ 807 ((ptr)->s.cls_node.cls_oid) 809 #define ACCESS_SPEC_LIST_SPEC(ptr) \ 812 #define ACCESS_SPEC_SHOWSTMT_SPEC(ptr) \ 813 ((ptr)->s.showstmt_node) 815 #define ACCESS_SPEC_RLIST_SPEC(ptr) \ 816 ((ptr)->s.reguval_list_node) 818 #define ACCESS_SPEC_LIST_REGU_LIST(ptr) \ 819 ((ptr)->s.list_node.list_regu_list) 821 #define ACCESS_SPEC_XASL_NODE(ptr) \ 822 ((ptr)->s.list_node.xasl_node) 824 #define ACCESS_SPEC_LIST_ID(ptr) \ 825 (ACCESS_SPEC_XASL_NODE(ptr)->list_id) 827 #define ACCESS_SPEC_CONNECT_BY_LIST_ID(ptr) \ 828 (ACCESS_SPEC_XASL_NODE(ptr)->proc.connect_by.input_list_id) 830 #define ACCESS_SPEC_RLIST_VALPTR_LIST(ptr) \ 831 ((ptr)->s.reguval_list_node.valptr_list) 833 #define ACCESS_SPEC_SET_SPEC(ptr) \ 836 #define ACCESS_SPEC_SET_PTR(ptr) \ 837 ((ptr)->s.set_node.set_ptr) 839 #define ACCESS_SPEC_SET_REGU_LIST(ptr) \ 840 ((ptr)->s.set_node.set_regu_list) 842 #define ACCESS_SPEC_METHOD_SPEC(ptr) \ 843 ((ptr)->s.method_node) 845 #define ACCESS_SPEC_JSON_TABLE_SPEC(ptr) \ 846 ((ptr)->s.json_table_node) 848 #define ACCESS_SPEC_METHOD_XASL_NODE(ptr) \ 849 ((ptr)->s.method_node.xasl_node) 851 #define ACCESS_SPEC_METHOD_REGU_LIST(ptr) \ 852 ((ptr)->s.method_node.method_regu_list) 854 #define ACCESS_SPEC_METHOD_SIG_LIST(ptr) \ 855 ((ptr)->s.method_node.method_sig_list) 857 #define ACCESS_SPEC_METHOD_LIST_ID(ptr) \ 858 (ACCESS_SPEC_METHOD_XASL_NODE(ptr)->list_id) 860 #define ACCESS_SPEC_JSON_TABLE_ROOT_NODE(ptr) \ 861 ((ptr)->s.json_table_node.m_root_node) 863 #define ACCESS_SPEC_JSON_TABLE_REGU_VAR(ptr) \ 864 ((ptr)->s.json_table_node.m_json_reguvar) 866 #define ACCESS_SPEC_JSON_TABLE_M_NODE_COUNT(ptr) \ 867 ((ptr)->s.json_table_node.m_node_count) 869 #if defined (SERVER_MODE) || defined (SA_MODE) 872 struct timeval orderby_time;
873 bool orderby_filesort;
874 bool orderby_topnsort;
875 UINT64 orderby_pages;
876 UINT64 orderby_ioreads;
881 struct timeval groupby_time;
882 UINT64 groupby_pages;
883 UINT64 groupby_ioreads;
892 struct timeval elapsed_time;
914 struct partition_spec_node
919 PARTITION_SPEC_TYPE *next;
938 #if defined (SERVER_MODE) || defined (SA_MODE) 940 PARTITION_SPEC_TYPE *parts;
941 PARTITION_SPEC_TYPE *curent;
945 bool clear_value_at_clone_decache;
1010 #if defined (ENABLE_COMPOSITE_LOCK) 1045 #if defined (SERVER_MODE) || defined (SA_MODE) 1046 ORDERBY_STATS orderby_stats;
1047 GROUPBY_STATS groupby_stats;
1048 XASL_STATS xasl_stats;
1050 TOPN_TUPLES *topn_items;
1068 #define XASL_CLASS_NO_TCARD -1 1069 #define XASL_SERIAL_OID_TCARD -2
int * mvcc_extra_assign_reev
OUTPTR_LIST * outptr_list
REGU_VARIABLE_LIST prior_regu_list_pred
int num_extra_assign_reev
VAL_LIST * prior_val_list
REGUVAL_LIST_SPEC_TYPE reguval_list_node
HEAP_CACHE_ATTRINFO * cache_pred
DB_VALUE * save_instnum_val
XASL_NODE_HEADER * xasl_header
ACCESS_SPEC_TYPE * merge_spec
REGU_VARIABLE_LIST cls_regu_list_key
OUTPTR_LIST * a_outptr_list_interm
BUILDVALUE_PROC_NODE buildvalue
DB_VALUE ** cache_reserved
UPDDEL_CLASS_INFO * classes
REGU_VARIABLE * limit_row_count
QFILE_LIST_MERGE_INFO ls_merge
REGU_VARIABLE_LIST set_regu_list
int num_assign_reev_classes
PRED_EXPR * g_grbynum_pred
REGU_VARLIST_LIST select_list
REGU_VARIABLE * orderby_limit
ANALYTIC_EVAL_TYPE * a_eval_list
VALPTR_LIST ** valptr_lists
MERGELIST_PROC_NODE mergelist
METHOD_SPEC_TYPE method_node
UPDDEL_CLASS_INFO * classes
BUILDLIST_PROC_NODE buildlist
ACCESS_SPEC_TYPE * inner_spec_list
struct qproc_db_value_list * QPROC_DB_VALUE_LIST
SELUPD_LIST * selected_upd_list
PRED_EXPR * ordbynum_pred
REGU_VARIABLE_LIST list_regu_list_probe
REGU_VARIABLE_LIST list_regu_list_build
HEAP_CACHE_ATTRINFO * attr_info
SCAN_OPERATION_TYPE scan_op_type
HEAP_CACHE_ATTRINFO * cache_rest
XASL_NODE * recursive_part
PRED_EXPR * start_with_pred
ACCESS_SPEC_TYPE * curr_spec
REGU_VARIABLE * func_regu
CONNECTBY_PROC_NODE connect_by
REGU_VARIABLE_LIST after_cb_regu_list_rest
bool clear_value_at_clone_decache
REGU_VARIABLE_LIST list_regu_list_pred
HEAP_CACHE_ATTRINFO * cache_range
UPDATE_ASSIGNMENT * assigns
REGU_VARIABLE_LIST cls_regu_val_list
json_table_spec_node json_table_node
REGU_VARIABLE_LIST method_regu_list
REGU_VARIABLE * level_regu
SHOWSTMT_SPEC_TYPE showstmt_node
ARITH_TYPE * outarith_list
REGU_VARIABLE_LIST a_regu_list
REGU_VARIABLE * iscycle_regu
PRED_EXPR * after_connect_by_pred
int g_agg_domains_resolved
XASL_NODE * connect_by_ptr
REGU_VARIABLE_LIST regu_list_rest
ACCESS_SCHEMA_TYPE schema_type
REGU_VARIABLE_LIST regu_list_pred
OUTPTR_LIST * a_outptr_list_ex
REGU_VARIABLE_LIST after_cb_regu_list_pred
REGU_VARIABLE_LIST list_regu_list_rest
AGGREGATE_TYPE * agg_list
QFILE_LIST_ID * push_list_id
VALPTR_LIST * valptr_list
AGGREGATE_TYPE * g_agg_list
PRED_EXPR * after_join_pred
VAL_LIST * outer_val_list
OUTPTR_LIST * prior_outptr_list
OUTPTR_LIST * g_outptr_list
SORT_LIST * after_groupby_list
ACCESS_SPEC_TYPE * spec_list
OUTPTR_LIST * a_outptr_list
int mvcc_reev_extra_cls_cnt
QFILE_LIST_ID * input_list_id
REGU_VARIABLE_LIST g_hk_scan_regu_list
OUTPTR_LIST * cls_output_val_list
class regu_variable_node REGU_VARIABLE
HEAP_CACHE_ATTRINFO * cache_attrinfo
REGU_VARIABLE_LIST g_hk_sort_regu_list
UPDATE_ASSIGNMENT * assignments
REGU_VARIABLE_LIST cls_regu_list_pred
REGU_VARIABLE_LIST cls_regu_list_rest
REGU_VARIABLE_LIST prior_regu_list_rest
VAL_LIST * merge_val_list
REGU_VARIABLE_LIST cls_regu_list_range
REGU_VARIABLE_LIST arg_list
REGU_VARIABLE * limit_offset
QFILE_LIST_ID * start_with_list_id
REGU_VARIABLE_LIST g_regu_list
QPROC_SINGLE_FETCH single_fetch
REGU_VARIABLE_LIST g_scan_regu_list
PRED_EXPR * g_having_pred
ACCESS_SPEC_TYPE * outer_spec_list
HEAP_CACHE_ATTRINFO * cache_key
VAL_LIST * inner_val_list
METHOD_SIG_LIST * method_sig_list
DB_VALUE ** output_columns
SORT_LIST * after_iscan_list
REGU_VARIABLE * isleaf_regu
REGU_VARIABLE_LIST cls_regu_list_reserved
XASL_NODE * non_recursive_part
HEAP_CACHE_ATTRINFO * cache_pred
XASL_UNPACK_INFO * unpack_info