package Class::DBI::Loader; use strict; use vars '$VERSION'; $VERSION = '0.34'; =head1 NAME Class::DBI::Loader - Dynamic definition of Class::DBI sub classes. =head1 SYNOPSIS use Class::DBI::Loader; my $loader = Class::DBI::Loader->new( dsn => "dbi:mysql:dbname", user => "root", password => "", options => { RaiseError => 1, AutoCommit => 0 }, namespace => "Data", additional_classes => qw/Class::DBI::AbstractSearch/, # or arrayref additional_base_classes => qw/My::Stuff/, # or arrayref left_base_classes => qw/Class::DBI::Sweet/, # or arrayref constraint => '^foo.*', relationships => 1, options => { AutoCommit => 1 }, inflect => { child => 'children' }, require => 1 ); my $class = $loader->find_class('film'); # $class => Data::Film my $obj = $class->retrieve(1); use with mod_perl in your startup.pl # load all tables use Class::DBI::Loader; my $loader = Class::DBI::Loader->new( dsn => "dbi:mysql:dbname", user => "root", password => "", namespace => "Data", ); in your web application. use strict; # you can use Data::Film directly my $film = Data::Film->retrieve($id); =head1 DESCRIPTION Class::DBI::Loader automate the definition of Class::DBI sub-classes. scan table schemas and setup columns, primary key. class names are defined by table names and namespace option. +-----------+-----------+-----------+ | table | namespace | class | +-----------+-----------+-----------+ | foo | Data | Data::Foo | | foo_bar | | FooBar | +-----------+-----------+-----------+ Class::DBI::Loader supports MySQL, Postgres and SQLite. See L. =cut sub new { my ( $class, %args ) = @_; my $dsn = $args{dsn}; my ($driver) = $dsn =~ m/^dbi:(\w*?)(?:\((.*?)\))?:/i; $driver = 'SQLite' if $driver eq 'SQLite2'; my $impl = "Class::DBI::Loader::" . $driver; eval qq/use $impl/; die qq/Couldn't require loader class "$impl", "$@"/ if $@; return $impl->new(%args); } =head1 METHODS =head2 new %args =over 4 =item additional_base_classes List of additional base classes your table classes will use. =item left_base_classes List of additional base classes, that need to be leftmost, for example L (former L). =item additional_classes List of additional classes which your table classes will use. =item constraint Only load tables matching regex. =item exclude Exclude tables matching regex. =item debug Enable debug messages. =item dsn DBI Data Source Name. =item namespace Namespace under which your table classes will be initialized. =item password Password. =item options Optional hashref to specify DBI connect options =item relationships Try to automatically detect/setup has_a and has_many relationships. =item inflect An hashref, which contains exceptions to Lingua::EN::Inflect::PL(). Useful for foreign language column names. =item user Username. =item require Attempt to require the dynamically defined module, so that extensions defined in files. By default errors from imported modules are suppressed. When you want to debug, use require_warn. =item require_warn Warn of import errors when requiring modules. =back =head1 AUTHOR Daisuke Maki C =head1 AUTHOR EMERITUS Sebastian Riedel, C IKEBE Tomohiro, C =head1 THANK YOU Adam Anderson, Andy Grundman, Autrijus Tang, Dan Kubb, David Naughton, Randal Schwartz, Simon Flack and all the others who've helped. =head1 LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L, L, L, L, L, L, L, L =cut 1;