7
use Bio::DB::SeqFeature::Store;
9
my $DSN = 'dbi:mysql:test';
12
my $ADAPTOR = 'DBI::mysql';
22
'adaptor=s' => \$ADAPTOR,
23
'verbose!' => \$VERBOSE,
24
'dryrun|dry-run' => \$TEST,
30
'password=s' => \$PASS,
32
Usage: $0 [options] <feature1> <feature2> <feature3>
34
-d --dsn The database name ($DSN)
35
-a --adaptor The storage adaptor to use ($ADAPTOR)
36
-n --name Delete features based on name or wildcard pattern (default)
37
-t --type Delete features based on type
38
-i --id Delete features based on primary id
39
-v --verbose Turn on verbose progress reporting (default)
40
--noverbose Turn off verbose progress reporting
41
--dryrun Dry run; report features to be deleted without actually deleting them
42
-u --user User to connect to database as
43
-p --password Password to use to connect to database
44
-f --fast Deletes each item instantly not atomic for full dataset (mainly for deleting massive datasets linked to a type)
48
Delete from mysql database volvox features named f08 f09 f10
49
$0 -d volvox -n f08 f09 f10
51
Delete features whose names start with f
54
Delete all features of type remark, source example
55
$0 -d volvox -t remark:example
57
Delete all remark features, regardless of source
58
$0 -d volvox -t 'remark:*'
60
Delete the feature with ID 1234
63
Delete all features named f* from a berkeleydb database
64
$0 -a berkeleydb -d /usr/local/share/db/volvox -n 'f*'
66
Remember to protect wildcards against shell interpretation by putting
67
single quotes around them!
71
if ($NAME+$TYPE+$ID > 1) {
72
die "Please provide only one of the --name, --type or --id options.\nRun \"$0 --help\" for usage.\n";
76
die "Please provide a list of feature names, types or ids.\n Run \"$0 --help\" for usage.\n";
86
@options = ($USER,$PASS) if $USER || $PASS;
88
my $store = Bio::DB::SeqFeature::Store->new(
95
or die "Couldn't create connection to the database";
97
my @features = retrieve_features($store,$mode,\@ARGV);
99
if ($VERBOSE || $TEST) {
100
print scalar (@features)," feature(s) match.\n\n";
102
foreach (@features) {
103
printf "%-20s %-20s %-12s\n%-20s %-20s %-12s\n",
104
'Name','Type','Primary ID',
105
'----','----','----------'
107
printf "%-20s %-20s %-12d\n",$_->display_name,$_->type,$_->primary_id;
112
if (@features && !$TEST) {
115
foreach my $feat(@features) {
116
my @tmp_feat = ($feat);
117
my $deleted = $store->delete(@tmp_feat);
119
if ($VERBOSE && $deleted) {
120
print 'Feature ',$del," successfully deleted.\n";
121
} elsif (!$deleted) {
122
die "An error occurred. Some or all of the indicated features could not be deleted.";
127
my $deleted = $store->delete(@features);
128
if ($VERBOSE && $deleted) {
129
print scalar(@features)," features successfully deleted.\n";
130
} elsif (!$deleted) {
131
die "An error occurred. Some or all of the indicated features could not be deleted.";
138
sub retrieve_features {
139
my($db,$mode,$list) = @_;
141
if ($mode eq 'name') {
142
@features = map {$db->get_features_by_alias($_)} @$list;
144
elsif ($mode eq 'type') {
145
my $regexp = glob2regexp(@$list);
146
my @types = grep {/$regexp/} $db->types;
147
@features = $db->get_features_by_type(@types) if @types;
149
elsif ($mode eq 'id') {
150
@features = grep {defined $_} map {$db->get_feature_by_primary_id($_)} @$list;
161
return '^(?:'.join('|',@globs).')$';