diff options
Diffstat (limited to 'site_perl/dbdef_colgroup.pm')
-rw-r--r-- | site_perl/dbdef_colgroup.pm | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/site_perl/dbdef_colgroup.pm b/site_perl/dbdef_colgroup.pm new file mode 100644 index 000000000..64f2e3082 --- /dev/null +++ b/site_perl/dbdef_colgroup.pm @@ -0,0 +1,107 @@ +package FS::dbdef_colgroup; + +use strict; +use vars qw(@ISA); + +@ISA = qw(Exporter); + +=head1 NAME + +FS::dbdef_colgroup - Column group objects + +=head1 SYNOPSIS + + use FS::dbdef_colgroup; + + $colgroup = new FS::dbdef_colgroup ( $lol ); + $colgroup = new FS::dbdef_colgroup ( + [ + [ 'single_column' ], + [ 'multiple_columns', 'another_column', ], + ] + ); + + @sql_lists = $colgroup->sql_list; + + @singles = $colgroup->singles; + +=head1 DESCRIPTION + +FS::dbdef_colgroup objects represent sets of sets of columns. + +=head1 METHODS + +=over 4 + +=item new + +Creates a new FS::dbdef_colgroup object. + +=cut + +sub new { + my($proto, $lol) = @_; + + my $class = ref($proto) || $proto; + my $self = { + 'lol' => $lol, + }; + + bless ($self, $class); + +} + +=item sql_list + +Returns a flat list of comma-separated values, for SQL statements. + +=cut + +sub sql_list { #returns a flat list of comman-separates lists (for sql) + my($self)=@_; + grep $_ ne '', map join(', ', @{$_}), @{$self->{'lol'}}; +} + +=item singles + +Returns a flat list of all single item lists. + +=cut + +sub singles { #returns single-field groups as a flat list + my($self)=@_; + #map ${$_}[0], grep scalar(@{$_}) == 1, @{$self->{'lol'}}; + map { + ${$_}[0] =~ /^(\w+)$/ + #aah! + or die "Illegal column ", ${$_}[0], " in colgroup!"; + $1; + } grep scalar(@{$_}) == 1, @{$self->{'lol'}}; +} + +=back + +=head1 BUGS + +=head1 SEE ALSO + +L<FS::dbdef_table>, L<FS::dbdef_unique>, L<FS::dbdef_index>, +L<FS::dbdef_column>, L<FS::dbdef>, L<perldsc> + +=head1 HISTORY + +class for dealing with groups of groups of columns (used as a base class by +FS::dbdef_{unique,index} ) + +ivan@sisd.com 98-apr-19 + +added singles, fixed sql_list to skip empty lists ivan@sisd.com 98-jun-2 + +untaint things we're returning in sub singels ivan@sisd.com 98-jun-4 + +pod ivan@sisd.com 98-sep-24 + +=cut + +1; + |