File Coverage

blib/lib/SQL/Translator/Generator/Role/Quote.pm
Criterion Covered Total %
statement 21 23 91.3
branch 8 14 57.1
condition 1 2 50.0
subroutine 3 3 100.0
pod 0 2 0.0
total 33 44 75.0


line stmt bran cond sub pod time code
1             package SQL::Translator::Generator::Role::Quote;
2              
3 25     25   42794 use Moo::Role;
  25         55  
  25         167  
4              
5             =head1 NAME
6              
7             SQL::Translator::Generator::Role::Quote - Role for dealing with identifier
8             quoting.
9              
10             =head1 DESCRIPTION
11              
12             I
13              
14             =cut
15              
16             requires qw(quote_chars name_sep);
17              
18             has escape_char => (
19             is => 'ro',
20             lazy => 1,
21             clearer => 1,
22             default => sub { $_[0]->quote_chars->[-1] },
23             );
24              
25             sub quote {
26 2144     2144 0 16418 my ($self, $label) = @_;
27              
28 2144 50       4519 return '' unless defined $label;
29 2144 50       4248 return $$label if ref($label) eq 'SCALAR';
30              
31 2144         2813 my @quote_chars = @{$self->quote_chars};
  2144         11539  
32 2144 100       8079 return $label unless scalar @quote_chars;
33              
34 1424         2128 my ($l, $r);
35 1424 50       3455 if (@quote_chars == 1) {
    50          
36 0         0 ($l, $r) = (@quote_chars) x 2;
37             } elsif (@quote_chars == 2) {
38 1424         2456 ($l, $r) = @quote_chars;
39             } else {
40 0         0 die 'too many quote chars!';
41             }
42              
43 1424   50     3547 my $sep = $self->name_sep || '';
44 1424         23080 my $esc = $self->escape_char;
45              
46             # parts containing * are naturally unquoted
47 1424 50       12477 join $sep, map { (my $n = $_) =~ s/\Q$r/$esc$r/g; "$l$n$r" } ( $sep ? split (/\Q$sep\E/, $label ) : $label )
  1360         7189  
  1360         9221  
48             }
49              
50             sub quote_string {
51 34     34 0 76 my ($self, $string) = @_;
52              
53 34 50       73 return $string unless defined $string;
54 34         74 $string =~ s/'/''/g;
55 34         124 return qq{'$string'};
56             }
57              
58             1;
59              
60             =head1 AUTHORS
61              
62             See the included AUTHORS file:
63             L
64              
65             =head1 COPYRIGHT
66              
67             Copyright (c) 2012 the SQL::Translator L as listed above.
68              
69             =head1 LICENSE
70              
71             This code is free software and may be distributed under the same terms as Perl
72             itself.
73              
74             =cut