CUBRID Engine  latest
btree_load.h File Reference
#include <assert.h>
#include "btree.h"
#include "object_representation_constants.h"
#include "error_manager.h"
#include "storage_common.h"
#include "oid.h"
#include "system_parameter.h"
#include "object_domain.h"
#include "slotted_page.h"
Include dependency graph for btree_load.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  btree_node_header
 
struct  btree_root_header
 
struct  btree_overflow_header
 
struct  btree_node_info
 
struct  btree_node
 

Macros

#define PEEK_KEY_VALUE   PEEK
 
#define COPY_KEY_VALUE   COPY
 
#define BTREE_CURRENT_REV_LEVEL   0
 
#define LOAD_FIXED_EMPTY_FOR_LEAF
 
#define LOAD_FIXED_EMPTY_FOR_NONLEAF
 
#define BTREE_MAX_ALIGN   INT_ALIGNMENT
 
#define LEAF_ENTRY_MAX_SIZE(n)
 
#define LEAF_FENCE_MAX_SIZE(n)
 
#define NON_LEAF_ENTRY_MAX_SIZE(n)   (NON_LEAF_RECORD_SIZE + BTREE_MAX_ALIGN + n)
 
#define BTREE_NEW_ENTRY_MAX_SIZE(key_disk_size, node_type)
 
#define OIDCMP(n1, n2)
 
#define HEADER   0
 
#define BTREE_INVALID_INDEX_ID(btid)
 
#define BTREE_OBJECT_FIXED_SIZE(btree_info)
 
#define BTREE_OBJECT_MAX_SIZE   (2 * OR_OID_SIZE + 2 * OR_MVCCID_SIZE)
 
#define BTREE_MAX_KEYLEN_INPAGE   ((int)(DB_PAGESIZE / 8))
 
#define BTREE_MAX_OIDLEN_INPAGE   ((int)(DB_PAGESIZE / 8))
 
#define BTREE_MAX_OIDCOUNT_IN_SIZE(btid, size)   ((int) (size) / BTREE_OBJECT_FIXED_SIZE (btid))
 
#define BTREE_MAX_OIDCOUNT_IN_LEAF_RECORD(btid)   (BTREE_MAX_OIDCOUNT_IN_SIZE (btid, BTREE_MAX_OIDLEN_INPAGE))
 
#define BTREE_MAX_OVERFLOW_RECORD_SIZE
 
#define BTREE_MAX_OIDCOUNT_IN_OVERFLOW_RECORD(btid)   (BTREE_MAX_OIDCOUNT_IN_SIZE (btid, BTREE_MAX_OVERFLOW_RECORD_SIZE))
 
#define BTREE_GET_KEY_LEN_IN_PAGE(key_len)   (((key_len) >= BTREE_MAX_KEYLEN_INPAGE) ? DISK_VPID_SIZE : (key_len))
 
#define BTREE_SET_CREATED_OVERFLOW_KEY_NOTIFICATION(THREAD, KEY, OID, C_OID, BTID, BTNM)
 
#define BTREE_SET_CREATED_OVERFLOW_PAGE_NOTIFICATION(THREAD, KEY, OID, C_OID, BTID)
 
#define BTREE_SET_DELETED_OVERFLOW_PAGE_NOTIFICATION(THREAD, KEY, OID, C_OID, BTID)
 

Typedefs

typedef struct btree_node_header BTREE_NODE_HEADER
 
typedef struct btree_root_header BTREE_ROOT_HEADER
 
typedef struct btree_overflow_header BTREE_OVERFLOW_HEADER
 
typedef struct btree_node_info BTREE_NODE_INFO
 
typedef struct btree_node BTREE_NODE
 

Functions

int btree_node_number_of_keys (THREAD_ENTRY *thread_p, PAGE_PTR page_ptr)
 
int btree_get_next_overflow_vpid (THREAD_ENTRY *thread_p, PAGE_PTR page_ptr, VPID *vpid)
 
