Centralize all user-side rsrc calls to go through result_source()
[dbsrgits/DBIx-Class-Historic.git] / lib / DBIx / Class / ResultSourceProxy.pm
CommitLineData
75d07914 1package # hide from PAUSE
c0e7b4e5 2 DBIx::Class::ResultSourceProxy;
b98e75f6 3
4use strict;
5use warnings;
6
8d73fcd4 7use base 'DBIx::Class';
8
e5053694 9use DBIx::Class::_Util qw( quote_sub fail_on_internal_call );
a93c65f2 10use namespace::clean;
b98e75f6 11
a93c65f2 12__PACKAGE__->mk_group_accessors('inherited_ro_instance' => 'source_name');
13
d46eac43 14sub get_inherited_ro_instance { $_[0]->get_inherited($_[1]) }
b98e75f6 15
93405cf0 16sub set_inherited_ro_instance {
d46eac43 17 $_[0]->throw_exception ("Cannot set '$_[1]' on an instance")
18 if length ref $_[0];
93405cf0 19
d46eac43 20 $_[0]->set_inherited( $_[1], $_[2] );
93405cf0 21}
22
5ac6a044 23
b98e75f6 24sub add_columns {
25 my ($class, @cols) = @_;
e570488a 26 my $source = $class->result_source;
1f23a877 27 $source->add_columns(@cols);
b83736a7 28
29 my $colinfos;
1f23a877 30 foreach my $c (grep { !ref } @cols) {
157ce0cf 31 # If this is an augment definition get the real colname.
32 $c =~ s/^\+//;
33
b83736a7 34 $class->register_column(
35 $c,
36 ( $colinfos ||= $source->columns_info )->{$c}
37 );
1f23a877 38 }
b98e75f6 39}
40
e5053694 41sub add_column {
42 DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call;
43 shift->add_columns(@_)
44}
002a359a 45
002a359a 46
a93c65f2 47sub add_relationship {
48 my ($class, $rel, @rest) = @_;
e570488a 49 my $source = $class->result_source;
a93c65f2 50 $source->add_relationship($rel => @rest);
51 $class->register_relationship($rel => $source->relationship_info($rel));
bc0c9800 52}
53
b98e75f6 54
a93c65f2 55# legacy resultset_class accessor, seems to be used by cdbi only
e5053694 56sub iterator_class {
57 DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call;
e570488a 58 shift->result_source->resultset_class(@_)
e5053694 59}
a83cdbf2 60
a93c65f2 61for my $method_to_proxy (qw/
62 source_info
63 result_class
64 resultset_class
65 resultset_attributes
bc0c9800 66
a93c65f2 67 columns
68 has_column
034d0be4 69
a93c65f2 70 remove_column
71 remove_columns
87f0da6a 72
a93c65f2 73 column_info
52416317 74 columns_info
a93c65f2 75 column_info_from_storage
1bc0b925 76
a93c65f2 77 set_primary_key
78 primary_columns
89170201 79 sequence
1bc0b925 80
a93c65f2 81 add_unique_constraint
82 add_unique_constraints
8c49f629 83
a93c65f2 84 unique_constraints
85 unique_constraint_names
86 unique_constraint_columns
8c49f629 87
a93c65f2 88 relationships
89 relationship_info
90 has_relationship
91/) {
4006691d 92 quote_sub __PACKAGE__."::$method_to_proxy", sprintf( <<'EOC', $method_to_proxy );
93 DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and DBIx::Class::_Util::fail_on_internal_call;
e570488a 94
95 shift->result_source->%s (@_);
4006691d 96EOC
97
8c49f629 98}
99
b98e75f6 1001;