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