void BTREE_MVCC_SET_HEADER_FIXED_SIZE (MVCC_REC_HEADER *p_mvcc_rec_header)
 
void btree_rv_nodehdr_dump (FILE *fp, int length, void *data)
 
void btree_rv_mvcc_save_increments (const BTID *btid, int key_delta, int oid_delta, int null_delta, RECDES *recdes)
 
bool btree_clear_key_value (bool *clear_flag, DB_VALUE *key_value)
 
void btree_init_temp_key_value (bool *clear_flag, DB_VALUE *key_value)
 
int btree_create_overflow_key_file (THREAD_ENTRY *thread_p, BTID_INT *btid)
 
int btree_init_overflow_header (THREAD_ENTRY *thread_p, PAGE_PTR page_ptr, BTREE_OVERFLOW_HEADER *ovf_header)
 
int btree_init_node_header (THREAD_ENTRY *thread_p, const VFID *vfid, PAGE_PTR page_ptr, BTREE_NODE_HEADER *header, bool redo)
 
int btree_init_root_header (THREAD_ENTRY *thread_p, VFID *vfid, PAGE_PTR page_ptr, BTREE_ROOT_HEADER *root_header, TP_DOMAIN *key_type)
 
BTREE_NODE_HEADERbtree_get_node_header (THREAD_ENTRY *thread_p, PAGE_PTR page_ptr)
 
BTREE_ROOT_HEADERbtree_get_root_header (THREAD_ENTRY *thread_p, PAGE_PTR page_ptr)
 
BTREE_OVERFLOW_HEADERbtree_get_overflow_header (THREAD_ENTRY *thread_p, PAGE_PTR page_ptr)
 
int btree_node_header_undo_log (THREAD_ENTRY *thread_p, VFID *vfid, PAGE_PTR page_ptr)
 
int btree_node_header_redo_log (THREAD_ENTRY *thread_p, VFID *vfid, PAGE_PTR page_ptr)
 
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)
 
int btree_get_disk_size_of_key (DB_VALUE *)
 
TP_DOMAINbtree_generate_prefix_domain (BTID_INT *btid)
 
int btree_glean_root_header_info (THREAD_ENTRY *thread_p, BTREE_ROOT_HEADER *root_header, BTID_INT *btid)
 
DISK_ISVALID btree_verify_tree (THREAD_ENTRY *thread_p, const OID *class_oid_p, BTID_INT *btid, const char *btname)
 
int btree_get_prefix_separator (const DB_VALUE *key1, const DB_VALUE *key2, DB_VALUE *prefix_key, TP_DOMAIN *key_domain)
 
int btree_get_asc_desc (THREAD_ENTRY *thread_p, BTID *btid, int col_idx, int *asc_desc)
 

Macro Definition Documentation

#define BTREE_CURRENT_REV_LEVEL   0
#define BTREE_GET_KEY_LEN_IN_PAGE (   key_len)    (((key_len) >= BTREE_MAX_KEYLEN_INPAGE) ? DISK_VPID_SIZE : (key_len))
#define BTREE_INVALID_INDEX_ID (   btid)
Value:
((btid)->vfid.fileid == NULL_FILEID || (btid)->vfid.volid == NULL_VOLID \
|| (btid)->root_pageid == NULL_PAGEID)
#define NULL_PAGEID
int32_t fileid
Definition: dbtype_def.h:886
#define NULL_FILEID
#define NULL_VOLID

Definition at line 103 of file btree_load.h.

Referenced by btree_delete_internal(), btree_get_next_key_info(), and btree_locate_key().

#define BTREE_MAX_ALIGN   INT_ALIGNMENT

Definition at line 66 of file btree_load.h.

