1 package SQL::Translator::Filter::Names;
5 SQL::Translator::Filter::Names - Tweak the names of schema objects.
12 # Lowercase all table names and upper case the first letter of all field
13 # names. (MySql style!)
15 my $sqlt = SQL::Translator->new(
22 'fields' => 'ucfirst',
25 ) || die "SQLFairy error : ".SQL::Translator->error;
26 print($sqlt->translate) || die "SQLFairy error : ".$sqlt->error;
32 our $VERSION = '1.59_01';
39 #if ( my $func = $args{tables} ) {
40 # _filtername($_,$func) foreach ( $schema->get_tables );
43 foreach my $type ( qw/tables procedures triggers views/ ) {
44 if ( my $func = $args{$type} ) {
45 my $meth = "get_$type";
46 _filtername($_,$func) foreach $schema->$meth;
51 if ( my $func = $args{fields} ) {
53 foreach map { $_->get_fields } $schema->get_tables ;
58 # _filtername( OBJ, FUNC_NAME )
59 # Update the name attribute on the schema object given using the named filter.
60 # Objects with no name are skipped.
61 # Returns true if the name was changed. Dies if there is an error running func.
64 return unless my $name = $obj->name;
65 $func = _getfunc($func);
66 my $newname = eval { $func->($name) };
67 die "$@" if $@; # TODO - Better message!
68 return if $name eq $newname;
72 # _getfunc( NAME ) - Returns code ref to func NAME or dies.
76 my $func = "SQL::Translator::Filter::Names::$name";
77 die "Table name filter - unknown function '$name'\n" unless exists &$func;
83 # The name munging functions
84 #=============================================================================
85 # Get called with name to munge as first arg and return the new name. Die on
90 sub ucfirst { ucfirst shift; }
92 1; #==========================================================================
98 Tweak the names of schema objects by providing functions to filter the names
99 from the given into the desired forms.
103 C<perl(1)>, L<SQL::Translator>
109 Define a bunch of useful groups to run the name filters over. e.g. all, fkeys,
114 e.g. camelcase, titlecase, single word etc.
115 Also a way to pass in a regexp.
117 May also want a way to pass in arguments for the func e.g. prefix.
119 =item Multiple Filters on the same name (filter order)?
121 Do we actually need this, you could just run lots of filters. Would make adding
122 func args to the interface easier.
125 [ 'Names', { all => 'lc' } ],
132 Mind you if you could give the filter a list this wouldn't be a problem!
141 Which is nice. Might have to change the calling conventions for filters.
142 Would also provide an order to run the filters in rather than having to hard
143 code it into the filter it's self.