package DBIx::SQLEngine::Criteria::HashGroup; use DBIx::SQLEngine::Criteria; @ISA = 'DBIx::SQLEngine::Criteria'; use strict; use DBIx::SQLEngine::Criteria::And; use DBIx::SQLEngine::Criteria::Or; use DBIx::SQLEngine::Criteria::StringComparison; # 2004-02-24 Switched to StringComparison based on suggestion from Michael Kroll # use DBIx::SQLEngine::Criteria::StringEquality; use Class::MakeMethods ( 'Composite::Hash:new' => [ 'new', {modifier => 'with_values'} ], ); sub normalized { my $hashref = shift; DBIx::SQLEngine::Criteria::And->new( map { my ($key, $value) = ($_, $hashref->{$_}); ( ref( $value ) eq 'ARRAY' ) ? DBIx::SQLEngine::Criteria::Or->new( map { DBIx::SQLEngine::Criteria::StringComparison->new( $key, $_ ) } @$value ) : DBIx::SQLEngine::Criteria::StringComparison->new($key, $value) } sort keys %$hashref ) } sub sql_where { (shift)->normalized->sql_where( @_ ) } 1; __END__ ######################################################################## =head1 NAME DBIx::SQLEngine::Criteria::HashGroup - A group of string criteria =head1 SYNOPSIS my $crit = DBIx::SQLEngine::Criteria::HashGroup->new( customer => 'Acme Inc.', status => [ 'open', 'pending' ] ); =head1 DESCRIPTION DBIx::SQLEngine::Criteria::HashGroup objects provide a convenient way to bundle several criteria together in a Perl hash structure. Each key-value pair is converted to a StringComparison Criteria, except if the value is an array reference, which produces an Or group of StringComparisons that will match any one of the provided values. =head2 Evaluation =over 4 =item sql_where () $sql_where_expression $criteria->sql_where() : $sql, @params Generates SQL criteria expression. =item normalized() Called by sql_where to convert the hash structure into simpler criteria objects. =back =head1 SEE ALSO See L and L for more information on using these objects. See L for the overall interface and developer documentation. See L for general information about this distribution, including installation and license information. =cut