MySQL 9.0.0
Source Code Documentation
rem0rec.ic File Reference

Record manager. More...

#include "btr0types.h"
#include "dict0boot.h"
#include "dict0dict.h"
#include "mach0data.h"
#include "ut0byte.h"

Functions

static void rec_set_bit_field_1 (rec_t *rec, ulint val, ulint offs, ulint mask, ulint shift)
 Sets a bit field within 1 byte. More...
 
static void rec_set_bit_field_2 (rec_t *rec, ulint val, ulint offs, ulint mask, ulint shift)
 Sets a bit field within 2 bytes. More...
 
static const rec_trec_get_next_ptr_const (const rec_t *rec, ulint comp)
 
static rec_trec_get_next_ptr (rec_t *rec, ulint comp)
 
static ulint rec_get_next_offs (const rec_t *rec, ulint comp)
 
static void rec_set_next_offs_old (rec_t *rec, ulint next)
 The following function is used to set the next record offset field of an old-style record. More...
 
static void rec_set_next_offs_new (rec_t *rec, ulint next)
 The following function is used to set the next record offset field of a new-style record. More...
 
static void rec_set_n_fields_old (rec_t *rec, ulint n_fields)
 The following function is used to set the number of fields in an old-style record. More...
 
static ulint rec_get_n_owned_old (const rec_t *rec)
 The following function is used to get the number of records owned by the previous directory record. More...
 
static void rec_set_n_owned_old (rec_t *rec, ulint n_owned)
 The following function is used to set the number of owned records. More...
 
static ulint rec_get_n_owned_new (const rec_t *rec)
 The following function is used to get the number of records owned by the previous directory record. More...
 
static void rec_set_n_owned_new (rec_t *rec, page_zip_des_t *page_zip, ulint n_owned)
 The following function is used to set the number of owned records. More...
 
static void rec_set_info_bits_old (rec_t *rec, ulint bits)
 The following function is used to set the info bits of a record. More...
 
static void rec_set_info_bits_new (rec_t *rec, ulint bits)
 The following function is used to set the info bits of a record. More...
 
static void rec_set_info_bits_new_temp (rec_t *rec, ulint bits)
 The following function is used to set the info bits of a temp record. More...
 
static void rec_set_status (rec_t *rec, ulint bits)
 The following function is used to set the status bits of a new-style record. More...
 
static ulint rec_get_info_and_status_bits (const rec_t *rec, bool comp)
 
static void rec_set_info_and_status_bits (rec_t *rec, ulint bits)
 The following function is used to set the info and status bits of a record. More...
 
static bool rec_get_deleted_flag (const rec_t *rec, bool comp)
 
static void rec_set_deleted_flag_old (rec_t *rec, bool flag)
 The following function is used to set the deleted bit. More...
 
static void rec_set_deleted_flag_new (rec_t *rec, page_zip_des_t *page_zip, bool flag)
 The following function is used to set the deleted bit. More...
 
static void rec_set_instant_flag_new (rec_t *rec, bool flag)
 The following function is used to set the instant bit. More...
 
static void rec_new_set_versioned (rec_t *rec, bool flag)
 The following function is used to set the version bit. More...
 
static void rec_new_set_instant (rec_t *rec)
 
static void rec_new_set_versioned (rec_t *rec)
 
static void rec_new_reset_instant_version (rec_t *rec)
 
static void rec_old_set_versioned (rec_t *rec, bool flag)
 The following function is used to set the version bit. More...
 
static void rec_new_temp_set_versioned (rec_t *rec, bool flag)
 The following function is used to set the version bit. More...
 
static bool rec_get_node_ptr_flag (const rec_t *rec)
 The following function tells if a new-style record is a node pointer. More...
 
static ulint rec_get_heap_no_old (const rec_t *rec)
 The following function is used to get the order number of an old-style record in the heap of the index page. More...
 
static void rec_set_heap_no_old (rec_t *rec, ulint heap_no)
 The following function is used to set the heap number field in an old-style record. More...
 
static ulint rec_get_heap_no_new (const rec_t *rec)
 The following function is used to get the order number of a new-style record in the heap of the index page. More...
 
