Fold column_info() into columns_info()
[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
29   my $colinfos;
30   foreach my $c (grep { !ref } @cols) {
31     # If this is an augment definition get the real colname.
32     $c =~ s/^\+//;
33
34     $class->register_column(
35       $c,
36       ( $colinfos ||= $source->columns_info )->{$c}
37     );
38   }
39 }
40
41 sub add_column {
42   DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call;
43   shift->add_columns(@_)
44 }
45
46
47 sub add_relationship {
48   my ($class, $rel, @rest) = @_;
49   my $source = $class->result_source_instance;
50   $source->add_relationship($rel => @rest);
51   $class->register_relationship($rel => $source->relationship_info($rel));
52 }
53
54
55 # legacy resultset_class accessor, seems to be used by cdbi only
56 sub iterator_class {
57   DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call;
58   shift->result_source_instance->resultset_class(@_)
59 }
60
61 for my $method_to_proxy (qw/
62   source_info
63   result_class
64   resultset_class
65   resultset_attributes
66
67   columns
68   has_column
69
70   remove_column
71   remove_columns
72
73   column_info
74   columns_info
75   column_info_from_storage
76
77   set_primary_key
78   primary_columns
79   sequence
80
81   add_unique_constraint
82   add_unique_constraints
83
84   unique_constraints
85   unique_constraint_names
86   unique_constraint_columns
87
88   relationships
89   relationship_info
90   has_relationship
91 /) {
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;
94     shift->result_source_instance->%s (@_);
95 EOC
96
97 }
98
99 1;