| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | package DBIx::Model::FK; | 
| 2 | 1 |  |  | 1 |  | 8 | use strict; | 
|  | 1 |  |  |  |  | 1 |  | 
|  | 1 |  |  |  |  | 34 |  | 
| 3 | 1 |  |  | 1 |  | 6 | use warnings; | 
|  | 1 |  |  |  |  | 3 |  | 
|  | 1 |  |  |  |  | 27 |  | 
| 4 | 1 |  |  | 1 |  | 6 | use Scalar::Util qw/weaken/; | 
|  | 1 |  |  |  |  | 2 |  | 
|  | 1 |  |  |  |  | 46 |  | 
| 5 | 1 |  |  | 1 |  | 7 | use Types::Standard qw/ArrayRef/; | 
|  | 1 |  |  |  |  | 2 |  | 
|  | 1 |  |  |  |  | 6 |  | 
| 6 |  |  |  |  |  |  |  | 
| 7 |  |  |  |  |  |  | our $VERSION = '0.0.1_2'; | 
| 8 |  |  |  |  |  |  | our $INLINE  = { | 
| 9 |  |  |  |  |  |  | _columns => { | 
| 10 |  |  |  |  |  |  | is       => 'ro', | 
| 11 |  |  |  |  |  |  | isa      => ArrayRef, | 
| 12 |  |  |  |  |  |  | init_arg => 'columns', | 
| 13 |  |  |  |  |  |  | required => 1, | 
| 14 |  |  |  |  |  |  | }, | 
| 15 |  |  |  |  |  |  | table => { | 
| 16 |  |  |  |  |  |  | is       => 'ro', | 
| 17 |  |  |  |  |  |  | required => 1, | 
| 18 |  |  |  |  |  |  | weaken   => 1, | 
| 19 |  |  |  |  |  |  | }, | 
| 20 |  |  |  |  |  |  | _to_columns => { | 
| 21 |  |  |  |  |  |  | is       => 'ro', | 
| 22 |  |  |  |  |  |  | isa      => ArrayRef, | 
| 23 |  |  |  |  |  |  | init_arg => 'to_columns', | 
| 24 |  |  |  |  |  |  | required => 1, | 
| 25 |  |  |  |  |  |  | }, | 
| 26 |  |  |  |  |  |  | to_table => { | 
| 27 |  |  |  |  |  |  | is       => 'ro', | 
| 28 |  |  |  |  |  |  | required => 1, | 
| 29 |  |  |  |  |  |  | weaken   => 1, | 
| 30 |  |  |  |  |  |  | }, | 
| 31 |  |  |  |  |  |  | }; | 
| 32 |  |  |  |  |  |  |  | 
| 33 |  |  |  |  |  |  | sub BUILD { | 
| 34 | 0 |  |  | 0 | 0 |  | my $self = shift; | 
| 35 |  |  |  |  |  |  |  | 
| 36 | 0 |  |  |  |  |  | my @list = @{ $self->_columns }; | 
|  | 0 |  |  |  |  |  |  | 
| 37 | 0 |  |  |  |  |  | foreach my $i ( 0 .. $#list ) { | 
| 38 | 0 |  |  |  |  |  | weaken( $self->_columns->[$i] ); | 
| 39 | 0 |  |  |  |  |  | $self->_columns->[$i]->bump_ref_count; | 
| 40 |  |  |  |  |  |  | } | 
| 41 |  |  |  |  |  |  |  | 
| 42 | 0 |  |  |  |  |  | @list = @{ $self->_to_columns }; | 
|  | 0 |  |  |  |  |  |  | 
| 43 | 0 |  |  |  |  |  | foreach my $i ( 0 .. $#list ) { | 
| 44 | 0 |  |  |  |  |  | weaken( $self->_to_columns->[$i] ); | 
| 45 | 0 |  |  |  |  |  | $self->_to_columns->[$i]->bump_target_count; | 
| 46 |  |  |  |  |  |  | } | 
| 47 |  |  |  |  |  |  | } | 
| 48 |  |  |  |  |  |  |  | 
| 49 |  |  |  |  |  |  | sub as_string { | 
| 50 | 0 |  |  | 0 | 0 |  | my $self   = shift; | 
| 51 | 0 |  |  |  |  |  | my $prefix = shift; | 
| 52 |  |  |  |  |  |  | my $str = | 
| 53 |  |  |  |  |  |  | $prefix | 
| 54 |  |  |  |  |  |  | . "FOREIGN KEY(" | 
| 55 | 0 |  |  |  |  |  | . join( ',', map { $_->name } $self->columns ) | 
| 56 |  |  |  |  |  |  | . ') REFERENCES ' | 
| 57 |  |  |  |  |  |  | . $self->to_table->name . '(' | 
| 58 | 0 |  |  |  |  |  | . join( ',', map { $_->name } $self->to_columns ) . ')'; | 
|  | 0 |  |  |  |  |  |  | 
| 59 |  |  |  |  |  |  |  | 
| 60 | 0 |  |  |  |  |  | return $str; | 
| 61 |  |  |  |  |  |  | } | 
| 62 |  |  |  |  |  |  |  | 
| 63 |  |  |  |  |  |  | sub columns { | 
| 64 | 0 |  |  | 0 | 0 |  | my $self = shift; | 
| 65 | 0 | 0 |  |  |  |  | return @{ $self->_columns } if wantarray; | 
|  | 0 |  |  |  |  |  |  | 
| 66 | 0 |  |  |  |  |  | return $self->_columns; | 
| 67 |  |  |  |  |  |  | } | 
| 68 |  |  |  |  |  |  |  | 
| 69 |  |  |  |  |  |  | sub to_columns { | 
| 70 | 0 |  |  | 0 | 0 |  | my $self = shift; | 
| 71 | 0 | 0 |  |  |  |  | return @{ $self->_to_columns } if wantarray; | 
|  | 0 |  |  |  |  |  |  | 
| 72 | 0 |  |  |  |  |  | return $self->_to_columns; | 
| 73 |  |  |  |  |  |  | } | 
| 74 |  |  |  |  |  |  |  | 
| 75 |  |  |  |  |  |  | ### DO NOT EDIT BELOW! (generated by Class::Inline v0.0.1) | 
| 76 |  |  |  |  |  |  | #<<< | 
| 77 | 0 |  |  | 0 | 0 |  | require Carp;require Scalar::Util;our@ATTRS_UNEX=(undef);sub new {my$class= | 
| 78 | 0 | 0 |  |  |  |  | shift;my$self={@_ ? @_ > 1 ? @_ : %{$_[0]}: ()};map {local$Carp::CarpLevel= | 
|  | 0 | 0 |  |  |  |  |  | 
|  | 0 |  |  |  |  |  |  | 
|  | 0 |  |  |  |  |  |  | 
| 79 |  |  |  |  |  |  | $Carp::CarpLevel + 1;Carp::croak( | 
| 80 | 0 | 0 |  |  |  |  | "missing attribute DBIx::Model::FK::$_ is required")unless exists$self->{$_} | 
| 81 |  |  |  |  |  |  | }'columns','to_columns','table','to_table';$self->{'_columns'}=delete$self-> | 
| 82 | 0 | 0 |  |  |  |  | {'columns'}if exists$self->{'columns'};$self->{'_to_columns'}=delete$self->{ | 
| 83 | 0 | 0 |  |  |  |  | 'to_columns'}if exists$self->{'to_columns'};if (@ATTRS_UNEX){map {local | 
|  | 0 | 0 |  |  |  |  |  | 
| 84 | 0 |  |  |  |  |  | $Carp::CarpLevel=$Carp::CarpLevel + 1;Carp::carp( | 
|  | 0 |  |  |  |  |  |  | 
| 85 | 0 |  |  |  |  |  | "DBIx::Model::FK attribute '$_' unexpected");delete$self->{$_ }}sort grep { | 
| 86 | 0 |  |  |  |  |  | not exists$INLINE->{$_ }}keys %$self}else {@ATTRS_UNEX=map {delete$self->{$_ | 
|  | 0 |  |  |  |  |  |  | 
|  | 0 |  |  |  |  |  |  | 
| 87 | 0 |  | 0 |  |  |  | };$_}grep {not exists$INLINE->{$_ }}keys %$self}bless$self,ref$class || | 
|  | 0 |  |  |  |  |  |  | 
|  | 0 |  |  |  |  |  |  | 
|  | 0 |  |  |  |  |  |  | 
| 88 | 0 |  |  |  |  |  | $class;map {$self->{$_ }=eval {$INLINE->{$_ }->{'isa'}->($self->{$_ })}; | 
|  | 0 |  |  |  |  |  |  | 
| 89 | 0 | 0 |  |  |  |  | Carp::croak(qq{DBIx::Model::FK::$_ value invalid ($@)})if $@}grep {exists | 
|  | 0 |  |  |  |  |  |  | 
| 90 | 0 |  |  |  |  |  | $self->{$_ }}'_columns','_to_columns';map {Scalar::Util::weaken($self->{$_ } | 
|  | 0 |  |  |  |  |  |  | 
| 91 | 0 |  | 0 |  |  |  | )}grep {defined$self->{$_ }// undef}'table','to_table';$self}sub __ro {my ( | 
|  | 0 |  |  |  |  |  |  | 
|  | 0 |  |  |  |  |  |  | 
| 92 | 0 |  |  | 0 |  |  | undef,undef,undef,$sub)=caller(1);local$Carp::CarpLevel=$Carp::CarpLevel + 1 | 
|  | 0 |  |  |  |  |  |  | 
| 93 | 0 |  | 0 |  |  |  | ;Carp::croak("attribute $sub is read-only (value: '" .($_[1]// 'undef')."')" | 
| 94 | 0 | 0 |  | 0 |  |  | )}sub _columns {$_[0]->__ro($_[1])if @_ > 1;$_[0]{'_columns'}}sub | 
|  | 0 |  |  |  |  |  |  | 
| 95 | 0 | 0 |  | 0 | 0 |  | _to_columns {$_[0]->__ro($_[1])if @_ > 1;$_[0]{'_to_columns'}}sub table {$_[ | 
|  | 0 | 0 |  | 0 |  |  |  | 
|  | 0 |  |  |  |  |  |  | 
| 96 | 0 | 0 |  | 0 | 0 |  | 0]->__ro($_[1])if @_ > 1;$_[0]{'table'}}sub to_table {$_[0]->__ro($_[1])if | 
|  | 0 |  |  |  |  |  |  | 
| 97 | 0 |  |  |  |  |  | @_ > 1;$_[0]{'to_table'}} | 
| 98 |  |  |  |  |  |  | #>>> | 
| 99 |  |  |  |  |  |  | ### DO NOT EDIT ABOVE! (generated by Class::Inline v0.0.1) | 
| 100 |  |  |  |  |  |  |  | 
| 101 |  |  |  |  |  |  | 1; |