diff options
Diffstat (limited to '')
-rw-r--r-- | storage/mroonga/vendor/groonga/lib/mrb/scripts/database.rb | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/database.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/database.rb new file mode 100644 index 00000000..e0c6b4a0 --- /dev/null +++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/database.rb @@ -0,0 +1,65 @@ +module Groonga + class Database + def each_raw(options=nil) + return to_enum(__method__, options) unless block_given? + + if options + min = options[:prefix] + order = options[:order] + order_by = options[:order_by] + else + min = nil + order = :ascending + order_by = :id + end + flags = 0 + + if order == :descending + flags |= TableCursorFlags::DESCENDING + else + flags |= TableCursorFlags::ASCENDING + end + if order_by == :id + flags |= TableCursorFlags::BY_ID + else + flags |= TableCursorFlags::BY_KEY + end + flags |= TableCursorFlags::PREFIX if min + TableCursor.open(self, :min => min, :flags => flags) do |cursor| + cursor.each do |id| + yield(id, cursor) + end + end + end + + def each(options=nil) + return to_enum(__method__, options) unless block_given? + + context = Context.instance + each_raw(options) do |id, cursor| + object = context[id] + yield(object) if object + end + end + + def each_name(options=nil) + return to_enum(__method__, options) unless block_given? + + each_raw(options) do |id, cursor| + name = cursor.key + yield(name) + end + end + + def each_table(options={}) + return to_enum(__method__, options) unless block_given? + + context = Context.instance + each_name(options) do |name| + next if name.include?(".") + object = context[name] + yield(object) if object.is_a?(Table) + end + end + end +end |