File Coverage

blib/lib/SQL/Translator/Filter/Names.pm
Criterion Covered Total %
statement 33 34 97.0
branch 7 12 58.3
condition n/a
subroutine 8 9 88.8
pod 0 4 0.0
total 48 59 81.3


line stmt bran cond sub pod time code
1             package SQL::Translator::Filter::Names;
2              
3             =head1 NAME
4              
5             SQL::Translator::Filter::Names - Tweak the names of schema objects.
6              
7             =head1 SYNOPSIS
8              
9             #! /usr/bin/perl -w
10             use SQL::Translator;
11              
12             # Lowercase all table names and upper case the first letter of all field
13             # names. (MySql style!)
14             #
15             my $sqlt = SQL::Translator->new(
16             filename => \@ARGV,
17             from => 'MySQL',
18             to => 'MySQL',
19             filters => [
20             Names => {
21             'tables' => 'lc',
22             'fields' => 'ucfirst',
23             },
24             ],
25             ) || die "SQLFairy error : ".SQL::Translator->error;
26             print($sqlt->translate) || die "SQLFairy error : ".$sqlt->error;
27              
28             =cut
29              
30 1     1   5 use strict;
  1         2  
  1         33  
31 1     1   5 use warnings;
  1         1  
  1         433  
32             our $VERSION = '1.66';
33              
34             sub filter {
35 1     1 0 10 my $schema = shift;
36 1         2 my %args = %{ $_[0] };
  1         6  
37              
38             # Tables
39             #if ( my $func = $args{tables} ) {
40             # _filtername($_,$func) foreach ( $schema->get_tables );
41             #}
42             # ,
43 1         4 foreach my $type (qw/tables procedures triggers views/) {
44 4 100       29 if (my $func = $args{$type}) {
45 1         2 my $meth = "get_$type";
46 1         9 _filtername($_, $func) foreach $schema->$meth;
47             }
48             }
49              
50             # Fields
51 1 50       4 if (my $func = $args{fields}) {
52 1         3 _filtername($_, $func) foreach map { $_->get_fields } $schema->get_tables;
  1         5  
53             }
54              
55             }
56              
57             # _filtername( OBJ, FUNC_NAME )
58             # Update the name attribute on the schema object given using the named filter.
59             # Objects with no name are skipped.
60             # Returns true if the name was changed. Dies if there is an error running func.
61             sub _filtername {
62 2     2   5 my ($obj, $func) = @_;
63 2 50       29 return unless my $name = $obj->name;
64 2         93 $func = _getfunc($func);
65 2         4 my $newname = eval { $func->($name) };
  2         7  
66 2 50       10 die "$@" if $@; # TODO - Better message!
67 2 50       5 return if $name eq $newname;
68 2         50 $_->name($newname);
69             }
70              
71             # _getfunc( NAME ) - Returns code ref to func NAME or dies.
72             sub _getfunc {
73 2     2   5 my ($name) = @_;
74 1     1   6 no strict 'refs';
  1         2  
  1         129  
75 2         4 my $func = "SQL::Translator::Filter::Names::$name";
76 2 50       36 die "Table name filter - unknown function '$name'\n" unless exists &$func;
77 2         10 \&$func;
78             }
79              
80             # The name munging functions
81             #=============================================================================
82             # Get called with name to munge as first arg and return the new name. Die on
83             # errors.
84              
85 1     1 0 5 sub lc { lc shift; }
86 0     0 0 0 sub uc { uc shift; }
87 1     1 0 4 sub ucfirst { ucfirst shift; }
88              
89             1; #==========================================================================
90              
91             __END__