Sorry about that. Thank you for notifying me. Here is the original message. I hope everything will be ok this time.

Hello,

I did a few more test and here are the results. If I run the query inside the sqlite3 shell, the result I get is :

> SQLite version 3.4.2
> Enter ".help" for instructions
> sqlite> SELECT me.location_id, me.start, me.end, me.accession, me.aligment_id, aligment.aligment_id, aligment.strand, aligment.reference_sequence_id, aligment.score, aligment.distant_id, aligment.distant_table FROM location me JOIN aligment aligment ON ( aligment.aligment_id = me.aligment_id ) WHERE ( ( ( start*strand < 45622542 ) AND ( me.aligment_id = 507781 ) ) ) ORDER BY (start*strand) DESC;
> 2884873|45620932|45620997||507781|507781|1|27|1.0|742163|transcript
> 2884874|45587961|45588122||507781|507781|1|27|1.0|742163|transcript
> 2884875|45567656|45567829||507781|507781|1|27|1.0|742163|transcript
> 2884876|45513662|45513766||507781|507781|1|27|1.0|742163|transcript
> 2884877|45507578|45507734||507781|507781|1|27|1.0|742163|transcript
> 2884878|45498308|45498672||507781|507781|1|27|1.0|742163|transcript
> 2884879|45404376|45404499||507781|507781|1|27|1.0|742163|transcript
> 2884880|45404032|45404175||507781|507781|1|27|1.0|742163|transcript

The same in query in the mysql shell:

> mysql> SELECT me.location_id, me.start, me.end, me.accession, me.aligment_id, aligment.aligment_id, aligment.strand, aligment.reference_sequence_id, aligment.score, aligment.distant_id, aligment.distant_table FROM location me JOIN aligment aligment ON ( aligment.aligment_id = me.aligment_id ) WHERE ( ( ( start*strand < 45622542 ) AND ( me.aligment_id = 507781 ) ) ) ORDER BY (start*strand) DESC; > +-------------+----------+----------+-----------+-------------+-------------+--------+-----------------------+-------+------------+---------------+ > | location_id | start | end | accession | aligment_id | aligment_id | strand | reference_sequence_id | score | distant_id | distant_table | > +-------------+----------+----------+-----------+-------------+-------------+--------+-----------------------+-------+------------+---------------+ > | 2884873 | 45620932 | 45620997 | NULL | 507781 | 507781 | 1 | 27 | 1 | 742163 | transcript | > | 2884874 | 45587961 | 45588122 | NULL | 507781 | 507781 | 1 | 27 | 1 | 742163 | transcript | > | 2884875 | 45567656 | 45567829 | NULL | 507781 | 507781 | 1 | 27 | 1 | 742163 | transcript | > | 2884876 | 45513662 | 45513766 | NULL | 507781 | 507781 | 1 | 27 | 1 | 742163 | transcript | > | 2884877 | 45507578 | 45507734 | NULL | 507781 | 507781 | 1 | 27 | 1 | 742163 | transcript | > | 2884878 | 45498308 | 45498672 | NULL | 507781 | 507781 | 1 | 27 | 1 | 742163 | transcript | > | 2884879 | 45404376 | 45404499 | NULL | 507781 | 507781 | 1 | 27 | 1 | 742163 | transcript | > | 2884880 | 45404032 | 45404175 | NULL | 507781 | 507781 | 1 | 27 | 1 | 742163 | transcript | > +-------------+----------+----------+-----------+-------------+-------------+--------+-----------------------+-------+------------+---------------+

When this query is runned inside my script using mysql, I get:

> bef
> SELECT me.location_id, me.start, me.end, me.accession, me.aligment_id, aligment.aligment_id, aligment.strand, aligment.reference_sequence_id, aligment.score, aligment.distant_id, aligment.distant_table FROM location me JOIN aligment aligment ON ( aligment.aligment_id = me.aligment_id ) WHERE ( ( ( me.start*aligment.strand < ? ) AND ( me.aligment_id = ? ) ) ): '45622542', '507781'
> location id = 2884873
> location id = 2884874
> location id = 2884875
> location id = 2884876
> location id = 2884877
> location id = 2884878
> location id = 2884879
> location id = 2884880
> aft

When this query is runned inside my script using sqlite, I get:

