class Bio::FlatFileIndex::DataBank

databank

Internal use only.

Attributes

always_check[R]
dbname[R]
index_type[R]

Public Class Methods

filename(dbname) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1131 def self.filename(dbname)
1132   File.join(dbname, 'config.dat')
1133 end
new(name, idx_type = nil, hash = {}) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1148 def initialize(name, idx_type = nil, hash = {})
1149   @dbname = name.dup
1150   @dbname.freeze
1151   @bdb = nil
1152 
1153   @always_check = true
1154   self.index_type = (hash['index'] or idx_type)
1155 
1156   if @bdb then
1157     @config = BDBwrapper.new(@dbname, 'config')
1158     @bdb_fileids = BDBwrapper.new(@dbname, 'fileids')
1159     @nsclass_pri = BDB_1::PrimaryNameSpace
1160     @nsclass_sec = BDB_1::SecondaryNameSpace
1161   else
1162     @config = hash
1163     @nsclass_pri = Flat_1::PrimaryNameSpace
1164     @nsclass_sec = Flat_1::SecondaryNameSpace
1165   end
1166   true
1167 end
open(*arg) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1144 def self.open(*arg)
1145   self.read(*arg)
1146 end
read(name, mode = 'rb', *bdbarg) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1135 def self.read(name, mode = 'rb', *bdbarg)
1136   f = File.open(filename(name), mode)
1137   hash = file2hash(f)
1138   f.close
1139   db = self.new(name, nil, hash)
1140   db.bdb_open(*bdbarg)
1141   db
1142 end

Public Instance Methods

always_check=(bool) click to toggle source

high level methods

     # File lib/bio/io/flatfile/index.rb
1305 def always_check=(bool)
1306   if bool then
1307     @always_check = true
1308   else
1309     @always_check = false
1310   end
1311 end
bdb_open(*bdbarg) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1204 def bdb_open(*bdbarg)
1205   if @bdb then
1206     @config.close
1207     @config.open(*bdbarg)
1208     @bdb_fileids.close
1209     @bdb_fileids.open(*bdbarg)
1210     true
1211   else
1212     nil
1213   end
1214 end
check_consistency() click to toggle source
     # File lib/bio/io/flatfile/index.rb
1374 def check_consistency
1375   fileids.check_all
1376 end
close() click to toggle source
     # File lib/bio/io/flatfile/index.rb
1234 def close
1235   DEBUG.print "DataBank: close #{@dbname}\n"
1236   primary.close
1237   secondary.close
1238   fileids.close
1239   if @bdb then
1240     @config.close
1241     @bdb_fileids.close
1242   end
1243   nil
1244 end
fileids() click to toggle source
     # File lib/bio/io/flatfile/index.rb
1288 def fileids
1289   unless @fileids then
1290     init_fileids
1291   end
1292   @fileids
1293 end
format() click to toggle source
     # File lib/bio/io/flatfile/index.rb
1281 def format
1282   unless @format then
1283     self.format = @config['format']
1284   end
1285   @format
1286 end
format=(str) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1277 def format=(str)
1278   @format = str.to_s.dup
1279 end
get_flatfile_data(f, pos, length) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1314 def get_flatfile_data(f, pos, length)
1315   fi = fileids[f.to_i]
1316   if @always_check then
1317     raise "flatfile #{fi.filename.inspect} may be modified" unless fi.check
1318   end
1319   fi.get(pos.to_i, length.to_i)
1320 end
index_type=(str) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1171 def index_type=(str)
1172   case str
1173   when MAGIC_BDB
1174     @index_type = MAGIC_BDB
1175     @bdb = true
1176     unless defined?(BDB)
1177       raise RuntimeError, "Berkeley DB support not found"
1178     end
1179   when MAGIC_FLAT, '', nil, false
1180     @index_type = MAGIC_FLAT
1181     @bdb = false
1182   else
1183     raise 'unknown or unsupported index type'
1184   end
1185 end
init_fileids() click to toggle source
     # File lib/bio/io/flatfile/index.rb
1295 def init_fileids
1296   if @bdb then
1297     @fileids = FileIDs.new('', @bdb_fileids)
1298   else
1299     @fileids = FileIDs.new('fileid_', @config)
1300   end
1301   @fileids
1302 end
primary() click to toggle source

parameters

     # File lib/bio/io/flatfile/index.rb
1247 def primary
1248   unless @primary then
1249     self.primary = @config['primary_namespace']
1250   end
1251   @primary
1252 end
primary=(pri_name) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1254 def primary=(pri_name)
1255   if !pri_name or pri_name.empty? then
1256     pri_name = 'UNIQUE'
1257   end
1258   @primary = @nsclass_pri.new(@dbname, pri_name)
1259   @primary
1260 end
search_all(key) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1341 def search_all(key)
1342   s = search_all_get_unique_id(key)
1343   search_primary(*s)
1344 end
search_all_get_unique_id(key) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1322 def search_all_get_unique_id(key)
1323   s = secondary.search(key)
1324   p = primary.include?(key)
1325   s.push p if p
1326   s.sort!
1327   s.uniq!
1328   s
1329 end
search_namespaces(key, *names) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1369 def search_namespaces(key, *names)
1370   s = search_namespaces_get_unique_id(key, *names)
1371   search_primary(*s)
1372 end
search_namespaces_get_unique_id(key, *names) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1353 def search_namespaces_get_unique_id(key, *names)
1354   if names.include?(primary.name) then
1355     n2 = names.dup
1356     n2.delete(primary.name)
1357     p = primary.include?(key)
1358   else
1359     n2 = names
1360     p = nil
1361   end
1362   s = secondary.search_names(key, *n2)
1363   s.push p if p
1364   s.sort!
1365   s.uniq!
1366   s
1367 end
search_primary(*arg) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1331 def search_primary(*arg)
1332   r = Results.new
1333   arg.each do |x|
1334     a = primary.search(x)
1335     # a is empty or a.size==1 because primary key must be unique
1336     r.store(x, get_flatfile_data(*a[0])) unless a.empty?
1337   end
1338   r
1339 end
search_primary_get_unique_id(key) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1346 def search_primary_get_unique_id(key)
1347   s = []
1348   p = primary.include?(key)
1349   s.push p if p
1350   s
1351 end
secondary() click to toggle source
     # File lib/bio/io/flatfile/index.rb
1262 def secondary
1263   unless @secondary then
1264     self.secondary = @config['secondary_namespaces']
1265   end
1266   @secondary
1267 end
secondary=(sec_names) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1269 def secondary=(sec_names)
1270   if !sec_names then
1271     sec_names = []
1272   end
1273   @secondary = NameSpaces.new(@dbname, @nsclass_sec, sec_names)
1274   @secondary
1275 end
to_s() click to toggle source
     # File lib/bio/io/flatfile/index.rb
1187 def to_s
1188   a = ""
1189   a << "index\t#{@index_type}\n"
1190 
1191   unless @bdb then
1192     a << "format\t#{@format}\n"
1193     @fileids.each_with_index do |x, i|
1194       a << "#{x.to_s(i)}\n"
1195     end
1196     a << "primary_namespace\t#{@primary.name}\n"
1197     a << "secondary_namespaces\t"
1198     a << @secondary.names.join("\t")
1199     a << "\n"
1200   end
1201   a
1202 end
write(mode = 'wb', *bdbarg) click to toggle source
     # File lib/bio/io/flatfile/index.rb
1216 def write(mode = 'wb', *bdbarg)
1217   unless FileTest.directory?(@dbname) then
1218     Dir.mkdir(@dbname)
1219   end
1220   f = File.open(self.class.filename(@dbname), mode)
1221   f.write self.to_s
1222   f.close
1223 
1224   if @bdb then
1225     bdb_open(*bdbarg)
1226     @config['format'] = format
1227     @config['primary_namespace'] = @primary.name
1228     @config['secondary_namespaces'] = @secondary.names.join("\t")
1229     @bdb_fileids.writeback_array('', fileids, *bdbarg)
1230   end
1231   true
1232 end