summaryrefslogtreecommitdiff
path: root/storage/mroonga/vendor/groonga/plugins/sharding/logical_enumerator.rb
diff options
context:
space:
mode:
Diffstat (limited to 'storage/mroonga/vendor/groonga/plugins/sharding/logical_enumerator.rb')
-rw-r--r--storage/mroonga/vendor/groonga/plugins/sharding/logical_enumerator.rb22
1 files changed, 16 insertions, 6 deletions
diff --git a/storage/mroonga/vendor/groonga/plugins/sharding/logical_enumerator.rb b/storage/mroonga/vendor/groonga/plugins/sharding/logical_enumerator.rb
index 7ad5393ae77..1aeafef5438 100644
--- a/storage/mroonga/vendor/groonga/plugins/sharding/logical_enumerator.rb
+++ b/storage/mroonga/vendor/groonga/plugins/sharding/logical_enumerator.rb
@@ -2,6 +2,7 @@ module Groonga
module Sharding
class LogicalEnumerator
attr_reader :target_range
+ attr_reader :logical_table
attr_reader :shard_key_name
def initialize(command_name, input)
@command_name = command_name
@@ -9,12 +10,21 @@ module Groonga
initialize_parameters
end
- def each
+ def each(&block)
+ each_internal(:ascending, &block)
+ end
+
+ def reverse_each(&block)
+ each_internal(:descending, &block)
+ end
+
+ private
+ def each_internal(order)
prefix = "#{@logical_table}_"
context = Context.instance
context.database.each_table(:prefix => prefix,
:order_by => :key,
- :order => :ascending) do |table|
+ :order => order) do |table|
shard_range_raw = table.name[prefix.size..-1]
next unless /\A(\d{4})(\d{2})(\d{2})\z/ =~ shard_range_raw
@@ -142,10 +152,10 @@ module Groonga
return true if @min_border == :exclude
- @min.hour != 0 and
- @min.min != 0 and
- @min.sec != 0 and
- @min.usec != 0
+ not (@min.hour == 0 and
+ @min.min == 0 and
+ @min.sec == 0 and
+ @min.usec == 0)
end
def in_max?(shard_range)