innodb_ruby 0.8.7 → 0.8.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/bin/innodb_space CHANGED
@@ -388,7 +388,7 @@ def page_directory_summary(page)
388
388
  record = page.record(offset)
389
389
  key = if [:conventional, :node_pointer].include? record.header[:type]
390
390
  if record.key
391
- "(%s)" % record.key.map { |r| "%s=%s" % [r[:name], r[:value]] }.join(", ")
391
+ "(%s)" % record.key_string,
392
392
  end
393
393
  end
394
394
  puts "%-8i%-8i%-14s%-8i%s" % [
@@ -443,8 +443,8 @@ def index_recurse(index)
443
443
  page.each_record do |record|
444
444
  puts "%sRECORD: (%s) -> (%s)" % [
445
445
  " " * (depth+1),
446
- record.key.map { |r| "%s=%s" % [r[:name], r[:value]] }.join(", "),
447
- record.row.map { |r| "%s=%s" % [r[:name], r[:value]] }.join(", "),
446
+ record.key_string,
447
+ record.row_string,
448
448
  ]
449
449
  end
450
450
  end
@@ -533,7 +533,7 @@ def index_level_summary(index, levels)
533
533
  page.record_space,
534
534
  page.free_space,
535
535
  page.records,
536
- page.first_record.key.map { |r| r[:value] }.join("|"),
536
+ page.first_record.key_string,
537
537
  ]
538
538
  end
539
539
  end
data/lib/innodb/index.rb CHANGED
@@ -87,7 +87,7 @@ class Innodb::Index
87
87
  page = @root
88
88
  record = @root.first_record
89
89
  while record && page.level > level
90
- page = page(record[:child_page_number])
90
+ page = page(record.child_page_number)
91
91
  record = page.first_record
92
92
  end
93
93
  page if page.level == level
@@ -185,8 +185,8 @@ class Innodb::Index
185
185
 
186
186
  a.each_index do |i|
187
187
  @stats[:compare_key_field_comparison] += 1
188
- return -1 if a[i] < b[i]
189
- return +1 if a[i] > b[i]
188
+ return -1 if a[i] < b[i][:value]
189
+ return +1 if a[i] > b[i][:value]
190
190
  end
191
191
 
192
192
  return 0
@@ -206,7 +206,7 @@ class Innodb::Index
206
206
  puts "linear_search_from_cursor: page=%i, level=%i, start=(%s)" % [
207
207
  page.offset,
208
208
  page.level,
209
- this_rec && this_rec[:key].map { |r| r[:value] }.join(", "),
209
+ this_rec && this_rec.key_string,
210
210
  ]
211
211
  end
212
212
 
@@ -219,19 +219,19 @@ class Innodb::Index
219
219
  puts "linear_search_from_cursor: page=%i, level=%i, current=(%s)" % [
220
220
  page.offset,
221
221
  page.level,
222
- this_rec && this_rec[:key].map { |r| r[:value] }.join(", "),
222
+ this_rec && this_rec.key_string,
223
223
  ]
224
224
  end
225
225
 
226
226
  # If we reach supremum, return the last non-system record we got.
227
- return this_rec if next_rec[:header][:type] == :supremum
227
+ return this_rec if next_rec.header[:type] == :supremum
228
228
 
229
- if compare_key(key, this_rec[:key][:value]) < 0
229
+ if compare_key(key, this_rec.key) < 0
230
230
  return this_rec
231
231
  end
232
232
 
233
- if (compare_key(key, this_rec[:key][:value]) >= 0) &&
234
- (compare_key(key, next_rec[:key][:value]) < 0)
233
+ if (compare_key(key, this_rec.key) >= 0) &&
234
+ (compare_key(key, next_rec.key) < 0)
235
235
  # The desired key is either an exact match for this_rec or is greater
236
236
  # than it but less than next_rec. If this is a non-leaf page, that
237
237
  # will mean that the record will fall on the leaf page this node
@@ -268,7 +268,7 @@ class Innodb::Index
268
268
  page.level,
269
269
  dir.size,
270
270
  mid,
271
- rec[:key] && rec[:key].map { |r| r[:value] }.join(", "),
271
+ rec.key_string,
272
272
  ]
273
273
  end
274
274
 
@@ -276,12 +276,12 @@ class Innodb::Index
276
276
  # compare_key, so we need to just linear scan from here. If the mid-point
