public class NestedFilterToSQL extends FilterToSQL
FilterToSQL
decorator capable of encoding filters on nested attributes.
Currently, the filters that can be translated to SQL are:
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 FilterToSQL
instance.
FilterToSQL.FieldEncoder
capabilities, currentDimension, currentGeometry, currentSRID, databaseSchema, encodingFunction, featureType, fieldEncoder, filterFactory, inEncodingEnabled, inline, IO_ERROR, LOGGER, mapper, out, primaryKey
Constructor and Description |
---|
NestedFilterToSQL(FeatureTypeMapping rootMapping,
FilterToSQL original)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
void |
encode(Filter filter)
Performs the encoding, sends the encoded sql to the writer passed in.
|
static boolean |
isNestedFilter(Filter filter)
A filter is considered nested if it operates on at least one nested attribute.
|
boolean |
isReplaceOrWithUnion() |
void |
setReplaceOrWithUnion(boolean replaceOrWithUnion) |
void |
setSelectClause(String selectClause) |
Object |
visit(BBOX filter,
Object extraData) |
Object |
visit(Beyond filter,
Object extraData) |
protected 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"
|
Object |
visit(Contains filter,
Object extraData) |
Object |
visit(Crosses filter,
Object extraData) |
Object |
visit(Disjoint filter,
Object extraData) |
Object |
visit(DWithin filter,
Object extraData) |
Object |
visit(Equals filter,
Object extraData) |
Object |
visit(Intersects filter,
Object extraData) |
Object |
visit(Overlaps filter,
Object extraData) |
Object |
visit(PropertyIsBetween filter,
Object extraData)
Writes the SQL for the PropertyIsBetween Filter.
|
Object |
visit(PropertyIsEqualTo filter,
Object extraData)
Write the SQL for this kind of filter
|
Object |
visit(PropertyIsGreaterThan filter,
Object extraData)
Write the SQL for this kind of filter
|
Object |
visit(PropertyIsGreaterThanOrEqualTo filter,
Object extraData)
Write the SQL for this kind of filter
|
Object |
visit(PropertyIsLessThan filter,
Object extraData)
Write the SQL for this kind of filter
|
Object |
visit(PropertyIsLessThanOrEqualTo filter,
Object extraData)
Write the SQL for this kind of filter
|
Object |
visit(PropertyIsLike filter,
Object extraData)
Writes the SQL for the Like Filter.
|
Object |
visit(PropertyIsNotEqualTo filter,
Object extraData)
Write the SQL for this kind of filter
|
Object |
visit(PropertyIsNull filter,
Object extraData)
Writes the SQL for the Null Filter.
|
Object |
visit(Touches filter,
Object extraData) |
Object |
visit(Within filter,
Object extraData) |
protected Object |
visitNestedFilter(Filter filter,
Object extraData,
String xpath) |
cast, createFilterCapabilities, encode, encodeToString, encodeToString, escapeName, evaluateLiteral, getCapabilities, getDatabaseSchema, getDistanceInMeters, getDistanceInNativeUnits, getExpressionType, getFeatureType, getFIDMapper, getFunctionName, getFunctionReturnType, getParameter, getPrimaryKey, getReferenceGeometryCentroid, isBinaryExpression, isInEncodingEnabled, setCapabilities, setDatabaseSchema, setFeatureType, setFIDMapper, 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, visit, visitBinaryComparisonOperator, visitBinarySpatialOperator, visitBinarySpatialOperator, visitBinarySpatialOperator, visitBinaryTemporalOperator, visitBinaryTemporalOperator, visitBinaryTemporalOperator, visitInFunction, visitLiteralGeometry, visitLiteralTimePeriod, visitNullFilter, writeBinaryExpression, writeBinaryExpressionMember, writeLiteral
public NestedFilterToSQL(FeatureTypeMapping rootMapping, FilterToSQL original)
rootMapping
- the feature type being queriedoriginal
- the wrapped filter-to-SQL encoderpublic void encode(Filter filter) throws FilterToSQLException
FilterToSQL
encode
in class FilterToSQL
filter
- the Filter to be encoded.FilterToSQLException
- If filter type not supported, or if there were io problems.public Object visit(BBOX filter, Object extraData)
visit
in interface FilterVisitor
visit
in class FilterToSQL
public Object visit(Contains filter, Object extraData)
visit
in interface FilterVisitor
visit
in class FilterToSQL
public Object visit(Touches filter, Object extraData)
visit
in interface FilterVisitor
visit
in class FilterToSQL
public Object visit(Intersects filter, Object extraData)
visit
in interface FilterVisitor
visit
in class FilterToSQL
public Object visit(Overlaps filter, Object extraData)
visit
in interface FilterVisitor
visit
in class FilterToSQL
public Object visit(Within filter, Object extraData)
visit
in interface FilterVisitor
visit
in class FilterToSQL
public Object visit(Crosses filter, Object extraData)
visit
in interface FilterVisitor
visit
in class FilterToSQL
public Object visit(Disjoint filter, Object extraData)
visit
in interface FilterVisitor
visit
in class FilterToSQL
public Object visit(Equals filter, Object extraData)
visit
in interface FilterVisitor
visit
in class FilterToSQL
public Object visit(Beyond filter, Object extraData)
visit
in interface FilterVisitor
visit
in class FilterToSQL
protected Object visit(BinaryLogicOperator filter, Object extraData)
visit
in class FilterToSQL
filter
- the logic statement to be turned into SQL.extraData
- extra filter data. Not modified directly by this method.public Object visit(DWithin filter, Object extraData)
visit
in interface FilterVisitor
visit
in class FilterToSQL
public Object visit(PropertyIsEqualTo filter, Object extraData)
FilterToSQL
visit
in interface FilterVisitor
visit
in class FilterToSQL
filter
- the filter to visitextraData
- extra data (unused by this method)public Object visit(PropertyIsBetween filter, Object extraData) throws RuntimeException
FilterToSQL
visit
in interface FilterVisitor
visit
in class FilterToSQL
filter
- the Filter to be visited.RuntimeException
- for io exception with writerpublic Object visit(PropertyIsLike filter, Object extraData)
FilterToSQL
visit
in interface FilterVisitor
visit
in class FilterToSQL
filter
- the Like Filter to be visited.public Object visit(PropertyIsGreaterThanOrEqualTo filter, Object extraData)
FilterToSQL
visit
in interface FilterVisitor
visit
in class FilterToSQL
filter
- the filter to visitextraData
- extra data (unused by this method)public Object visit(PropertyIsGreaterThan filter, Object extraData)
FilterToSQL
visit
in interface FilterVisitor
visit
in class FilterToSQL
filter
- the filter to visitextraData
- extra data (unused by this method)public Object visit(PropertyIsLessThan filter, Object extraData)
FilterToSQL
visit
in interface FilterVisitor
visit
in class FilterToSQL
filter
- the filter to visitextraData
- extra data (unused by this method)public Object visit(PropertyIsLessThanOrEqualTo filter, Object extraData)
FilterToSQL
visit
in interface FilterVisitor
visit
in class FilterToSQL
filter
- the filter to visitextraData
- extra data (unused by this method)public Object visit(PropertyIsNotEqualTo filter, Object extraData)
FilterToSQL
visit
in interface FilterVisitor
visit
in class FilterToSQL
filter
- the filter to visitextraData
- extra data (unused by this method)public Object visit(PropertyIsNull filter, Object extraData) throws RuntimeException
FilterToSQL
visit
in interface FilterVisitor
visit
in class FilterToSQL
filter
- the null filter to be written to SQL.RuntimeException
- for io exception with writerpublic static boolean isNestedFilter(Filter filter)
Technically, this means that at least one of the expressions in it is an instance of
NestedAttributeExpression
.
filter
- the filter to testtrue
if the filter involves at least one nested attribute, false
otherwisepublic void setSelectClause(String selectClause)
public boolean isReplaceOrWithUnion()
public void setReplaceOrWithUnion(boolean replaceOrWithUnion)
Copyright © 1996–2019 Geotools. All rights reserved.