[Bioperl-l] Adding namespace support to Bio::DB::SeqFeature::Store::DBI::Pg

Scott Cain scott at scottcain.net
Wed Feb 10 19:35:48 UTC 2010


Hi Adam,

I don't have a problem with this approach. Can you verify that this
patch still passes the Pg SFS tests? I don't generally use
schemas/name spaces (same thing,right?) much, so I wouldn't feel
comfortable evaluting it completely.  And, even better, could you add
to the tests that exercise this behavior?

Thanks,
Scott


On Wednesday, February 10, 2010, Adam Witney <awitney at sgul.ac.uk> wrote:
>
> I noticed that namespace's didn't work with Bio::DB::SeqFeature::Store::DBI::Pg because when creating the database the CREATE INDEX statements didn't pass through _qualify to add the namespace prefix, thus giving a "relation "typelist_tab" already exists" error.
>
> The patch below fixes this, but the question is does this seem like a good approach?
>
> thanks
>
> adam
>
>
> Index: Pg.pm
> ===================================================================
> --- Pg.pm       (revision 16551)
> +++ Pg.pm       (working copy)
> @@ -256,22 +256,20 @@
>    indexed  int default 1,
>    object     bytea not null
>  );
> -  CREATE INDEX feature_stuff ON feature(seqid,tier,bin,typeid);
> -  CREATE INDEX feature_typeid ON feature(typeid);
>  END
>
>           locationlist => <<END,
>  (
>    id         serial primary key,
>    seqname    varchar(256)   not null
> -); CREATE INDEX locationlist_seqname ON locationlist(seqname);
> +);
>  END
>
>           typelist => <<END,
>  (
>    id       serial primary key,
>    tag      varchar(256)  not null
> -); CREATE INDEX typelist_tab ON typelist(tag);
> +);
>  END
>           name => <<END,
>  (
> @@ -279,8 +277,6 @@
>    name         varchar(256)  not null,
>    display_name int       default 0
>  );
> -  CREATE INDEX name_id ON name(id);
> -  CREATE INDEX name_name ON name(name);
>  END
>
>           attribute => <<END,
> @@ -289,8 +285,6 @@
>    attribute_id     int   not null,
>    attribute_value  text
>  );
> -  CREATE INDEX attribute_id ON attribute(id);
> -  CREATE INDEX attribute_id_val ON attribute(attribute_id,SUBSTR(attribute_value, 1, 10));
>  END
>
>           attributelist => <<END,
> @@ -298,14 +292,12 @@
>    id       serial primary key,
>    tag      varchar(256)  not null
>  );
> -  CREATE INDEX attributelist_tag ON attributelist(tag);
>  END
>           parent2child => <<END,
>  (
>    id               int       not null,
>    child            int       not null
>  );
> -  CREATE INDEX parent2child_id_child ON parent2child(id,child);
>  END
>
>           meta => <<END,
> @@ -325,6 +317,22 @@
>          };
>  }
>
> +sub index_definitions {
> +  my $self = shift;
> +  return {
> +         feature_stuff  => "feature(seqid,tier,bin,typeid)",
> +         feature_typeid => "feature(typeid)",
> +         locationlist_seqname => "locationlist(seqname)",
> +      typelist_tab => "typelist(tag)",
> +      name_id => "name(id)",
> +      name_name => "name(name)",
> +      attribute_id => "attribute(id)",
> +      attribute_id_val => "attribute(attribute_id,SUBSTR(attribute_value, 1, 10))",
> +      attributelist_tag =>  "attributelist(tag)",
> +      parent2child_id_child => "parent2child(id,child)",
> +        };
> +}
> +
>  sub schema {
>    my ($self, $schema) = @_;
>    $self->{'schema'} = $schema if defined($schema);
> @@ -354,6 +362,18 @@
>                         $dbh->do($query) or $self->throw($dbh->errstr);
>                 }
>    }
> +
> +  my $indexes = $self->index_definitions;
> +  foreach (keys %$indexes) {
> +    my $index = $self->_qualify($_);
> +    my $index_def = $self->_qualify($indexes->{$_});
> +    $dbh->do("DROP INDEX IF EXISTS $index") if $erase;
> +    my @index_exists = $dbh->selectrow_array("SELECT * FROM pg_indexes WHERE indexname = '$index'");
> +               if (!scalar(@index_exists)) {
> +                       my $query = "CREATE INDEX $index ON $index_def";
> +                       $dbh->do($query) or $self->throw($dbh->errstr);
> +               }
> +  }
>    $self->subfeatures_are_indexed(1) if $erase;
>    1;
>  }
>
>
>
>
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>

-- 
------------------------------------------------------------------------
Scott Cain, Ph. D.                                   scott at scottcain dot net
GMOD Coordinator (http://gmod.org/)                     216-392-3087
Ontario Institute for Cancer Research




More information about the Bioperl-l mailing list