SBDB::DB#[]=: If set to nil, it will delete item. SBDB::Cursor#each: Integer-keys for Recno and Queue.
This commit is contained in:
parent
8385dd2868
commit
ff2e444047
2 changed files with 27 additions and 8 deletions
|
@ -12,12 +12,12 @@ module SBDB
|
||||||
include Enumerable
|
include Enumerable
|
||||||
def bdb_object() @cursor end
|
def bdb_object() @cursor end
|
||||||
def close() @cursor.close end
|
def close() @cursor.close end
|
||||||
def get( k, v, f) @cursor.get k, v, f end
|
def get( k, v, f) @cursor.get( k, v, f) end
|
||||||
def count() @cursor.count end
|
def count() @cursor.count end
|
||||||
def first( k = nil, v = nil) @cursor.get k, v, FIRST end
|
def first( k = nil, v = nil) get k, v, FIRST end
|
||||||
def last( k = nil, v = nil) @cursor.get k, v, LAST end
|
def last( k = nil, v = nil) get k, v, LAST end
|
||||||
def next( k = nil, v = nil) @cursor.get k, v, NEXT end
|
def next( k = nil, v = nil) get k, v, NEXT end
|
||||||
def prev( k = nil, v = nil) @cursor.get k, v, PREV end
|
def prev( k = nil, v = nil) get k, v, PREV end
|
||||||
|
|
||||||
def self.new *p
|
def self.new *p
|
||||||
x = super *p
|
x = super *p
|
||||||
|
@ -33,6 +33,12 @@ module SBDB
|
||||||
when Bdb::Db::Cursor then [ref]
|
when Bdb::Db::Cursor then [ref]
|
||||||
else [ref.bdb_object.cursor( nil, 0), ref]
|
else [ref.bdb_object.cursor( nil, 0), ref]
|
||||||
end
|
end
|
||||||
|
if [Recno, Queue].any? {|t| t === @db }
|
||||||
|
def get k, v, f
|
||||||
|
l, w = @cursor.get( k, v, f)
|
||||||
|
l.nil? ? nil : [l.unpack('I')[0], w]
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def reverse k = nil, v = nil, &e
|
def reverse k = nil, v = nil, &e
|
||||||
|
@ -42,10 +48,10 @@ module SBDB
|
||||||
def each k = nil, v = nil, f = nil, n = nil
|
def each k = nil, v = nil, f = nil, n = nil
|
||||||
return Enumerator.new( self, :each, k, v, f, n) unless block_given?
|
return Enumerator.new( self, :each, k, v, f, n) unless block_given?
|
||||||
n ||= NEXT
|
n ||= NEXT
|
||||||
e = @cursor.get k, v, f || FIRST
|
e = get k, v, f || FIRST
|
||||||
return unless e
|
return unless e
|
||||||
yield *e
|
yield *e
|
||||||
yield *e while e = @cursor.get( k, v, n)
|
yield *e while e = get( k, v, n)
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,6 +9,8 @@ module SBDB
|
||||||
QUEUE = Bdb::Db::QUEUE
|
QUEUE = Bdb::Db::QUEUE
|
||||||
ARRAY = RECNO = Bdb::Db::RECNO
|
ARRAY = RECNO = Bdb::Db::RECNO
|
||||||
RDONLY = READLONY = Bdb::DB_RDONLY
|
RDONLY = READLONY = Bdb::DB_RDONLY
|
||||||
|
CONSUME = Bdb::DB_CONSUME
|
||||||
|
CONSUME_WAIT = Bdb::DB_CONSUME_WAIT
|
||||||
|
|
||||||
attr_reader :home
|
attr_reader :home
|
||||||
include Enumerable
|
include Enumerable
|
||||||
|
@ -16,9 +18,16 @@ module SBDB
|
||||||
def sync() @db.sync end
|
def sync() @db.sync end
|
||||||
def close( f = nil) @db.close f || 0 end
|
def close( f = nil) @db.close f || 0 end
|
||||||
def []( k) @db.get nil, k.nil? ? nil : k.to_s, nil, 0 end
|
def []( k) @db.get nil, k.nil? ? nil : k.to_s, nil, 0 end
|
||||||
def []=( k, v) @db.put nil, k.nil? ? nil : k.to_s, v.nil? ? nil : v.to_s, 0 end
|
|
||||||
def cursor( &e) Cursor.new self, &e end
|
def cursor( &e) Cursor.new self, &e end
|
||||||
|
|
||||||
|
def []= k, v
|
||||||
|
if v.nil?
|
||||||
|
@db.del nil, k.to_s, 0
|
||||||
|
else
|
||||||
|
@db.put nil, k.nil? ? nil : k.to_s, v.to_s, 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def new *p, &e
|
def new *p, &e
|
||||||
x = super *p
|
x = super *p
|
||||||
|
@ -112,5 +121,9 @@ module SBDB
|
||||||
def []= k, v
|
def []= k, v
|
||||||
super [k].pack('I'), v
|
super [k].pack('I'), v
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def unshift
|
||||||
|
get nil, nil, nil, Bdb::DB_CONSUME
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue