]> git.evergreen-ils.org Git - OpenSRF.git/blob - src/perlmods/OpenSRF/DOM/Element/searchCriteria.pm
c8b1eb39c00743ba34cfe2719ffb303f145f46f9
[OpenSRF.git] / src / perlmods / OpenSRF / DOM / Element / searchCriteria.pm
1 package OpenSRF::DOM::Element::searchCriteria;
2 use base 'OpenSRF::DOM::Element';
3 use OpenSRF::DOM;
4 use OpenSRF::DOM::Element::searchCriterium;
5
6 sub new {
7         my $self = shift;
8         my $class = ref($self) || $self;
9
10         if (@_ == 3 and !ref($_[1])) {
11                 my @crit = @_;
12                 @_ = ('AND', \@crit);
13         }
14
15         my ($joiner,@crits) = @_;
16
17         unless (@crits) {
18                 push @crits, $joiner;
19                 $joiner = 'AND';
20         }
21
22         my $collection = $class->SUPER::new(joiner => $joiner);
23
24         for my $crit (@crits) {
25                 if (ref($crit) and ref($crit) =~ /ARRAY/) {
26                         if (ref($$crit[1])) {
27                                 $collection->appendChild( $class->new(@$crit) );
28                         } else {
29                                 $collection->appendChild( OpenSRF::DOM::Element::searchCriterium->new( @$crit ) );
30                         }
31                 } else {
32                         $collection->appendChild($crit);
33                 }
34         }
35         return $collection;
36 }
37
38 sub toSQL {
39         my $self = shift;
40
41         my @parts = ();
42         for my $kid ($self->childNodes) {
43                 push @parts, $kid->toSQL;
44         }
45         return '(' . join(' '.$self->getAttribute('joiner').' ', @parts) . ')';
46 }
47
48 1;