static void rec_set_heap_no_new (rec_t *rec, ulint heap_no)
 The following function is used to set the heap number field in a new-style record. More...
 
static void rec_set_1byte_offs_flag (rec_t *rec, bool flag)
 The following function is used to set the 1-byte offsets flag. More...
 
static bool rec_field_not_null_not_add_col_def (ulint len)
 Determine if the field is not NULL and not having default value after instant ADD COLUMN. More...
 
static bool rec_offs_comp (const ulint *offsets)
 Determine if the offsets are for a record in the new compact format. More...
 
static bool rec_offs_any_extern (const ulint *offsets)
 Determine if the offsets are for a record containing externally stored columns. More...
 
static const byterec_offs_any_null_extern (const dict_index_t *index, const rec_t *rec, const ulint *offsets)
 
static ulint rec_offs_n_extern (const dict_index_t *index, const ulint *offsets)
 Returns the number of extern bits set in a record. More...
 
static ulint rec_1_get_prev_field_end_info (const rec_t *rec, ulint n)
 Returns the offset of n - 1th field end if the record is stored in the 1-byte offsets form. More...
 
static ulint rec_2_get_prev_field_end_info (const rec_t *rec, ulint n)
 Returns the offset of n - 1th field end if the record is stored in the 2-byte offsets form. More...
 
static ulint rec_offs_data_size (const ulint *offsets)
 The following function returns the data size of a physical record, that is the sum of field lengths. More...
 
static ulint rec_offs_extra_size (const ulint *offsets)
 Returns the total size of record minus data size of record. More...
 
static ulint rec_offs_size (const ulint *offsets)
 Returns the total size of a physical record. More...
 
static byterec_get_end (const rec_t *rec, const ulint *offsets)
 
static byterec_get_start (const rec_t *rec, const ulint *offsets)
 
static rec_trec_copy (void *buf, const rec_t *rec, const ulint *offsets)
 Copy a physical record to a buffer. More...
 
static ulint rec_get_converted_extra_size (ulint data_size, ulint n_fields, bool has_ext)
 Returns the extra size of an old-style physical record if we know its data size and number of fields. More...
 
static ulint rec_get_converted_size (const dict_index_t *index, const dtuple_t *dtuple)
 The following function returns the size of a data tuple when converted to a physical record. More...
 
static uint64_t rec_hash (const rec_t *rec, const ulint *offsets, ulint n_fields, ulint n_bytes, uint64_t hash_value, const dict_index_t *index)
 Compute a hash value of a prefix of a leaf page record. More...
 
static uint8_t rec_get_n_fields_length (ulint n_fields)
 Get the length of the number of fields for any new style record. More...
 
static uint8_t rec_set_n_fields (rec_t *rec, ulint n_fields)
 Set the number of fields for one new style leaf page record. More...
 
static void rec_set_instant_row_version_new (rec_t *rec, uint8_t row_version)
 Set the row version on a new style leaf page record. More...
 
static uint8_t rec_get_instant_row_version_new (const rec_t *rec)
 Get the row version on a new style leaf page record. More...
 
static void rec_set_instant_row_version_old (rec_t *rec, uint8_t row_version)
 Set the row version on an old style leaf page record. More...
 
static uint8_t rec_get_instant_row_version_old (const rec_t *rec)
 Get the row version on an old style leaf page record. More...
 
static const byterec_get_nth_field_old_instant (const rec_t *rec, uint16_t n, const dict_index_t *index, ulint *len)
 Gets the value of the specified field in the record in old style. More...
 
static const byterec_get_nth_field_instant (const rec_t *rec, const ulint *offsets, ulint n, const dict_index_t *index, ulint *len)
 Gets the value of the specified field in the record. More...
 
static bool rec_is_min_rec_flag_set (const rec_t *rec, bool is_comp)
 

Detailed Description

Record manager.

Created 5/30/1994 Heikki Tuuri

Function Documentation

◆ rec_1_get_prev_field_end_info()

static ulint rec_1_get_prev_field_end_info ( const rec_t rec,
ulint  n 
)
inlinestatic

