24 #ifndef _BTREE_LOAD_H_ 25 #define _BTREE_LOAD_H_ 44 #define PEEK_KEY_VALUE PEEK 45 #define COPY_KEY_VALUE COPY 50 #define BTREE_CURRENT_REV_LEVEL 0 55 #define LOAD_FIXED_EMPTY_FOR_LEAF \ 56 (DB_PAGESIZE * prm_get_float_value (PRM_ID_BT_UNFILL_FACTOR) \ 58 #define LOAD_FIXED_EMPTY_FOR_NONLEAF \ 59 (DB_PAGESIZE * MAX (prm_get_float_value (PRM_ID_BT_UNFILL_FACTOR), 0.1) \ 66 #define BTREE_MAX_ALIGN INT_ALIGNMENT 69 #define LEAF_ENTRY_MAX_SIZE(n) \ 72 + (2 * OR_MVCCID_SIZE) \ 77 #define LEAF_FENCE_MAX_SIZE(n) \ 84 #define NON_LEAF_ENTRY_MAX_SIZE(n) \ 85 (NON_LEAF_RECORD_SIZE + BTREE_MAX_ALIGN + n) 88 #define BTREE_NEW_ENTRY_MAX_SIZE(key_disk_size, node_type) \ 89 ((node_type) == BTREE_LEAF_NODE ? \ 90 LEAF_ENTRY_MAX_SIZE (key_disk_size) : \ 91 NON_LEAF_ENTRY_MAX_SIZE (key_disk_size)) 94 #define OIDCMP(n1, n2) \ 95 ((n1).volid == (n2).volid \ 96 && (n1).pageid == (n2).pageid \ 97 && (n1).slotid == (n2).slotid) 103 #define BTREE_INVALID_INDEX_ID(btid) \ 104 ((btid)->vfid.fileid == NULL_FILEID || (btid)->vfid.volid == NULL_VOLID \ 105 || (btid)->root_pageid == NULL_PAGEID) 118 #define BTREE_OBJECT_FIXED_SIZE(btree_info) \ 119 (BTREE_IS_UNIQUE ((btree_info)->unique_pk) ? \ 120 2 * OR_OID_SIZE + 2 * OR_MVCCID_SIZE : OR_OID_SIZE + 2 * OR_MVCCID_SIZE) 123 #define BTREE_OBJECT_MAX_SIZE (2 * OR_OID_SIZE + 2 * OR_MVCCID_SIZE) 135 #define BTREE_MAX_KEYLEN_INPAGE ((int)(DB_PAGESIZE / 8)) 137 #define BTREE_MAX_OIDLEN_INPAGE ((int)(DB_PAGESIZE / 8)) 140 #define BTREE_MAX_OIDCOUNT_IN_SIZE(btid, size) \ 141 ((int) (size) / BTREE_OBJECT_FIXED_SIZE (btid)) 143 #define BTREE_MAX_OIDCOUNT_IN_LEAF_RECORD(btid) \ 144 (BTREE_MAX_OIDCOUNT_IN_SIZE (btid, BTREE_MAX_OIDLEN_INPAGE)) 146 #define BTREE_MAX_OVERFLOW_RECORD_SIZE \ 147 (DB_PAGESIZE - DB_ALIGN (spage_header_size (), BTREE_MAX_ALIGN) \ 148 - DB_ALIGN (sizeof (BTREE_OVERFLOW_HEADER), BTREE_MAX_ALIGN)) 149 #define BTREE_MAX_OIDCOUNT_IN_OVERFLOW_RECORD(btid) \ 150 (BTREE_MAX_OIDCOUNT_IN_SIZE (btid, BTREE_MAX_OVERFLOW_RECORD_SIZE)) 155 #define BTREE_GET_KEY_LEN_IN_PAGE(key_len) \ 156 (((key_len) >= BTREE_MAX_KEYLEN_INPAGE) ? DISK_VPID_SIZE : (key_len)) 159 #define BTREE_SET_CREATED_OVERFLOW_KEY_NOTIFICATION(THREAD,KEY,OID,C_OID,BTID,BTNM) \ 160 btree_set_error(THREAD, KEY, OID, C_OID, BTID, BTNM, ER_NOTIFICATION_SEVERITY, \ 161 ER_BTREE_CREATED_OVERFLOW_KEY, __FILE__, __LINE__) 163 #define BTREE_SET_CREATED_OVERFLOW_PAGE_NOTIFICATION(THREAD,KEY,OID,C_OID,BTID) \ 164 btree_set_error(THREAD, KEY, OID, C_OID, BTID, NULL, ER_NOTIFICATION_SEVERITY, \ 165 ER_BTREE_CREATED_OVERFLOW_PAGE, __FILE__, __LINE__) 167 #define BTREE_SET_DELETED_OVERFLOW_PAGE_NOTIFICATION(THREAD,KEY,OID,C_OID,BTID) \ 168 btree_set_error(THREAD, KEY, OID, C_OID, BTID, NULL, ER_NOTIFICATION_SEVERITY, \ 169 ER_BTREE_DELETED_OVERFLOW_PAGE, __FILE__, __LINE__) 219 char packed_key_domain[1];
272 int oid_delta,
int key_delta);
bool btree_clear_key_value(bool *clear_flag, DB_VALUE *key_value)
int btree_change_root_header_delta(THREAD_ENTRY *thread_p, VFID *vfid, PAGE_PTR page_ptr, int null_delta, int oid_delta, int key_delta)
#define OR_MVCC_FLAG_VALID_INSID
BTREE_NODE_HEADER * btree_get_node_header(THREAD_ENTRY *thread_p, PAGE_PTR page_ptr)
#define OR_MVCC_FLAG_VALID_DELID
int btree_glean_root_header_info(THREAD_ENTRY *thread_p, BTREE_ROOT_HEADER *root_header, BTID_INT *btid)
TP_DOMAIN * btree_generate_prefix_domain(BTID_INT *btid)
int btree_get_next_overflow_vpid(THREAD_ENTRY *thread_p, PAGE_PTR page_ptr, VPID *vpid)
#define MVCCID_ALL_VISIBLE
int btree_get_asc_desc(THREAD_ENTRY *thread_p, BTID *btid, int col_idx, int *asc_desc)
int btree_node_header_redo_log(THREAD_ENTRY *thread_p, VFID *vfid, PAGE_PTR page_ptr)
void btree_init_temp_key_value(bool *clear_flag, DB_VALUE *key_value)
int btree_node_header_undo_log(THREAD_ENTRY *thread_p, VFID *vfid, PAGE_PTR page_ptr)
int btree_init_root_header(THREAD_ENTRY *thread_p, VFID *vfid, PAGE_PTR page_ptr, BTREE_ROOT_HEADER *root_header, TP_DOMAIN *key_type)
int btree_create_overflow_key_file(THREAD_ENTRY *thread_p, BTID_INT *btid)
BTREE_ROOT_HEADER * btree_get_root_header(THREAD_ENTRY *thread_p, PAGE_PTR page_ptr)
void btree_rv_mvcc_save_increments(const BTID *btid, int key_delta, int oid_delta, int null_delta, RECDES *recdes)
int btree_init_node_header(THREAD_ENTRY *thread_p, const VFID *vfid, PAGE_PTR page_ptr, BTREE_NODE_HEADER *header, bool redo)
int btree_node_number_of_keys(THREAD_ENTRY *thread_p, PAGE_PTR page_ptr)
void BTREE_MVCC_SET_HEADER_FIXED_SIZE(MVCC_REC_HEADER *p_mvcc_rec_header)
DISK_ISVALID btree_verify_tree(THREAD_ENTRY *thread_p, const OID *class_oid_p, BTID_INT *btid, const char *btname)
void btree_rv_nodehdr_dump(FILE *fp, int length, void *data)
int btree_init_overflow_header(THREAD_ENTRY *thread_p, PAGE_PTR page_ptr, BTREE_OVERFLOW_HEADER *ovf_header)
BTREE_OVERFLOW_HEADER * btree_get_overflow_header(THREAD_ENTRY *thread_p, PAGE_PTR page_ptr)
int btree_get_disk_size_of_key(DB_VALUE *)
int btree_get_prefix_separator(const DB_VALUE *key1, const DB_VALUE *key2, DB_VALUE *prefix_key, TP_DOMAIN *key_domain)