Skip to content

Commit 5e726c2

Browse files
committed
Add support for reconstructing full BLOB content
1 parent e3dbd58 commit 5e726c2

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

lib/innodb/page/blob.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ def blob_data
3232
end
3333
end
3434

35+
def next_blob_page
36+
return unless blob_header[:next]
37+
38+
space.page(blob_header[:next])
39+
end
40+
3541
def each_region(&block)
3642
return enum_for(:each_region) unless block_given?
3743

lib/innodb/record.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@ def row_string
3939
row&.map { |r| "%s=%s" % [r.name, r.value.inspect] }&.join(", ")
4040
end
4141

42+
def full_value_with_externs_for_field(field)
43+
blob_value = field.value
44+
extern_page = field.extern && page.space.page(field.extern.page_number)
45+
while extern_page
46+
blob_value += extern_page.blob_data
47+
extern_page = extern_page.next_blob_page
48+
end
49+
blob_value
50+
end
51+
4252
def undo
4353
return nil unless roll_pointer
4454
return unless (innodb_system = @page.space.innodb_system)

0 commit comments

Comments
 (0)