File Coverage

blib/lib/Geoffrey/Action/Constraint/Unique.pm
Criterion Covered Total %
statement 59 67 88.0
branch 15 20 75.0
condition 3 6 50.0
subroutine 11 11 100.0
pod 4 4 100.0
total 92 108 85.1


line stmt bran cond sub pod time code
1             package Geoffrey::Action::Constraint::Unique;
2              
3 6     6   28090 use utf8;
  6         48  
  6         57  
4 6     6   238 use 5.016;
  6         20  
5 6     6   30 use strict;
  6         13  
  6         214  
6 6     6   36 use warnings;
  6         11  
  6         191  
7 6     6   2466 use Ref::Util;
  6         8189  
  6         331  
8 6     6   556 use Time::HiRes qw/ time /;
  6         1340  
  6         35  
9              
10             $Geoffrey::Action::Constraint::Unique::VERSION = '0.000203';
11              
12 6     6   788 use parent 'Geoffrey::Role::Action';
  6         13  
  6         34  
13              
14             sub add {
15 11     11 1 6509 my ( $self, $s_table_name, $hr_params ) = @_;
16 11         39 my $unique = $self->converter->unique;
17 11 50       38 if ( !$unique ) {
18 0         0 require Geoffrey::Exception::NotSupportedException;
19 0         0 Geoffrey::Exception::NotSupportedException::throw_unique( 'add', $self->converter );
20             }
21 11 100       25 if ( !$s_table_name ) {
22 2         509 require Geoffrey::Exception::RequiredValue;
23 2         9 Geoffrey::Exception::RequiredValue::throw_table_name( __PACKAGE__ . '::add' );
24             }
25 9 50       20 return () unless $hr_params;
26 9 100       26 if ( !Ref::Util::is_hashref($hr_params) ) {
27 2         493 require Geoffrey::Exception::General;
28 2         7 Geoffrey::Exception::General::throw_wrong_ref( __PACKAGE__ . '::add', 'hash' );
29             }
30 7 100 66     24 if ( !$hr_params->{columns} || scalar @{ $hr_params->{columns} } == 0 ) {
  5         21  
31 2         11 require Geoffrey::Exception::RequiredValue;
32 2         7 Geoffrey::Exception::RequiredValue::throw_table_column( __PACKAGE__ . '::add' );
33             }
34              
35 5         14 $s_table_name =~ s/"//g;
36 5         17 my $gentime = time;
37 5         58 $gentime =~ s/\.//g;
38 5   33     19 $hr_params->{name} ||= 'uidx_' . $s_table_name . '_' . $gentime;
39              
40 5         519 require Geoffrey::Utils;
41             return Geoffrey::Utils::replace_spare( $unique->add,
42 5 100       19 [ $hr_params->{name}, join q/,/, @{ $hr_params->{columns} } ] )
  2         12  
43             if $self->for_table;
44             return $self->do(
45             Geoffrey::Utils::replace_spare(
46             $unique->append,
47 3         13 [ $hr_params->{name}, $s_table_name, join q/,/, @{ $hr_params->{columns} } ]
  3         15  
48             )
49             );
50              
51             }
52              
53             sub alter {
54 1     1 1 37 my ( $self, $s_table_name, $hr_column_params ) = @_;
55 1         4 my $unique = $self->converter->unique;
56 1 50       4 if ( !$unique ) {
57 0         0 require Geoffrey::Exception::NotSupportedException;
58 0         0 Geoffrey::Exception::NotSupportedException::throw_unique( 'alter', $self->converter );
59             }
60             return [
61 1         4 $self->drop( $s_table_name, $hr_column_params ),
62             $self->append( $s_table_name, $hr_column_params ),
63             ];
64             }
65              
66             sub drop {
67 2     2 1 5 my ( $self, $s_table_name, $hr_column_params ) = @_;
68 2         7 my $unique = $self->converter->unique;
69 2 50       7 if ( !$unique ) {
70 0         0 require Geoffrey::Exception::NotSupportedException;
71 0         0 Geoffrey::Exception::NotSupportedException::throw_unique( 'drop', $self->converter );
72             }
73 2 100       8 if ( !$s_table_name ) {
74 1         7 require Geoffrey::Exception::RequiredValue;
75 1         5 Geoffrey::Exception::RequiredValue::throw_table_name( __PACKAGE__ . '::drop' );
76             }
77 1         6 require Geoffrey::Utils;
78             return Geoffrey::Utils::replace_spare( $unique->drop,
79 1         23 [ $s_table_name, $hr_column_params->{name}, ] );
80             }
81              
82             sub list_from_schema {
83 4     4 1 14 my ( $self, $schema ) = @_;
84 4         19 my $unique = $self->converter->unique;
85 4 50       14 if ( !$unique ) {
86 0         0 require Geoffrey::Exception::NotSupportedException;
87 0         0 Geoffrey::Exception::NotSupportedException::throw_unique( 'list', $self->converter );
88             }
89 4         15 return $self->converter->unique_information( $self->do_arrayref( $unique->list($schema) ) );
90             }
91              
92             1;
93              
94             __END__