CUBRID Engine  latest
btree.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 
20 /*
21  * btree.h: B+tree index manager module(interface)
22  */
23 
24 #ifndef _BTREE_H_
25 #define _BTREE_H_
26 
27 #ident "$Id$"
28 
29 #if !defined (SERVER_MODE) && !defined (SA_MODE)
30 #error Belongs to server module
31 #endif /* !defined (SERVER_MODE) && !defined (SA_MODE) */
32 
33 #include "access_spec.hpp"
34 #include "config.h"
35 #include "disk_manager.h"
36 #include "object_domain.h"
37 #include "oid.h"
38 #include "lock_manager.h"
39 #include "log_lsa.hpp"
40 #include "mvcc.h"
41 #include "query_evaluator.h"
42 #include "recovery.h"
43 #include "statistics.h"
44 #include "storage_common.h"
45 
46 // forward definition
47 class btree_unique_stats;
48 struct key_val_range;
49 struct or_buf;
50 typedef struct or_buf OR_BUF;
51 
52 #define SINGLE_ROW_INSERT 1
53 #define SINGLE_ROW_DELETE 2
54 #define SINGLE_ROW_UPDATE 3
55 #define SINGLE_ROW_MODIFY 4 /* used in case of undo */
56 #define MULTI_ROW_INSERT 5
57 #define MULTI_ROW_DELETE 6
58 #define MULTI_ROW_UPDATE 7
59 
60 #define BTREE_IS_MULTI_ROW_OP(op) \
61  (op == MULTI_ROW_INSERT || op == MULTI_ROW_UPDATE || op == MULTI_ROW_DELETE)
62 
63 #define BTREE_NEED_UNIQUE_CHECK(thread_p, op) \
64  (logtb_is_current_active (thread_p) \
65  && (op == SINGLE_ROW_INSERT || op == MULTI_ROW_INSERT || op == SINGLE_ROW_UPDATE))
66 
67 /* For next-key locking */
68 #define BTREE_CONTINUE -1
69 #define BTREE_GETOID_AGAIN -2
70 #define BTREE_GETOID_AGAIN_WITH_CHECK -3
71 #define BTREE_SEARCH_AGAIN_WITH_CHECK -4
72 #define BTREE_GOTO_END_OF_SCAN -5
73 #define BTREE_GOTO_START_LOCKING -6
74 #define BTREE_GOTO_LOCKING_DONE -7
75 #define BTREE_RESTART_SCAN -8
76 
77 enum
79 
80 /* B+tree node types */
81 typedef enum
82 {
87 
88 #define BTREE_IS_PRIMARY_KEY(unique_pk) ((unique_pk) & BTREE_CONSTRAINT_PRIMARY_KEY)
89 #define BTREE_IS_UNIQUE(unique_pk) ((unique_pk) & BTREE_CONSTRAINT_UNIQUE)
90 #define BTREE_IS_PART_KEY_DESC(btid_int) ((btid_int)->part_key_desc != 0)
91 
92 
93 #define BTREE_NORMAL_KEY 0
94 #define BTREE_OVERFLOW_KEY 1
95 
96 #define BTREE_SET_UNIQUE_VIOLATION_ERROR(THREAD,KEY,OID,C_OID,BTID,BTNM) \
97  btree_set_error(THREAD, KEY, OID, C_OID, BTID, BTNM, \
98  ER_ERROR_SEVERITY, ER_BTREE_UNIQUE_FAILED, __FILE__, __LINE__)
99 
100 
101 /* Fixed part of a non_leaf record */
102 typedef struct non_leaf_rec NON_LEAF_REC;
104 {
105  VPID pnt; /* The Child Page Pointer */
106  short key_len;
107 };
108 
109 /* Fixed part of a leaf record */
110 typedef struct leaf_rec LEAF_REC;
111 struct leaf_rec
112 {
113  VPID ovfl; /* Overflow page pointer, for overflow OIDs */
114  short key_len;
115 };
116 
117 /* BTID_INT structure from btree_load.h */
118 typedef struct btid_int BTID_INT;
119 struct btid_int
120 { /* Internal btree block */
122  int unique_pk; /* if it is an unique index, is PK */
123  int part_key_desc; /* the last partial-key domain is desc */
125  TP_DOMAIN *nonleaf_key_type; /* With prefix keys, the domain of the non leaf keys might be different. It will be
126  * different when the domain of index is one of the fixed character types. In that
127  * case, the domain of the non leaf keys will be the varying counterpart to the index
128  * domain. */
130  char *copy_buf; /* index key copy_buf pointer info; derived from INDX_SCAN_ID.copy_buf */
131  int copy_buf_len; /* index key copy_buf length info; derived from INDX_SCAN_ID.copy_buf_len */
133  OID topclass_oid; /* class oid for which index is created */
134 };
135 
136 /* key range structure */
139 {
140  RANGE range; /* range type */
144 };
145 
146 /* Forward definition. */
147 struct indx_scan_id;
148 typedef struct indx_scan_id INDX_SCAN_ID;
149 
151 {
155 };
157 
158 /* Btree range search scan structure */
159 /* TODO: Move fields used to select visible objects only from BTREE_SCAN to
160  * a different structure (that is pointed by bts_other).
161  */
162 typedef struct btree_scan BTREE_SCAN; /* BTS */
164 {
166 
167  /* TO BE REMOVED when btree_prepare_next_search is removed. */
169 
170  /* TO BE REMOVED when btree_find_next_index_record is removed. */
171  VPID P_vpid; /* vpid of previous leaf page */
172 
173  VPID C_vpid; /* vpid of current leaf page */
174 
175  /* TO BE REMOVED - maybe */
176  VPID O_vpid; /* vpid of overflow page */
177 
178  /* TO BE REMOVED when btree_find_next_index_record is removed. */
179  PAGE_PTR P_page; /* page ptr to previous leaf page */
180 
181  PAGE_PTR C_page; /* page ptr to current leaf page */
182 
183  /* TO BE REMOVED - maybe */
184  PAGE_PTR O_page; /* page ptr to overflow page */
185 
186  INT16 slot_id; /* current slot identifier */
187 
188  /* TO BE REMOVED */
189  int oid_pos; /* current oid position */
190 
191  DB_VALUE cur_key; /* current key value */
192  bool clear_cur_key; /* clear flag for current key value */
193 
194  BTREE_KEYRANGE key_range; /* key range information */
195  FILTER_INFO *key_filter; /* key filter information pointer */
196  FILTER_INFO key_filter_storage; /* key filter information storage */
197 
198  bool use_desc_index; /* use descending index */
199 
200  /* TO BE REMOVED */
201  int restart_scan; /* restart the scan */
202 
203  /* for query trace */
206 
208 
210 
211  /*
212  * cur_leaf_lsa
213  */
214  LOG_LSA cur_leaf_lsa; /* page LSA of current leaf page */
215  LOCK lock_mode; /* Lock mode - S_LOCK or X_LOCK. */
216 
218 
222  int offset;
223 
225 
226  bool end_scan;
230 
231  int n_oids_read; /* */
233 
235 
237 
240 
245 
246  PERF_UTIME_TRACKER time_track;
247 
248  void *bts_other;
249 };
250 
251 #define COMMON_PREFIX_UNKNOWN (-1)
252 
253 #define BTREE_INIT_SCAN(bts) \
254  do { \
255  (bts)->P_vpid.pageid = NULL_PAGEID; \
256  (bts)->C_vpid.pageid = NULL_PAGEID; \
257  (bts)->O_vpid.pageid = NULL_PAGEID; \
258  (bts)->P_page = NULL; \
259  (bts)->C_page = NULL; \
260  (bts)->O_page = NULL; \
261  (bts)->slot_id = NULL_SLOTID; \
262  (bts)->oid_pos = 0; \
263  (bts)->restart_scan = 0; \
264  (bts)->common_prefix = COMMON_PREFIX_UNKNOWN; \
265  db_make_null (&(bts)->cur_key); \
266  (bts)->clear_cur_key = false; \
267  (bts)->is_btid_int_valid = false; \
268  (bts)->read_uncommitted = false; \
269  (bts)->key_filter = NULL; \
270  (bts)->use_desc_index = false; \
271  (bts)->read_keys = 0; \
272  (bts)->qualified_keys = 0; \
273  (bts)->key_range_max_value_equal = false; \
274  LSA_SET_NULL (&(bts)->cur_leaf_lsa); \
275  (bts)->lock_mode = NULL_LOCK; \
276  (bts)->key_record.data = NULL; \
277  (bts)->offset = 0; \
278  (bts)->need_to_check_null = false; \
279  VPID_SET_NULL (&(bts)->leaf_rec_info.ovfl); \
280  (bts)->node_type = BTREE_LEAF_NODE; \
281  (bts)->key_status = BTS_KEY_IS_NOT_VERIFIED; \
282  (bts)->end_scan = false; \
283  (bts)->end_one_iteration = false; \
284  (bts)->is_interrupted = false; \
285  (bts)->is_key_partially_processed = false; \
286  (bts)->n_oids_read = 0; \
287  (bts)->n_oids_read_last_iteration = 0; \
288  (bts)->oid_ptr = NULL; \
289  (bts)->key_limit_lower = NULL; \
290  (bts)->key_limit_upper = NULL; \
291  (bts)->index_scan_idp = NULL; \
292  (bts)->is_scan_started = false; \
293  (bts)->force_restart_from_root = false; \
294  OID_SET_NULL (&(bts)->match_class_oid); \
295  (bts)->time_track.is_perf_tracking = false; \
296  (bts)->bts_other = NULL; \
297  } while (0)
298 
299 #define BTREE_RESET_SCAN(bts) \
300  do { \
301  (bts)->P_vpid.pageid = NULL_PAGEID; \
302  (bts)->C_vpid.pageid = NULL_PAGEID; \
303  (bts)->O_vpid.pageid = NULL_PAGEID; \
304  (bts)->P_page = NULL; \
305  (bts)->C_page = NULL; \
306  (bts)->O_page = NULL; \
307  (bts)->slot_id = -1; \
308  (bts)->oid_pos = 0; \
309  (bts)->restart_scan = 0; \
310  (bts)->common_prefix = COMMON_PREFIX_UNKNOWN; \
311  pr_clear_value (&(bts)->cur_key); \
312  db_make_null (&(bts)->cur_key); \
313  (bts)->clear_cur_key = false; \
314  (bts)->is_scan_started = false; \
315  } while (0)
316 
317 #define BTREE_END_OF_SCAN(bts) \
318  ((bts)->C_vpid.pageid == NULL_PAGEID \
319  && (bts)->O_vpid.pageid == NULL_PAGEID \
320  && !(bts)->is_scan_started)
321 
322 #define BTREE_START_OF_SCAN(bts) BTREE_END_OF_SCAN(bts)
323 
324 #define BTS_IS_DESCENDING_SCAN(bts) \
325  ((bts)->index_scan_idp->indx_info->use_desc_index)
326 
327 #define BTS_SET_INDEX_SCANID(bts, index_scan_idp) \
328  ((bts)->index_scan_idp = index_scan_idp)
329 #define BTS_SET_KEY_LIMIT(bts, lower, upper) \
330  do \
331  { \
332  (bts)->key_limit_lower = lower; \
333  (bts)->key_limit_upper = upper; \
334  } while (false)
335 
338 {
339  OID *oidp; /* OID buffer. */
340  int oid_cnt; /* Current OID count. */
341  int max_oid_cnt; /* Maximum desired OID count. */
342  int capacity; /* Maximum capacity of buffer. Can be different than maximum desired OID count. */
343  BTREE_ISCAN_OID_LIST *next_list; /* Pointer to next list of OID's. */
344 }; /* list of OIDs */
345 
348 {
349  BTID btid; /* B+tree index identifier */
350  BTREE_SCAN btree_scan; /* B+tree search scan structure */
351  BTREE_ISCAN_OID_LIST oid_list; /* Data area to store OIDs */
352 }; /* B+tree <key-oid> check scan structure */
353 
356 {
357  int dis_key_cnt; /* Distinct key count (in leaf pages) */
358  int tot_val_cnt; /* Total number of values stored in tree */
359  int avg_val_per_key; /* Average number of values (OIDs) per key */
360  int leaf_pg_cnt; /* Leaf page count */
361  int nleaf_pg_cnt; /* NonLeaf page count */
362  int tot_pg_cnt; /* Total page count */
363  int height; /* Height of the tree */
364  float sum_rec_len; /* Sum of all record lengths */
365  float sum_key_len; /* Sum of all distinct key lengths */
366  int avg_key_len; /* Average key length */
367  int avg_rec_len; /* Average page record length */
368  float tot_free_space; /* Total free space in index */
369  float tot_space; /* Total space occupied by index */
370  float tot_used_space; /* Total used space in index */
371  int avg_pg_key_cnt; /* Average page key count (in leaf pages) */
372  float avg_pg_free_sp; /* Average page free space */
373 };
374 
375 /*
376  * B-tree node scan section
377  */
378 
379 /* Structure used to queue b-tree nodes on index node info scan */
382 {
383  VPID crt_vpid; /* VPID for current node */
385 };
386 
387 /* Structure used for index node info scan */
390 {
391  BTID_INT btid_int; /* index btid_int structure */
392  VPID crt_vpid; /* VPID for current node */
393  PAGE_PTR crt_page; /* Current node PAGE_PTR */
394  bool first_call; /* First call for node info scan */
395 
396  BTREE_NODE_SCAN_QUEUE_ITEM *queue_head; /* B-tree node queue head */
397  BTREE_NODE_SCAN_QUEUE_ITEM *queue_tail; /* B-tree node queue tail */
398 };
399 
400 /* Initialize BTREE_NODE_SCAN structure for node info scan */
401 #define BTREE_NODE_SCAN_INIT(bns) \
402  do \
403  { \
404  VPID_SET_NULL (&(bns)->crt_vpid); \
405  (bns)->crt_page = NULL; \
406  (bns)->queue_head = (bns)->queue_tail = NULL; \
407  (bns)->first_call = true; \
408  } \
409  while (0)
410 
411 /* Add new item to b-tree node queue */
412 #define BTREE_NODE_SCAN_ADD_PAGE_TO_QUEUE(bns, node) \
413  if ((bns)->queue_tail == NULL) \
414  { \
415  (bns)->queue_head = (bns)->queue_tail = node; \
416  } \
417  else \
418  { \
419  (bns)->queue_tail->next = node; \
420  (bns)->queue_tail = node; \
421  }
422 
423 /* Pop first item from b-tree node queue */
424 #define BTREE_NODE_SCAN_POP_PAGE_FROM_QUEUE(bns, node) \
425  if ((bns)->queue_head == NULL) \
426  { \
427  node = NULL; \
428  } \
429  else \
430  { \
431  if ((bns)->queue_head == (bns)->queue_tail) \
432  { \
433  /* Only one item in queue */ \
434  node = (bns)->queue_head; \
435  (bns)->queue_tail = NULL; \
436  (bns)->queue_head = NULL; \
437  } \
438  else \
439  { \
440  node = (bns)->queue_head; \
441  (bns)->queue_head = node->next; \
442  node->next = NULL; \
443  } \
444  }
445 
446 /* Check if b-tree node queue is empty */
447 #define BTREE_NODE_SCAN_IS_QUEUE_EMPTY(bns) ((bns)->queue_head == NULL)
448 
449 #define DBVAL_BUFSIZE 4096
450 
451 #define BTREE_INIT_MVCC_HEADER(p_mvcc_rec_header) \
452  do \
453  { \
454  MVCC_SET_FLAG (p_mvcc_rec_header, 0); \
455  MVCC_SET_INSID (p_mvcc_rec_header, MVCCID_NULL); \
456  MVCC_SET_DELID (p_mvcc_rec_header, MVCCID_NULL); \
457  MVCC_SET_CHN (p_mvcc_rec_header, 0); \
458  MVCC_SET_REPID (p_mvcc_rec_header, 0); \
459  LSA_SET_NULL (p_mvcc_rec_header.prev_version_lsa); \
460  } \
461  while (0)
462 
463 /* When MVCC is enabled, btree_delete/btree_insert functionality are extended
464  * to do additional types of action. Depending on the context, an object can
465  * be added or removed, delete MVCCID can be added/removed or insert MVCCID
466  * can be removed.
467  */
469 {
470  BTREE_OP_NO_OP, /* No op. */
471 
472  BTREE_OP_INSERT_NEW_OBJECT, /* Insert a new object into b-tree along with its insert MVCCID. */
473  BTREE_OP_INSERT_MVCC_DELID, /* Insert delete MVCCID for object when deleted. */
474  BTREE_OP_INSERT_MARK_DELETED, /* Mark object as deleted. This is used on a unique index of a non-MVCC class. It is
475  * very similar to BTREE_OP_INSERT_MVCC_DELID. The differences are: 1. The context they
476  * are used for. MVCC delete is used to delete from MVCC-enabled classes. Mark deleted
477  * is used for unique indexes of MVCC-disabled classes like db_serial. 2. Mark deleted
478  * is followed by a postpone operation which removes the object after commit. 3. Mark
479  * deleted is not vacuumed. Object will be "cleaned" on commit/rollback. */
480  BTREE_OP_INSERT_UNDO_PHYSICAL_DELETE, /* Undo of physical delete. */
481 
482  BTREE_OP_DELETE_OBJECT_PHYSICAL, /* Physically delete an object from b-tree when MVCC is enabled. */
483  BTREE_OP_DELETE_OBJECT_PHYSICAL_POSTPONED, /* Physical delete was postponed. */
484  BTREE_OP_DELETE_UNDO_INSERT, /* Undo insert */
485  BTREE_OP_DELETE_UNDO_INSERT_UNQ_MULTIUPD, /* Undo insert into unique index, when multi-update exception to unique
486  * constraint violation is applied. Previous visible object must be
487  * returned to first position in record. */
488  BTREE_OP_DELETE_UNDO_INSERT_DELID, /* Remove only delete MVCCID for an object in b-tree. It is called when object
489  * deletion is roll-backed. */
490  BTREE_OP_DELETE_VACUUM_OBJECT, /* All object info is removed from b-tree. It is called by vacuum when the
491  * object becomes completely invisible. */
492  BTREE_OP_DELETE_VACUUM_INSID, /* Remove only insert MVCCID for an object in b-tree. It is called by vacuum when the
493  * object becomes visible to all running transactions. */
494 
495  BTREE_OP_NOTIFY_VACUUM, /* Notify vacuum of an object in need of cleanup. */
496 
497  /* Below purposes are used during online index loading. */
498  BTREE_OP_ONLINE_INDEX_IB_INSERT, /* Insert done by the Index Builder. */
499  BTREE_OP_ONLINE_INDEX_IB_DELETE, /* Delete done by the Index Builder. */
500  BTREE_OP_ONLINE_INDEX_TRAN_INSERT, /* Insert done by a transaction. */
501  BTREE_OP_ONLINE_INDEX_TRAN_INSERT_DF, /* Insert done by a transaction with DELETE_FLAG set. */
503  BTREE_OP_ONLINE_INDEX_TRAN_DELETE, /* Delete done by a transaction. */
505 };
507 
508 /* BTREE_MVCC_INFO -
509  * Structure used to store b-tree specific MVCC information.
510  * Flags field will show which information exists (insert and/or delete
511  * MVCCID's).
512  */
515 {
516  short flags; /* Has insert and has delete flags. */
517  MVCCID insert_mvccid; /* Insert MVCCID value. */
518  MVCCID delete_mvccid; /* Delete MVCCID value. */
519 };
520 #define BTREE_MVCC_INFO_INITIALIZER \
521  { 0, MVCCID_ALL_VISIBLE, MVCCID_NULL }
522 
523 /* BTREE_OBJECT_INFO -
524  * Structure used to store b-tree specific object information.
525  */
528 {
529  OID oid; /* Instance OID. */
530  OID class_oid; /* Class OID. */
531  BTREE_MVCC_INFO mvcc_info; /* MVCC information. */
532 };
533 #define BTREE_OBJECT_INFO_INITIALIZER \
534  { OID_INITIALIZER, OID_INITIALIZER, BTREE_MVCC_INFO_INITIALIZER }
535 
536 struct key_oid
537 {
540 };
541 
542 // *INDENT-OFF*
544 {
547 
550 
552  ~page_key_boundary ();
553 
554  void set_value (DB_VALUE &dest_value, DB_VALUE &src_value, bool &clear_src_value);
555  int set_value (THREAD_ENTRY * thread_p, DB_VALUE &dest_value, BTID_INT * btid, PAGE_PTR page_ptr, const INT16 slot);
556  int set_value (THREAD_ENTRY * thread_p, DB_VALUE &dest_value, BTID_INT * btid, PAGE_PTR page_ptr, RECDES &rec);
557 
558  int update_boundary_eq (THREAD_ENTRY * thread_p, BTID_INT * btid, PAGE_PTR page_ptr,
559  DB_VALUE &subtree_value, bool &clear_subtree_value, const INT16 subtree_slot);
560 
561  int update_boundary_lt (THREAD_ENTRY * thread_p, BTID_INT * btid, PAGE_PTR page_ptr,
562  RECDES &left_subtree_rec, DB_VALUE &subtree_value, bool &clear_subtree_value);
563 
564  int update_boundary_gt_or_eq (THREAD_ENTRY * thread_p, BTID_INT * btid, PAGE_PTR page_ptr,
565  DB_VALUE &subtree_value, bool &clear_subtree_value, const INT16 subtree_slot,
566  const int key_cnt);
567 };
568 
570 {
571  enum
572  {
573  KEY_AVAILABLE = 0,
574  KEY_NOT_AVAILABLE
575  };
576 
577  std::vector<key_oid> m_keys_oids;
578  std::vector<key_oid*> m_sorted_keys_oids;
579 
583 
585 
587 
590 
592 
596 
597  btree_insert_list () = delete;
598 
599  btree_insert_list (const TP_DOMAIN *&key_type)
600  : m_curr_key (NULL)
601  , m_curr_oid (NULL)
602  , m_curr_pos (0)
603  , m_key_type (key_type)
604  , m_ignored_nulls_cnt (0)
605  , m_use_page_boundary_check (false)
606  , m_use_sorted_bulk_insert (false)
607  {
608  }
609 
610  btree_insert_list (DB_VALUE *key, OID *oid);
611 
612  ~btree_insert_list ();
613 
614  int next_key ();
615 
617  {
618  return m_curr_oid;
619  }
620 
622  {
623  return m_curr_key;
624  }
625 
626  size_t add_key (const DB_VALUE *key, const OID &oid);
627 
628  void reset_boundary_keys ();
629 
630  void prepare_list (void);
631 
632  bool check_release_latch (THREAD_ENTRY * thread_p, void *arg, PAGE_PTR leaf_page);
633 };
634 // *INDENT-ON*
635 
636 /* BTREE_RANGE_SCAN_PROCESS_KEY_FUNC -
637  * btree_range_scan internal function that is called for each key that passes
638  * range/filter checks.
639  *
640  * Functions:
641  * btree_range_scan_select_visible_oids.
642  */
644 
645 extern int btree_find_foreign_key (THREAD_ENTRY * thread_p, BTID * btid, DB_VALUE * key, OID * class_oid,
646  OID * found_oid);
647 
649 
650 extern bool btree_is_unique_type (BTREE_TYPE type);
651 extern int xbtree_get_unique_pk (THREAD_ENTRY * thread_p, BTID * btid);
652 extern int btree_get_unique_statistics (THREAD_ENTRY * thread_p, BTID * btid, int *oid_cnt, int *null_cnt,
653  int *key_cnt);
654 extern int btree_get_unique_statistics_for_count (THREAD_ENTRY * thread_p, BTID * btid, int *oid_cnt, int *null_cnt,
655  int *key_cnt);
656 
657 extern int btree_get_stats (THREAD_ENTRY * thread_p, BTREE_STATS * stat_info_p, bool with_fullscan);
658 extern DISK_ISVALID btree_check_tree (THREAD_ENTRY * thread_p, const OID * class_oid_p, BTID * btid,
659  const char *btname);
660 extern DISK_ISVALID btree_check_by_btid (THREAD_ENTRY * thread_p, BTID * btid);
661 extern int btree_get_pkey_btid (THREAD_ENTRY * thread_p, OID * cls_oid, BTID * pkey_btid);
662 extern DISK_ISVALID btree_check_by_class_oid (THREAD_ENTRY * thread_p, OID * cls_oid, BTID * idx_btid);
663 extern DISK_ISVALID btree_check_all (THREAD_ENTRY * thread_p);
664 extern int btree_keyoid_checkscan_start (THREAD_ENTRY * thread_p, BTID * btid, BTREE_CHECKSCAN * btscan);
665 extern DISK_ISVALID btree_keyoid_checkscan_check (THREAD_ENTRY * thread_p, BTREE_CHECKSCAN * btscan, OID * cls_oid,
666  DB_VALUE * key, OID * oid);
667 extern void btree_keyoid_checkscan_end (THREAD_ENTRY * thread_p, BTREE_CHECKSCAN * btscan);
668 #if defined(ENABLE_UNUSED_FUNCTION)
669 extern int btree_estimate_total_numpages (THREAD_ENTRY * thread_p, int dis_key_cnt, int avg_key_len, int tot_val_cnt,
670  int *blt_pgcnt_est, int *blt_wrs_pgcnt_est);
671 #endif
672 
673 extern int btree_index_capacity (THREAD_ENTRY * thread_p, BTID * btid, BTREE_CAPACITY * cpc);
674 extern int btree_physical_delete (THREAD_ENTRY * thread_p, BTID * btid, DB_VALUE * key, OID * oid, OID * class_oid,
675  int *unique, int op_type, btree_unique_stats * unique_stat_info);
676 extern int btree_vacuum_insert_mvccid (THREAD_ENTRY * thread_p, BTID * btid, OR_BUF * buffered_key, OID * oid,
677  OID * class_oid, MVCCID insert_mvccid);
678 extern int btree_vacuum_object (THREAD_ENTRY * thread_p, BTID * btid, OR_BUF * buffered_key, OID * oid, OID * class_oid,
679  MVCCID delete_mvccid);
680 extern int btree_update (THREAD_ENTRY * thread_p, BTID * btid, DB_VALUE * old_key, DB_VALUE * new_key, OID * cls_oid,
681  OID * oid, int op_type, btree_unique_stats * unique_stat_info, int *unique,
682  MVCC_REC_HEADER * p_mvcc_rec_header);
683 extern int btree_reflect_global_unique_statistics (THREAD_ENTRY * thread_p, GLOBAL_UNIQUE_STATS * unique_stat_info,
684  bool only_active_tran);
685 extern int btree_find_min_or_max_key (THREAD_ENTRY * thread_p, BTID * btid, DB_VALUE * key, int flag_minkey);
686 extern bool btree_multicol_key_is_null (DB_VALUE * key);
687 extern int btree_multicol_key_has_null (DB_VALUE * key);
688 extern DISK_ISVALID btree_find_key (THREAD_ENTRY * thread_p, BTID * btid, OID * oid, DB_VALUE * key, bool * clear_key);
689 /* for migration */
690 extern TP_DOMAIN *btree_read_key_type (THREAD_ENTRY * thread_p, BTID * btid);
691 
692 /* Dump routines */
693 extern int btree_dump_capacity (THREAD_ENTRY * thread_p, FILE * fp, BTID * btid);
694 extern void btree_dump (THREAD_ENTRY * thread_p, FILE * fp, BTID * btid, int level);
695 /* Recovery routines */
696 extern int btree_rv_util_save_page_records (THREAD_ENTRY * thread_p, PAGE_PTR page_ptr, INT16 first_slotid, int rec_cnt,
697  INT16 ins_slotid, char *data, int *length);
698 #if defined(ENABLE_UNUSED_FUNCTION)
699 extern void btree_rv_util_dump_leafrec (THREAD_ENTRY * thread_p, FILE * fp, BTID_INT * btid, RECDES * Rec);
700 extern void btree_rv_util_dump_nleafrec (THREAD_ENTRY * thread_p, FILE * fp, BTID_INT * btid, RECDES * Rec);
701 #endif
702 extern int btree_rv_roothdr_undo_update (THREAD_ENTRY * thread_p, LOG_RCV * recv);
703 extern int btree_rv_update_tran_stats (THREAD_ENTRY * thread_p, LOG_RCV * recv);
704 extern void btree_rv_roothdr_dump (FILE * fp, int length, void *data);
705 extern int btree_rv_ovfid_undoredo_update (THREAD_ENTRY * thread_p, LOG_RCV * recv);
706 extern void btree_rv_ovfid_dump (FILE * fp, int length, void *data);
707 extern int btree_rv_nodehdr_undoredo_update (THREAD_ENTRY * thread_p, LOG_RCV * recv);
708 extern int btree_rv_nodehdr_redo_insert (THREAD_ENTRY * thread_p, LOG_RCV * recv);
709 extern int btree_rv_nodehdr_undo_insert (THREAD_ENTRY * thread_p, LOG_RCV * recv);
710 extern int btree_rv_noderec_undoredo_update (THREAD_ENTRY * thread_p, LOG_RCV * recv);
711 extern void btree_rv_noderec_dump (FILE * fp, int length, void *data);
712 extern int btree_rv_noderec_redo_insert (THREAD_ENTRY * thread_p, LOG_RCV * recv);
713 extern int btree_rv_noderec_undo_insert (THREAD_ENTRY * thread_p, LOG_RCV * recv);
714 extern void btree_rv_noderec_dump_slot_id (FILE * fp, int length, void *data);
715 extern int btree_rv_pagerec_insert (THREAD_ENTRY * thread_p, LOG_RCV * recv);
716 extern int btree_rv_pagerec_delete (THREAD_ENTRY * thread_p, LOG_RCV * recv);
717 extern int btree_rv_newpage_redo_init (THREAD_ENTRY * thread_p, LOG_RCV * recv);
718 extern int btree_rv_save_keyval_for_undo (BTID_INT * btid, DB_VALUE * key, OID * cls_oid, OID * oid,
720  char *preallocated_buffer, char **data, int *capacity, int *length);
722  BTREE_OBJECT_INFO * first_version,
723  BTREE_OBJECT_INFO * second_version, BTREE_OP_PURPOSE purpose,
724  char *preallocated_buffer, char **data, int *capacity,
725  int *length);
726 extern int btree_rv_keyval_undo_insert (THREAD_ENTRY * thread_p, LOG_RCV * recv);
727 extern int btree_rv_keyval_undo_insert_unique (THREAD_ENTRY * thread_p, LOG_RCV * recv);
728 extern int btree_rv_keyval_undo_insert_mvcc_delid (THREAD_ENTRY * thread_p, LOG_RCV * recv);
729 extern int btree_rv_keyval_undo_delete (THREAD_ENTRY * thread_p, LOG_RCV * recv);
730 extern int btree_rv_remove_marked_for_delete (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
731 extern void btree_rv_keyval_dump (FILE * fp, int length, void *data);
732 extern int btree_rv_undoredo_copy_page (THREAD_ENTRY * thread_p, LOG_RCV * recv);
733 extern int btree_rv_nop (THREAD_ENTRY * thread_p, LOG_RCV * recv);
734 
735 extern int btree_rv_redo_global_unique_stats_commit (THREAD_ENTRY * thread_p, LOG_RCV * recv);
736 extern int btree_rv_undo_global_unique_stats_commit (THREAD_ENTRY * thread_p, LOG_RCV * recv);
737 
738 #include "scan_manager.h"
739 
740 extern int btree_keyval_search (THREAD_ENTRY * thread_p, BTID * btid, SCAN_OPERATION_TYPE scan_op_type,
741  BTREE_SCAN * BTS, key_val_range * key_val_range, OID * class_oid, FILTER_INFO * filter,
742  INDX_SCAN_ID * isidp, bool is_all_class_srch);
743 extern int btree_range_scan (THREAD_ENTRY * thread_p, BTREE_SCAN * bts, BTREE_RANGE_SCAN_PROCESS_KEY_FUNC * key_func);
744 extern int btree_range_scan_select_visible_oids (THREAD_ENTRY * thread_p, BTREE_SCAN * bts);
745 extern int btree_attrinfo_read_dbvalues (THREAD_ENTRY * thread_p, DB_VALUE * curr_key, int *btree_att_ids,
746  int btree_num_att, HEAP_CACHE_ATTRINFO * attr_info, int func_index_col_id);
747 extern int btree_coerce_key (DB_VALUE * src_keyp, int keysize, TP_DOMAIN * btree_domainp, int key_minmax);
748 extern int btree_set_error (THREAD_ENTRY * thread_p, const DB_VALUE * key, const OID * obj_oid, const OID * class_oid,
749  const BTID * btid, const char *bt_name, int severity, int err_id, const char *filename,
750  int lineno);
751 extern DISK_ISVALID btree_repair_prev_link (THREAD_ENTRY * thread_p, OID * oid, BTID * btid, bool repair);
752 extern int btree_index_start_scan (THREAD_ENTRY * thread_p, int show_type, DB_VALUE ** arg_values, int arg_cnt,
753  void **ctx);
754 extern int btree_index_end_scan (THREAD_ENTRY * thread_p, void **ctx);
755 extern SCAN_CODE btree_index_next_scan (THREAD_ENTRY * thread_p, int cursor, DB_VALUE ** out_values, int out_cnt,
756  void *ctx);
757 
758 extern SCAN_CODE btree_get_next_key_info (THREAD_ENTRY * thread_p, BTID * btid, BTREE_SCAN * bts, int num_classes,
759  OID * class_oids_ptr, INDX_SCAN_ID * index_scan_id_p, DB_VALUE ** key_info);
761  DB_VALUE ** node_info);
762 
763 extern int xbtree_get_key_type (THREAD_ENTRY * thread_p, BTID btid, TP_DOMAIN ** key_type);
764 
765 extern int btree_leaf_get_first_object (BTID_INT * btid, RECDES * recp, OID * oidp, OID * class_oid,
767 extern void btree_leaf_change_first_object (THREAD_ENTRY * thread_p, RECDES * recp, BTID_INT * btid, OID * oidp,
768  OID * class_oidp, BTREE_MVCC_INFO * mvcc_info, int *key_offset,
769  char **rv_undo_data_ptr, char **rv_redo_data_ptr);
770 extern int btree_insert (THREAD_ENTRY * thread_p, BTID * btid, DB_VALUE * key, OID * cls_oid, OID * oid, int op_type,
771  btree_unique_stats * unique_stat_info, int *unique, MVCC_REC_HEADER * p_mvcc_rec_header);
772 extern int btree_mvcc_delete (THREAD_ENTRY * thread_p, BTID * btid, DB_VALUE * key, OID * class_oid, OID * oid,
773  int op_type, btree_unique_stats * unique_stat_info, int *unique,
774  MVCC_REC_HEADER * p_mvcc_rec_header);
775 
776 extern void btree_set_mvcc_header_ids_for_update (THREAD_ENTRY * thread_p, bool do_delete_only, bool do_insert_only,
778 
779 extern int btree_compare_btids (void *mem_btid1, void *mem_btid2);
780 
781 extern char *btree_unpack_mvccinfo (char *ptr, BTREE_MVCC_INFO * mvcc_info, short btree_mvcc_flags);
782 extern char *btree_pack_mvccinfo (char *ptr, BTREE_MVCC_INFO * mvcc_info);
784 
785 extern void btree_set_mvcc_flags_into_oid (MVCC_REC_HEADER * p_mvcc_header, OID * oid);
786 extern void btree_clear_mvcc_flags_from_oid (OID * oid);
787 
788 extern int btree_rv_read_keyval_info_nocopy (THREAD_ENTRY * thread_p, char *datap, int data_size, BTID_INT * btid,
789  OID * cls_oid, OID * oid, BTREE_MVCC_INFO * mvcc_info, DB_VALUE * key);
790 extern void btree_rv_read_keybuf_nocopy (THREAD_ENTRY * thread_p, char *datap, int data_size, BTID_INT * btid,
791  OID * cls_oid, OID * oid, BTREE_MVCC_INFO * mvcc_info, OR_BUF * key_buf);
792 extern void btree_rv_read_keybuf_two_objects (THREAD_ENTRY * thread_p, char *datap, int data_size, BTID_INT * btid_int,
793  BTREE_OBJECT_INFO * first_version, BTREE_OBJECT_INFO * second_version,
794  OR_BUF * key_buf);
795 extern int btree_check_valid_record (THREAD_ENTRY * thread_p, BTID_INT * btid, RECDES * recp, BTREE_NODE_TYPE node_type,
796  DB_VALUE * key);
797 extern int btree_check_foreign_key (THREAD_ENTRY * thread_p, OID * cls_oid, HFID * hfid, OID * oid, DB_VALUE * keyval,
798  int n_attrs, OID * pk_cls_oid, BTID * pk_btid, const char *fk_name);
799 
800 extern void btree_get_root_vpid_from_btid (THREAD_ENTRY * thread_p, BTID * btid, VPID * root_vpid);
801 extern int btree_get_btid_from_file (THREAD_ENTRY * thread_p, const VFID * vfid, BTID * btid_out);
802 
803 extern int btree_prepare_bts (THREAD_ENTRY * thread_p, BTREE_SCAN * bts, BTID * btid, INDX_SCAN_ID * index_scan_id_p,
804  key_val_range * key_val_range, FILTER_INFO * filter, const OID * match_class_oid,
805  DB_BIGINT * key_limit_upper, DB_BIGINT * key_limit_lower, bool need_to_check_null,
806  void *bts_other);
807 
810 
811 extern int btree_rv_redo_record_modify (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
812 extern int btree_rv_undo_record_modify (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
813 extern int btree_rv_remove_unique_stats (THREAD_ENTRY * thread_p, LOG_RCV * recv);
814 
815 extern void btree_leaf_record_change_overflow_link (THREAD_ENTRY * thread_p, BTID_INT * btid_int, RECDES * leaf_record,
816  VPID * new_overflow_vpid, char **rv_undo_data_ptr,
817  char **rv_redo_data_ptr);
818 
819 extern int btree_rv_undo_mark_dealloc_page (THREAD_ENTRY * thread_p, LOG_RCV * rcv);
820 
821 extern unsigned int btree_hash_btid (void *btid, int hash_size);
822 
823 extern int btree_create_file (THREAD_ENTRY * thread_p, const OID * class_oid, int attrid, BTID * btid);
824 extern int btree_initialize_new_page (THREAD_ENTRY * thread_p, PAGE_PTR page, void *args);
825 
826 extern int btree_locate_key (THREAD_ENTRY * thread_p, BTID_INT * btid_int, DB_VALUE * key, VPID * pg_vpid,
827  INT16 * slot_id, PAGE_PTR * leaf_page_out, bool * found_p);
828 extern int btree_get_num_visible_from_leaf_and_ovf (THREAD_ENTRY * thread_p, BTID_INT * btid_int, RECDES * leaf_record,
829  int offset_after_key, LEAF_REC * leaf_info, int *max_visible_oids,
830  MVCC_SNAPSHOT * mvcc_snapshot, int *num_visible);
831 
832 extern int btree_write_record (THREAD_ENTRY * thread_p, BTID_INT * btid, void *node_rec, DB_VALUE * key,
833  BTREE_NODE_TYPE node_type, int key_type, int key_len, bool during_loading,
834  OID * class_oid, OID * oid, BTREE_MVCC_INFO * mvcc_info, RECDES * rec);
835 extern int btree_read_record (THREAD_ENTRY * thread_p, BTID_INT * btid, PAGE_PTR pgptr, RECDES * Rec, DB_VALUE * key,
836  void *rec_header, BTREE_NODE_TYPE node_type, bool * clear_key, int *offset, int copy,
837  BTREE_SCAN * bts);
838 extern DB_VALUE_COMPARE_RESULT btree_compare_key (DB_VALUE * key1, DB_VALUE * key2, TP_DOMAIN * key_domain,
839  int do_coercion, int total_order, int *start_colp);
841 
842 extern void btree_dump_key (FILE * fp, const DB_VALUE * key);
843 
844 extern int btree_online_index_dispatcher (THREAD_ENTRY * thread_p, BTID * btid, DB_VALUE * key, OID * cls_oid,
845  OID * oid, int unique, BTREE_OP_PURPOSE purpose, LOG_LSA * undo_nxlsa);
846 extern int btree_online_index_list_dispatcher (THREAD_ENTRY * thread_p, BTID * btid, OID * cls_oid,
847  btree_insert_list * insert_list, int unique, BTREE_OP_PURPOSE purpose,
848  LOG_LSA * undo_nxlsa);
849 
852 
853 extern int btree_online_index_check_unique_constraint (THREAD_ENTRY * thread_p, BTID * btid, const char *index_name,
854  OID * class_oid);
855 extern int btree_get_class_oid_of_unique_btid (THREAD_ENTRY * thread_p, BTID * btid, OID * class_oid);
856 extern bool btree_is_btid_online_index (THREAD_ENTRY * thread_p, OID * class_oid, BTID * btid);
857 
858 #endif /* _BTREE_H_ */
int btree_rv_nop(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:18017
char * PAGE_PTR
DB_VALUE * get_key()
Definition: btree.h:621
void * bts_other
Definition: btree.h:248
VPID ovfl
Definition: btree.h:113
SCAN_CODE btree_index_next_scan(THREAD_ENTRY *thread_p, int cursor, DB_VALUE **out_values, int out_cnt, void *ctx)
Definition: btree.c:20669
int btree_locate_key(THREAD_ENTRY *thread_p, BTID_INT *btid_int, DB_VALUE *key, VPID *pg_vpid, INT16 *slot_id, PAGE_PTR *leaf_page_out, bool *found_p)
Definition: btree.c:14151
DISK_ISVALID btree_check_by_class_oid(THREAD_ENTRY *thread_p, OID *cls_oid, BTID *idx_btid)
Definition: btree.c:7885
int btree_read_record(THREAD_ENTRY *thread_p, BTID_INT *btid, PAGE_PTR pgptr, RECDES *Rec, DB_VALUE *key, void *rec_header, BTREE_NODE_TYPE node_type, bool *clear_key, int *offset, int copy, BTREE_SCAN *bts)
Definition: btree.c:4233
int btree_multicol_key_has_null(DB_VALUE *key)
Definition: btree.c:18079
bool is_btid_int_valid
Definition: btree.h:242
PERF_UTIME_TRACKER time_track
Definition: btree.h:246
int btree_get_unique_statistics(THREAD_ENTRY *thread_p, BTID *btid, int *oid_cnt, int *null_cnt, int *key_cnt)
Definition: btree.c:6199
int btree_rv_redo_global_unique_stats_commit(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:22425
bool is_key_partially_processed
Definition: btree.h:229
FILTER_INFO key_filter_storage
Definition: btree.h:196
int btree_check_valid_record(THREAD_ENTRY *thread_p, BTID_INT *btid, RECDES *recp, BTREE_NODE_TYPE node_type, DB_VALUE *key)
Definition: btree.c:21828
char * copy_buf
Definition: btree.h:130
BTREE_ISCAN_OID_LIST * next_list
Definition: btree.h:343
float sum_key_len
Definition: btree.h:365
int btree_keyval_search(THREAD_ENTRY *thread_p, BTID *btid, SCAN_OPERATION_TYPE scan_op_type, BTREE_SCAN *BTS, key_val_range *key_val_range, OID *class_oid, FILTER_INFO *filter, INDX_SCAN_ID *isidp, bool is_all_class_srch)
Definition: btree.c:14751
DB_VALUE_COMPARE_RESULT btree_compare_key(DB_VALUE *key1, DB_VALUE *key2, TP_DOMAIN *key_domain, int do_coercion, int total_order, int *start_colp)
Definition: btree.c:18636
bool use_desc_index
Definition: btree.h:198
BTID * sys_btid
Definition: btree.h:121
SCAN_CODE
RANGE range
Definition: btree.h:140
void btree_rv_read_keybuf_two_objects(THREAD_ENTRY *thread_p, char *datap, int data_size, BTID_INT *btid_int, BTREE_OBJECT_INFO *first_version, BTREE_OBJECT_INFO *second_version, OR_BUF *key_buf)
Definition: btree.c:17631
int dis_key_cnt
Definition: btree.h:357
int btree_online_index_check_unique_constraint(THREAD_ENTRY *thread_p, BTID *btid, const char *index_name, OID *class_oid)
Definition: btree.c:35273
VPID C_vpid
Definition: btree.h:173
int oid_pos
Definition: btree.h:189
int btree_keyoid_checkscan_start(THREAD_ENTRY *thread_p, BTID *btid, BTREE_CHECKSCAN *btscan)
Definition: btree.c:8330
btree_insert_list(const TP_DOMAIN *&key_type)
Definition: btree.h:599
void btree_rv_noderec_dump(FILE *fp, int length, void *data)
Definition: btree.c:17296
VFID ovfid
Definition: btree.h:129
void btree_dump_key(FILE *fp, const DB_VALUE *key)
Definition: btree.c:4615
DISK_ISVALID btree_check_by_btid(THREAD_ENTRY *thread_p, BTID *btid)
Definition: btree.c:7773
BTREE_TYPE
void btree_clear_mvcc_flags_from_oid(OID *oid)
Definition: btree.c:21763
bool end_one_iteration
Definition: btree.h:227
char * btree_pack_mvccinfo(char *ptr, BTREE_MVCC_INFO *mvcc_info)
Definition: btree.c:21369
int btree_get_btid_from_file(THREAD_ENTRY *thread_p, const VFID *vfid, BTID *btid_out)
Definition: btree.c:6930
int btree_rv_keyval_undo_delete(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17864
BTREE_MVCC_INFO mvcc_info
Definition: btree.h:531
TP_DOMAIN * nonleaf_key_type
Definition: btree.h:125
int btree_rv_keyval_undo_insert_unique(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17750
void btree_mvcc_info_to_heap_mvcc_header(BTREE_MVCC_INFO *mvcc_info, MVCC_REC_HEADER *mvcc_header)
Definition: btree.c:28787
int btree_rv_keyval_undo_insert_mvcc_delid(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17801
int btree_index_end_scan(THREAD_ENTRY *thread_p, void **ctx)
Definition: btree.c:20769
MVCCID delete_mvccid
Definition: btree.h:518
const TP_DOMAIN * m_key_type
Definition: btree.h:584
void btree_scan_clear_key(BTREE_SCAN *btree_scan)
Definition: btree.c:6035
int avg_key_len
Definition: btree.h:366
int btree_leaf_get_first_object(BTID_INT *btid, RECDES *recp, OID *oidp, OID *class_oid, BTREE_MVCC_INFO *mvcc_info)
Definition: btree.c:2429
page_key_boundary m_boundaries
Definition: btree.h:588
int btree_rv_undo_record_modify(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
Definition: btree.c:28835
bool clear_cur_key
Definition: btree.h:192
INT16 slot_id
Definition: btree.h:186
BTID_INT btid_int
Definition: btree.h:391
bool btree_is_btid_online_index(THREAD_ENTRY *thread_p, OID *class_oid, BTID *btid)
Definition: btree.c:35329
int btree_coerce_key(DB_VALUE *src_keyp, int keysize, TP_DOMAIN *btree_domainp, int key_minmax)
Definition: btree.c:14798
bool read_uncommitted
Definition: btree.h:168
int tot_val_cnt
Definition: btree.h:358
void btree_rv_read_keybuf_nocopy(THREAD_ENTRY *thread_p, char *datap, int data_size, BTID_INT *btid, OID *cls_oid, OID *oid, BTREE_MVCC_INFO *mvcc_info, OR_BUF *key_buf)
Definition: btree.c:17567
OID * get_oid()
Definition: btree.h:616
DB_VALUE * lower_key
Definition: btree.h:141
btree_op_purpose
Definition: btree.h:468
int nleaf_pg_cnt
Definition: btree.h:361
int btree_vacuum_object(THREAD_ENTRY *thread_p, BTID *btid, OR_BUF *buffered_key, OID *oid, OID *class_oid, MVCCID delete_mvccid)
Definition: btree.c:29429
short key_len
Definition: btree.h:114
int btree_rv_nodehdr_redo_insert(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17142
SCAN_CODE btree_get_next_node_info(THREAD_ENTRY *thread_p, BTID *btid, BTREE_NODE_SCAN *btns, DB_VALUE **node_info)
Definition: btree.c:20162
int btree_rv_noderec_undoredo_update(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17197
DB_VALUE m_right_key
Definition: btree.h:546
void btree_rv_keyval_dump(FILE *fp, int length, void *data)
Definition: btree.c:17947
RECDES key_record
Definition: btree.h:217
int m_ovf_appends
Definition: btree.h:594
PERF_PAGE_TYPE btree_get_perf_btree_page_type(THREAD_ENTRY *thread_p, PAGE_PTR page_ptr)
Definition: btree.c:33161
void btree_leaf_change_first_object(THREAD_ENTRY *thread_p, RECDES *recp, BTID_INT *btid, OID *oidp, OID *class_oidp, BTREE_MVCC_INFO *mvcc_info, int *key_offset, char **rv_undo_data_ptr, char **rv_redo_data_ptr)
Definition: btree.c:2798
int tot_pg_cnt
Definition: btree.h:362
void THREAD_ENTRY
int copy_buf_len
Definition: btree.h:131
bool need_to_check_null
Definition: btree.h:219
int xbtree_get_key_type(THREAD_ENTRY *thread_p, BTID btid, TP_DOMAIN **key_type)
Definition: btree.c:7167
OID m_oid
Definition: btree.h:539
int read_keys
Definition: btree.h:204
int btree_check_foreign_key(THREAD_ENTRY *thread_p, OID *cls_oid, HFID *hfid, OID *oid, DB_VALUE *keyval, int n_attrs, OID *pk_cls_oid, BTID *pk_btid, const char *fk_name)
Definition: btree.c:22005
LOCK
int btree_get_class_oid_of_unique_btid(THREAD_ENTRY *thread_p, BTID *btid, OID *class_oid)
Definition: btree.c:35304
int n_oids_read
Definition: btree.h:231
enum bts_key_status BTS_KEY_STATUS
Definition: btree.h:156
int btree_physical_delete(THREAD_ENTRY *thread_p, BTID *btid, DB_VALUE *key, OID *oid, OID *class_oid, int *unique, int op_type, btree_unique_stats *unique_stat_info)
Definition: btree.c:29340
bool is_interrupted
Definition: btree.h:228
float tot_space
Definition: btree.h:369
DISK_ISVALID btree_repair_prev_link(THREAD_ENTRY *thread_p, OID *oid, BTID *btid, bool repair)
Definition: btree.c:8203
int part_key_desc
Definition: btree.h:123
int btree_rv_pagerec_delete(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17410
void btree_rv_ovfid_dump(FILE *fp, int length, void *data)
Definition: btree.c:17079
void btree_rv_roothdr_dump(FILE *fp, int length, void *data)
Definition: btree.c:17011
DISK_ISVALID btree_keyoid_checkscan_check(THREAD_ENTRY *thread_p, BTREE_CHECKSCAN *btscan, OID *cls_oid, DB_VALUE *key, OID *oid)
Definition: btree.c:8364
BTREE_ISCAN_OID_LIST oid_list
Definition: btree.h:351
VPID crt_vpid
Definition: btree.h:392
int btree_get_num_visible_from_leaf_and_ovf(THREAD_ENTRY *thread_p, BTID_INT *btid_int, RECDES *leaf_record, int offset_after_key, LEAF_REC *leaf_info, int *max_visible_oids, MVCC_SNAPSHOT *mvcc_snapshot, int *num_visible)
Definition: btree.c:2566
int offset
Definition: btree.h:222
int btree_rv_util_save_page_records(THREAD_ENTRY *thread_p, PAGE_PTR page_ptr, INT16 first_slotid, int rec_cnt, INT16 ins_slotid, char *data, int *length)
Definition: btree.c:16433
int btree_prepare_bts(THREAD_ENTRY *thread_p, BTREE_SCAN *bts, BTID *btid, INDX_SCAN_ID *index_scan_id_p, key_val_range *key_val_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)
Definition: btree.c:15049
bool m_use_page_boundary_check
Definition: btree.h:589
int rev_level
Definition: btree.h:132
BTID_INT btid_int
Definition: btree.h:165
int btree_rv_keyval_undo_online_index_tran_delete(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:35100
int m_ovf_appends_new_page
Definition: btree.h:595
LOCK lock_mode
Definition: btree.h:215
bool m_use_sorted_bulk_insert
Definition: btree.h:591
BTREE_NODE_TYPE
Definition: btree.h:81
int btree_rv_undo_global_unique_stats_commit(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:22356
BTREE_NODE_TYPE node_type
Definition: btree.h:221
int btree_vacuum_insert_mvccid(THREAD_ENTRY *thread_p, BTID *btid, OR_BUF *buffered_key, OID *oid, OID *class_oid, MVCCID insert_mvccid)
Definition: btree.c:29397
int btree_rv_read_keyval_info_nocopy(THREAD_ENTRY *thread_p, char *datap, int data_size, BTID_INT *btid, OID *cls_oid, OID *oid, BTREE_MVCC_INFO *mvcc_info, DB_VALUE *key)
Definition: btree.c:17473
void btree_set_mvcc_header_ids_for_update(THREAD_ENTRY *thread_p, bool do_delete_only, bool do_insert_only, MVCCID *mvccid, MVCC_REC_HEADER *mvcc_rec_header)
Definition: btree.c:21297
FILTER_INFO * key_filter
Definition: btree.h:195
int n_oids_read_last_iteration
Definition: btree.h:232
int btree_rv_nodehdr_undo_insert(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17175
int btree_write_record(THREAD_ENTRY *thread_p, BTID_INT *btid, void *node_rec, DB_VALUE *key, BTREE_NODE_TYPE node_type, int key_type, int key_len, bool during_loading, OID *class_oid, OID *oid, BTREE_MVCC_INFO *mvcc_info, RECDES *rec)
Definition: btree.c:4076
bool m_is_inf_right_key
Definition: btree.h:549
int btree_rv_nodehdr_undoredo_update(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17096
bool btree_is_unique_type(BTREE_TYPE type)
Definition: btree.c:6046
BTS_KEY_STATUS key_status
Definition: btree.h:224
int btree_get_stats(THREAD_ENTRY *thread_p, BTREE_STATS *stat_info_p, bool with_fullscan)
Definition: btree.c:6959
char * btree_unpack_mvccinfo(char *ptr, BTREE_MVCC_INFO *mvcc_info, short btree_mvcc_flags)
Definition: btree.c:21338
#define NULL
Definition: freelistheap.h:34
DB_BIGINT * key_limit_lower
Definition: btree.h:238
PAGE_PTR P_page
Definition: btree.h:179
UINT64 MVCCID
int btree_mvcc_delete(THREAD_ENTRY *thread_p, BTID *btid, DB_VALUE *key, OID *class_oid, OID *oid, int op_type, btree_unique_stats *unique_stat_info, int *unique, MVCC_REC_HEADER *p_mvcc_rec_header)
Definition: btree.c:26021
Definition: btree.h:536
PAGE_PTR C_page
Definition: btree.h:181
MVCCID insert_mvccid
Definition: btree.h:517
short flags
Definition: btree.h:516
int btree_get_pkey_btid(THREAD_ENTRY *thread_p, OID *cls_oid, BTID *pkey_btid)
Definition: btree.c:7833
VPID pnt
Definition: btree.h:105
int height
Definition: btree.h:363
int btree_rv_newpage_redo_init(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17442
int num_index_term
Definition: btree.h:143
SCAN_OPERATION_TYPE
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)
Definition: btree.c:15938
TP_DOMAIN * btree_read_key_type(THREAD_ENTRY *thread_p, BTID *btid)
Definition: btree.c:9079
BTREE_NODE_SCAN_QUEUE_ITEM * next
Definition: btree.h:384
int btree_insert(THREAD_ENTRY *thread_p, BTID *btid, DB_VALUE *key, OID *cls_oid, OID *oid, int op_type, btree_unique_stats *unique_stat_info, int *unique, MVCC_REC_HEADER *p_mvcc_rec_header)
Definition: btree.c:25969
DISK_ISVALID btree_find_key(THREAD_ENTRY *thread_p, BTID *btid, OID *oid, DB_VALUE *key, bool *clear_key)
Definition: btree.c:18273
int restart_scan
Definition: btree.h:201
bool end_scan
Definition: btree.h:226
int btree_rv_redo_record_modify(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
Definition: btree.c:28822
int btree_rv_roothdr_undo_update(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:16966
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
int m_ignored_nulls_cnt
Definition: btree.h:586
bool m_is_inf_left_key
Definition: btree.h:548
void btree_leaf_record_change_overflow_link(THREAD_ENTRY *thread_p, BTID_INT *btid_int, RECDES *leaf_record, VPID *new_overflow_vpid, char **rv_undo_data_ptr, char **rv_redo_data_ptr)
Definition: btree.c:2296
int btree_create_file(THREAD_ENTRY *thread_p, const OID *class_oid, int attrid, BTID *btid)
Definition: btree.c:32892
DB_VALUE m_key
Definition: btree.h:538
bool btree_multicol_key_is_null(DB_VALUE *key)
Definition: btree.c:18033
int64_t DB_BIGINT
Definition: dbtype_def.h:751
DB_VALUE cur_key
Definition: btree.h:191
int btree_rv_save_keyval_for_undo(BTID_INT *btid, DB_VALUE *key, OID *cls_oid, OID *oid, BTREE_MVCC_INFO *mvcc_info, BTREE_OP_PURPOSE purpose, char *preallocated_buffer, char **data, int *capacity, int *length)
Definition: btree.c:16504
BTREE_NODE_SCAN_QUEUE_ITEM * queue_tail
Definition: btree.h:397
void btree_keyoid_checkscan_end(THREAD_ENTRY *thread_p, BTREE_CHECKSCAN *btscan)
Definition: btree.c:8445
enum btree_op_purpose BTREE_OP_PURPOSE
Definition: btree.h:506
VPID P_vpid
Definition: btree.h:171
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)
Definition: btree.c:16115
void btree_mvcc_info_from_heap_mvcc_header(MVCC_REC_HEADER *mvcc_header, BTREE_MVCC_INFO *mvcc_info)
Definition: btree.c:28752
DISK_ISVALID btree_check_all(THREAD_ENTRY *thread_p)
Definition: btree.c:8271
int btree_compare_btids(void *mem_btid1, void *mem_btid2)
Definition: btree.c:21777
int btree_rv_pagerec_insert(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17347
int avg_val_per_key
Definition: btree.h:359
DISK_ISVALID btree_check_tree(THREAD_ENTRY *thread_p, const OID *class_oid_p, BTID *btid, const char *btname)
Definition: btree.c:7711
BTREE_KEYRANGE key_range
Definition: btree.h:194
OID * m_curr_oid
Definition: btree.h:581
bool first_call
Definition: btree.h:394
BTREE_NODE_SCAN_QUEUE_ITEM * queue_head
Definition: btree.h:396
bts_key_status
Definition: btree.h:150
OID * oid_ptr
Definition: btree.h:234
int btree_rv_undo_mark_dealloc_page(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
Definition: btree.c:32847
DB_VALUE m_left_key
Definition: btree.h:545
int btree_range_scan_select_visible_oids(THREAD_ENTRY *thread_p, BTREE_SCAN *bts)
Definition: btree.c:25122
int btree_packed_mvccinfo_size(BTREE_MVCC_INFO *mvcc_info)
Definition: btree.c:21394
int avg_pg_key_cnt
Definition: btree.h:371
int btree_reflect_global_unique_statistics(THREAD_ENTRY *thread_p, GLOBAL_UNIQUE_STATS *unique_stat_info, bool only_active_tran)
Definition: btree.c:14049
OID topclass_oid
Definition: btree.h:133
int btree_index_start_scan(THREAD_ENTRY *thread_p, int show_type, DB_VALUE **arg_values, int arg_cnt, void **ctx)
Definition: btree.c:20523
int btree_rv_save_keyval_for_undo_two_objects(BTID_INT *btid, DB_VALUE *key, BTREE_OBJECT_INFO *first_version, BTREE_OBJECT_INFO *second_version, BTREE_OP_PURPOSE purpose, char *preallocated_buffer, char **data, int *capacity, int *length)
Definition: btree.c:16714
int btree_rv_ovfid_undoredo_update(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17039
void btree_dump(THREAD_ENTRY *thread_p, FILE *fp, BTID *btid, int level)
Definition: btree.c:9029
float tot_used_space
Definition: btree.h:370
int xbtree_get_unique_pk(THREAD_ENTRY *thread_p, BTID *btid)
Definition: btree.c:6129
PAGE_PTR O_page
Definition: btree.h:184
float avg_pg_free_sp
Definition: btree.h:372
int m_keep_page_iterations
Definition: btree.h:593
int btree_rv_remove_marked_for_delete(THREAD_ENTRY *thread_p, LOG_RCV *rcv)
Definition: btree.c:17914
bool key_range_max_value_equal
Definition: btree.h:209
int BTREE_RANGE_SCAN_PROCESS_KEY_FUNC(THREAD_ENTRY *thread_p, BTREE_SCAN *bts)
Definition: btree.h:643
VPID O_vpid
Definition: btree.h:176
std::vector< key_oid * > m_sorted_keys_oids
Definition: btree.h:578
int btree_rv_keyval_undo_online_index_tran_insert(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:35150
LOG_LSA cur_leaf_lsa
Definition: btree.h:214
int btree_update(THREAD_ENTRY *thread_p, BTID *btid, DB_VALUE *old_key, DB_VALUE *new_key, OID *cls_oid, OID *oid, int op_type, btree_unique_stats *unique_stat_info, int *unique, MVCC_REC_HEADER *p_mvcc_rec_header)
Definition: btree.c:13967
int qualified_keys
Definition: btree.h:205
int btree_get_unique_statistics_for_count(THREAD_ENTRY *thread_p, BTID *btid, int *oid_cnt, int *null_cnt, int *key_cnt)
Definition: btree.c:6171
bool is_scan_started
Definition: btree.h:243
int leaf_pg_cnt
Definition: btree.h:360
std::vector< key_oid > m_keys_oids
Definition: btree.h:577
float tot_free_space
Definition: btree.h:368
int avg_rec_len
Definition: btree.h:367
float sum_rec_len
Definition: btree.h:364
int btree_rv_noderec_redo_insert(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17234
PAGE_PTR crt_page
Definition: btree.h:393
int unique_pk
Definition: btree.h:122
void btree_get_root_vpid_from_btid(THREAD_ENTRY *thread_p, BTID *btid, VPID *root_vpid)
Definition: btree.c:6912
int btree_rv_noderec_undo_insert(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17271
LEAF_REC leaf_rec_info
Definition: btree.h:220
void btree_rv_noderec_dump_slot_id(FILE *fp, int length, void *data)
Definition: btree.c:17334
DB_VALUE_COMPARE_RESULT
Definition: dbtype_def.h:199
unsigned int btree_hash_btid(void *btid, int hash_size)
Definition: btree.c:32874
TP_DOMAIN * key_type
Definition: btree.h:124
int btree_find_min_or_max_key(THREAD_ENTRY *thread_p, BTID *btid, DB_VALUE *key, int flag_minkey)
Definition: btree.c:16284
RANGE
Definition: access_spec.hpp:32
short key_len
Definition: btree.h:106
PERF_PAGE_TYPE
Definition: perf_monitor.h:209
int btree_rv_keyval_undo_insert(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17696
BTREE_SCAN btree_scan
Definition: btree.h:350
struct indx_scan_id * index_scan_idp
Definition: btree.h:241
int common_prefix
Definition: btree.h:207
int btree_online_index_dispatcher(THREAD_ENTRY *thread_p, BTID *btid, DB_VALUE *key, OID *cls_oid, OID *oid, int unique, BTREE_OP_PURPOSE purpose, LOG_LSA *undo_nxlsa)
Definition: btree.c:33272
bool force_restart_from_root
Definition: btree.h:244
int btree_rv_remove_unique_stats(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:29276
OID match_class_oid
Definition: btree.h:236
int btree_rv_undoredo_copy_page(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:17996
DB_VALUE * upper_key
Definition: btree.h:142
DB_BIGINT * key_limit_upper
Definition: btree.h:239
DISK_ISVALID
Definition: disk_manager.h:53
int btree_online_index_list_dispatcher(THREAD_ENTRY *thread_p, BTID *btid, OID *cls_oid, btree_insert_list *insert_list, int unique, BTREE_OP_PURPOSE purpose, LOG_LSA *undo_nxlsa)
Definition: btree.c:33293
void btree_set_mvcc_flags_into_oid(MVCC_REC_HEADER *p_mvcc_header, OID *oid)
Definition: btree.c:21739
int btree_initialize_new_page(THREAD_ENTRY *thread_p, PAGE_PTR page, void *args)
Definition: btree.c:4971
int btree_dump_capacity(THREAD_ENTRY *thread_p, FILE *fp, BTID *btid)
Definition: btree.c:8734
int btree_find_foreign_key(THREAD_ENTRY *thread_p, BTID *btid, DB_VALUE *key, OID *class_oid, OID *found_oid)
Definition: btree.c:5972
int btree_index_capacity(THREAD_ENTRY *thread_p, BTID *btid, BTREE_CAPACITY *cpc)
Definition: btree.c:8673
int btree_range_scan(THREAD_ENTRY *thread_p, BTREE_SCAN *bts, BTREE_RANGE_SCAN_PROCESS_KEY_FUNC *key_func)
Definition: btree.c:24922
int btree_rv_update_tran_stats(THREAD_ENTRY *thread_p, LOG_RCV *recv)
Definition: btree.c:16922
DB_VALUE * m_curr_key
Definition: btree.h:580