Returns the offset of n - 1th field end if the record is stored in the 1-byte offsets form.

If the field is SQL null, the flag is ORed in the returned value. This function and the 2-byte counterpart are defined here because the C-compiler was not able to sum negative and positive constant offsets, and warned of constant arithmetic overflow within the compiler.

Returns
offset of the start of the PREVIOUS field, SQL null flag ORed
Parameters
recin: record
nin: field index

◆ rec_2_get_prev_field_end_info()

static ulint rec_2_get_prev_field_end_info ( const rec_t rec,
ulint  n 
)
inlinestatic

Returns the offset of n - 1th field end if the record is stored in the 2-byte offsets form.

If the field is SQL null, the flag is ORed in the returned value.

Returns
offset of the start of the PREVIOUS field, SQL null flag ORed
Parameters
recin: record
nin: field index

◆ rec_copy()

static rec_t * rec_copy ( void *  buf,
const rec_t rec,
const ulint offsets 
)
inlinestatic

Copy a physical record to a buffer.

Parameters
[in]bufbuffer
[in]recphysical record
[in]offsetsarray returned by rec_get_offsets()
Returns
pointer to the origin of the copy

◆ rec_field_not_null_not_add_col_def()

static bool rec_field_not_null_not_add_col_def ( ulint  len)
inlinestatic

Determine if the field is not NULL and not having default value after instant ADD COLUMN.

Parameters
[in]lenlength of a field
Returns
true if not NULL and not having default value

◆ rec_get_converted_extra_size()

static ulint rec_get_converted_extra_size ( ulint  data_size,
ulint  n_fields,
bool  has_ext 
)
inlinestatic

Returns the extra size of an old-style physical record if we know its data size and number of fields.

◆ rec_get_converted_size()

static ulint rec_get_converted_size ( const dict_index_t index,
const dtuple_t dtuple 
)
inlinestatic

The following function returns the size of a data tuple when converted to a physical record.

Parameters
[in]indexrecord descriptor
[in]dtupledata tuple
Returns
size

◆ rec_get_deleted_flag()

static bool rec_get_deleted_flag ( const rec_t rec,
bool  comp 
)
inlinestatic

◆ rec_get_end()

static byte * rec_get_end ( const rec_t rec,
const ulint offsets 
)
inlinestatic

◆ rec_get_heap_no_new()

static ulint rec_get_heap_no_new ( const rec_t rec)
inlinestatic

The following function is used to get the order number of a new-style record in the heap of the index page.

Returns
heap order number
Parameters
recin: physical record

◆ rec_get_heap_no_old()

static ulint rec_get_heap_no_old ( const rec_t rec)
inlinestatic

The following function is used to get the order number of an old-style record in the heap of the index page.

Returns
heap order number
Parameters
recin: physical record

◆ rec_get_info_and_status_bits()

static ulint rec_get_info_and_status_bits ( const rec_t rec,
bool  comp 
)
inlinestatic

◆ rec_get_instant_row_version_new()

static uint8_t rec_get_instant_row_version_new ( const rec_t rec)
inlinestatic

Get the row version on a new style leaf page record.

This is only needed for table after instant ADD/DROP COLUMN.

Parameters
[in]recleaf page record
Returns
row version

◆ rec_get_instant_row_version_old()

static uint8_t rec_get_instant_row_version_old ( const rec_t rec)
inlinestatic

Get the row version on an old style leaf page record.

This is only needed for table after instant ADD/DROP COLUMN.

Parameters
[in]recleaf page record
Returns
row version

◆ rec_get_n_fields_length()

static uint8_t rec_get_n_fields_length ( ulint  n_fields)
inlinestatic

Get the length of the number of fields for any new style record.

Parameters
[in]n_fieldsnumber of fields in the record
Returns
length of specified number of fields

◆ rec_get_n_owned_new()

static ulint rec_get_n_owned_new ( const rec_t rec)
inlinestatic

The following function is used to get the number of records owned by the previous directory record.

Returns
number of owned records
Parameters
recin: new-style physical record

◆ rec_get_n_owned_old()

static ulint rec_get_n_owned_old ( const rec_t rec)
inlinestatic

