MySQL 9.0.0
Source Code Documentation
lob0index.h
Go to the documentation of this file.
1/*****************************************************************************
2
3Copyright (c) 2016, 2024, Oracle and/or its affiliates.
4
5This program is free software; you can redistribute it and/or modify it under
6the terms of the GNU General Public License, version 2.0, as published by the
7Free Software Foundation.
8
9This program is designed to work with certain software (including
10but not limited to OpenSSL) that is licensed under separate terms,
11as designated in a particular file or component or in included license
12documentation. The authors of MySQL hereby grant you an additional
13permission to link the program and your derivative works with the
14separately licensed software that they have either included with
15the program or referenced in the documentation.
16
17This program is distributed in the hope that it will be useful, but WITHOUT
18ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
19FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0,
20for more details.
21
22You should have received a copy of the GNU General Public License along with
23this program; if not, write to the Free Software Foundation, Inc.,
2451 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25
26*****************************************************************************/
27#ifndef lob0index_h
28#define lob0index_h
29
30#include "fut0lst.h"
31#include "lob0util.h"
32#include "trx0trx.h"
33#include "univ.i"
34
35namespace lob {
36
37typedef std::map<page_no_t, buf_block_t *> BlockCache;
38struct first_page_t;
39
40/** An in-memory copy of an index_entry_t data */
52
54
55 void reset();
56
57 bool is_null() { return (m_self.is_equal(fil_addr_null)); }
58
59 page_no_t get_page_no() const { return (m_page_no); }
60
61 /** Print this object into the given output stream.
62 @param[in] out the output stream.
63 @return the output stream. */
64 std::ostream &print(std::ostream &out) const;
65};
66
67/** List of index entry memory (iem) objects. */
68using List_iem_t = std::list<index_entry_mem_t>;
69
70/** Overloading the global output operator to print the index_entry_mem_t
71object.
72@param[in,out] out the output stream.
73@param[in] obj an object of type index_entry_mem_t
74@return the output stream. */
75inline std::ostream &operator<<(std::ostream &out,
76 const index_entry_mem_t &obj) {
77 return (obj.print(out));
78}
79
80/** An index entry pointing to an LOB page. */
82 /** Index entry offsets within node. */
83 static const ulint OFFSET_PREV = 0;
85
86 /** Points to base node of the list of versions. The size of base node is
87 16 bytes. */
89
90 /** The creator trx id. */
92
93 /** The modifier trx id. */
96
97 /** The undo number of the modifier trx. */
101
102 /** The LOB version number. */
104
105 /** Total length of an index node. */
106 static const ulint SIZE = OFFSET_LOB_VERSION + 4;
107
108 /** Constructor.
109 @param[in] node the pointer where index entry is located. */
112
114 : m_node(node), m_mtr(mtr), m_index(nullptr), m_block(nullptr) {}
115
117 : m_node(node), m_mtr(mtr), m_index(index), m_block(nullptr) {}
118
119 index_entry_t(mtr_t *mtr, const dict_index_t *index)
120 : m_node(nullptr), m_mtr(mtr), m_index(index), m_block(nullptr) {}
121
122 /* Move the node pointer to a different place within the same page.
123 @param[in] addr new location of node pointer. */
124 void reset(fil_addr_t &addr) {
125 ut_ad(m_block->page.id.page_no() == addr.page);
126
128 }
129
130 /* Get the buffer block of the current index entry.
131 @return the buffer block of the current index entry.*/
132 buf_block_t *get_block() const { return (m_block); }
133
134 /* Reset the current object to point to a different node.
135 @param[in] node the new file list node. */
136 void reset(flst_node_t *node) { m_node = node; }
137
138 bool is_null() const {
139 const byte zero[SIZE] = {0x00};
140 return (m_node == nullptr || memcmp(m_node, zero, SIZE) == 0);
141 }
142
143 /** Initialize the object fully. */
144 void init() {
148 set_trx_id(0);
151 set_data_len(0);
152 }
153
154 /** Get the location of the current index entry. */
155 fil_addr_t get_self() const;
156
157 /** The versions base node is set to NULL. */
159 ut_ad(m_mtr != nullptr);
160
161 byte *base_node = get_versions_ptr();
162 flst_init(base_node, m_mtr);
163 }
164
165 /** Determine if the current index entry be rolled back.
166 @param[in] trxid the transaction that is being purged.
167 @param[in] undo_no the undo number of trx.
168 @return true if this entry can be rolled back, false otherwise. */
169 bool can_rollback(trx_id_t trxid, undo_no_t undo_no) {
170 /* For rollback, make use of creator trx id. */
171 return ((trxid == get_trx_id()) && (get_trx_undo_no() >= undo_no));
172 }
173
174 /** Determine if the current index entry be purged.
175 @param[in] trxid the transaction that is being purged.
176 @param[in] undo_no the undo number of trx.
177 @return true if this entry can be purged, false otherwise. */
178 bool can_be_purged(trx_id_t trxid, undo_no_t undo_no) {
179 return ((trxid == get_trx_id_modifier()) &&
180 (get_trx_undo_no_modifier() == undo_no));
181 }
182
183 /* The given entry becomes the old version of the current entry.
184 Move the version base node from old entry to current entry.
185 @param[in] entry the old entry */
187 flst_node_t *node = entry.get_node_ptr();
188 flst_base_node_t *version_list = get_versions_ptr();
189 ut_ad(flst_get_len(version_list) == 0);
190
191 entry.move_version_base_node(*this);
192 flst_add_first(version_list, node, m_mtr);
193 }
194
195 /** The current index entry points to a latest LOB page. It may or
196 may not have older versions. If older version is there, bring it
197 back to the index list from the versions list. Then remove the
198 current entry from the index list. Move the versions list from
199 current entry to older entry.
200 @param[in] index the clustered index containing the LOB.
201 @param[in] first_page The first lob page containing index
202 list and free list.
203 @return the location of next entry. */
205 first_page_t &first_page);
206
207 /** Purge the current entry.
208 @param[in] index the clustered index containing the LOB.
209 @param[in] lst the base node of index list.
210 @param[in] free_list the base node of free list.
211 @return the location of the next entry. */
214
216 flst_node_t *node = entry.get_node_ptr();
217 flst_base_node_t *version_list = get_versions_ptr();
218 flst_add_first(version_list, node, m_mtr);
219 }
220
222
223 /** Add this node as the last node in the given list.
224 @param[in] bnode the base node of the file list. */
226 flst_add_last(bnode, m_node, m_mtr);
227 }
228
229 /** Get the base node of the list of versions. */
232 return (flst_bnode_t(node, m_mtr));
233 }
234
236 byte *ptr = get_trxid_ptr();
237 return (mach_read_from_6(ptr));
238 }
239
241 byte *ptr = get_trxid_modifier_ptr();
242 return (mach_read_from_6(ptr));
243 }
244
246 byte *ptr = get_trx_undo_no_ptr();
247 return (mach_read_from_4(ptr));
248 }
249
250 uint32_t get_lob_version() const {
251 byte *ptr = get_lob_version_ptr();
252 return (mach_read_from_4(ptr));
253 }
254
255 /** Get the undo number of the modifier trx.
256 @return the undo number of the modifier trx. */
258 byte *ptr = get_trx_undo_no_modifier_ptr();
259 return (mach_read_from_4(ptr));
260 }
261
263 ut_ad(m_node != nullptr);
264
266 }
267
268 /** Make the current index entry object to point to the next index
269 entry object.
270 @return the buffer block in which the next index entry is available.*/
272 fil_addr_t node_loc = get_next();
273
274 if (node_loc.is_null()) {
275 return (nullptr);
276 }
277
278 if (m_block == nullptr || m_block->page.id.page_no() != node_loc.page) {
279 load_x(node_loc);
280 } else {
281 /* Next entry in the same page. */
282 reset(node_loc);
283 }
284
285 return (m_block);
286 }
287
288 /** Get the previous index entry.
289 @return The file address of previous index entry. */
292 }
293
294 /** Write the trx identifier to the index entry. No redo log
295 is generated for this modification. This is meant to be used
296 during tablespace import.
297 @param[in] id the trx identifier.*/
299 byte *ptr = get_trxid_ptr();
300 mach_write_to_6(ptr, id);
301 }
302
303 /** Write the modifier trx identifier to the index entry. No redo log
304 is generated for this modification. This is meant to be used
305 during tablespace import.
306 @param[in] id the trx identifier.*/
308 byte *ptr = get_trxid_modifier_ptr();
309 mach_write_to_6(ptr, id);
310 }
311
313 byte *ptr = get_trxid_ptr();
314 mach_write_to_6(ptr, id);
315 mlog_log_string(ptr, 6, m_mtr);
316 }
317
319 ut_ad(m_mtr != nullptr);
320
321 byte *ptr = get_trxid_modifier_ptr();
322 mach_write_to_6(ptr, id);
323 mlog_log_string(ptr, 6, m_mtr);
324 }
325
327 byte *ptr = get_trx_undo_no_ptr();
328 mlog_write_ulint(ptr, undo_no, MLOG_4BYTES, m_mtr);
329 }
330
331 /** Set the LOB version of this entry.
332 @param[in] version the LOB version number. */
333 void set_lob_version(uint32_t version) {
334 byte *ptr = get_lob_version_ptr();
336 }
337
339 ut_ad(m_mtr != nullptr);
340
341 byte *ptr = get_trx_undo_no_modifier_ptr();
342 mlog_write_ulint(ptr, undo_no, MLOG_4BYTES, m_mtr);
343 }
344
346 ut_ad(num > 0);
347 byte *ptr = get_pageno_ptr();
348 return (mlog_write_ulint(ptr, num, MLOG_4BYTES, m_mtr));
349 }
350
353 }
354
357 }
358
360 byte *ptr = get_pageno_ptr();
361 return (mach_read_from_4(ptr));
362 }
363
364 void set_data_len(ulint len) {
365 byte *ptr = get_datalen_ptr();
366 return (mlog_write_ulint(ptr, len, MLOG_2BYTES, m_mtr));
367 }
368
370 byte *ptr = get_datalen_ptr();
371 return (mach_read_from_2(ptr));
372 }
373
374 std::ostream &print(std::ostream &out) const;
375
376 bool is_same(const index_entry_t &that) { return (m_node == that.m_node); }
377
378 void read(index_entry_mem_t &entry_mem) const;
379
380 /** Load the index entry available in the given file address.
381 Take x-latch on the index page.
382 @param[in] addr the file address of the index entry.
383 @return the buffer block containing the index entry. */
384 buf_block_t *load_x(const fil_addr_t &addr);
385
386 /** Load the index entry available in the given file address.
387 Take s-latch on the index page.
388 @param[in] addr the file location of index entry.
389 @return the buffer block. */
390 buf_block_t *load_s(const fil_addr_t &addr);
391
393 flst_insert_after(base, m_node, entry.get_node(), m_mtr);
394 }
395
397 flst_insert_before(base, entry.get_node(), m_node, m_mtr);
398 }
399
400 void remove(flst_base_node_t *bnode) { flst_remove(bnode, m_node, m_mtr); }
401
402 /** Free the data page pointed to by this index entry. The data page is
403 available at offset OFFSET_PAGE_NO. After the page is freed, mark it as
404 FIL_NULL. No other fields are modified. If the index entry points to the
405 first page number of the LOB or if it is FIL_NULL, then this function is a
406 no-op.
407 @param[in] first_page_no the first page number of the LOB. */
408 void free_data_page(const page_no_t first_page_no);
409
410 protected:
411 /** Get pointer to the base node of the list of versions.
412 @return pointer to the base node of the list of versions. */
413 byte *get_versions_ptr() const { return (m_node + OFFSET_VERSIONS); }
414
415 /** Get the location where data length is stored.
416 @return the location where data length is stored. */
417 byte *get_datalen_ptr() const { return (m_node + OFFSET_DATA_LEN); }
418
419 /** Get pointer to the location where the creator trx id is written.
420 @return pointer to the location where the creator trx id is written.*/
421 byte *get_trxid_ptr() const { return (m_node + OFFSET_TRXID); }
422
423 /** Get pointer to the location where the modifier trx id is written.
424 @return pointer to the location where the modifier trx id is written.*/
427 }
428
429 /** Get pointer to location where page number is written. This page contains
430 the LOB data.
431 @return pointer to the location where page number is written.*/
432 byte *get_pageno_ptr() const { return (m_node + OFFSET_PAGE_NO); }
433
434 /** Get pointer to location where undo number of creator trx is written.
435 @return pointer to location where undo number of creator trx is written.*/
436 byte *get_trx_undo_no_ptr() const { return (m_node + OFFSET_TRX_UNDO_NO); }
437
438 /** Get pointer to location where undo number of modifier trx is written.
439 @return pointer to location where undo number of modifier trx is written.*/
442 }
443
444 /** Pointer to the blob index entry node. */
445 byte *m_node{nullptr};
446
447 private:
448 /** Move the version base node from current entry to the given entry.
449 @param[in] to_entry The index entry to which the version
450 base node is moved to.*/
452
453 /** Purge the current index entry. An index entry points to either a
454 FIRST page or DATA page. That LOB page will be freed if it is DATA
455 page. A FIRST page should not be freed. */
456 void purge(dict_index_t *index);
457
458 byte *get_lob_version_ptr() const { return (m_node + OFFSET_LOB_VERSION); }
459
460 byte *get_node_ptr() const { return (m_node); }
461
462 byte *get_node() const { return (m_node); }
463
464 private:
468};
469
470/** Overloading the global output operator to easily print an index entry.
471@param[in] out the output stream.
472@param[in] obj the index entry.
473@return the output stream. */
474inline std::ostream &operator<<(std::ostream &out, const index_entry_t &obj) {
475 return (obj.print(out));
476}
477
478} /* namespace lob */
479
480#endif /* lob0index_h */
uint32_t page_no_t
Page number.
Definition: api0api.h:45
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:251
static buf_frame_t * buf_block_get_frame(const buf_block_t *block)
Gets a pointer to the memory frame of a block.
page_id_t id
Page id.
Definition: buf0buf.h:1376
page_no_t page_no() const
Retrieve the page number.
Definition: buf0types.h:243
fil_addr_t fil_addr_null
The null file address.
Definition: fil0fil.cc:326
constexpr page_no_t FIL_NULL
'null' (undefined) page offset in the context of file spaces
Definition: fil0fil.h:1156
constexpr size_t FIL_ADDR_SIZE
Address size is 6 bytes.
Definition: fil0types.h:128
void flst_add_last(flst_base_node_t *base, flst_node_t *node, mtr_t *mtr)
Adds a node as the last node in a list.
Definition: fut0lst.cc:90
void flst_remove(flst_base_node_t *base, flst_node_t *node2, mtr_t *mtr)
Removes a node.
Definition: fut0lst.cc:287
void flst_add_first(flst_base_node_t *base, flst_node_t *node, mtr_t *mtr)
Adds a node as the first node in a list.
Definition: fut0lst.cc:133
void flst_insert_after(flst_base_node_t *base, flst_node_t *node1, flst_node_t *node2, mtr_t *mtr)
Inserts a node after another in a list.
Definition: fut0lst.cc:172
void flst_insert_before(flst_base_node_t *base, flst_node_t *node2, flst_node_t *node3, mtr_t *mtr)
Inserts a node before another in a list.
Definition: fut0lst.cc:228
File-based list utilities.
constexpr ulint FLST_BASE_NODE_SIZE
Definition: fut0lst.h:50
static void flst_write_addr(fil_faddr_t *faddr, fil_addr_t addr, mtr_t *mtr)
Writes a file address.
byte flst_base_node_t
Definition: fut0lst.h:46
static fil_addr_t flst_read_addr(const fil_faddr_t *faddr, mtr_t *mtr)
Reads a file address.
static ulint flst_get_len(const flst_base_node_t *base)
Get the length of a list.
static void flst_init(flst_base_node_t *base, mtr_t *mtr)
Initializes a list base node.
byte flst_node_t
Definition: fut0lst.h:47
static uint16_t mach_read_from_2(const byte *b)
The following function is used to fetch data from 2 consecutive bytes.
static uint32_t mach_read_from_4(const byte *b)
The following function is used to fetch data from 4 consecutive bytes.
static void mach_write_to_6(byte *b, uint64_t id)
The following function is used to store data in 6 consecutive bytes.
static uint64_t mach_read_from_6(const byte *b)
The following function is used to fetch data from 6 consecutive bytes.
void mlog_log_string(byte *ptr, ulint len, mtr_t *mtr)
Logs a write of a string to a file page buffered in the buffer pool.
Definition: mtr0log.cc:347
void mlog_write_ulint(byte *ptr, ulint val, mlog_id_t type, mtr_t *mtr)
Writes 1, 2 or 4 bytes to a file page.
Definition: mtr0log.cc:258
@ MLOG_4BYTES
4 bytes ...
Definition: mtr0types.h:76
@ MLOG_2BYTES
2 bytes ...
Definition: mtr0types.h:73
Provides the large objects (LOB) module.
Definition: lob0bulk.h:44
std::list< index_entry_mem_t > List_iem_t
List of index entry memory (iem) objects.
Definition: lob0index.h:68
std::map< page_no_t, buf_block_t * > BlockCache
Definition: lob0index.h:37
std::ostream & operator<<(std::ostream &out, const plist_node_t &obj)
Definition: lob0impl.h:239
required uint64 version
Definition: replication_group_member_actions.proto:41
void free_list(I_List< i_string > *list)
Definition: sql_list.cc:31
Definition: completion_hash.h:35
The buffer control block structure.
Definition: buf0buf.h:1747
buf_page_t page
page information; this must be the first field, so that buf_pool->page_hash can point to buf_page_t o...
Definition: buf0buf.h:1753
Data structure for an index.
Definition: dict0mem.h:1046
File space address.
Definition: fil0fil.h:1173
uint32_t boffset
Byte offset within the page.
Definition: fil0fil.h:1205
page_no_t page
Page number within a space.
Definition: fil0fil.h:1202
bool is_equal(const fil_addr_t &rhs) const
Compare to instances.
Definition: fil0fil.h:1185
bool is_null() const
Check if the file address is null.
Definition: fil0fil.h:1191
In-memory representation of flst_base_node_t.
Definition: fut0lst.h:148
The first page of an uncompressed LOB.
Definition: lob0first.h:43
An in-memory copy of an index_entry_t data.
Definition: lob0index.h:41
trx_id_t m_trx_id_modifier
Definition: lob0index.h:47
undo_no_t m_undo_no
Definition: lob0index.h:48
undo_no_t m_undo_no_modifier
Definition: lob0index.h:49
flst_bnode_t m_versions
Definition: lob0index.h:45
fil_addr_t m_next
Definition: lob0index.h:44
fil_addr_t m_prev
Definition: lob0index.h:43
bool is_null()
Definition: lob0index.h:57
trx_id_t m_trx_id
Definition: lob0index.h:46
index_entry_mem_t()
Definition: lob0index.h:53
fil_addr_t m_self
Definition: lob0index.h:42
void reset()
Definition: lob0index.cc:208
page_no_t get_page_no() const
Definition: lob0index.h:59
std::ostream & print(std::ostream &out) const
Print this object into the given output stream.
Definition: lob0index.cc:224
ulint m_data_len
Definition: lob0index.h:51
page_no_t m_page_no
Definition: lob0index.h:50
An index entry pointing to an LOB page.
Definition: lob0index.h:81
void free_data_page(const page_no_t first_page_no)
Free the data page pointed to by this index entry.
Definition: lob0index.cc:235
void reset(flst_node_t *node)
Definition: lob0index.h:136
void insert_after(flst_base_node_t *base, index_entry_t &entry)
Definition: lob0index.h:392
ulint get_data_len() const
Definition: lob0index.h:369
void set_versions_null()
The versions base node is set to NULL.
Definition: lob0index.h:158
static const ulint OFFSET_PAGE_NO
Definition: lob0index.h:99
bool is_same(const index_entry_t &that)
Definition: lob0index.h:376
byte * get_lob_version_ptr() const
Definition: lob0index.h:458
void set_next_null()
Definition: lob0index.h:355
fil_addr_t get_self() const
Get the location of the current index entry.
Definition: lob0index.cc:144
void read(index_entry_mem_t &entry_mem) const
Definition: lob0index.cc:156
fil_addr_t get_next() const
Definition: lob0index.h:262
buf_block_t * m_block
Definition: lob0index.h:467
page_no_t get_page_no() const
Definition: lob0index.h:359
uint32_t get_lob_version() const
Definition: lob0index.h:250
index_entry_t(flst_node_t *node, mtr_t *mtr)
Definition: lob0index.h:113
static const ulint OFFSET_PREV
Index entry offsets within node.
Definition: lob0index.h:83
void push_back(flst_base_node_t *bnode)
Add this node as the last node in the given list.
Definition: lob0index.h:225
mtr_t * m_mtr
Definition: lob0index.h:465
void reset(fil_addr_t &addr)
Definition: lob0index.h:124
void set_prev_null()
Definition: lob0index.h:351
static const ulint OFFSET_NEXT
Definition: lob0index.h:84
static const ulint OFFSET_LOB_VERSION
The LOB version number.
Definition: lob0index.h:103
byte * get_node() const
Definition: lob0index.h:462
byte * get_trx_undo_no_ptr() const
Get pointer to location where undo number of creator trx is written.
Definition: lob0index.h:436
flst_bnode_t get_versions_mem() const
Get the base node of the list of versions.
Definition: lob0index.h:230
fil_addr_t make_old_version_current(dict_index_t *index, first_page_t &first_page)
The current index entry points to a latest LOB page.
Definition: lob0index.cc:47
void set_trx_id(trx_id_t id)
Definition: lob0index.h:312
byte * get_trx_undo_no_modifier_ptr() const
Get pointer to location where undo number of modifier trx is written.
Definition: lob0index.h:440
void set_old_version(index_entry_t &entry)
Definition: lob0index.h:186
byte * get_trxid_modifier_ptr() const
Get pointer to the location where the modifier trx id is written.
Definition: lob0index.h:425
void add_version(index_entry_t &entry) const
Definition: lob0index.h:215
void set_trx_id_modifier(trx_id_t id)
Definition: lob0index.h:318
void set_trx_undo_no_modifier(undo_no_t undo_no)
Definition: lob0index.h:338
buf_block_t * get_block() const
Definition: lob0index.h:132
void set_trx_undo_no(undo_no_t undo_no)
Definition: lob0index.h:326
void move_version_base_node(index_entry_t &to_entry)
Move the version base node from current entry to the given entry.
Definition: lob0index.cc:39
void init()
Initialize the object fully.
Definition: lob0index.h:144
void purge(dict_index_t *index)
Purge the current index entry.
Definition: lob0index.cc:83
byte * get_pageno_ptr() const
Get pointer to location where page number is written.
Definition: lob0index.h:432
void set_trx_id_modifier_no_redo(trx_id_t id)
Write the modifier trx identifier to the index entry.
Definition: lob0index.h:307
buf_block_t * load_s(const fil_addr_t &addr)
Load the index entry available in the given file address.
Definition: lob0index.cc:195
fil_addr_t get_prev() const
Get the previous index entry.
Definition: lob0index.h:290
static const ulint OFFSET_VERSIONS
Points to base node of the list of versions.
Definition: lob0index.h:88
void set_page_no(page_no_t num)
Definition: lob0index.h:345
void remove(flst_base_node_t *bnode)
Definition: lob0index.h:400
flst_base_node_t * get_versions_list() const
Definition: lob0index.h:221
void set_trx_id_no_redo(trx_id_t id)
Write the trx identifier to the index entry.
Definition: lob0index.h:298
index_entry_t(flst_node_t *node)
Constructor.
Definition: lob0index.h:110
index_entry_t(flst_node_t *node, mtr_t *mtr, dict_index_t *index)
Definition: lob0index.h:116
static const ulint OFFSET_TRX_UNDO_NO_MODIFIER
The undo number of the modifier trx.
Definition: lob0index.h:98
bool can_rollback(trx_id_t trxid, undo_no_t undo_no)
Determine if the current index entry be rolled back.
Definition: lob0index.h:169
static const ulint OFFSET_TRXID_MODIFIER
The modifier trx id.
Definition: lob0index.h:94
void insert_before(flst_base_node_t *base, index_entry_t &entry)
Definition: lob0index.h:396
static const ulint OFFSET_TRX_UNDO_NO
Definition: lob0index.h:95
buf_block_t * load_x(const fil_addr_t &addr)
Load the index entry available in the given file address.
Definition: lob0index.cc:178
undo_no_t get_trx_undo_no_modifier() const
Get the undo number of the modifier trx.
Definition: lob0index.h:257
const dict_index_t * m_index
Definition: lob0index.h:466
fil_addr_t purge_version(dict_index_t *index, flst_base_node_t *lst, flst_base_node_t *free_list)
Purge the current entry.
Definition: lob0index.cc:111
buf_block_t * next()
Make the current index entry object to point to the next index entry object.
Definition: lob0index.h:271
static const ulint SIZE
Total length of an index node.
Definition: lob0index.h:106
undo_no_t get_trx_undo_no() const
Definition: lob0index.h:245
static const ulint OFFSET_DATA_LEN
Definition: lob0index.h:100
byte * m_node
Pointer to the blob index entry node.
Definition: lob0index.h:445
static const ulint OFFSET_TRXID
The creator trx id.
Definition: lob0index.h:91
void set_lob_version(uint32_t version)
Set the LOB version of this entry.
Definition: lob0index.h:333
byte * get_node_ptr() const
Definition: lob0index.h:460
bool is_null() const
Definition: lob0index.h:138
byte * get_versions_ptr() const
Get pointer to the base node of the list of versions.
Definition: lob0index.h:413
byte * get_datalen_ptr() const
Get the location where data length is stored.
Definition: lob0index.h:417
index_entry_t(mtr_t *mtr, const dict_index_t *index)
Definition: lob0index.h:119
std::ostream & print(std::ostream &out) const
Definition: lob0index.cc:130
trx_id_t get_trx_id() const
Definition: lob0index.h:235
bool can_be_purged(trx_id_t trxid, undo_no_t undo_no)
Determine if the current index entry be purged.
Definition: lob0index.h:178
trx_id_t get_trx_id_modifier() const
Definition: lob0index.h:240
byte * get_trxid_ptr() const
Get pointer to the location where the creator trx id is written.
Definition: lob0index.h:421
void set_data_len(ulint len)
Definition: lob0index.h:364
Mini-transaction handle and buffer.
Definition: mtr0mtr.h:177
The transaction.
ib_id_t undo_no_t
Undo number.
Definition: trx0types.h:142
ib_id_t trx_id_t
Transaction identifier (DB_TRX_ID, DATA_TRX_ID)
Definition: trx0types.h:138
Version control for database, common definitions, and include files.
unsigned long int ulint
Definition: univ.i:406
#define ut_ad(EXPR)
Debug assertion.
Definition: ut0dbg.h:105