Referenced by btree_insert_list::add_key(), btree_build_nleafs(), btree_change_root_header_delta(), btree_compress_node(), btree_construct_leafs(), btree_delete_key_from_leaf(), btree_delete_meta_record(), btree_dump_leaf_record(), btree_fix_ovfl_oid_page(), btree_get_num_visible_oids_from_all_ovf(), btree_init_node_header(), btree_init_overflow_header(), btree_init_root_header(), btree_initialize_new_page(), btree_insert_mvcc_delid_into_page(), btree_key_append_object_as_new_overflow(), btree_key_append_object_to_overflow(), btree_key_delete_remove_object(), btree_key_find_and_insert_delete_mvccid(), btree_key_find_first_visible_row_from_all_ovf(), btree_key_insert_delete_mvccid(), btree_key_insert_new_key(), btree_key_insert_new_object(), btree_key_online_index_IB_insert(), btree_key_online_index_tran_delete(), btree_key_online_index_tran_insert(), btree_key_online_index_tran_insert_DF(), btree_key_relocate_last_into_ovf(), btree_key_remove_delete_mvccid(), btree_key_remove_delete_mvccid_unique(), btree_key_remove_insert_mvccid(), btree_key_remove_object_and_keep_visible_first(), btree_leaf_record_replace_first_with_last(), btree_merge_node(), btree_merge_root(), btree_modify_leaf_ovfl_vpid(), btree_modify_overflow_link(), btree_overflow_record_replace_object(), btree_overflow_remove_object(), btree_record_remove_object(), btree_replace_first_oid_with_ovfl_oid(), btree_rv_newpage_redo_init(), btree_rv_pagerec_insert(), btree_rv_record_modify_internal(), btree_rv_util_save_page_records(), btree_split_node(), btree_split_root(), btree_split_test(), btree_start_overflow_page(), and logtb_update_global_unique_stats_by_delta().

#define BTREE_MAX_OIDCOUNT_IN_OVERFLOW_RECORD (   btid)    (BTREE_MAX_OIDCOUNT_IN_SIZE (btid, BTREE_MAX_OVERFLOW_RECORD_SIZE))

Definition at line 149 of file btree_load.h.

Referenced by btree_range_scan_count_oids_leaf_and_one_ovf().

#define BTREE_MAX_OIDCOUNT_IN_SIZE (   btid,
  size 
)    ((int) (size) / BTREE_OBJECT_FIXED_SIZE (btid))

Definition at line 140 of file btree_load.h.

Referenced by btree_construct_leafs().

#define BTREE_MAX_OIDLEN_INPAGE   ((int)(DB_PAGESIZE / 8))

Definition at line 137 of file btree_load.h.

Referenced by xbtree_load_index().

#define BTREE_MAX_OVERFLOW_RECORD_SIZE
Value:
#define BTREE_MAX_ALIGN
Definition: btree_load.h:66
#define DB_ALIGN(offset, align)
Definition: memory_alloc.h:84
#define DB_PAGESIZE
int spage_header_size(void)
Definition: slotted_page.c:837

Definition at line 146 of file btree_load.h.

#define BTREE_NEW_ENTRY_MAX_SIZE (   key_disk_size,
  node_type 
)
Value:
((node_type) == BTREE_LEAF_NODE ? \
LEAF_ENTRY_MAX_SIZE (key_disk_size) : \
NON_LEAF_ENTRY_MAX_SIZE (key_disk_size))
#define LEAF_ENTRY_MAX_SIZE(n)
Definition: btree_load.h:69
#define NON_LEAF_ENTRY_MAX_SIZE(n)
Definition: btree_load.h:84

Definition at line 88 of file btree_load.h.

Referenced by btree_key_insert_does_leaf_need_split().