The following function is used to get the number of records owned by the previous directory record.

Returns
number of owned records
Parameters
recin: old-style physical record

◆ rec_get_next_offs()

static ulint rec_get_next_offs ( const rec_t rec,
ulint  comp 
)
inlinestatic

Check if the result offset is still on the same page. We allow field_value to be interpreted as negative 16bit integer. This check does nothing for 64KB pages.

◆ rec_get_next_ptr()

static rec_t * rec_get_next_ptr ( rec_t rec,
ulint  comp 
)
inlinestatic

◆ rec_get_next_ptr_const()

static const rec_t * rec_get_next_ptr_const ( const rec_t rec,
ulint  comp 
)
inlinestatic

Check if the result offset is still on the same page. We allow field_value to be interpreted as negative 16bit integer. This check does nothing for 64KB pages.

◆ rec_get_node_ptr_flag()

static bool rec_get_node_ptr_flag ( const rec_t rec)
inlinestatic

The following function tells if a new-style record is a node pointer.

Returns
true if node pointer
Parameters
recin: physical record

◆ rec_get_nth_field_instant()

static const byte * rec_get_nth_field_instant ( const rec_t rec,
const ulint offsets,
ulint  n,
const dict_index_t index,
ulint len 
)
inlinestatic

Gets the value of the specified field in the record.

This is only used when there is possibility that the record comes from the clustered index, which has some instantly add columns

Parameters
[in]recrecord
[in]offsetsarray returned by rec_get_offsets()
[in]nindex of the field
[in]indexclustered index where the record resides
[in,out]lenlength of the field, UNIV_SQL_NULL if SQL null
Returns
value of the field, could be either pointer to rec or default value

◆ rec_get_nth_field_old_instant()

static const byte * rec_get_nth_field_old_instant ( const rec_t rec,
uint16_t  n,
const dict_index_t index,
ulint len 
)
inlinestatic

Gets the value of the specified field in the record in old style.

This is only used for record from instant index, which is clustered index and has some instantly added columns.

Parameters
[in]recphysical record
[in]nindex of the field
[in]indexclustered index where the record resides
[out]lenlength of the field, UNIV_SQL if SQL null
Returns
value of the field, could be either pointer to rec or default value

◆ rec_get_start()

static byte * rec_get_start ( const rec_t rec,
const ulint offsets 
)
inlinestatic

◆ rec_hash()

static uint64_t rec_hash ( const rec_t rec,
const ulint offsets,
ulint  n_fields,
ulint  n_bytes,
uint64_t  hash_value,
const dict_index_t index 
)
inlinestatic

Compute a hash value of a prefix of a leaf page record.

Parameters
[in]recleaf page record
[in]offsetsrec_get_offsets(rec)
[in]n_fieldsnumber of complete fields to hash
[in]n_bytesnumber of bytes to hash in the last field
[in]hash_valuehash value of the index identifier
[in]indexindex where the record resides
Returns
the hashed value

◆ rec_is_min_rec_flag_set()

static bool rec_is_min_rec_flag_set ( const rec_t rec,
bool  is_comp 
)
inlinestatic

◆ rec_new_reset_instant_version()

static void rec_new_reset_instant_version ( rec_t rec)
inlinestatic

◆ rec_new_set_instant()

static void rec_new_set_instant ( rec_t rec)
inlinestatic

◆ rec_new_set_versioned() [1/2]

static void rec_new_set_versioned ( rec_t rec)
inlinestatic

◆ rec_new_set_versioned() [2/2]

static void rec_new_set_versioned ( rec_t rec,
bool  flag 
)
inlinestatic

The following function is used to set the version bit.

Parameters
[in,out]recnew-style (COMPACT/DYNAMIC) physical record
[in]flagset the bit to this flag

◆ rec_new_temp_set_versioned()

static void rec_new_temp_set_versioned ( rec_t rec,
bool  flag 
)
inlinestatic

The following function is used to set the version bit.

Parameters
[in,out]recTemp physical record
[in]flagtrue to set, false to reset

◆ rec_offs_any_extern()