> bef
> SELECT me.location_id, me.start, me.end, me.accession, me.aligment_id, aligment.aligment_id, aligment.strand, aligment.reference_sequence_id, aligment.score, aligment.distant_id, aligment.distant_table FROM location me JOIN aligment aligment ON ( aligment.aligment_id = me.aligment_id ) WHERE ( ( ( me.start*aligment.strand < ? ) AND ( me.aligment_id = ? ) ) ): '45622542', '507781'
> location id = 2884872
> location id = 2884873
> location id = 2884874
> location id = 2884875
> location id = 2884876
> location id = 2884877
> location id = 2884878
> location id = 2884879
> location id = 2884880
> aft

Don't you find this weird. I run exactly the same query in sqlite shell, and I dont get the same answer as inside DBIx::Class. When I run this query using DBI only and sqlite, I get the right data fetched (the same as mysql). As you can see, I removed the order by clause and I still get the same response. The trace outputted above where done using this code:

> sub prev_location {    #only for stored locations
>     my ($self) = @_;
>     warn("I am not sure this can work") unless ($self->in_storage);
>     print STDERR "bef\n";
>     my $x = $self->aligment->search_related_rs(
>         'locations',
> {'me.start*aligment.strand' => {'<' => $self->start * $self->aligment->strand}},
> #         {order_by => ['(start*strand) DESC']}
>     );
>     my $first;
>
>     while( my $b = $x->next){
>         if(!defined($first)){
>             $first=$b;
>         }
>         print STDERR "location id = " . $b->location_id . "\n";
>     }
>     print STDERR "aft\n";
>     return $first;
> }

Here is the result source definition for alignment table:

> package Bio::Annotations::Aligment;
> use warnings;
> use strict;
>
> use base qw/DBIx::Class/;
>
> __PACKAGE__->load_components(qw/PK::Auto Core/);
> __PACKAGE__->table('aligment');
> __PACKAGE__->add_columns('aligment_id', 'strand', 'reference_sequence_id', 'score', 'distant_id',
>     'distant_table');
> __PACKAGE__->set_primary_key('aligment_id');
> __PACKAGE__->belongs_to('reference_sequence', 'Bio::Annotations::ReferenceSequence',
>     'reference_sequence_id');
> __PACKAGE__->belongs_to(
>     'transcript',
>     'Bio::Annotations::Transcript',
>     {'foreign.transcript_id' => 'self.distant_id',},
>     {   join  => 'aligments',
>         where => {'distant_table' => \" = 'transcript'"},
>     }
> );
>
> __PACKAGE__->has_many(
>     'locations',
>     'Bio::Annotations::Location',
>     'aligment_id',
>     {   prefetch => ['aligment'],
> #         order_by => ['start * strand', 'start']
>     }
> );
>
>
> 1;

and the location table:

> package Bio::Annotations::Location;
> use warnings;
> use strict;
>
> use base qw/DBIx::Class/;
>
> __PACKAGE__->load_components(qw/PK::Auto Core/);
> __PACKAGE__->table('location');
> __PACKAGE__->add_columns('location_id', 'start', 'end', 'accession', 'aligment_id');
> __PACKAGE__->set_primary_key('location_id');
> __PACKAGE__->belongs_to('aligment', 'Bio::Annotations::Aligment', 'aligment_id');
>
> sub prev_location {    #only for stored locations
>     my ($self) = @_;
>     warn("I am not sure this can work") unless ($self->in_storage);
>     print STDERR "bef\n";
>     my $x = $self->aligment->search_related_rs(
>         'locations',
> {'me.start*aligment.strand' => {'<' => $self->start * $self->aligment->strand}},
> #         {order_by => ['(start*strand) DESC']}
>     );
>     my $first;
>
>     while( my $b = $x->next){
>         if(!defined($first)){
>             $first=$b;
>         }
>         print STDERR "location id = " . $b->location_id . "\n";
>     }
>     print STDERR "aft\n";
>     return $first;
> }
>

Thanks again for your help...

JF

Matt S Trout wrote:
On Thu, May 15, 2008 at 04:15:09PM -0400, Jean-Francois Lucier wrote:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
Hello,<br>

Please don't post in HTML only to this list.


--

IMPORTANT: Veuillez penser à l'environnement avant d'imprimer ce courriel

Jean-Francois Lucier
Bio-informaticien
B10 solutions, consultation en bioinformatique
Centre de recherche clinique du CHUS
3001, 12e avenue Nord
Sherbrooke (Québec) J1H 5N4
CANADA
Téléphone: (819) 820-6868 ext: 12577
Fax: (819) 564-5392

_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/[EMAIL PROTECTED]

Reply via email to