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