+ if ( $reqData->{'filter'} ) {
+
+ my $sql_where = '';
+ my @values;
+
+ foreach my $join_with ( keys %{ $reqData->{'filter'} } ) {
+
+ warn "## join_with $join_with\n";
+
+ my @limits;
+
+ foreach my $filter ( @{ $reqData->{'filter'}->{ $join_with } } ) {
+ warn "### filter ",dump($filter),$/;
+ foreach my $how ( keys %$filter ) {
+ warn "### how $how\n";
+ if ( $how eq 'equalityMatch' && defined $filter->{$how} ) {
+ my $name = $filter->{$how}->{attributeDesc} || warn "ERROR: no attributeDesc?";
+ my $value = $filter->{$how}->{assertionValue} || warn "ERROR: no assertionValue?";
+ if ( ! $ldap_ignore->{ $name } ) {
+ push @limits, __sql_column($name) . ' = ?';
+ push @values, $value;
+ }
+ } elsif ( $how eq 'substrings' ) {
+ foreach my $substring ( @{ $filter->{$how}->{substrings} } ) {
+ my $name = $filter->{$how}->{type} || warn "ERROR: no type?";
+ while ( my($op,$value) = each %$substring ) {
+ push @limits, __sql_column($name) . ' LIKE ?';
+ if ( $op eq 'any' ) {
+ $value = '%' . $value . '%';
+ } else {
+ warn "UNSUPPORTED: op $op - using plain $value";
+ }
+ push @values, $value;
+ }
+ }
+ } elsif ( $how eq 'present' ) {
+ push @limits, __sql_column( $filter->{$how} ) . ' IS NOT NULL';
+ ## XXX add and length(foo) > 0 to avoid empty strings?
+ } else {
+ warn "UNSUPPORTED: how $how ",dump( $filter );
+ }
+ warn "## limits ",dump(@limits), " values ",dump(@values);
+ }
+ }
+
+ $sql_where .= ' ' . join( " $join_with ", @limits );