#define BTREE_OBJECT_MAX_SIZE   (2 * OR_OID_SIZE + 2 * OR_MVCCID_SIZE)
#define BTREE_SET_CREATED_OVERFLOW_KEY_NOTIFICATION (   THREAD,
  KEY,
  OID,
  C_OID,
  BTID,
  BTNM 
)
Value:
btree_set_error(THREAD, KEY, OID, C_OID, BTID, BTNM, ER_NOTIFICATION_SEVERITY, \
ER_BTREE_CREATED_OVERFLOW_KEY, __FILE__, __LINE__)
int btree_set_error(THREAD_ENTRY *thread_p, const DB_VALUE *key, const OID *obj_oid, const OID *class_oid, const BTID *btid, const char *bt_name, int severity, int err_id, const char *filename, int lineno)
Definition: btree.c:18312
#define ER_BTREE_CREATED_OVERFLOW_KEY
Definition: error_code.h:1432

Definition at line 159 of file btree_load.h.

Referenced by btree_fix_root_for_insert(), and xbtree_load_index().

#define BTREE_SET_CREATED_OVERFLOW_PAGE_NOTIFICATION (   THREAD,
  KEY,
  OID,
  C_OID,
  BTID 
)
Value:
ER_BTREE_CREATED_OVERFLOW_PAGE, __FILE__, __LINE__)
int btree_set_error(THREAD_ENTRY *thread_p, const DB_VALUE *key, const OID *obj_oid, const OID *class_oid, const BTID *btid, const char *bt_name, int severity, int err_id, const char *filename, int lineno)
Definition: btree.c:18312
#define ER_BTREE_CREATED_OVERFLOW_PAGE
Definition: error_code.h:1434
#define NULL
Definition: freelistheap.h:34

Definition at line 163 of file btree_load.h.

Referenced by btree_key_append_object_into_ovf().

#define BTREE_SET_DELETED_OVERFLOW_PAGE_NOTIFICATION (   THREAD,
  KEY,
  OID,
  C_OID,
  BTID 
)
Value:
ER_BTREE_DELETED_OVERFLOW_PAGE, __FILE__, __LINE__)
int btree_set_error(THREAD_ENTRY *thread_p, const DB_VALUE *key, const OID *obj_oid, const OID *class_oid, const BTID *btid, const char *bt_name, int severity, int err_id, const char *filename, int lineno)
Definition: btree.c:18312
#define NULL
Definition: freelistheap.h:34
#define ER_BTREE_DELETED_OVERFLOW_PAGE
Definition: error_code.h:1435

Definition at line 167 of file btree_load.h.

Referenced by btree_overflow_remove_object().

#define LEAF_ENTRY_MAX_SIZE (   n)
Value:
+ (2 * OR_OID_SIZE) /* OID + class OID */ \
+ (2 * OR_MVCCID_SIZE) /* Insert/delete MVCCID */ \
+ BTREE_MAX_ALIGN /* Alignment */ \
+ n /* Key disk length. */)
#define LEAF_RECORD_SIZE
#define OR_MVCCID_SIZE
#define BTREE_MAX_ALIGN
Definition: btree_load.h:66

Definition at line 69 of file btree_load.h.

Referenced by btree_get_max_new_data_size().

#define LEAF_FENCE_MAX_SIZE (   n)
Value:
+ OR_OID_SIZE /* OID marker for fence key */ \
+ BTREE_MAX_ALIGN /* Alignment */ \
+ n /* Key disk length. */)
#define LEAF_RECORD_SIZE
#define BTREE_MAX_ALIGN
Definition: btree_load.h:66

Definition at line 77 of file btree_load.h.

Referenced by btree_find_split_point().

#define LOAD_FIXED_EMPTY_FOR_LEAF
Value:
#define DISK_VPID_SIZE
float prm_get_float_value(PARAM_ID prm_id)
#define DB_PAGESIZE

Definition at line 55 of file btree_load.h.

Referenced by btree_construct_leafs(), and btree_save_last_leafrec().

#define LOAD_FIXED_EMPTY_FOR_NONLEAF
Value:
#define DISK_VPID_SIZE
float prm_get_float_value(PARAM_ID prm_id)
#define DB_PAGESIZE

