More refactoring, added ->source and ->resultset to Schema
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / DB.pm
CommitLineData
ea2e61bf 1package DBIx::Class::DB;
2
1edd1722 3use base qw/DBIx::Class/;
8b445e33 4use DBIx::Class::Storage::DBI;
11b78bd6 5use DBIx::Class::ClassResolver::PassThrough;
604d9f38 6use DBI;
ea2e61bf 7
2d679367 8__PACKAGE__->load_components(qw/ResultSetInstance/);
9
8091aa91 10*dbi_commit = \&txn_commit;
11*dbi_rollback = \&txn_rollback;
12
2d679367 13sub storage { shift->storage_instance(@_); }
14
f6858c33 15sub resultset_instance {
16 my $class = shift;
17 my $table = $class->table_instance->new($class->table_instance);
bfb2bd4f 18 $table->schema($class);
f6858c33 19 $table->result_class($class);
20 return $table->resultset;
21}
22
88cb6a1d 23sub result_source {
24 my $class = shift;
25 my $table = $class->table_instance->new($class->table_instance);
bfb2bd4f 26 $table->schema($class);
88cb6a1d 27 $table->result_class($class);
28 return $table;
29}
30
34d52be2 31=head1 NAME
32
8b445e33 33DBIx::Class::DB - Simple DBIx::Class Database connection by class inheritance
34d52be2 34
35=head1 SYNOPSIS
36
8b445e33 37 package MyDB;
38
39 use base qw/DBIx::Class/;
503536d5 40 __PACKAGE__->load_components('DB');
8b445e33 41
42 __PACKAGE__->connection('dbi:...', 'user', 'pass', \%attrs);
43
44 package MyDB::MyTable;
45
46 use base qw/MyDB/;
8091aa91 47 __PACKAGE__->load_components('Core'); # just load this in MyDB if it will always be there
4a9d7cae 48
49 ...
8b445e33 50
34d52be2 51=head1 DESCRIPTION
52
8b445e33 53This class provides a simple way of specifying a database connection.
34d52be2 54
55=head1 METHODS
56
8091aa91 57=head2 storage
076652e8 58
8091aa91 59Sets or gets the storage backend. Defaults to L<DBIx::Class::Storage::DBI>.
076652e8 60
8091aa91 61=head2 class_resolver
076652e8 62
8091aa91 63Sets or gets the class to use for resolving a class. Defaults to
64L<DBIx::Class::ClassResolver::Passthrough>, which returns whatever you give
65it. See resolve_class below.
076652e8 66
34d52be2 67=cut
68
11b78bd6 69__PACKAGE__->mk_classdata('class_resolver' =>
70 'DBIx::Class::ClassResolver::PassThrough');
8fe001e1 71
8091aa91 72=head2 connection
39fe0e65 73
74 __PACKAGE__->connection($dsn, $user, $pass, $attrs);
75
76Specifies the arguments that will be passed to DBI->connect(...) to
77instantiate the class dbh when required.
78
79=cut
80
8fe001e1 81sub connection {
82 my ($class, @info) = @_;
8b445e33 83 my $storage = DBIx::Class::Storage::DBI->new;
84 $storage->connect_info(\@info);
2d679367 85 $class->mk_classdata('storage_instance' => $storage);
ea2e61bf 86}
87
8091aa91 88=head2 txn_begin
39fe0e65 89
8091aa91 90Begins a transaction (does nothing if AutoCommit is off).
39fe0e65 91
92=cut
93
8091aa91 94sub txn_begin { $_[0]->storage->txn_begin }
a29644e1 95
8091aa91 96=head2 txn_commit
39fe0e65 97
8091aa91 98Commits the current transaction.
39fe0e65 99
8091aa91 100=cut
101
102sub txn_commit { $_[0]->storage->txn_commit }
103
104=head2 txn_rollback
105
106Rolls back the current transaction.
39fe0e65 107
108=cut
109
8091aa91 110sub txn_rollback { $_[0]->storage->txn_rollback }
8b445e33 111
11b78bd6 112sub resolve_class { return shift->class_resolver->class(@_); }
113
ea2e61bf 1141;
34d52be2 115
34d52be2 116=head1 AUTHORS
117
daec44b8 118Matt S. Trout <mst@shadowcatsystems.co.uk>
34d52be2 119
120=head1 LICENSE
121
122You may distribute this code under the same terms as Perl itself.
123
124=cut
125