# Nath Johnson's solution #2 (see email 11/5/09)
# add method to Bio::Ensembl::Funcgen::DBSQL::BaseAdaptor.pm

sub fetch_all_by_linked_transcript_Gene{
    my ( $self, $gene ) = @_;

    if(! $gene ||
          ! (ref($gene) && $gene->isa('Bio::EnsEMBL::Gene') && $gene->dbID)){
         throw('You must provide a valid stored Bio::EnsEMBL:Gene object');
    }


    #Need to bindparams here to protect against injection
    my @tx_sids = @{$gene->adaptor->db->dbc->db_handle->selectall_arrayref('select tsid.stable_id from transcript_stable_id tsid, transcript t where t.gene_id='.$gene->dbID.' and t.transcript_id=tsid.transcript_id')};
    @tx_sids = map "@$_", @tx_sids;

   my $entryAdaptor = $self->db->get_DBEntryAdaptor();
   my (@ids, $type, $type_name);
   ($type = ref($self)) =~ s/.*:://;
   $type =~ s/Adaptor$//;
   ($type_name = $type) =~ s/Feature$/_feature/;
   my $xref_method = 'list_'.lc($type_name).'_ids_by_extid';

   if(! $entryAdaptor->can($xref_method)){
        warn "Does not yet accomodate $type external names";
        return [];
   }
   else{

        foreach my $tx_sid(@tx_sids){
          push @ids, $entryAdaptor->$xref_method($tx_sid, $self->db->species.'_core_Transcript');
        }
   }

   return $self->fetch_all_by_dbID_list( \@ids );
}

