Tim Esselens
and 1 contributors

VERSION

version 0.03

NAME

Net::LDAP::Filter::SQL - LDAP filter to SQL clause transformer

SYNOPSIS

    my $ldapfilter = new Net::LDAP::Filter( '(&(name=Homer)(city=Springfield))' );


    my $sqlfilter  = new Net::LDAP::Filter::SQL( '(&(name=Marge)(city=Springfield))' );

    my $sqlfilter2 = Net::LDAP::Filter::SQL->new_from_data({ 'equalityMatch' => { 'assertionValue' => 'bar', 'attributeDesc' => 'foo' } });

    my $sqlfilter3 = bless($ldapfilter,'Net::LDAP::Filter::SQL');


    print Data::Dumper({ clause => $sqlfilter->sql_clause, values => $sqlfilter->sql_values });

    # ... $dbh->selectall_arrayref('select * from sometable where '.$sqlfilter->sql_clause, undef, $sqlfilter->sql_values)

DESCRIPTION

This module allows you to transform a Net::LDAP::Filter object into an SQL clause string containing '?' placeholders. The corresponding values can be accessed as a list, and thus can be used inside a dbh prepare or select call.

METHODS

new( ldapfilter )

Create a new LDAP Filter

new_from_data( $hashref )

Creates a new LDAP Filter from an existing data set. i.e. a Net::LDAP::Filter structure

sql_clause()

returns an sql where clause in string format with '?' placeholders

sql_values()

returns a list of values associated with the filter

METHODS

EXAMPLE

    my $filter = new Net::LDAP::Filter::SQL('(&(name=Marge)(city=Springfield))');
    
    print Dumper({ clause => $filter->sql_clause, values => $filter->sql_values });
    
    # $VAR1 = {
    #           'clause' => '(name = ?) and (city = ?)',
    #           'values' => [
    #                         'Marge',
    #                         'Springfield'
    #                       ]
    #         };

BUGS

probably lots, please send patches

TODO

Figure out what to do with approxMatch. From RFC 4511 (http://www.faqs.org/rfcs/rfc4511.html):

   4.5.1.7.6.  SearchRequest.filter.approxMatch
   An approxMatch filter is TRUE when there is a value of the attribute
   type or subtype for which some locally-defined approximate matching
   algorithm (e.g., spelling variations, phonetic match, etc.) returns
   TRUE.  If a value matches for equality, it also satisfies an
   approximate match.  If approximate matching is not supported for the
   attribute, this filter item should be treated as an equalityMatch.

That's it: whatever you want it to be. Regex, soundex, etc.. or simply make it like an equalityMatch.

SUPPORT

send me an e-mail

SEE ALSO

ACKNOWLEDGEMENTS

My mother, for raising me and my brother the way she did. Thanks mom!

INSTALLATION

See perlmodinstall for information and options on installing Perl modules.

BUGS AND LIMITATIONS

You can make new bug reports, and view existing ones, through the web interface at http://rt.cpan.org.

AUTHOR

Tim Esselens <tim.esselens@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by Tim Esselens.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.