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

databank

Internal use only.

### Methods

always_check= bdb_open check_consistency close fileids filename format format= get_flatfile_data index_type= init_fileids new open primary primary= read search_all search_all_get_unique_id search_namespaces search_namespaces_get_unique_id search_primary search_primary_get_unique_id secondary secondary= to_s write

### Attributes

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

### Public Class methods

filename(dbname)

[Source]

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

new(name, idx_type = nil, hash = {})

[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

open(*arg)

[Source]

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

read(name, mode = 'rb', *bdbarg)

[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

always_check=(bool)

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

bdb_open(*bdbarg)

[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

check_consistency()

[Source]

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

close()

[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

fileids()

[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

format()

[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

format=(str)

[Source]

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

get_flatfile_data(f, pos, length)

[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

index_type=(str)

[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

init_fileids()

[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

primary()

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

primary=(pri_name)

[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

search_all(key)

[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

search_all_get_unique_id(key)

[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

search_namespaces(key, *names)

[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

search_namespaces_get_unique_id(key, *names)

[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

search_primary(*arg)

[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

search_primary_get_unique_id(key)

[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

secondary()

[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

secondary=(sec_names)

[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

to_s()

[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

write(mode = 'wb', *bdbarg)

[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]