Package org.geotools.appschema.jdbc
Class NestedFilterToSQL
- Object
- 
- FilterToSQL
- 
- NestedFilterToSQL
 
 
- 
- All Implemented Interfaces:
- ExpressionVisitor,- FilterVisitor
 
 public class NestedFilterToSQL extends FilterToSQL FilterToSQLdecorator capable of encoding filters on nested attributes.Currently, the filters that can be translated to SQL are: - BBOX
- Contains
- Touches
- Intersects
- Overlaps
- Within
- Crosses
- Disjoint
- Equals
- Beyond
- DWithin
- PropertyIsEqualTo
- PropertyIsNotEqualTo
- PropertyIsLessThan
- PropertyIsLessThanOrEqualTo
- PropertyIsGreaterThan
- PropertyIsGreaterThanOrEqualTo
- PropertyIsLike
- PropertyIsNull
- PropertyIsBetween
 Note that, in order to be successfully encoded, the filter must not involve more than one nested attribute (i.e. comparing nested attributes is not supported), nor attributes that are chained via polymorphic mappings. If the visited filter does not involve nested attributes, its encoding is delegated to the wrapped FilterToSQLinstance.- Author:
- Mauro Bartolomeoli, GeoSolutions, Stefano Costa, GeoSolutions
 
- 
- 
Nested Class Summary- 
Nested classes/interfaces inherited from class FilterToSQLFilterToSQL.FieldEncoder
 
- 
 - 
Field Summary- 
Fields inherited from class FilterToSQLcapabilities, currentDimension, currentGeometry, currentSRID, databaseSchema, encodingFunction, escapeBackslash, featureType, fieldEncoder, filterFactory, inEncodingEnabled, inline, IO_ERROR, LOGGER, out, primaryKey, sqlNameEscape
 
- 
 - 
Constructor SummaryConstructors Constructor Description NestedFilterToSQL(FeatureTypeMapping rootMapping, FilterToSQL original)Constructor.
 - 
Method SummaryAll Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidencode(Filter filter)Performs the encoding, sends the encoded sql to the writer passed in.static booleanisNestedFilter(Filter filter)A filter is considered nested if it operates on at least one nested attribute.booleanisReplaceOrWithUnion()voidsetReplaceOrWithUnion(boolean replaceOrWithUnion)voidsetSelectClause(String selectClause)protected Objectvisit(BinaryLogicOperator filter, Object extraData)If replaceOrWithUnion flag is enabled this method will build main OR condition in the form of UNION queries like: SELECT id, name FROM table WHERE name = "Alf" OR name = "Rick" -> SELECT id, name FROM table WHERE name = "Alf" UNION SELECT id, name FROM table WHERE name = "Rick"Objectvisit(Or filter, Object extraData)Write the SQL for an Or filterObjectvisit(PropertyIsBetween filter, Object extraData)Writes the SQL for the PropertyIsBetween Filter.Objectvisit(PropertyIsEqualTo filter, Object extraData)Write the SQL for this kind of filterObjectvisit(PropertyIsGreaterThanOrEqualTo filter, Object extraData)Write the SQL for this kind of filterObjectvisit(PropertyIsGreaterThan filter, Object extraData)Write the SQL for this kind of filterObjectvisit(PropertyIsLessThanOrEqualTo filter, Object extraData)Write the SQL for this kind of filterObjectvisit(PropertyIsLessThan filter, Object extraData)Write the SQL for this kind of filterObjectvisit(PropertyIsLike filter, Object extraData)Writes the SQL for the Like Filter.Objectvisit(PropertyIsNotEqualTo filter, Object extraData)Write the SQL for this kind of filterObjectvisit(PropertyIsNull filter, Object extraData)Writes the SQL for the Null Filter.Objectvisit(BBOX filter, Object extraData)Objectvisit(Beyond filter, Object extraData)Objectvisit(Contains filter, Object extraData)Objectvisit(Crosses filter, Object extraData)Objectvisit(Disjoint filter, Object extraData)Objectvisit(DWithin filter, Object extraData)Objectvisit(Equals filter, Object extraData)Objectvisit(Intersects filter, Object extraData)Objectvisit(Overlaps filter, Object extraData)Objectvisit(Touches filter, Object extraData)Objectvisit(Within filter, Object extraData)protected ObjectvisitNestedFilter(Filter filter, Object extraData, String xpath)- 
Methods inherited from class FilterToSQLcast, createFilterCapabilities, encode, encodeBinaryComparisonOperator, encodeToString, encodeToString, escapeLiteral, escapeName, evaluateLiteral, getCapabilities, getDatabaseSchema, getDistanceInNativeUnits, getExpressionType, getFeatureType, getFunctionName, getFunctionReturnType, getParameter, getPrimaryKey, getSqlNameEscape, isBinaryExpression, isEscapeBackslash, isInEncodingEnabled, processLikeLeftOperand, setCapabilities, setDatabaseSchema, setEscapeBackslash, setFeatureType, setFieldEncoder, setInEncodingEnabled, setInline, setPrimaryKey, setSqlNameEscape, setWriter, 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, visitBinaryComparisonOperator, visitBinarySpatialOperator, visitBinarySpatialOperator, visitBinarySpatialOperator, visitBinaryTemporalOperator, visitBinaryTemporalOperator, visitBinaryTemporalOperator, visitInFunction, visitLiteralGeometry, visitLiteralTimePeriod, visitNullFilter, writeBinaryExpression, writeBinaryExpressionMember, writeLiteral
 
- 
 
