[Bast-commits] r5436 -
DBIx-Class/0.08/branches/rt_bug_41083/lib/DBIx/Class
jmmills at dev.catalyst.perl.org
jmmills at dev.catalyst.perl.org
Tue Feb 10 00:23:28 GMT 2009
Author: jmmills
Date: 2009-02-10 00:23:28 +0000 (Tue, 10 Feb 2009)
New Revision: 5436
Modified:
DBIx-Class/0.08/branches/rt_bug_41083/lib/DBIx/Class/Schema.pm
Log:
Modified fix - removed %done tracking and replaced with a more elegant and proper isa() sorting.
The core issue with this bug was that sub classes resultset class would be set before the related parent|super class
was to have it's resultset class. This would cause problems since sub-classes inherit resultset classes from it's parent.
Fix is simple, sort the source classes via sub-class last.
Modified: DBIx-Class/0.08/branches/rt_bug_41083/lib/DBIx/Class/Schema.pm
===================================================================
--- DBIx-Class/0.08/branches/rt_bug_41083/lib/DBIx/Class/Schema.pm 2009-02-09 21:39:02 UTC (rev 5435)
+++ DBIx-Class/0.08/branches/rt_bug_41083/lib/DBIx/Class/Schema.pm 2009-02-10 00:23:28 UTC (rev 5436)
@@ -208,17 +208,19 @@
local *Class::C3::reinitialize = sub { };
use warnings 'redefine';
- my %done;
- foreach my $result (keys %results) {
+ # ensure classes are loaded and fetch properly sorted classes
+ $class->ensure_class_loaded($_) foreach(values %results);
+ my @subclass_last = sort { $results{$a}->isa($results{$b}) } keys(%results);
+
+ foreach my $result (@subclass_last) {
my $result_class = $results{$result};
- $class->ensure_class_loaded($result_class);
$result_class->source_name($result) unless $result_class->source_name;
my $rs_class = delete $resultsets{$result};
my $rs_set = $result_class->resultset_class;
- $done{$rs_set} = $rs_set unless exists $done{$rs_set};
+
if($rs_set && $rs_set ne 'DBIx::Class::ResultSet') {
- if($rs_class && !exists($done{$rs_set}) && $rs_class ne $rs_set) {
+ if($rs_class && $rs_class ne $rs_set) {
warn "We found ResultSet class '$rs_class' for '$result', but it seems "
. "that you had already set '$result' to use '$rs_set' instead";
}
More information about the Bast-commits
mailing list