File Coverage

blib/lib/DBIx/Class/DB.pm
Criterion Covered Total %
statement 27 66 40.9
branch 0 14 0.0
condition 0 3 0.0
subroutine 9 22 40.9
pod 12 12 100.0
total 48 117 41.0


line stmt bran cond sub pod time code
1             package DBIx::Class::DB;
2              
3 2     2   1119 use strict;
  2         4  
  2         55  
4 2     2   9 use warnings;
  2         4  
  2         49  
5              
6 2     2   10 use base qw/DBIx::Class/;
  2         3  
  2         207  
7 2     2   421 use DBIx::Class::Schema;
  2         5  
  2         57  
8 2     2   1193 use DBIx::Class::Storage::DBI;
  2         6  
  2         92  
9 2     2   429 use DBIx::Class::ClassResolver::PassThrough;
  2         4  
  2         46  
10 2     2   2428 use DBI;
  2         26766  
  2         120  
11 2     2   19 use Scalar::Util 'blessed';
  2         4  
  2         92  
12 2     2   10 use namespace::clean;
  2         5  
  2         36  
13              
14             unless ($INC{"DBIx/Class/CDBICompat.pm"}) {
15             warn "IMPORTANT: DBIx::Class::DB is DEPRECATED AND *WILL* BE REMOVED. DO NOT USE.\n";
16             }
17              
18             __PACKAGE__->load_components(qw/ResultSetProxy/);
19              
20 0     0 1   sub storage { shift->schema_instance(@_)->storage; }
21 0     0 1   sub dbi_commit { shift->txn_commit(@_) }
22 0     0 1   sub dbi_rollback { shift->txn_rollback(@_) }
23              
24             =head1 NAME
25              
26             DBIx::Class::DB - (DEPRECATED) classdata schema component
27              
28             =head1 DESCRIPTION
29              
30             This class is designed to support the Class::DBI connection-as-classdata style
31             for DBIx::Class. You are *strongly* recommended to use a DBIx::Class::Schema
32             instead; DBIx::Class::DB will not undergo new development and will be moved
33             to being a CDBICompat-only component before 1.0. In order to discourage further
34             use, documentation has been removed as of 0.08000
35              
36             =head1 METHODS
37              
38             Hidden.
39              
40             =begin hidden
41              
42             =head2 storage
43              
44             Sets or gets the storage backend. Defaults to L.
45              
46             =end hidden
47              
48             =cut
49              
50             =begin hidden
51              
52             =head2 class_resolver
53              
54             ****DEPRECATED****
55              
56             Sets or gets the class to use for resolving a class. Defaults to
57             L, which returns whatever you give
58             it. See resolve_class below.
59              
60             =end hidden
61              
62             =cut
63              
64             __PACKAGE__->mk_classaccessor('class_resolver' =>
65             'DBIx::Class::ClassResolver::PassThrough');
66              
67             =begin hidden
68              
69             =head2 connection
70              
71             __PACKAGE__->connection($dsn, $user, $pass, $attrs);
72              
73             Specifies the arguments that will be passed to DBI->connect(...) to
74             instantiate the class dbh when required.
75              
76             =end hidden
77              
78             =cut
79              
80             sub connection {
81 0     0 1   my ($class, @info) = @_;
82 0 0         $class->setup_schema_instance unless $class->can('schema_instance');
83 0           $class->schema_instance->connection(@info);
84             }
85              
86             =begin hidden
87              
88             =head2 setup_schema_instance
89              
90             Creates a class method ->schema_instance which contains a DBIx::Class::Schema;
91             all class-method operations are proxies through to this object. If you don't
92             call ->connection in your DBIx::Class::DB subclass at load time you *must*
93             call ->setup_schema_instance in order for subclasses to find the schema and
94             register themselves with it.
95              
96             =end hidden
97              
98             =cut
99              
100             sub setup_schema_instance {
101 0     0 1   my $class = shift;
102 0           my $schema = {};
103 0           bless $schema, 'DBIx::Class::Schema';
104 0           $class->mk_classaccessor('schema_instance' => $schema);
105             }
106              
107             =begin hidden
108              
109             =head2 txn_begin
110              
111             Begins a transaction (does nothing if AutoCommit is off).
112              
113             =end hidden
114              
115             =cut
116              
117 0     0 1   sub txn_begin { shift->schema_instance->txn_begin(@_); }
118              
119             =begin hidden
120              
121             =head2 txn_commit
122              
123             Commits the current transaction.
124              
125             =end hidden
126              
127             =cut
128              
129 0     0 1   sub txn_commit { shift->schema_instance->txn_commit(@_); }
130              
131             =begin hidden
132              
133             =head2 txn_rollback
134              
135             Rolls back the current transaction.
136              
137             =end hidden
138              
139             =cut
140              
141 0     0 1   sub txn_rollback { shift->schema_instance->txn_rollback(@_); }
142              
143             =begin hidden
144              
145             =head2 txn_do
146              
147             Executes a block of code transactionally. If this code reference
148             throws an exception, the transaction is rolled back and the exception
149             is rethrown. See L for more details.
150              
151             =end hidden
152              
153             =cut
154              
155 0     0 1   sub txn_do { shift->schema_instance->txn_do(@_); }
156              
157             {
158             my $warn;
159              
160             sub resolve_class {
161 0 0   0 1   warn "resolve_class deprecated as of 0.04999_02" unless $warn++;
162 0           return shift->class_resolver->class(@_);
163             }
164             }
165              
166             =begin hidden
167              
168             =head2 resultset_instance
169              
170             Returns an instance of a resultset for this class - effectively
171             mapping the L connection-as-classdata paradigm into the
172             native L system.
173              
174             =end hidden
175              
176             =cut
177              
178             sub resultset_instance {
179 0     0 1   $_[0]->result_source->resultset
180             }
181              
182             =begin hidden
183              
184             =head2 result_source_instance
185              
186             Returns an instance of the result source for this class
187              
188             =end hidden
189              
190             =cut
191              
192             __PACKAGE__->mk_classaccessor('_result_source_instance' => []);
193              
194             # Yep. this is horrific. Basically what's happening here is that
195             # (with good reason) DBIx::Class::Schema copies the result source for
196             # registration. Because we have a retarded setup order forced on us we need
197             # to actually make our ->result_source -be- the source used, and we
198             # need to get the source name and schema into ourselves. So this makes it
199             # happen.
200              
201             sub _maybe_attach_source_to_schema {
202 0     0     my ($class, $source) = @_;
203 0 0         if (my $meth = $class->can('schema_instance')) {
204 0 0         if (my $schema = $class->$meth) {
205 0           $schema->register_class($class, $class);
206 0           my $new_source = $schema->source($class);
207 0           %$source = %$new_source;
208 0           $schema->source_registrations->{$class} = $source;
209             }
210             }
211             }
212              
213             sub result_source_instance {
214 0     0 1   my $class = shift;
215 0   0       $class = ref $class || $class;
216              
217 0 0         if (@_) {
218 0           my $source = $_[0];
219 0           $class->_result_source_instance([$source, $class]);
220 0           $class->_maybe_attach_source_to_schema($source);
221 0           return $source;
222             }
223              
224 0           my($source, $result_class) = @{$class->_result_source_instance};
  0            
225 0 0         return undef unless blessed $source;
226              
227 0 0         if ($result_class ne $class) { # new class
228             # Give this new class its own source and register it.
229 0           $source = $source->clone(
230             source_name => $class,
231             result_class => $class
232             );
233 0           $class->_result_source_instance([$source, $class]);
234 0           $class->_maybe_attach_source_to_schema($source);
235             }
236 0           return $source;
237             }
238              
239             =begin hidden
240              
241             =head2 resolve_class
242              
243             ****DEPRECATED****
244              
245             See L
246              
247             =end hidden
248              
249             =begin hidden
250              
251             =head2 dbi_commit
252              
253             ****DEPRECATED****
254              
255             Alias for L
256              
257             =end hidden
258              
259             =begin hidden
260              
261             =head2 dbi_rollback
262              
263             ****DEPRECATED****
264              
265             Alias for L
266              
267             =end hidden
268              
269             =head1 FURTHER QUESTIONS?
270              
271             Check the list of L.
272              
273             =head1 COPYRIGHT AND LICENSE
274              
275             This module is free software L
276             by the L. You can
277             redistribute it and/or modify it under the same terms as the
278             L.
279              
280             =cut
281              
282             1;