10 #ifndef __BTREE_LOGREC_H 11 #define __BTREE_LOGREC_H 35 DECLARE_TLS(block_alloc<generic_page>, scratch_space_pool);
45 ::memset(
p, 0,
sizeof(generic_page));
53 scratch_space_pool->destroy_object(
p);
70 const cvec_t& el,
bool is_sys_txn)
71 : klen(key.get_length_as_keystr()),
74 w_assert1((
size_t)(klen + elen) <
sizeof(data));
81 return sizeof(
PageID) + 2 *
sizeof(int16_t) + klen + elen +
sizeof(bool);
97 const char* old_el,
int old_elen,
const cvec_t& new_el) {
98 _root_shpid = root_pid;
100 _old_elen = old_elen;
101 _new_elen = new_el.
size();
103 ::memcpy(_data + _klen, old_el, old_elen);
104 new_el.
copy_to(_data + _klen + _old_elen);
108 return sizeof(
PageID) + 3 *
sizeof(int16_t) + _klen + _old_elen + _new_elen;
124 const char* old_el,
const char* new_el,
size_t offset,
size_t elen) {
130 ::memcpy(_data + _klen, old_el + offset, elen);
131 ::memcpy(_data + _klen + elen, new_el, elen);
135 return sizeof(
PageID) + 3 *
sizeof(int16_t) + _klen + _elen * 2;
139 template<
class PagePtr>
143 uint16_t sys_txn : 1,
155 -
sizeof(uint16_t) * 2 -
sizeof(size_t)];
157 btree_ghost_t(
const PagePtr
p,
const vector<slotid_t>& slots,
const bool is_sys_txn) {
158 root_shpid = p->root();
160 if (
true == is_sys_txn) {
165 uint16_t* offsets =
reinterpret_cast<uint16_t*
>(slot_data);
166 char* current = slot_data +
sizeof(uint16_t) * slots.size();
170 uint16_t prefix_len = p->get_prefix_length();
171 prefix_offset = (current - slot_data);
173 ::memcpy(current, &prefix_len,
sizeof(uint16_t));
174 if (prefix_len > 0) {
175 ::memcpy(current +
sizeof(uint16_t), p->get_prefix_key(), prefix_len);
177 current +=
sizeof(uint16_t) + prefix_len;
180 for (
size_t i = 0; i < slots.size(); ++i) {
183 const char* key = p->_leaf_key_noprefix(slots[i], len);
184 offsets[i] = (current - slot_data);
186 uint16_t len_u16 = (uint16_t)len;
187 ::memcpy(current, &len_u16,
sizeof(uint16_t));
188 ::memcpy(current +
sizeof(uint16_t), key, len);
189 current +=
sizeof(uint16_t) + len;
191 total_data_size = current - slot_data;
199 ::memcpy(&prefix_len, slot_data + prefix_offset,
sizeof(uint16_t));
200 w_assert1 (prefix_offset <
sizeof(slot_data));
201 w_assert1 (prefix_len <
sizeof(slot_data));
202 const char* prefix_key = slot_data + prefix_offset +
sizeof(uint16_t);
203 uint16_t offset =
reinterpret_cast<const uint16_t*
>(slot_data)[i];
207 ::memcpy(&len, slot_data + offset,
sizeof(uint16_t));
209 const char* key = slot_data + offset +
sizeof(uint16_t);
215 return sizeof(
PageID) +
sizeof(uint16_t) * 2 +
sizeof(size_t) + total_data_size;
227 : klen(key.get_length_as_keystr()),
228 element_length(elem_length) {
233 return sizeof(uint16_t) * 2 + klen;
241 template<
class PagePtr>
247 w_assert1 (new_page_id != p->btree_root());
250 _root_pid = p->btree_root();
251 _foster_pid = p->get_foster();
252 _foster_emlsn = p->get_foster_emlsn();
255 _btree_level = (int16_t)p->level();
287 _new_child_emlsn(new_child_emlsn),
288 _new_child_pid(new_child_pid) {
316 +
sizeof(uint16_t) * 4
323 uint16_t move_count,
const w_keystr_t& new_high_fence,
326 move_count(move_count),
327 new_foster_child(new_foster_child) {
339 new_high_fence_len(0),
341 new_foster_child(foster_child) {}
344 return fields_sz + new_high_fence_len + new_chain_len;
354 #endif // __BTREE_LOGREC_H
Definition: btree_logrec.h:42
PageID btree_root() const
Definition: btree_page_h.h:239
fill2 _fill
Definition: btree_logrec.h:310
uint16_t element_length
Definition: btree_logrec.h:222
static xct_t * xct()
return xct this thread is running
Definition: smthread.h:364
int16_t _new_child_key_len
Definition: btree_logrec.h:281
Definition: btree_logrec.h:303
int size() const
Definition: btree_logrec.h:269
lsn_t _new_child_emlsn
Definition: btree_logrec.h:279
#define w_assert1(x)
Level 1 should not add significant extra time.
Definition: w_base.h:198
uint16_t klen
Definition: btree_logrec.h:62
btree_bulk_delete_t(PageID foster_parent, PageID foster_child)
Definition: btree_logrec.h:336
uint16_t _old_elen
Definition: btree_logrec.h:90
int size()
Definition: btree_logrec.h:107
btree_ghost_reserve_t(const w_keystr_t &key, int elem_length)
Definition: btree_logrec.h:226
Page handle for B-Tree data page.
Definition: btree_page_h.h:185
size_t total_data_size
Definition: btree_logrec.h:148
#define w_assert3(x)
Level 3 definitely adds significant time.
Definition: w_base.h:214
uint32_t StoreID
Definition: basics.h:47
A generic page view: any Zero page can be viewed as being of this type but it only exposes fields sha...
Definition: generic_page.h:121
Key string class which can represent a few special values.
Definition: w_key.h:47
DECLARE_TLS(block_alloc< generic_page >, scratch_space_pool)
Definition: btree_logrec.h:85
Base struct for log records that touch multi-pages.
Definition: logrec.h:463
static const lsn_t null
Definition: lsn.h:371
uint16_t _offset
Definition: btree_logrec.h:117
Definition: btree_logrec.h:59
int size()
Definition: btree_logrec.h:232
A constant vec_t (meaning things pointed to cannot be changed).
Definition: vec_t.h:95
btree_insert_t(PageID root, const w_keystr_t &key, const cvec_t &el, bool is_sys_txn)
Definition: btree_logrec.h:69
bool construct_from_keystr(const void *keystr, w_keystr_len_t length)
Definition: w_key.h:320
uint16_t new_chain_len
Definition: btree_logrec.h:308
PageID _root_shpid
Definition: btree_logrec.h:86
size_t copy_to(void *p, size_t limit=0x7fffffff) const
PageID _root_pid
Definition: btree_logrec.h:262
uint32_t PageID
Definition: basics.h:45
void serialize_as_keystr(void *buffer) const
Definition: w_key.h:495
#define w_assert0(x)
Default assert/debug level is 0.
Definition: w_base.h:175
PageID _new_child_pid
Definition: btree_logrec.h:280
uint16_t new_high_fence_len
Definition: btree_logrec.h:306
Log Sequence Number. See Log Sequence Numbers (LSN).
Definition: lsn.h:243
uint16_t _new_elen
Definition: btree_logrec.h:92
int16_t _btree_level
Definition: btree_logrec.h:265
btree page
Definition: generic_page.h:90
int size()
Definition: btree_logrec.h:134
size_t size()
Definition: btree_logrec.h:343
uint16_t _fence_len
Definition: btree_logrec.h:264
uint16_t prefix_offset
Definition: btree_logrec.h:146
btree_ghost_t(const PagePtr p, const vector< slotid_t > &slots, const bool is_sys_txn)
Definition: btree_logrec.h:157
size_t size() const
returns # bytes this vector references
Definition: vec_t.h:174
int size()
Definition: btree_logrec.h:214
btree_update_t(PageID root_pid, const w_keystr_t &key, const char *old_el, int old_elen, const cvec_t &new_el)
Definition: btree_logrec.h:96
uint16_t elen
Definition: btree_logrec.h:64
btree_overwrite_t(const btree_page_h &page, const w_keystr_t &key, const char *old_el, const char *new_el, size_t offset, size_t elen)
Definition: btree_logrec.h:123
uint16_t _elen
Definition: btree_logrec.h:119
w_keystr_len_t get_length_as_keystr() const
Definition: w_key.h:508
PageID root_shpid
Definition: btree_logrec.h:60
lsn_t _foster_emlsn
Definition: btree_logrec.h:263
btree_bulk_delete_t(PageID foster_parent, PageID new_foster_child, uint16_t move_count, const w_keystr_t &new_high_fence, const w_keystr_t &new_chain)
Definition: btree_logrec.h:322
Definition: btree_logrec.h:278
void get_keys(w_keystr_t &new_high_fence, w_keystr_t &new_chain)
Definition: btree_logrec.h:347
Definition: btree_logrec.h:242
uint16_t klen
Definition: btree_logrec.h:220
int size() const
Definition: btree_logrec.h:293
btree_foster_adopt_t(PageID page2_id, PageID new_child_pid, lsn_t new_child_emlsn, const w_keystr_t &new_child_key)
Definition: btree_logrec.h:284
SprScratchSpace(StoreID store, PageID pid)
Definition: btree_logrec.h:43
PageID _root_shpid
Definition: btree_logrec.h:113
PageID new_foster_child
Definition: btree_logrec.h:312
generic_page * p
Definition: btree_logrec.h:56
Definition: btree_logrec.h:219
uint16_t move_count
Definition: btree_logrec.h:304
Definition: btree_logrec.h:112
w_keystr_t get_key(size_t i) const
Definition: btree_logrec.h:195
~SprScratchSpace()
Definition: btree_logrec.h:52
btree_norec_alloc_t(const PagePtr p, PageID new_page_id, const w_keystr_t &fence, const w_keystr_t &chain_fence_high)
Definition: btree_logrec.h:243
Definition: btree_logrec.h:140
int size()
Definition: btree_logrec.h:80
PageID root_shpid
Definition: btree_logrec.h:141
bool sys_txn
Definition: btree_logrec.h:66
uint16_t _klen
Definition: btree_logrec.h:115
uint16_t _klen
Definition: btree_logrec.h:88