[Zope3-dev] Re: RFC: should z.a.c.attribute.AttributeIndex index None values?

Gary Poster gary at zope.com
Fri Nov 17 14:16:59 EST 2006


On Nov 17, 2006, at 1:46 PM, Tres Seaver wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Gary Poster wrote:
>> On Nov 17, 2006, at 10:23 AM, Adam Groszer wrote:
>>
>>> Hello,
>>>
>>> Solutions:
>>>
>>> a: No, do not keep None values in the catalog
>>>    the current implementation works like this
>>>    you are unable to ask the catalog for objects having None
>>>    properties
>>> b: Yes, keep None values in the catalog
>>>    you can ask the catalog for objects having None properties
>>> c: Let's keep the existing one that does not index None and have an
>>>    AttributeIndexAlsoNone class which will index None values
>>
>> Did you see my reply in the other thread?
>>
>> If you make indexes keep track of None, it will need to be done in a
>> separate data structure because of the key homogeneity issues.  This
>> is a less efficient approach than the zc.catalog approach.  It can be
>> done either way.
>>
>> I recommend that you use zc.catalog, rather than reinventing
>> something that solves your problem.
>>
>> I suppose I don't care much, since we don't use the standard zope
>> value and keyword indexes anyway; if you must add the None feature,
>> then I only care, from a "let's not screw up our community software"
>> perspective, that it be implemented in a safe way.  Keep your BTree
>> keys homogenous.
>
> I don't get this -- an OOBTree promises to index *objects* as keys;
> None *does* behave properly as a key when mixed with strings.  You  
> can't
> count on it sorting in a particular way, but it *is* consistent.
> Worrying about consistency across, e.g., a major Python version  
> upgrade
> (the only thing which I can envision changing the partial ordering)

Yes that's the case I'm talking about.  That's also one of the cases  
that key references care about.

> doesn't justify throwing out 'None' as a legitimate indexable value in
> all cases.

If you mean that you think it is ok to have keys in a BTree that do  
not share explicit sorting semantics--typically something you do by  
enforcing homogenous types--then I'm quite surprised that this is  
your position.  This is an unnecessary invitation to an unpleasant  
rear-end biting.

If you simply mean what you say below...

> In general, I don't think the storage mechanism should dictate the
> *policy* choice, which is whether 'None' is a "meaningful" value  
> for the
> index.  In many cases, having 'None' as the value for an attribute is
> *not* the same thing as not having the attribute at all -- I'll agree
> with you that objects who don't have the attribute should not

...then as I said in another email, if people want to implement it  
this way, great.  However, I think saying that an index indexes  
homogenous values is very reasonable.  And if people disagree with me  
enough to pursue this, I still strongly recommend against collecting  
objects together as BTree keys that do not have explicit, reliable  
sorting semantics across major versions.

My only real stake in this is that I don't want the zc.catalog  
indexes changed in this way, nor do I want a revised index interface  
that makes the zc.catalog indexes no longer fulfill the interface  
because of this kind of change.

Gary


More information about the Zope3-dev mailing list