fREW Schmidt wrote:
On Thu, Mar 12, 2009 at 10:23 AM, fREW Schmidt <[email protected]
<mailto:[email protected]>> wrote:
Hello friends!
We have the following SQL:
(select date from logParents where id = 62),
(select max(logstatus.date) from logstatus
join logChildren on logChildren.id = logStatus.child_id
join logParents on logParents.id = logChildren.parent_id
where parent_id = 62)
) as elapsed
We'd like to make it a method for the logParent, so one could just
do $parent->elapsed_ms or something like that. We are kindav at a
loss as to how to do this. Any tips at all would be extremely helpful.
Actually I pasted the SQL incorrectly... here is what it should have been:
select datediff(millisecond,
(select date from logParents where id = 62),
(select max(logstatus.date) from logstatus
join logChildren on logChildren.id = logStatus.child_id
join logParents on logParents.id = logChildren.parent_id
where parent_id = 62)
) as elapsed
What is datediff(), and it is absolutely necessary? Seems to me you
could do the math on perl side, especially if you're using the
InflateColumn::Datetime component. Assuming a few things about your
schema config:
log_parent->has_many(log_children)
log_children->has_many(log_status)
log_parent->date isa DateTime
log_status->date isa DateTime
then you could create your method like this (untested, of course):
package My::Schema::LogParent;
sub elapsed_ms {
my $self = shift;
my $latest = $self->log_children->log_status
->get_column('date')->max;
my $diff = $self->date->subtract_datetime($latest);
return $diff->in_units('nanoseconds') / 100000;
}
--
Jason Gottshall
[email protected]
_______________________________________________
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]