static bool rec_offs_any_extern ( const ulint offsets)
inlinestatic

Determine if the offsets are for a record containing externally stored columns.

Returns
nonzero if externally stored
Parameters
offsetsin: array returned by rec_get_offsets()

◆ rec_offs_any_null_extern()

static const byte * rec_offs_any_null_extern ( const dict_index_t index,
const rec_t rec,
const ulint offsets 
)
inlinestatic

◆ rec_offs_comp()

static bool rec_offs_comp ( const ulint offsets)
inlinestatic

Determine if the offsets are for a record in the new compact format.

Returns
nonzero if compact format
Parameters
offsetsin: array returned by rec_get_offsets()

◆ rec_offs_data_size()

static ulint rec_offs_data_size ( const ulint offsets)
inlinestatic

The following function returns the data size of a physical record, that is the sum of field lengths.

SQL null fields are counted as length 0 fields. The value returned by the function is the distance from record origin to record end in bytes.

Returns
size
Parameters
offsetsin: array returned by rec_get_offsets()

◆ rec_offs_extra_size()

static ulint rec_offs_extra_size ( const ulint offsets)
inlinestatic

Returns the total size of record minus data size of record.

The value returned by the function is the distance from record start to record origin in bytes.

Returns
size
Parameters
offsetsin: array returned by rec_get_offsets()

◆ rec_offs_n_extern()

static ulint rec_offs_n_extern ( const dict_index_t index,
const ulint offsets 
)
inlinestatic

Returns the number of extern bits set in a record.

Parameters
[in]indexrecord descriptor
[in]offsetsarray returned by rec_get_offsets()
Returns
number of externally stored fields

◆ rec_offs_size()

static ulint rec_offs_size ( const ulint offsets)
inlinestatic

Returns the total size of a physical record.

Returns
size
Parameters
offsetsin: array returned by rec_get_offsets()

◆ rec_old_set_versioned()

static void rec_old_set_versioned ( rec_t rec,
bool  flag 
)
inlinestatic

The following function is used to set the version bit.

Parameters
[in,out]recold-style (REDUNDANT) physical record
[in]flagtrue to set, false to reset

◆ rec_set_1byte_offs_flag()

static void rec_set_1byte_offs_flag ( rec_t rec,
bool  flag 
)
inlinestatic

The following function is used to set the 1-byte offsets flag.

Parameters
recin: physical record
flagin: true if 1byte form

◆ rec_set_bit_field_1()

static void rec_set_bit_field_1 ( rec_t rec,
ulint  val,
ulint  offs,
ulint  mask,
ulint  shift 
)
inlinestatic

Sets a bit field within 1 byte.

Parameters
recin: pointer to record origin
valin: value to set
offsin: offset from the origin down
maskin: mask used to filter bits
shiftin: shift right applied after masking

◆ rec_set_bit_field_2()

static void rec_set_bit_field_2 ( rec_t rec,
ulint  val,
ulint  offs,
ulint  mask,
ulint  shift 
)
inlinestatic

Sets a bit field within 2 bytes.

Parameters
recin: pointer to record origin
valin: value to set
offsin: offset from the origin down
maskin: mask used to filter bits
shiftin: shift right applied after masking

◆ rec_set_deleted_flag_new()

static void rec_set_deleted_flag_new ( rec_t rec,
page_zip_des_t page_zip,
bool  flag 
)
inlinestatic

The following function is used to set the deleted bit.

Parameters
recin/out: new-style physical record
page_zipin/out: compressed page, or NULL
flagin: nonzero if delete marked

◆ rec_set_deleted_flag_old()

static void rec_set_deleted_flag_old ( rec_t rec,
bool  flag 
)
inlinestatic

The following function is used to set the deleted bit.

Parameters
recin: old-style physical record
flagin: nonzero if delete marked

◆ rec_set_heap_no_new()

static void rec_set_heap_no_new ( rec_t rec,
ulint  heap_no 
)
inlinestatic

The following function is used to set the heap number field in a new-style record.

Parameters
recin/out: physical record
heap_noin: the heap number

◆ rec_set_heap_no_old()

