Hi guys,

from ACI to Subtree, I'm now investigating the filter handling. As we allow the usage of Filters in Subtree this is a mandatoty step.

The problem was that filters weren't schema aware, thus we had to do a lot of manipulation to get the attributeType from the attribute, in many places in the server. Having a Schema aware Filter implementation would help a lot to avoid all those lookups.

So I modified the Filter implementation to be Schema aware.

The first attemp was a failure, as Filters are used in the server but also on the client side, and it may perfectly well not be schema aware. So I had to keep a dual form of Filters :
- Schema aware
- not schema aware

So far, so good.

The next stone in my shoe was that an old bug jumped into my face : DIRSERVER_971. Namely, it's about the handling of undefined Filters. For instance, such a filter :
(|(test=*)(objectClass=person))
will return no entries, when it should return every entry having a 'person' ObjectClass. This is because we don't correctly handle Undefined evaluation of Filters (as required by RFC 4511, a filter can evaluate to either True, False, or Undefined).

This is bad, especially because now that the Filter is schema aware, this leads to some failure in tests, as unknown attributes aren't accepted while we parse the filter. Instead of creating an Undefined filter, we simply throw and exception.

Before fixing this issue, I had to fix many other inconsistencies I introducing in the code. Some of them are pretty nasty.

While fixing them, I discovered that when we go down to the backend, we don't use the Filter AttributeType to look for index, but we use the Attribute name. The silly thing is that inside the backend, we do a lookup to get back the AttributeType from its name. This is bad and has to be fixed too...

At the end of the day, here is what remains to be done :
- finish to fix the failing tests (almost done)
- deal with the Undefined Filter nodes
- use the AttributeType in the backend, instead of the Attribute name

Then we should be done with the filters, and it will be time to move back to subtree...

--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com

Reply via email to