Well
Is there anyway to do the following.
I have a Respondent record, which has a one to many relationship with
Answer records.
I want to be able to get a set of Respondents who answered a particular
way and I first tried do it like
my $rs = $schema->resultset('Respondent')->search(
{
'answers.question_id'=>$foo,
'answers.answer'=>$bar
},
{
join=>'answers',
}
);
Which works, but when you call search on this resultset again, ie,
searching withing that subset, it fails eg
$rs = $rs->search(
{
'answers.question_id'=>$foo_1,
'answers.answer'=>$bar_1,
},{
join=>'answers',
}
);
The resulting SQL does not join "answers" twice and puts in the where
clause
answers.question_id=$foo AND answers.question_id = $foo_1 AND answers.answer =
$bar AND answers.answer = $bar_1
Which is incorrect.
I can only do with with an EXISTS subquery clause and this is not
available yet in SQL::Abstract (as far as I know) and I have to embed
the values directly into the SQL using search_literal as I cannot use
placeholders.
So is there anyway around this conundrum?
Matt S Trout wrote:
On Fri, Sep 21, 2007 at 09:20:16AM +1000, brett gardner wrote:
Matt S Trout wrote:
On Thu, Sep 20, 2007 at 08:43:20AM +0100, Ash Berlin wrote:
brett gardner wrote:
I think I have found a bug with search_literal. If you get a resultset
that came from a search_literal, and try to apply another search_literal
to it, the bind values are in the wrong order eg.
my $rs = $schema->resultset('Foo')->search_literal('foo = ?', 1);
$rs = $rs->search_literal('bar = ?',2);
Spits out the sql
SELECT foo.field
>FROM foo
WHERE ( ( foo.bar = ? AND foo.foo = ? ) )
With a bind values array of "[1,2]". It should be a bind values array of
"[2,1]".
It seems to be adding the second literal string to the front of the
where clause, but adding the values to the end of the array.
I'm using 0.08003 but a quick search in the change log doesn't mention
anything about search_literal
Cheers,
Brett Gardner
Sounds like a bug to me - can you please whip up a patch that gives us a
failing test case?
Plus a doc patch saying "this only exists for Class::DBI compatibility, do
-not- use in normal DBIx::Class code".
Do you mean do not use "search_literal" at all in DBIx::Class code?
Correct.
There's never any reason to and it doesn't chain properly (as you've just
noticed ...)
_______________________________________________
List: http://lists.rawmode.org/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]