static void rec_set_heap_no_old ( rec_t rec,
ulint  heap_no 
)
inlinestatic

The following function is used to set the heap number field in an old-style record.

Parameters
recin: physical record
heap_noin: the heap number

◆ rec_set_info_and_status_bits()

static void rec_set_info_and_status_bits ( rec_t rec,
ulint  bits 
)
inlinestatic

The following function is used to set the info and status bits of a record.

(Only compact records have status bits.)

Parameters
recin/out: physical record
bitsin: info bits

◆ rec_set_info_bits_new()

static void rec_set_info_bits_new ( rec_t rec,
ulint  bits 
)
inlinestatic

The following function is used to set the info bits of a record.

Parameters
recin/out: new-style physical record
bitsin: info bits

◆ rec_set_info_bits_new_temp()

static void rec_set_info_bits_new_temp ( rec_t rec,
ulint  bits 
)
inlinestatic

The following function is used to set the info bits of a temp record.

param[in,out] rec temp physical record param[in] bits info bits

◆ rec_set_info_bits_old()

static void rec_set_info_bits_old ( rec_t rec,
ulint  bits 
)
inlinestatic

The following function is used to set the info bits of a record.

Parameters
recin: old-style physical record
bitsin: info bits

◆ rec_set_instant_flag_new()

static void rec_set_instant_flag_new ( rec_t rec,
bool  flag 
)
inlinestatic

The following function is used to set the instant bit.

Parameters
[in,out]recnew-style physical record
[in]flagset the bit to this flag

◆ rec_set_instant_row_version_new()

static void rec_set_instant_row_version_new ( rec_t rec,
uint8_t  row_version 
)
inlinestatic

Set the row version on a new style leaf page record.

This is only needed for table after instant ADD/DROP COLUMN.

Parameters
[in,out]recleaf page record
[in]row_versionrow version

◆ rec_set_instant_row_version_old()

static void rec_set_instant_row_version_old ( rec_t rec,
uint8_t  row_version 
)
inlinestatic

Set the row version on an old style leaf page record.

This is only needed for table after instant ADD/DROP COLUMN.

Parameters
[in,out]recleaf page record
[in]row_versionrow version

◆ rec_set_n_fields()

static uint8_t rec_set_n_fields ( rec_t rec,
ulint  n_fields 
)
inlinestatic

Set the number of fields for one new style leaf page record.

This is only needed for table after instant ADD COLUMN.

Parameters
[in,out]recleaf page record
[in]n_fieldsnumber of fields in the record
Returns
the length of the n_fields occupies

◆ rec_set_n_fields_old()

static void rec_set_n_fields_old ( rec_t rec,
ulint  n_fields 
)
inlinestatic

The following function is used to set the number of fields in an old-style record.

Parameters
recin: physical record
n_fieldsin: the number of fields

◆ rec_set_n_owned_new()

static void rec_set_n_owned_new ( rec_t rec,
page_zip_des_t page_zip,
ulint  n_owned 
)
inlinestatic

The following function is used to set the number of owned records.

Parameters
recin/out: new-style physical record
page_zipin/out: compressed page, or NULL
n_ownedin: the number of owned

◆ rec_set_n_owned_old()

static void rec_set_n_owned_old ( rec_t rec,
ulint  n_owned 
)
inlinestatic

The following function is used to set the number of owned records.

Parameters
recin: old-style physical record
n_ownedin: the number of owned

◆ rec_set_next_offs_new()

static void rec_set_next_offs_new ( rec_t rec,
ulint  next 
)
inlinestatic

The following function is used to set the next record offset field of a new-style record.

Parameters
recin/out: new-style physical record
nextin: offset of the next record

◆ rec_set_next_offs_old()

static void rec_set_next_offs_old ( rec_t rec,
ulint  next 
)
inlinestatic

The following function is used to set the next record offset field of an old-style record.

Parameters
recin: old-style physical record
nextin: offset of the next record

◆ rec_set_status()

static void rec_set_status ( rec_t rec,
ulint  bits 
)
inlinestatic

The following function is used to set the status bits of a new-style record.

Parameters
recin/out: physical record
bitsin: info bits