Commit | Line | Data |
75d07914 |
1 | package # hide from PAUSE |
c0e7b4e5 |
2 | DBIx::Class::ResultSourceProxy; |
b98e75f6 |
3 | |
4 | use strict; |
5 | use warnings; |
6 | |
8d73fcd4 |
7 | use base 'DBIx::Class'; |
8 | |
1b822bd3 |
9 | # needs to be loaded early to query method attributes below |
10 | use DBIx::Class::ResultSource; |
11 | |
e5053694 |
12 | use DBIx::Class::_Util qw( quote_sub fail_on_internal_call ); |
a93c65f2 |
13 | use namespace::clean; |
b98e75f6 |
14 | |
a93c65f2 |
15 | __PACKAGE__->mk_group_accessors('inherited_ro_instance' => 'source_name'); |
16 | |
d46eac43 |
17 | sub get_inherited_ro_instance { $_[0]->get_inherited($_[1]) } |
b98e75f6 |
18 | |
93405cf0 |
19 | sub 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 |
27 | sub 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 |
44 | sub 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 |
50 | sub 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 |
59 | sub 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 |
64 | for 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 |
105 | EOC |
106 | |
8c49f629 |
107 | } |
108 | |
b98e75f6 |
109 | 1; |