
DBIx::Class::Schema - composable schemas

in My/Schema.pm
package My::Schema;
use base qw/DBIx::Class::Schema/;
__PACKAGE__->load_classes(qw/Foo Bar Baz/);
in My/Schema/Foo.pm
package My::Schema::Foo;
use base qw/DBIx::Class::Core/;
__PACKAGE__->table('foo');
...
in My/DB.pm
use My::Schema;
My::Schema->compose_connection('My::DB', $dsn, $user, $pass, $attrs);
then in app code
my @obj = My::DB::Foo->search({}); # My::DB::Foo isa My::Schema::Foo My::DB

Creates database classes based on a schema. This allows you to have more than one concurrent connection using the same database classes, by making subclasses under a new namespace for each connection. If you only need one class, you should probably use DBIx::Class::DB directly instead.

Registers the class in the schema's class_registrations. This is a hash containing database classes, keyed by their monikers. It's used by compose_connection to create/modify all the existing database classes.
Simple read-only accessor for the schema's registered classes. See register_class above if you want to modify it.
Uses Module::Find to find all classes under the database class' namespace, or uses the classes you select. Then it loads the component (using use), and registers them (using register_class);
This is the most important method in this class. it takes a target namespace, as well as dbh connection info, and creates a DBIx::Class::DB class as well as subclasses for each of your database classes in this namespace, using this connection.
It will also setup a ->table method on the target class, which lets you resolve database classes based on the schema component name, for example
MyApp::DB->table('Foo') # returns MyApp::DB::Foo,
# which ISA MyApp::Schema::Foo
This is the recommended API for accessing Schema generated classes, and using it might give you instant advantages with future versions of DBIC.
Sets up a database connection class to inject between the schema and the subclasses the schema creates.

Matt S. Trout <mst@shadowcatsystems.co.uk>

You may distribute this code under the same terms as Perl itself.