- 
- 
- 
Constructor Detail- 
NestedFilterToSQLpublic NestedFilterToSQL(FeatureTypeMapping rootMapping, FilterToSQL original) Constructor.- Parameters:
- rootMapping- the feature type being queried
- original- the wrapped filter-to-SQL encoder
 
 
- 
 - 
Method Detail- 
encodepublic void encode(Filter filter) throws FilterToSQLException Description copied from class:FilterToSQLPerforms the encoding, sends the encoded sql to the writer passed in.- Overrides:
- encodein class- FilterToSQL
- Parameters:
- filter- the Filter to be encoded.
- Throws:
- FilterToSQLException- If filter type not supported, or if there were io problems.
 
 - 
visitNestedFilterprotected Object visitNestedFilter(Filter filter, Object extraData, String xpath) 
 - 
visitpublic Object visit(BBOX filter, Object extraData) - Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
 
 - 
visitpublic Object visit(Contains filter, Object extraData) - Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
 
 - 
visitpublic Object visit(Touches filter, Object extraData) - Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
 
 - 
visitpublic Object visit(Intersects filter, Object extraData) - Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
 
 - 
visitpublic Object visit(Overlaps filter, Object extraData) - Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
 
 - 
visitpublic Object visit(Within filter, Object extraData) - Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
 
 - 
visitpublic Object visit(Crosses filter, Object extraData) - Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
 
 - 
visitpublic Object visit(Disjoint filter, Object extraData) - Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
 
 - 
visitpublic Object visit(Equals filter, Object extraData) - Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
 
 - 
visitpublic Object visit(Beyond filter, Object extraData) - Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
 
 - 
visitpublic Object visit(Or filter, Object extraData) Description copied from class:FilterToSQLWrite the SQL for an Or filter- Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
- Parameters:
- filter- the filter to visit
- extraData- extra data (unused by this method)
 
 - 
visitprotected Object visit(BinaryLogicOperator filter, Object extraData) If replaceOrWithUnion flag is enabled this method will build main OR condition in the form of UNION queries like: SELECT id, name FROM table WHERE name = "Alf" OR name = "Rick" -> SELECT id, name FROM table WHERE name = "Alf" UNION SELECT id, name FROM table WHERE name = "Rick"- Overrides:
- visitin class- FilterToSQL
- Parameters:
- filter- the logic statement to be turned into SQL.
- extraData- extra filter data. Not modified directly by this method.
 
 - 
visitpublic Object visit(DWithin filter, Object extraData) - Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
 
 - 
visitpublic Object visit(PropertyIsEqualTo filter, Object extraData) Description copied from class:FilterToSQLWrite the SQL for this kind of filter- Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
- Parameters:
- filter- the filter to visit
- extraData- extra data (unused by this method)
 
 - 
visitpublic Object visit(PropertyIsBetween filter, Object extraData) throws RuntimeException Description copied from class:FilterToSQLWrites the SQL for the PropertyIsBetween Filter.- Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
- Parameters:
- filter- the Filter to be visited.
- Throws:
- RuntimeException- for io exception with writer
 
 - 
visitpublic Object visit(PropertyIsLike filter, Object extraData) Description copied from class:FilterToSQLWrites the SQL for the Like Filter. Assumes the current java implemented wildcards for the Like Filter: . for multi and .? for single. And replaces them with the SQL % and _, respectively.- Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
- Parameters:
- filter- the Like Filter to be visited.
 
 - 
visitpublic Object visit(PropertyIsGreaterThanOrEqualTo filter, Object extraData) Description copied from class:FilterToSQLWrite the SQL for this kind of filter- Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
- Parameters:
- filter- the filter to visit
- extraData- extra data (unused by this method)
 
 - 
visitpublic Object visit(PropertyIsGreaterThan filter, Object extraData) Description copied from class:FilterToSQLWrite the SQL for this kind of filter- Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
- Parameters:
- filter- the filter to visit
- extraData- extra data (unused by this method)
 
 - 
visitpublic Object visit(PropertyIsLessThan filter, Object extraData) Description copied from class:FilterToSQLWrite the SQL for this kind of filter- Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
- Parameters:
- filter- the filter to visit
- extraData- extra data (unused by this method)
 
 - 
visitpublic Object visit(PropertyIsLessThanOrEqualTo filter, Object extraData) Description copied from class:FilterToSQLWrite the SQL for this kind of filter- Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
- Parameters:
- filter- the filter to visit
- extraData- extra data (unused by this method)
 
 - 
visitpublic Object visit(PropertyIsNotEqualTo filter, Object extraData) Description copied from class:FilterToSQLWrite the SQL for this kind of filter- Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
- Parameters:
- filter- the filter to visit
- extraData- extra data (unused by this method)
 
 - 
visitpublic Object visit(PropertyIsNull filter, Object extraData) throws RuntimeException Description copied from class:FilterToSQLWrites the SQL for the Null Filter.- Specified by:
- visitin interface- FilterVisitor
- Overrides:
- visitin class- FilterToSQL
- Parameters:
- filter- the null filter to be written to SQL.
- Throws:
- RuntimeException- for io exception with writer
 
 - 
isNestedFilterpublic static boolean isNestedFilter(Filter filter) A filter is considered nested if it operates on at least one nested attribute.Technically, this means that at least one of the expressions in it is an instance of NestedAttributeExpression.- Parameters:
- filter- the filter to test
- Returns:
- trueif the filter involves at least one nested attribute,- falseotherwise
 
 - 
setSelectClausepublic void setSelectClause(String selectClause) 
 - 
isReplaceOrWithUnionpublic boolean isReplaceOrWithUnion() 
 - 
setReplaceOrWithUnionpublic void setReplaceOrWithUnion(boolean replaceOrWithUnion) 
 
- 
 
-