Wolfgang Kinkeldei wrote:
Hello,

when using subqueries in the 'from' part of a query, sometimes the list of 
@bind parameters is not maintained correct. As a simple testcase please find a 
primitive subselect enclosed that just does a count with a correlated subquery.

<snip>
# a simple counting subquery
my $subquery = $schema->resultset('PersonRole')
        ->search( { role_id => 'admin' } ) # 1st bind param
        ->count_rs
        ->as_query;

my @people = $schema->resultset('Person')
        ->search(
            {
                'me.person_id' => 42, # 2nd bind param
            },
            {
                select => [ $subquery ],
                # whatever you join here, @bind gets confused
                join => 'person_regions'
            })
        ->all;
<snap>

if the 'join' attribute in the main query is left off, the SQL is fired as 
expected:

SELECT (SELECT COUNT( * ) FROM person_role me WHERE ( role_id = $1 )) FROM 
person me WHERE ( me.person_id = $2 )
DETAIL:  parameters: $1 = 'admin', $2 = '42'

Ok then, do you understand that the above SQL does in fact? person_role and 
person
are *NOT CORRELATED* in any way. You might as well say:

SELECT 42 FROM person me WHERE (me.person_id = ?)

While dbic is incorrectly dropping the bind param (and I will look into this), 
your
query makes absolutely no sense as a whole. Remember - any subquery statement is
*ABSOLUTELY OBLIVIOUS* to anything outside of its outer closing ()s. I would 
like
to provide you with a correct search() call, but I literally can not understand 
what
you are trying to express with the above.

Cheers



_______________________________________________
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/dbix-class@lists.scsys.co.uk

Reply via email to