Hi Saul, I just ran into this problem yesterday, the fix should be on 2.2.x. How recent is your 2.2.x checkout. I havent merged the fix to trunk yet.
-Justin Saul Farber wrote: > Hey all, > > I think there may be a serious problem with the FilterCapabilities.ALL > and FilterCapabilities.NONE implementation on the trunk and 2.2.x > branch. I could be way off here though...so some feedback would be great. > > > As I understand it, a FilterCapabilities object represents the different > sorts of filters that a given SQLEncoder can unpack. So, for example, > if a datastore can't do spatial bbox queries, then its sqlencoder would > not include the SPATIAL_BBOX flag in its filterCapabilities. > > This whole she-bang is implemented as a bitmask. From lines 53 down to > about 157, a whole list of different operators are defined, and then > assigned to a bit (via the left-shift operator). So, for example, the > following 32-bit binary number: > > 00000000000000000000000000000001 > > represents a filterCapabilities that supports SPATIAL_BBOX and nothing > else. > > Similarly, the following 32-bit number: > > 00000000000000000001000000000001 > > represents a filterCapabilities that supports SPATIAL_BBOX and LIKE, and > nothing else. etc. > > > The problem is that ALL and NONE are implemented as integers, and their > binary representations clobber the actual intended filter capabilities > for the capabilities objects to which they're added. > > Check out this exmample: > > FilterCapabilities f = new FilterCapabilities(); > f.addType(FilterCapabilities.NONE); > > This does the following (in the addType() method): > > ops = ops | type; > > i.e. > > ops = 12345 | type; > > i.e. (by converting 12345 to binary) > > ops = 11000000111001 | type; > > > In the end, calling f.addType(FilterCapabilities.NONE) creates a filter > which claims to support: > > * SPATIAL_BBOX (0x01) > * SPATIAL_INTERSECT (0x01<<3) > * SPATIAL_TOUCHES (0x01<<4) > * SPATIAL_CROSSES (0x01<<5) > * BETWEEN (0x01<<12) > * CHECK (0x01<<13) > > > I confirmed this with a unit test. > > FilterCapabilities.ALL probably does something even more wacky, because > Java probably stores negative longs as two's-compliments in binary. > > > All of this is to say, that ALL and NONE are actually different flags > that need to be added to the list of bit-shifted flags. > > > > Does any of this make sense? I've attached a FilterCapabiilities patch > that fixes the trunk, and can do so for 2.2.x as well if needed. > > --saul > > > > !DSPAM:1004,44dba766223981804284693! > > > ------------------------------------------------------------------------ > > Index: > /home/ENV/sfarber/dev/geotools/geotools-trunk/module/main/src/org/geotools/filter/FilterCapabilities.java > =================================================================== > --- > /home/ENV/sfarber/dev/geotools/geotools-trunk/module/main/src/org/geotools/filter/FilterCapabilities.java > (revision 20947) > +++ > /home/ENV/sfarber/dev/geotools/geotools-trunk/module/main/src/org/geotools/filter/FilterCapabilities.java > (working copy) > @@ -35,16 +35,6 @@ > * Mask for no operation > */ > public static final long NO_OP = 0; > - > - /** > - * Mask for Filter.NONE > - */ > - public static final long NONE = 12345; > - > - /** > - * Mask for Filter.ALL > - */ > - public static final long ALL = -12345; > > // spatial masks > /** > @@ -135,6 +125,16 @@ > public static final long LOGIC_NOT = 0x01<<24; > > public static final long LOGIC_OR = 0x01<<25; > + > + /** > + * Mask for Filter.NONE > + */ > + public static final long NONE = 0x01<<26; > + > + /** > + * Mask for Filter.ALL > + */ > + public static final long ALL = 0x01<<27; > > /** > * Scalar Mask for logical operation > > > !DSPAM:1004,44dba766223981804284693! > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > > !DSPAM:1004,44dba766223981804284693! > > > ------------------------------------------------------------------------ > > _______________________________________________ > Geotools-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/geotools-devel > > > !DSPAM:1004,44dba766223981804284693! -- Justin Deoliveira The Open Planning Project [EMAIL PROTECTED] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ Geotools-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/geotools-devel
