Emulate $CDBI::Weaken_Not_Available and CDBI::Plugin::NoCache
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / CDBICompat.pm
CommitLineData
ea2e61bf 1package DBIx::Class::CDBICompat;
2
3use strict;
4use warnings;
75a23b3e 5use base qw/DBIx::Class::Core DBIx::Class::DB/;
289ba852 6use Carp::Clan qw/^DBIx::Class/;
7
8eval {
9 require Class::Trigger;
10 require DBIx::ContextualFetch;
11};
12croak "Class::Trigger and DBIx::ContextualFetch is required for CDBICompat" if $@;
126042ee 13
55e2d745 14__PACKAGE__->load_own_components(qw/
15 Constraints
16 Triggers
17 ReadOnly
55e2d745 18 LiveObjectIndex
19 AttributeAPI
20 Stringify
21 DestroyWarning
22 Constructor
23 AccessorMapping
24 ColumnCase
a9c8094b 25 Relationships
e60dc79f 26 Copy
55e2d745 27 LazyLoading
28 AutoUpdate
29 TempColumns
e60dc79f 30 GetSet
55e2d745 31 Retrieve
2a21de92 32 Pager
55e2d745 33 ColumnGroups
5ef62e9f 34 ColumnsAsHash
e60dc79f 35 AbstractSearch
36 ImaDBI
37 Iterator
38/);
55e2d745 39
40 #DBIx::Class::ObjIndexStubs
ea2e61bf 411;
34d52be2 42
75d07914 43=head1 NAME
34d52be2 44
880a1a0c 45DBIx::Class::CDBICompat - Class::DBI Compatibility layer.
34d52be2 46
15fe6346 47=head1 SYNOPSIS
48
49 use base qw/DBIx::Class/;
50 __PACKAGE__->load_components(qw/CDBICompat Core DB/);
51
34d52be2 52=head1 DESCRIPTION
53
880a1a0c 54DBIx::Class features a fully featured compatibility layer with L<Class::DBI>
e7d1440f 55and L<Class::DBI::AbstractSearch> to ease transition for existing CDBI users.
56
57In fact, this class is just a receipe containing all the features emulated.
58If you like, you can choose which features to emulate by building your
59own class and loading it like this:
15fe6346 60
61 __PACKAGE__->load_own_components(qw/CDBICompat/);
62
75d07914 63this will automatically load the features included in My::DB::CDBICompat,
15fe6346 64provided it looks something like this:
65
66 package My::DB::CDBICompat;
67 __PACKAGE__->load_components(qw/
68 CDBICompat::ColumnGroups
69 CDBICompat::Retrieve
70 CDBICompat::HasA
71 CDBICompat::HasMany
72 CDBICompat::MightHave
73 /);
74
34d52be2 75
e7d1440f 76=head1 LIMITATIONS
77
af133470 78=head2 Unimplemented
79
e7d1440f 80The following methods and classes are not emulated, maybe in the future.
81
82=over 4
83
84=item Class::DBI::Query
85
86Deprecated in Class::DBI.
87
88=item Class::DBI::Column
89
90Not documented in Class::DBI. CDBICompat's columns() returns a plain string, not an object.
91
92=item data_type()
93
94Undocumented CDBI method.
95
af133470 96=back
97
98=head2 Limited Support
99
100The following elements of Class::DBI have limited support.
101
102=over 4
103
474481a9 104=item Class::DBI::Relationship
e7d1440f 105
474481a9 106The semi-documented Class::DBI::Relationship objects returned by C<meta_info($type, $col)> are mostly emulated except for their C<args> method.
e7d1440f 107
af133470 108=item Relationships
109
110Relationships between tables (has_a, has_many...) must be delcared after all tables in the relationship have been declared. Thus the usual CDBI idiom of declaring columns and relationships for each class together will not work. They must instead be done like so:
111
112 package Foo;
113 use base qw(Class::DBI);
114
115 Foo->table("foo");
116 Foo->columns( All => qw(this that bar) );
117
118 package Bar;
119 use base qw(Class::DBI);
120
121 Bar->table("bar");
122 Bar->columns( All => qw(up down) );
123
124 # Now that Foo and Bar are declared it is safe to declare a
125 # relationship between them
126 Foo->has_a( bar => "Bar" );
127
128
e7d1440f 129=back
130
34d52be2 131=head1 AUTHORS
132
daec44b8 133Matt S. Trout <mst@shadowcatsystems.co.uk>
34d52be2 134
135=head1 LICENSE
136
137You may distribute this code under the same terms as Perl itself.
138
139=cut
140