Definition at line 58 of file btree_load.h.

Referenced by btree_connect_page().

#define NON_LEAF_ENTRY_MAX_SIZE (   n)    (NON_LEAF_RECORD_SIZE + BTREE_MAX_ALIGN + n)

Definition at line 84 of file btree_load.h.

Referenced by btree_get_max_new_data_size().

#define OIDCMP (   n1,
  n2 
)
Value:
((n1).volid == (n2).volid \
&& (n1).pageid == (n2).pageid \
&& (n1).slotid == (n2).slotid)

Definition at line 94 of file btree_load.h.

Typedef Documentation

typedef struct btree_node BTREE_NODE

Definition at line 246 of file btree_load.h.

Definition at line 193 of file btree_load.h.

Definition at line 229 of file btree_load.h.

Definition at line 223 of file btree_load.h.

Definition at line 204 of file btree_load.h.

Function Documentation

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 
)
BTREE_NODE_HEADER* btree_get_node_header ( THREAD_ENTRY thread_p,
PAGE_PTR  page_ptr 
)

Definition at line 275 of file btree_load.c.

References assert, assert_release, recdes::data, HEADER, if(), btree_node_header::max_key_len, NULL, PAGE_BTREE, PEEK, pgbuf_check_page_ptype(), S_SUCCESS, and spage_get_record().

Referenced by btree_advance_and_find_key(), btree_advance_to_next_slot_and_fix_page(), btree_build_nleafs(), btree_check_page_key(), btree_check_pages(), btree_connect_page(), btree_delete_key_from_leaf(), btree_delete_meta_record(), btree_dump_page(), btree_dump_page_with_subtree(), btree_find_AR_sampling_leaf(), btree_find_boundary_leaf(), btree_find_key_from_page(), btree_find_lower_bound_leaf(), btree_find_next_index_record_holding_current_helper(), btree_find_split_point(), btree_fix_ovfl_oid_page(), btree_fix_ovfl_oid_pages_tree(), btree_get_next_node_info(), btree_get_next_page(), btree_get_next_page_vpid(), btree_get_node_level(), btree_get_stats_with_AR_sampling(), btree_get_subtree_capacity(), btree_get_unique_statistics(), btree_key_insert_new_key(), btree_key_online_index_IB_insert_list(), btree_leaf_is_key_between_min_max(), btree_merge_node(), btree_merge_node_and_advance(), btree_merge_root(), btree_node_is_compressed(), btree_node_mergeable(), btree_node_number_of_keys(), btree_node_size_uncompressed(), btree_proceed_leaf(), btree_range_scan_advance_over_filtered_keys(), btree_range_scan_descending_fix_prev_leaf(), btree_repair_prev_link_by_btid(), btree_rv_record_modify_internal(), btree_rv_undo_mark_dealloc_page(), btree_save_last_leafrec(), btree_search_key_and_apply_functions(), btree_search_leaf_page(), btree_set_split_point(), btree_set_vpid_previous_vpid(), btree_split_node(), btree_split_node_and_advance(), btree_verify_leaf_node(), btree_verify_node(), btree_verify_nonleaf_node(), btree_verify_subtree(), and btree_insert_list::check_release_latch().

BTREE_OVERFLOW_HEADER* btree_get_overflow_header ( THREAD_ENTRY thread_p,
PAGE_PTR  page_ptr 
)

Definition at line 344 of file btree_load.c.

References assert, assert_release, recdes::data, HEADER, NULL, PAGE_BTREE, PEEK, pgbuf_check_page_ptype(), S_SUCCESS, and spage_get_record().

Referenced by btree_construct_leafs(), and btree_get_next_overflow_vpid().

Here is the caller graph for this function:

