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