Bio-DB-SeqFeature
view release on metacpan or search on metacpan
lib/Bio/DB/SeqFeature/Store/DBI/SQLite.pm view on Meta::CPAN
my $binend = int $end/$bin;
return $binstart+$BINS{$bin} if $binstart == $binend;
}
die "unreasonable coordinates ",$start+1,"..$end";
}
sub search_bins {
my $self = shift;
my ($start,$end) = @_;
my @results;
for my $bin (@BINS) {
my $binstart = int $start/$bin;
my $binend = int $end/$bin;
push @results,$binstart+$BINS{$bin}..$binend+$BINS{$bin};
}
return @results;
}
###
# object initialization
#
sub init {
my $self = shift;
my ($dsn,
$is_temporary,
$autoindex,
$namespace,
$dump_dir,
$user,
$pass,
$dbi_options,
$writeable,
$fts,
$create,
) = rearrange(['DSN',
['TEMP','TEMPORARY'],
'AUTOINDEX',
'NAMESPACE',
['DUMP_DIR','DUMPDIR','TMP','TMPDIR'],
'USER',
['PASS','PASSWD','PASSWORD'],
['OPTIONS','DBI_OPTIONS','DBI_ATTR'],
['WRITE','WRITEABLE'],
'FTS',
'CREATE',
],@_);
$dbi_options ||= {};
$writeable = 1 if $is_temporary or $dump_dir;
$dsn or $self->throw("Usage: ".__PACKAGE__."->init(-dsn => \$dbh || \$dsn)");
my $dbh;
if (ref $dsn) {
$dbh = $dsn;
} else {
$dsn = "dbi:SQLite:$dsn" unless $dsn =~ /^dbi:/;
$dbh = DBI->connect($dsn,$user,$pass,$dbi_options) or $self->throw($DBI::errstr);
$dbh->do("PRAGMA synchronous = OFF;"); # makes writes much faster
$dbh->do("PRAGMA temp_store = MEMORY;"); # less disk I/O; some speedup
$dbh->do("PRAGMA cache_size = 20000;"); # less disk I/O; some speedup
# Keep track of database file location
my $cwd = getcwd;
my ($db_file) = ($dsn =~ m/(?:db(?:name)?|database)=(.+)$/);
$self->{dbh_file} = "$cwd/$db_file";
}
$self->{dbh} = $dbh;
$self->{fts} = $fts;
$self->{is_temp} = $is_temporary;
$self->{namespace} = $namespace;
$self->{writeable} = $writeable;
$self->default_settings;
$self->autoindex($autoindex) if defined $autoindex;
$self->dumpdir($dump_dir) if $dump_dir;
if ($self->is_temp) {
$self->init_tmp_database();
} elsif ($create) {
$self->init_database('erase');
}
}
sub table_definitions {
my $self = shift;
my $defs =
{
feature => <<END,
(
id integer primary key autoincrement,
typeid integer not null,
strand integer default 0,
"indexed" integer default 1,
object blob not null
)
END
locationlist => <<END,
(
id integer primary key autoincrement,
seqname text not null
);
create index index_locationlist on locationlist (seqname);
END
typelist => <<END,
(
id integer primary key autoincrement,
tag text not null collate nocase
);
create index index_typelist on typelist (tag);
END
name => <<END,
(
id integer not null,
name text not null collate nocase,
display_name integer default 0
);
create index index_name_id on name(id);
create index index_name_name on name(name);
( run in 0.669 second using v1.01-cache-2.11-cpan-39bf76dae61 )