Hi, I use a shapefile datastore in conjunction with a transaction. When reading features of the store, using a filter, I mentioned, that if I have a dirty state (added or modified features) in the transaction I always get all features returned regardless of the filter.
I figured out that the problem lies inside ContentFeatureSource (https://github.com/geotools/geotools/blob/master/modules/library/main/src/main/java/org/geotools/data/store/ContentFeatureSource.java): When getReader(Query query) gets called, it sets in the transaction part the reader to new DiffFeatureReader<SimpleFeatureType, SimpleFeature>(reader, state.getDiff()); The query is not passed to the DiffFeatureReader resulting in a Filter.INCLUDE filter inside the DiffFeatureReader (https://github.com/geotools/geotools/blob/master/modules/library/main/src/main/java/org/geotools/data/DiffFeatureReader.java), always returing all features. In some cases this seems to be handled in some cases inside the getReader(Query query) in the block following the transaction block, where it adds a new FilteringFeatureReader on top of the current reader. The problem is, for shapefiles it never gets there, because canFilter() resolves to true. My suggestion is to pass the filtert o the DiffFeatureReader by calling new DiffFeatureReader<SimpleFeatureType, SimpleFeature>(reader, state.getDiff(), query.getFilter()); Would that be the right way? Regards, Hendrik Peilke ________________________________ IBYKUS AG f?r Informationstechnologie, Erfurt / HRB 108616 - D-Jena / Vorstand: Helmut C. Henkel, Dr. Lutz Richter, Eckehart Klingner Vorsitzender des Aufsichtsrates: Dr. Helmut Vorndran
_______________________________________________ GeoTools-Devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/geotools-devel
