[Dbix-class] Subquery question
Nigel Metheringham
Nigel.Metheringham at dev.intechnology.co.uk
Thu May 18 13:03:45 CEST 2006
On Thu, 2006-05-18 at 10:28 +0100, Nigel Metheringham wrote:
> On Wed, 2006-05-17 at 10:47 +1200, Dan Horne wrote:
> > Nigel Metheringham wrote:
> > >
> > > Here's an example I have it returns all items in one table (TaskLog) old
> > > than $fromdate and not referenced by another (task_last_run)
> > >
> > > my $rs = $schema->resultset('TaskLog');
> > > my $subsel = '(SELECT tl_id FROM task_last_run)';
> > > my $qry = $rs->search(
> > > {
> > > tl_timestamp => { '<=', $fromdate },
> > > tl_id => { -not_in => \$subsel }
> > > }
> > > );
> > >
> > > The magic trick is the reference to a string containing raw SQL - this
> > > is documented in the SQL::Abstract documentation.
> Well I was working on that about a month ago, and it worked then...
> Today I finally managed to get back to this project, and it completely
> fails to work :-)
I can't make that form work now, nor can I make it work with reverted
versions of DBIC, and I have no SQL::Abstract updates in recent
memory... so if it worked (and I am *sure* I had code using that form
working fine) then its a mystery.
However *this* does work:-
my $rs = $schema->resultset('TaskLog');
my $subsel = 'IN (SELECT tl_id FROM task_last_run)';
my $qry = $rs->search(
{
tl_timestamp => { '<=', $fromdate },
tl_id => \$subsel,
}
);
ie you put the raw SQL as a direct (referenced) value of the column,
rather than in a further layer of indirection (the -in in my case).
AT least that works at the moment.... my paranoia says it will stop
working as soon as I look away.
Nigel.
--
[ Nigel Metheringham Nigel.Metheringham at InTechnology.co.uk ]
[ - Comments in this message are my own and not ITO opinion/policy - ]
More information about the Dbix-class
mailing list