Class: Innodb::FsegEntry

Inherits:
Object
  • Object
show all
Defined in:
lib/innodb/fseg_entry.rb

Constant Summary collapse

SIZE =

The size (in bytes) of an FSEG entry, which contains a two 32-bit integers and a 16-bit integer.

4 + 4 + 2

Class Method Summary collapse

Class Method Details

.get_entry_address(cursor) ⇒ Object

Return the FSEG entry address, which points to an entry on an INODE page.



13
14
15
16
17
18
19
# File 'lib/innodb/fseg_entry.rb', line 13

def self.get_entry_address(cursor)
  {
    space_id: cursor.name("space_id") { cursor.read_uint32 },
    page_number: cursor.name("page_number") { Innodb::Page.maybe_undefined(cursor.read_uint32) },
    offset: cursor.name("offset") { cursor.read_uint16 },
  }
end

.get_inode(space, cursor) ⇒ Object

Return an INODE entry which represents this file segment.



22
23
24
25
26
27
28
29
30
# File 'lib/innodb/fseg_entry.rb', line 22

def self.get_inode(space, cursor)
  address = cursor.name("address") { get_entry_address(cursor) }
  return nil if address[:offset].zero?

  page = space.page(address[:page_number])
  return nil unless page.type == :INODE

  page.inode_at(page.cursor(address[:offset]))
end