Hi All,
I am writing a small application with
Mojolicious
DBIx::Class
Hypnotoad
MySQL
In my application I need to do the following;
1) Do some complex processing ( takes a minute of so to complete )
2) insert resulting data from above processing into tables
3) obtain the last auto increment of some tables, do some more processing.
4) use the values from (3) as part of an insert into another table ( a
junction table )
Here is some sample code starting at step 2
#step 2
my $device = $device_rs->create(
{
devicename => $deviceName,
objects => \@objects
object_groups => \@objectgroups,
}
);
#step 3
my $lastogid =
$db->resultset('ObjectGroup')->get_column('objectgroupid')->max;
my $lastobid = $db->resultset('Object')->get_column('objectid')->max;
my $obgcount = scalar(@objectgroups);
my $objcount = scalar(@objects);
my $ogoffset = $lastogid - $obgcount;
my $oboffset = $lastobid - $objcount;
#now increment the object/group ids by the offset which will be inserted
into the many-many table
foreach my $hash (@childobjects) {
$hash->{'objectgroup_objectgroupid'} += $ogoffset;
$hash->{'object_objectid'} += $oboffset;
}
#step 4 - populate the junction table
$db->resultset('ObjectGroupHasObjects’)->populate(\@childobjects);
Now due to having multiple threads going a once the values obtained from
step 3 may not be correct ( for the current ‘device’ ).
I’m trying to find a way around this issue. The only thing I can think of
at the moment is putting a lock on the database tables before step 2) and
unlocking after step 4).
This might be more of a DBIx Issue but I thought I'd ask here as possibly
others have ran into similar issues when using Hypnotoad?
Many thanks
--
You received this message because you are subscribed to the Google Groups
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.