[CDBI] CDBI Newbie Question

Matt S Trout dbix-class at trout.me.uk
Tue Sep 27 17:48:54 BST 2005

On Tue, Sep 27, 2005 at 05:26:00PM +0100, Steven Mackenzie wrote:
> Hello,
> I'm new to Perl (and to CDBI!), I hope someone can spare a minute to
> help me with a tangentially relevant question ... or point me in the
> right direction to ask or read more!


http://wiki.class-dbi.com/ is a good one.

You also may wish to google up DBIx::Class, Tangram, Rose::DB::Object and
possibly Alzabo as well and have a look at them as alternatives (although
given I'm a long-time CDBI user as well as DBIx::Class project founder,
I'll avoid opining whether to switch to any of them :)

> I have written some test code to talk to a SQLite DB file and read data
> in to it via classes derived from Class::DBI. My test script worked
> fine, so I've factored out my DB access code, and packaged the classes
> for each table in to perl modules (.pm files).
> Is that the normal thing to do?

Yep. Very much best practice in my experience.

> Because I'm starting a Big Project, I'm trying to keep my modules tidy,
> and have defined a hierarchy, with all my modules below ANPerl/; for
> example, one of my DB table classes is
> ANPerl::AnalysisFramework::ResourceStore::Metadata::DBDiscoverySetResources
> Unfortunately now in my client code I have lines like
>  $current_dsr_row =
> ANPerl::AnalysisFramework::ResourceStore::Metadata::DBDiscoverySetResources->create(
>       {RetrievalUrl => $retrieval_url} );
> That's a lot of typing! Is there any way to say that I'm using all the
> modules in the path ANPerl::AnalysisFramework::ResourceStore::Metadata?
> Then I could just write
>   $current_dsr_row = DBDiscoverySetResources->create( {RetrievalUrl =>
> $retrieval_url} );

No, but there's an easy enough way to do it -

sub table { return "ANPerl::AnalysisFramework::ResourceStore::Metadata::$_[0]"; };

my $current_dsr_row = table('DBDiscoverySetResources')->create(...);

You could also have a look at Class::DBI::Factory, which is maybe overkill
but does assorted useful other things as well.

     Matt S Trout       Specialists in perl consulting, web development, and
  Technical Director    UNIX/Linux systems architecture and automation. Mail
Shadowcat Systems Ltd.  mst (at) shadowcatsystems.co.uk for more information

 + Help us build a better perl ORM: http://dbix-class.shadowcatsystems.co.uk/ +

More information about the ClassDBI mailing list