Hey folks,

our app is using the following old and rather obscure hack which
injects some custom SQL to perform a UNION.
This works perfectly with the latest DBIC 0.08123 and
Catalyst::Runtime 5.80007. However, after upgrading
to the latest Catalyst::Runtime 5.80025 the app doesn't start anymore
giving this error:

Couldn't load class (MyApp) because:
DBIx::Class::Row::throw_exception(): Can't locate object method
"register_source" via package "MyApp::Schema" at
xxx/MyApp/Schema/User.pm line 357 (see line below).

Any ideas on how to fix this? Please don't tell me to avoid the UNION
altogether because we don't want
to change this ATM. I'm aware that there's
DBIx::Class::ResultSource::View, but this doesn't quite do what
we want, because the view fetching all those friendships between users
would have to return a Schema::User
not Schema::FriendshipView ResultSet. Or am I missunderstanding this
whole virtual view thing? :)

Thanks a lot!

--Tobias


# Mutual friendships
my $source = __PACKAGE__->result_source_instance();
my $source_mutual = $source->new( $source );

# Workaround by mst for the class-based name lookup problems
# when building custom SQL via result_source_instance().
# See: http://www.mail-archive.com/[email protected]/msg03490.html
@MyApp::Schema::UserView::ISA = ('MyApp::Schema::User');
$source_mutual->result_class( 'MyApp::Schema::UserView' );

$source_mutual->source_name( 'UserMutualFriends' );

my $friendship_sql = qq|SELECT f.id AS friendship_id, u.* FROM users u
INNER JOIN friendships f ON u.id = f.initiator_user_id
WHERE f.receiver_user_id = ?
AND f.date_confirmed IS NOT NULL
UNION
SELECT f.id AS friendship_id, u.* FROM users u
INNER JOIN friendships f ON u.id = f.receiver_user_id
WHERE f.initiator_user_id = ?
AND f.date_confirmed IS NOT NULL|;

$source_mutual->name( \"(${friendship_sql})" );
$source_mutual->add_column( 'friendship_id' );

# Line 357 that breaks latest Catalyst:
MyApp::Schema->register_source( 'MyApp::Schema::MutualFriends' =>
$source_mutual );

_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/

Reply via email to