1 package OpenILS::DomainObject::oilsSearch;
2 use OpenILS::DomainObject;
3 use OpenILS::DomainObject::oilsPrimitive;
4 use OpenILS::DOM::Element::searchCriteria;
5 use base 'OpenILS::DomainObject';
9 $class = ref($class) || $class;
11 unshift @_, 'table' if (@_ == 1);
14 my $self = $class->SUPER::new;
16 for my $part ( keys %args ) {
17 if ($part ne 'criteria') {
18 $self->$part( $args{$part} );
21 $self->criteria( OpenILS::DOM::Element::searchCriteria->new( @{$args{$part}} ) );
28 return $self->_attr_get_set( format => shift );
33 return $self->_attr_get_set( table => shift );
38 my $new_fields_ref = shift;
40 my ($old_fields) = $self->getChildrenByTagName("oils:domainObjectCollection");
42 if ($new_fields_ref) {
43 my $do = OpenILS::DomainObjectCollection::oilsArray->new( @$new_fields_ref );
44 if (defined $old_fields) {
45 $old_fields->replaceNode($do);
47 $self->appendChild($do);
52 return $old_fields->list if ($old_fields);
57 return $self->_attr_get_set( limit => shift );
62 return $self->_attr_get_set( offset => shift );
67 return $self->_attr_get_set( group_by => shift );
75 unshift @_, $new_crit;
76 $new_crit = OpenILS::DOM::Element::searchCriteria->new(@_);
79 my ($old_crit) = $self->getChildrenByTagName("oils:searchCriteria");
81 if (defined $new_crit) {
82 if (defined $old_crit) {
83 $old_crit->replaceNode($new_crit);
85 $self->appendChild($new_crit);
96 my $SQL = 'SELECT ' . join(',', $self->fields);
97 $SQL .= ' FROM ' . $self->table;
98 $SQL .= ' WHERE ' . $self->criteria->toSQL if ($self->criteria);
99 $SQL .= ' GROUP BY ' . $self->group_by if ($self->group_by);
100 $SQL .= ' LIMIT ' . $self->limit if ($self->limit);
101 $SQL .= ' OFFSET ' . $self->offset if ($self->offset);