277
277
  # is the beginning of the page there can't be many records left to check
278
278
  # anyway.
279
- if rec[:header][:type] == :infimum
280
- return linear_search_from_cursor(page, page.record_cursor(rec[:next]), key)
279
+ if rec.header[:type] == :infimum
280
+ return linear_search_from_cursor(page, page.record_cursor(rec.next), key)
281
281
  end
282
282
 
283
283
  # Compare the desired key to the mid-point record's key.
284
- case compare_key(key, rec[:key][:value])
284
+ case compare_key(key, rec.key)
285
285
  when 0
286
286
  # An exact match for the key was found. Return the record.
287
287
  @stats[:binary_search_by_directory_exact_match] += 1
@@ -297,16 +297,16 @@ class Innodb::Index
297
297
  binary_search_by_directory(page, dir[mid...dir.size], key)
298
298
  else
299
299
  next_rec = page.record(dir[mid+1])
300
- next_key = next_rec && compare_key(key, next_rec[:key][:value])
300
+ next_key = next_rec && compare_key(key, next_rec.key)
301
301
  if dir.size == 1 || next_key == -1 || next_key == 0
302
302
  # This is the last entry remaining from the directory, or our key is
303
303
  # greater than rec and less than rec+1's key. Use linear search to
304
304
  # find the record starting at rec.
305
305
  @stats[:binary_search_by_directory_linear_search] += 1
306
- linear_search_from_cursor(page, page.record_cursor(rec[:offset]), key)
306
+ linear_search_from_cursor(page, page.record_cursor(rec.offset), key)
307
307
  elsif next_key == +1
308
308
  @stats[:binary_search_by_directory_linear_search] += 1
309
- linear_search_from_cursor(page, page.record_cursor(next_rec[:offset]), key)
309
+ linear_search_from_cursor(page, page.record_cursor(next_rec.offset), key)
310
310
  else
311
311
  nil
312
312
  end
@@ -346,16 +346,16 @@ class Innodb::Index
346
346
  end
347
347
 
348
348
  while rec =
349
- linear_search_from_cursor(page, page.record_cursor(page.infimum[:next]), key)
349
+ linear_search_from_cursor(page, page.record_cursor(page.infimum.next), key)
350
350
  if page.level > 0
351
351
  # If we haven't reached a leaf page yet, move down the tree and search
352
352
  # again using linear search.
353
- page = page(rec[:child_page_number])
353
+ page = page(rec.child_page_number)
354
354
  else
355
355
  # We're on a leaf page, so return the page and record if there is a
356
356
  # match. If there is no match, break the loop and cause nil to be
357
357
  # returned.
358
- return page, rec if compare_key(key, rec[:key][:value]) == 0
358
+ return page, rec if compare_key(key, rec.key) == 0
359
359
  break
360
360
  end
361
361
  end
@@ -383,12 +383,12 @@ class Innodb::Index
383
383
  if page.level > 0
384
384
  # If we haven't reached a leaf page yet, move down the tree and search
385
385
  # again using binary search.
386
- page = page(rec[:child_page_number])
386
+ page = page(rec.child_page_number)
387
387
  else
388
388
  # We're on a leaf page, so return the page and record if there is a
389
389
  # match. If there is no match, break the loop and cause nil to be
390
390
  # returned.
391
- return page, rec if compare_key(key, rec[:key][:value]) == 0
391
+ return page, rec if compare_key(key, rec.key) == 0
392
392
  break
393
393
  end
394
394
  end
data/lib/innodb/record.rb CHANGED
@@ -23,10 +23,18 @@ class Innodb::Record
23
23
  record[:key]
24
24
  end
25
25
 
26
+ def key_string
27
+ key && key.map { |r| "%s=%s" % [r[:name], r[:value]] }.join(", ")
28
+ end
29
+
26
30
  def row
27
31
  record[:row]
28
32
  end
29
33
 
34
+ def row_string
35
+ key && key.map { |r| "%s=%s" % [r[:name], r[:value]] }.join(", ")
36
+ end
37
+
30
38
  def child_page_number
31
39
  record[:child_page_number]
32
40
  end
@@ -1,5 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  module Innodb
4
- VERSION = "0.8.7"
4
+ VERSION = "0.8.8"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: innodb_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.7
4
+ version: 0.8.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: