Class Bio::FlatFileIndex::DataBank
In: lib/bio/io/flatfile/index.rb
Parent: Object

databank

Internal use only.

Methods

Attributes

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

Public Class methods

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1131
1131:       def self.filename(dbname)
1132:         File.join(dbname, 'config.dat')
1133:       end

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1148
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

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1144
1144:       def self.open(*arg)
1145:         self.read(*arg)
1146:       end

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1135
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

high level methods

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1305
1305:       def always_check=(bool)
1306:         if bool then
1307:           @always_check = true
1308:         else
1309:           @always_check = false
1310:         end
1311:       end

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1204
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

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1374
1374:       def check_consistency
1375:         fileids.check_all
1376:       end

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1234
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

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1288
1288:       def fileids
1289:         unless @fileids then
1290:           init_fileids
1291:         end
1292:         @fileids
1293:       end

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1281
1281:       def format
1282:         unless @format then
1283:           self.format = @config['format']
1284:         end
1285:         @format
1286:       end

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1277
1277:       def format=(str)
1278:         @format = str.to_s.dup
1279:       end

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1314
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

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1171
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

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1295
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

parameters

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1247
1247:       def primary
1248:         unless @primary then
1249:           self.primary = @config['primary_namespace']
1250:         end
1251:         @primary
1252:       end

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1254
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

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1341
1341:       def search_all(key)
1342:         s = search_all_get_unique_id(key)
1343:         search_primary(*s)
1344:       end

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1322
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

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1369
1369:       def search_namespaces(key, *names)
1370:         s = search_namespaces_get_unique_id(key, *names)
1371:         search_primary(*s)
1372:       end

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1353
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

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1331
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

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1346
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

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1262
1262:       def secondary
1263:         unless @secondary then
1264:           self.secondary = @config['secondary_namespaces']
1265:         end
1266:         @secondary
1267:       end

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1269
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

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1187
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

[Source]

      # File lib/bio/io/flatfile/index.rb, line 1216
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

[Validate]