1package DBIx::Class::ResultSourceProxy::Table; 2 3use strict; 4use warnings; 5 6use base qw/DBIx::Class::ResultSourceProxy/; 7 8use DBIx::Class::ResultSource::Table; 9use Scalar::Util (); 10 11__PACKAGE__->mk_classdata(table_class => 'DBIx::Class::ResultSource::Table'); 12 13__PACKAGE__->mk_classdata('table_alias'); # FIXME: Doesn't actually do 14 # anything yet! 15 16sub _init_result_source_instance { 17 my $class = shift; 18 19 $class->mk_classdata('result_source_instance') 20 unless $class->can('result_source_instance'); 21 22 my $table = $class->result_source_instance; 23 my $class_has_table_instance = ($table and $table->result_class eq $class); 24 return $table if $class_has_table_instance; 25 26 my $table_class = $class->table_class; 27 $class->ensure_class_loaded($table_class); 28 29 if( $table ) { 30 $table = $table_class->new({ 31 %$table, 32 result_class => $class, 33 source_name => undef, 34 schema => undef 35 }); 36 } 37 else { 38 $table = $table_class->new({ 39 name => undef, 40 result_class => $class, 41 source_name => undef, 42 }); 43 } 44 45 $class->result_source_instance($table); 46 47 return $table; 48} 49 50=head1 NAME 51 52DBIx::Class::ResultSourceProxy::Table - provides a classdata table 53object and method proxies 54 55=head1 SYNOPSIS 56 57 __PACKAGE__->table('cd'); 58 __PACKAGE__->add_columns(qw/cdid artist title year/); 59 __PACKAGE__->set_primary_key('cdid'); 60 61=head1 METHODS 62 63=head2 add_columns 64 65 __PACKAGE__->add_columns(qw/cdid artist title year/); 66 67Adds columns to the current class and creates accessors for them. 68 69=cut 70 71=head2 table 72 73 __PACKAGE__->table('tbl_name'); 74 75Gets or sets the table name. 76 77=cut 78 79sub table { 80 my ($class, $table) = @_; 81 return $class->result_source_instance->name unless $table; 82 83 unless (Scalar::Util::blessed($table) && $table->isa($class->table_class)) { 84 85 my $table_class = $class->table_class; 86 $class->ensure_class_loaded($table_class); 87 88 $table = $table_class->new({ 89 $class->can('result_source_instance') ? 90 %{$class->result_source_instance||{}} : (), 91 name => $table, 92 result_class => $class, 93 source_name => undef, 94 }); 95 } 96 97 $class->mk_classdata('result_source_instance') 98 unless $class->can('result_source_instance'); 99 100 $class->result_source_instance($table); 101 102 return $class->result_source_instance->name; 103} 104 105=head2 has_column 106 107 if ($obj->has_column($col)) { ... } 108 109Returns 1 if the class has a column of this name, 0 otherwise. 110 111=cut 112 113=head2 column_info 114 115 my $info = $obj->column_info($col); 116 117Returns the column metadata hashref for a column. For a description of 118the various types of column data in this hashref, see 119L<DBIx::Class::ResultSource/add_column> 120 121=cut 122 123=head2 columns 124 125 my @column_names = $obj->columns; 126 127=cut 128 1291; 130 131=head1 AUTHORS 132 133Matt S. Trout <mst@shadowcatsystems.co.uk> 134 135=head1 LICENSE 136 137You may distribute this code under the same terms as Perl itself. 138 139=cut 140 141