Module: Persist::LMDBAdapter

Defined in:
lib/rbbt/persist/tsv/lmdb.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#closedObject

Returns the value of attribute closed.



6
7
8
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 6

def closed
  @closed
end

#persistence_pathObject

Returns the value of attribute persistence_path.



6
7
8
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 6

def persistence_path
  @persistence_path
end

Class Method Details

.open(path, write) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 8

def self.open(path, write)

  database = CONNECTIONS[path] ||= begin
                                     dir = File.dirname(File.expand_path(path))
                                     file = File.basename(path)
                                     env = LMDB.new(dir, :mapsize => 1024 * 10000)
                                     database = env.database file, :create => write
                                     database
                                   end

  database.extend Persist::LMDBAdapter unless Persist::LMDBAdapter === database
  database.persistence_path ||= path

  database
end

Instance Method Details

#closeObject



42
43
44
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 42

def close
  self
end

#closed?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 38

def closed?
  false
end

#collectObject



67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 67

def collect
  res = []
  cursor do |cursor|
    while pair = cursor.next
      res = if block_given?
              yield *pair
            else
              pair
            end
    end
  end
  res
end

#delete(key) ⇒ Object



81
82
83
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 81

def delete(key)
  out(key)
end

#eachObject



58
59
60
61
62
63
64
65
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 58

def each
  cursor do |cursor|
    while pair = cursor.next
      yield *pair
    end
  end
  self
end

#include?(key) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 34

def include?(key)
  self.send(:[], key, true)
end

#keysObject



24
25
26
27
28
29
30
31
32
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 24

def keys
  keys = []
  cursor do |cursor|
    while p = cursor.next
      keys << p.first
    end
  end
  keys
end

#merge!(hash) ⇒ Object



121
122
123
124
125
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 121

def merge!(hash)
  hash.each do |key,values|
    self[key] = values
  end
end

#range(*args) ⇒ Object



128
129
130
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 128

def range(*args)
  super(*args) - TSV::ENTRY_KEYS.to_a
end

#read(force = false) ⇒ Object



46
47
48
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 46

def read(force = false)
  self
end

#read_and_closeObject



111
112
113
114
115
116
117
118
119
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 111

def read_and_close
  read if @closed or write?
  res = begin
          yield
        ensure
          close
        end
  res
end

#write(force = true) ⇒ Object



50
51
52
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 50

def write(force = true)
  self
end

#write?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 54

def write?
  @writable
end

#write_and_closeObject



98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 98

def write_and_close
  lock_filename = Persist.persistence_path(persistence_path, {:dir => TSV.lock_dir})
  Misc.lock(lock_filename) do
    write if @closed or not write?
    res = begin
            yield
          ensure
            close
          end
    res
  end
end

#write_and_readObject



85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 85

def write_and_read
  lock_filename = Persist.persistence_path(persistence_path, {:dir => TSV.lock_dir})
  Misc.lock(lock_filename) do
    write if @closed or not write?
    res = begin
            yield
          ensure
            read
          end
    res
  end
end