Class SimplifyingFilterVisitor
- All Implemented Interfaces:
ExpressionVisitor
,FilterVisitor
- simplifies out
Filter.INCLUDE
andFilter.EXCLUDE
in logical expressions - removes double logic negations
- deal with FID filter validation removing invalid fids
- optimize out all non volatile functions that do not happen to use attributes, replacing them with literals
FID filter validation is meant to wipe out non valid feature ids from Id
filters. This is so in order to
avoid sending feature ids down to DataStores that are not valid as per the specific FeatureType fid structure. Since
this is structure is usually DataStore specific, some times being a strategy based on how the feature type primary
key is generated, fid validation is abstracted out to the SimplifyingFilterVisitor.FIDValidator
interface so when a DataStore is about
to send a query down to the backend it van provide this visitor with a validator specific for the feature type fid
structure being queried.
By default all feature ids are valid. DataStores that want non valid fids to be wiped out should set a
SimplifyingFilterVisitor.FIDValidator
through the setFIDValidator(FIDValidator)
method.
- Since:
- 2.5.x
- Author:
- Andrea Aime - OpenGeo, Gabriel Roldan (OpenGeo)
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interface
Defines a simple means of assessing whether a feature id in anId
filter is structurally valid and hence can be send down to the backend with confidence it will not cause trouble, the most common one being filtering by pk number even if the type name prefix does not match.static class
A FID validator that matches the fids with a given regular expression to determine the fid's validity.static class
A convenient fid validator for the common case of a feature id being a composition of a<typename>.<number>
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final SimplifyingFilterVisitor.FIDValidator
A 'null-object' fid validator that assumes any feature id in anId
filter is validprotected FeatureType
Fields inherited from class DuplicatingFilterVisitor
ff
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbasicAndSimplification
(List<Filter> filters) basicOrSimplification
(List<Filter> filters) protected <T extends BinaryLogicOperator>
List<Filter>extraAndSimplification
(Object extraData, List<Filter> filters) extraOrSimplification
(Object extraData, List<Filter> filters) protected boolean
isConstant
(Expression ex) boolean
protected boolean
Returns true if the target feature type is a simple feature oneprotected boolean
isVolatileFunction
(Function function) Checks if a function is volatile in this context.void
setFeatureType
(FeatureType featureType) void
void
setRangeSimplicationEnabled
(boolean rangeSimplicationEnabled) Enables/disable range simplification.static Filter
Tries to simplify the filter if it's not already a simple one.static Filter
simplify
(Filter filter, FeatureType featureType) Tries to simplify the filter if it's not already a simple oneUses the currentSimplifyingFilterVisitor.FIDValidator
to wipe out illegal feature ids from the returned filters.visit
(PropertyIsBetween filter, Object extraData) visit
(PropertyIsEqualTo filter, Object extraData) visit
(PropertyIsGreaterThanOrEqualTo filter, Object extraData) visit
(PropertyIsGreaterThan filter, Object extraData) visit
(PropertyIsLessThanOrEqualTo filter, Object extraData) visit
(PropertyIsLessThan filter, Object extraData) visit
(PropertyIsLike filter, Object extraData) visit
(PropertyIsNil filter, Object extraData) visit
(PropertyIsNotEqualTo filter, Object extraData) visit
(PropertyIsNull filter, Object extraData) Methods inherited from class DuplicatingFilterVisitor
getFactory, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visitNullFilter
-
Field Details
-
ANY_FID_VALID
A 'null-object' fid validator that assumes any feature id in anId
filter is valid -
featureType
-
-
Constructor Details
-
SimplifyingFilterVisitor
public SimplifyingFilterVisitor()
-
-
Method Details
-
setFIDValidator
-
setFeatureType
-
visit
- Specified by:
visit
in interfaceFilterVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
basicAndSimplification
-
collect
-
visit
- Specified by:
visit
in interfaceFilterVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
basicOrSimplification
-
extraAndSimplification
-
extraOrSimplification
-
visit
Uses the currentSimplifyingFilterVisitor.FIDValidator
to wipe out illegal feature ids from the returned filters.- Specified by:
visit
in interfaceFilterVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
- Returns:
- a filter containing only valid fids as per the current
SimplifyingFilterVisitor.FIDValidator
, may beFilter.EXCLUDE
if none matches or the filter is already empty
-
visit
- Specified by:
visit
in interfaceFilterVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
isSimpleFeature
protected boolean isSimpleFeature()Returns true if the target feature type is a simple feature one -
visit
- Specified by:
visit
in interfaceExpressionVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
isVolatileFunction
Checks if a function is volatile in this context. By default it checks if the function implements theVolatileFunction
interface, subclasses can override -
simplify
Tries to simplify the filter if it's not already a simple one. -
simplify
Tries to simplify the filter if it's not already a simple one -
isConstant
-
visit
- Specified by:
visit
in interfaceFilterVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
visit
- Specified by:
visit
in interfaceFilterVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
visit
- Specified by:
visit
in interfaceFilterVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
visit
- Specified by:
visit
in interfaceFilterVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
visit
- Specified by:
visit
in interfaceFilterVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
visit
- Specified by:
visit
in interfaceFilterVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
visit
- Specified by:
visit
in interfaceFilterVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
visit
- Specified by:
visit
in interfaceFilterVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
visit
- Specified by:
visit
in interfaceFilterVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
visit
- Specified by:
visit
in interfaceFilterVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
visit
- Specified by:
visit
in interfaceExpressionVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
visit
- Specified by:
visit
in interfaceExpressionVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
visit
- Specified by:
visit
in interfaceExpressionVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
visit
- Specified by:
visit
in interfaceExpressionVisitor
- Overrides:
visit
in classDuplicatingFilterVisitor
-
isRangeSimplicationEnabled
public boolean isRangeSimplicationEnabled() -
setRangeSimplicationEnabled
public void setRangeSimplicationEnabled(boolean rangeSimplicationEnabled) Enables/disable range simplification. Range simplification can figure out that the logic combination of multiple ranges against the same property can be turned into a single range, a INCLUDE, or a EXCLUDE, but it requires the range boundaries to be of the same type as the
-