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