int btree_get_prefix_separator ( const DB_VALUE key1,
const DB_VALUE key2,
DB_VALUE prefix_key,
TP_DOMAIN key_domain 
)
int btree_init_overflow_header ( THREAD_ENTRY thread_p,
PAGE_PTR  page_ptr,
BTREE_OVERFLOW_HEADER ovf_header 
)
void BTREE_MVCC_SET_HEADER_FIXED_SIZE ( MVCC_REC_HEADER p_mvcc_rec_header)
inline
int btree_node_header_redo_log ( THREAD_ENTRY thread_p,
VFID vfid,
PAGE_PTR  page_ptr 
)
int btree_node_header_undo_log ( THREAD_ENTRY thread_p,
VFID vfid,
PAGE_PTR  page_ptr 
)

Definition at line 414 of file btree_load.c.

References recdes::data, ER_FAILED, HEADER, recdes::length, log_append_undo_data2(), NO_ERROR, PEEK, RVBT_NDHEADER_UPD, S_SUCCESS, and spage_get_record().

Referenced by btree_merge_root(), btree_set_vpid_previous_vpid(), and btree_split_node().

Here is the caller graph for this function:

int btree_node_number_of_keys ( THREAD_ENTRY thread_p,
PAGE_PTR  page_ptr 
)

Definition at line 3755 of file btree_load.c.

References ARG_FILE_LINE, assert, assert_release, btree_get_node_header(), BTREE_LEAF_NODE, BTREE_NON_LEAF_NODE, er_log_debug, btree_node_header::node_level, NULL, PAGE_BTREE, pgbuf_check_page_ptype(), and spage_number_of_records().

Referenced by btree_advance_to_next_slot_and_fix_page(), btree_build_nleafs(), btree_check_page_key(), btree_check_pages(), btree_compress_node(), btree_delete_key_from_leaf(), btree_dump_page(), btree_dump_page_with_subtree(), btree_find_AR_sampling_leaf(), btree_find_boundary_leaf(), btree_find_key_from_page(), btree_find_lower_bound_leaf(), btree_find_next_index_record_holding_current(), btree_find_next_index_record_holding_current_helper(), btree_find_split_point(), btree_fix_ovfl_oid_page(), btree_get_next_node_info(), btree_get_stats_with_AR_sampling(), btree_get_subtree_capacity(), btree_get_unique_statistics(), btree_key_append_object_non_unique(), btree_key_insert_new_key(), btree_key_insert_new_object(), btree_key_lock_and_append_object_unique(), btree_leaf_is_key_between_min_max(), btree_merge_node(), btree_merge_node_and_advance(), btree_merge_root(), btree_node_common_prefix(), btree_node_is_compressed(), btree_node_mergeable(), btree_node_size_uncompressed(), btree_range_scan_advance_over_filtered_keys(), btree_range_scan_descending_fix_prev_leaf(), btree_range_scan_resume(), btree_rv_record_modify_internal(), btree_search_leaf_page(), btree_search_nonleaf_page(), btree_set_split_point(), btree_split_node(), btree_split_node_and_advance(), btree_split_root(), btree_split_test(), btree_verify_leaf_node(), btree_verify_node(), btree_verify_nonleaf_node(), and btree_verify_subtree().

void btree_rv_mvcc_save_increments ( const BTID btid,
int  key_delta,
int  oid_delta,
int  null_delta,
RECDES recdes 
)

Definition at line 645 of file btree_load.c.

References recdes::area_size, assert, CAST_STRLEN, recdes::data, recdes::length, NULL, OR_BTID_ALIGNED_SIZE, OR_INT_SIZE, OR_PUT_BTID, and OR_PUT_INT.

Referenced by logtb_tran_update_unique_stats().

Here is the caller graph for this function:

void btree_rv_nodehdr_dump ( FILE *  fp,
int  length,
void *  data 
)
DISK_ISVALID btree_verify_tree ( THREAD_ENTRY thread_p,
const OID class_oid_p,
BTID_INT btid,
const char *  btname 
)