[Dbix-class] column accessor namespace

Dave Howorth dhoworth at mrc-lmb.cam.ac.uk
Tue Jul 4 16:39:02 CEST 2006


In February I wrote:
> I'm looking at moving from CDBI to DBIC for a variety of reasons.
> 
> One of the problems I have with CDBI is that it puts the column accessor 
> methods into the same namespace as its own class methods and 
> plugin-sourced methods. This combined with Perl's inability to 
> distinguish a class call from an instance call (except by adding code at 
> the start of every method) means that there can be conflicts between 
> column accessors and predefined methods. For example, my column 
> accessors called 'sequence' and 'primary' both caused problems.
> 
> So I was wondering what DBIC does about this issue. From a quick scan of 
> the schemaintro doc, it looks like it has the same flaw. And a different 
> set of predefined methods to conflict with :) For example, I really do 
> have an accessor called 'belongs_to' :(

I got a few suggestions in reply to this and recently I started to 
experiment with DBIC. It's been going really well. Thanks!

Today I tried to connect to the database that has a table with a column 
called 'belongs_to'. It failed and because I'd forgotten about this 
issue I initially found the error message very confusing:

   DBIx::Class::Schema::Loader::connection(): Can't fetch data as class
   method at ./compare-db.pl line 76

My code is just:

   use QD1::Schema;
   my $schema = QD1::Schema->connection($dsn, $dbuser, $dbpass);

and my Schema module is just:

   package QD1::Schema;
   use base qw/DBIx::Class::Schema::Loader/;
   __PACKAGE__->loader_options(relationships => 1);
   1;

It would be nice if name clashes were detected and explicitly reported, 
so as to produce meaningful error reports like CDBI does :)

Cheers, Dave



More information about the Dbix-class mailing list