HHH-14808 SpatialPredicates use value() method for literal expressions
This commit is contained in:
parent
9de428ac1a
commit
b88596df6a
|
@ -20,6 +20,7 @@ import org.geolatte.geom.crs.CoordinateReferenceSystem;
|
||||||
/**
|
/**
|
||||||
* {@link JTSFilterPredicate}, but for geolatte-geom.
|
* {@link JTSFilterPredicate}, but for geolatte-geom.
|
||||||
*/
|
*/
|
||||||
|
//TODO update class to H6
|
||||||
public class GeolatteFilterPredicate {
|
public class GeolatteFilterPredicate {
|
||||||
|
|
||||||
private final Expression<? extends Geometry> geometry;
|
private final Expression<? extends Geometry> geometry;
|
||||||
|
|
|
@ -10,6 +10,7 @@ import javax.persistence.criteria.CriteriaBuilder;
|
||||||
import javax.persistence.criteria.Expression;
|
import javax.persistence.criteria.Expression;
|
||||||
import javax.persistence.criteria.Predicate;
|
import javax.persistence.criteria.Predicate;
|
||||||
|
|
||||||
|
import org.hibernate.query.criteria.HibernateCriteriaBuilder;
|
||||||
import org.hibernate.spatial.SpatialFunction;
|
import org.hibernate.spatial.SpatialFunction;
|
||||||
|
|
||||||
import org.geolatte.geom.Geometry;
|
import org.geolatte.geom.Geometry;
|
||||||
|
@ -28,6 +29,7 @@ import static org.hibernate.spatial.CommonSpatialFunction.ST_WITHIN;
|
||||||
*
|
*
|
||||||
* @author Daniel Shuy
|
* @author Daniel Shuy
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
public class GeolatteSpatialPredicates {
|
public class GeolatteSpatialPredicates {
|
||||||
|
|
||||||
protected GeolatteSpatialPredicates() {
|
protected GeolatteSpatialPredicates() {
|
||||||
|
@ -68,7 +70,8 @@ public class GeolatteSpatialPredicates {
|
||||||
public static Predicate eq(
|
public static Predicate eq(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return eq( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 )
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return eq( cb, geometry1, cb.value( geometry2 )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,7 +109,8 @@ public class GeolatteSpatialPredicates {
|
||||||
public static Predicate within(
|
public static Predicate within(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return within( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 )
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return within( cb, geometry1, cb.value( geometry2 )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +149,8 @@ public class GeolatteSpatialPredicates {
|
||||||
public static Predicate contains(
|
public static Predicate contains(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return contains( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 )
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return contains( cb, geometry1, cb.value( geometry2 )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,8 +189,8 @@ public class GeolatteSpatialPredicates {
|
||||||
public static Predicate crosses(
|
public static Predicate crosses(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return crosses( criteriaBuilder, geometry1,
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
criteriaBuilder.literal( geometry2 )
|
return crosses( cb, geometry1, cb.value( geometry2 )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,7 +228,8 @@ public class GeolatteSpatialPredicates {
|
||||||
public static Predicate disjoint(
|
public static Predicate disjoint(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return disjoint( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 ) );
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return disjoint( cb, geometry1, cb.value( geometry2 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -260,7 +266,8 @@ public class GeolatteSpatialPredicates {
|
||||||
public static Predicate intersects(
|
public static Predicate intersects(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return intersects( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 )
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return intersects( cb, geometry1, cb.value( geometry2 )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -298,7 +305,8 @@ public class GeolatteSpatialPredicates {
|
||||||
public static Predicate overlaps(
|
public static Predicate overlaps(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return overlaps( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 )
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return overlaps( cb, geometry1, cb.value( geometry2 )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -336,7 +344,8 @@ public class GeolatteSpatialPredicates {
|
||||||
public static Predicate touches(
|
public static Predicate touches(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return touches( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 )
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return touches( cb, geometry1, cb.value( geometry2 )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,8 +358,6 @@ public class GeolatteSpatialPredicates {
|
||||||
*
|
*
|
||||||
* @return bounding box overlap predicate
|
* @return bounding box overlap predicate
|
||||||
*
|
*
|
||||||
* @see GeolatteFilterPredicate
|
|
||||||
* @see JTSSpatialPredicates#filter(CriteriaBuilder, Expression, Expression)
|
|
||||||
*/
|
*/
|
||||||
public static Predicate filter(
|
public static Predicate filter(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
|
@ -444,7 +451,8 @@ public class GeolatteSpatialPredicates {
|
||||||
public static Predicate distanceWithin(
|
public static Predicate distanceWithin(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2, Expression<Double> distance) {
|
Geometry geometry2, Expression<Double> distance) {
|
||||||
return distanceWithin( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 ), distance
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return distanceWithin( cb, geometry1, cb.value( geometry2 ), distance
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -463,11 +471,12 @@ public class GeolatteSpatialPredicates {
|
||||||
public static Predicate distanceWithin(
|
public static Predicate distanceWithin(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2, double distance) {
|
Geometry geometry2, double distance) {
|
||||||
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
return distanceWithin(
|
return distanceWithin(
|
||||||
criteriaBuilder,
|
cb,
|
||||||
geometry1,
|
geometry1,
|
||||||
criteriaBuilder.literal( geometry2 ),
|
cb.value( geometry2 ),
|
||||||
criteriaBuilder.literal( distance )
|
cb.value( distance )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -486,7 +495,8 @@ public class GeolatteSpatialPredicates {
|
||||||
public static Predicate distanceWithin(
|
public static Predicate distanceWithin(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Expression<? extends Geometry> geometry2, double distance) {
|
Expression<? extends Geometry> geometry2, double distance) {
|
||||||
return distanceWithin( criteriaBuilder, geometry1, geometry2, criteriaBuilder.literal( distance )
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return distanceWithin( cb, geometry1, geometry2, cb.value( distance )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -524,7 +534,8 @@ public class GeolatteSpatialPredicates {
|
||||||
public static Predicate havingSRID(
|
public static Predicate havingSRID(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry,
|
||||||
int srid) {
|
int srid) {
|
||||||
return havingSRID( criteriaBuilder, geometry, criteriaBuilder.literal( srid ) );
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return havingSRID( cb, geometry, cb.value( srid ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -10,6 +10,7 @@ import javax.persistence.criteria.CriteriaBuilder;
|
||||||
import javax.persistence.criteria.Expression;
|
import javax.persistence.criteria.Expression;
|
||||||
import javax.persistence.criteria.Predicate;
|
import javax.persistence.criteria.Predicate;
|
||||||
|
|
||||||
|
import org.hibernate.query.criteria.HibernateCriteriaBuilder;
|
||||||
import org.hibernate.spatial.SpatialFunction;
|
import org.hibernate.spatial.SpatialFunction;
|
||||||
|
|
||||||
import org.locationtech.jts.geom.Geometry;
|
import org.locationtech.jts.geom.Geometry;
|
||||||
|
@ -65,7 +66,8 @@ public class JTSSpatialPredicates {
|
||||||
public static Predicate eq(
|
public static Predicate eq(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return eq( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 ) );
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return eq( cb, geometry1, cb.value( geometry2 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -100,7 +102,8 @@ public class JTSSpatialPredicates {
|
||||||
public static Predicate within(
|
public static Predicate within(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return within( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 ) );
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return within( cb, geometry1, cb.value( geometry2 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -135,7 +138,8 @@ public class JTSSpatialPredicates {
|
||||||
public static Predicate contains(
|
public static Predicate contains(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return contains( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 ) );
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return contains( cb, geometry1, cb.value( geometry2 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -170,8 +174,9 @@ public class JTSSpatialPredicates {
|
||||||
public static Predicate crosses(
|
public static Predicate crosses(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return crosses( criteriaBuilder, geometry1,
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
criteriaBuilder.literal( geometry2 )
|
return crosses( cb, geometry1,
|
||||||
|
cb.value( geometry2 )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,7 +212,8 @@ public class JTSSpatialPredicates {
|
||||||
public static Predicate disjoint(
|
public static Predicate disjoint(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return disjoint( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 ) );
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return disjoint( cb, geometry1, cb.value( geometry2 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -242,7 +248,8 @@ public class JTSSpatialPredicates {
|
||||||
public static Predicate intersects(
|
public static Predicate intersects(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return intersects( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 )
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return intersects( cb, geometry1, cb.value( geometry2 )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,7 +286,8 @@ public class JTSSpatialPredicates {
|
||||||
public static Predicate overlaps(
|
public static Predicate overlaps(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return overlaps( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 )
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return overlaps( cb, geometry1, cb.value( geometry2 )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -309,13 +317,12 @@ public class JTSSpatialPredicates {
|
||||||
* @param geometry2 geometry value
|
* @param geometry2 geometry value
|
||||||
*
|
*
|
||||||
* @return "spatially touches" predicate
|
* @return "spatially touches" predicate
|
||||||
*
|
|
||||||
* @return "spatially touches" predicate
|
|
||||||
*/
|
*/
|
||||||
public static Predicate touches(
|
public static Predicate touches(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2) {
|
Geometry geometry2) {
|
||||||
return touches( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 ) );
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return touches( cb, geometry1, cb.value( geometry2 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -416,7 +423,8 @@ public class JTSSpatialPredicates {
|
||||||
public static Predicate distanceWithin(
|
public static Predicate distanceWithin(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2, Expression<Double> distance) {
|
Geometry geometry2, Expression<Double> distance) {
|
||||||
return distanceWithin( criteriaBuilder, geometry1, criteriaBuilder.literal( geometry2 ), distance );
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return distanceWithin( cb, geometry1, cb.value( geometry2 ), distance );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -434,11 +442,12 @@ public class JTSSpatialPredicates {
|
||||||
public static Predicate distanceWithin(
|
public static Predicate distanceWithin(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Geometry geometry2, double distance) {
|
Geometry geometry2, double distance) {
|
||||||
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
return distanceWithin(
|
return distanceWithin(
|
||||||
criteriaBuilder,
|
criteriaBuilder,
|
||||||
geometry1,
|
geometry1,
|
||||||
criteriaBuilder.literal( geometry2 ),
|
cb.value( geometry2 ),
|
||||||
criteriaBuilder.literal( distance )
|
cb.value( distance )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -457,7 +466,8 @@ public class JTSSpatialPredicates {
|
||||||
public static Predicate distanceWithin(
|
public static Predicate distanceWithin(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry1,
|
||||||
Expression<? extends Geometry> geometry2, double distance) {
|
Expression<? extends Geometry> geometry2, double distance) {
|
||||||
return distanceWithin( criteriaBuilder, geometry1, geometry2, criteriaBuilder.literal( distance ) );
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return distanceWithin( cb, geometry1, geometry2, cb.value( distance ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -492,7 +502,8 @@ public class JTSSpatialPredicates {
|
||||||
public static Predicate havingSRID(
|
public static Predicate havingSRID(
|
||||||
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry,
|
CriteriaBuilder criteriaBuilder, Expression<? extends Geometry> geometry,
|
||||||
int srid) {
|
int srid) {
|
||||||
return havingSRID( criteriaBuilder, geometry, criteriaBuilder.literal( srid ) );
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) criteriaBuilder;
|
||||||
|
return havingSRID( criteriaBuilder, geometry, cb.value( srid ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -21,13 +21,11 @@ import org.hibernate.spatial.integration.Model;
|
||||||
import org.hibernate.spatial.predicate.GeolatteSpatialPredicates;
|
import org.hibernate.spatial.predicate.GeolatteSpatialPredicates;
|
||||||
import org.hibernate.spatial.predicate.JTSSpatialPredicates;
|
import org.hibernate.spatial.predicate.JTSSpatialPredicates;
|
||||||
import org.hibernate.spatial.testing.HSReflectionUtil;
|
import org.hibernate.spatial.testing.HSReflectionUtil;
|
||||||
import org.hibernate.spatial.testing.IsSupportedBySpatial;
|
|
||||||
import org.hibernate.spatial.testing.SpatialTestBase;
|
import org.hibernate.spatial.testing.SpatialTestBase;
|
||||||
import org.hibernate.spatial.testing.datareader.TestSupport;
|
import org.hibernate.spatial.testing.datareader.TestSupport;
|
||||||
|
import org.hibernate.spatial.testing.dialects.PredicateRegexes;
|
||||||
|
|
||||||
import org.hibernate.testing.jdbc.SQLStatementInspector;
|
import org.hibernate.testing.jdbc.SQLStatementInspector;
|
||||||
import org.hibernate.testing.orm.junit.RequiresDialectFeature;
|
|
||||||
import org.hibernate.testing.orm.junit.SessionFactory;
|
|
||||||
import org.junit.jupiter.api.DynamicTest;
|
import org.junit.jupiter.api.DynamicTest;
|
||||||
import org.junit.jupiter.api.TestFactory;
|
import org.junit.jupiter.api.TestFactory;
|
||||||
import org.junit.jupiter.api.function.Executable;
|
import org.junit.jupiter.api.function.Executable;
|
||||||
|
@ -43,9 +41,7 @@ import static org.geolatte.geom.crs.CoordinateReferenceSystems.WGS84;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||||
@RequiresDialectFeature(feature = IsSupportedBySpatial.class)
|
abstract public class SpatialPredicatesTest extends SpatialTestBase {
|
||||||
@SessionFactory
|
|
||||||
public class GeolatteSpatialPredicatesTest extends SpatialTestBase {
|
|
||||||
|
|
||||||
public final static TestSupport.TestDataPurpose PURPOSE = TestSupport.TestDataPurpose.SpatialFunctionsData;
|
public final static TestSupport.TestDataPurpose PURPOSE = TestSupport.TestDataPurpose.SpatialFunctionsData;
|
||||||
|
|
||||||
|
@ -59,13 +55,15 @@ public class GeolatteSpatialPredicatesTest extends SpatialTestBase {
|
||||||
return PURPOSE;
|
return PURPOSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract public Stream<PredicateRegexes.PredicateRegex> getTestRegexes();
|
||||||
|
|
||||||
@TestFactory
|
@TestFactory
|
||||||
public Stream<DynamicTest> testFactory() {
|
public Stream<DynamicTest> testFactory() {
|
||||||
return
|
return
|
||||||
predicateRegexes.all()
|
getTestRegexes()
|
||||||
.flatMap( entry -> Stream.of(
|
.flatMap( rp -> Stream.of(
|
||||||
new Args( entry.getKey(), entry.getValue(), Model.GLMODEL ),
|
new Args( rp.predicate, rp.regex, Model.GLMODEL ),
|
||||||
new Args( entry.getKey(), entry.getValue(), Model.JTSMODEL )
|
new Args( rp.predicate, rp.regex, Model.JTSMODEL )
|
||||||
) )
|
) )
|
||||||
.map( args -> DynamicTest.dynamicTest(
|
.map( args -> DynamicTest.dynamicTest(
|
||||||
displayName( args ),
|
displayName( args ),
|
||||||
|
@ -92,8 +90,11 @@ public class GeolatteSpatialPredicatesTest extends SpatialTestBase {
|
||||||
String stmt = inspector.getSqlQueries()
|
String stmt = inspector.getSqlQueries()
|
||||||
.get( 0 )
|
.get( 0 )
|
||||||
.toLowerCase( Locale.ROOT );
|
.toLowerCase( Locale.ROOT );
|
||||||
//TODO -- can't we use a (hamcrest) matcher here?
|
|
||||||
assertTrue( stmt.matches( regex ) );
|
assertTrue(
|
||||||
|
stmt.matches( regex ),
|
||||||
|
String.format( Locale.ROOT, "Statement didn't match regex:\n%s\n%s\n", stmt, regex )
|
||||||
|
);
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,4 +152,4 @@ class Args {
|
||||||
this.model = model;
|
this.model = model;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.hibernate.spatial.integration.predicates;
|
||||||
|
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.spatial.testing.IsSupportedBySpatial;
|
||||||
|
import org.hibernate.spatial.testing.dialects.PredicateRegexes;
|
||||||
|
|
||||||
|
import org.hibernate.testing.orm.junit.RequiresDialectFeature;
|
||||||
|
import org.hibernate.testing.orm.junit.ServiceRegistry;
|
||||||
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
|
import org.hibernate.testing.orm.junit.Setting;
|
||||||
|
|
||||||
|
@RequiresDialectFeature(feature = IsSupportedBySpatial.class)
|
||||||
|
@ServiceRegistry(settings = {
|
||||||
|
@Setting(name = AvailableSettings.CRITERIA_VALUE_HANDLING_MODE, value = "BIND")
|
||||||
|
})
|
||||||
|
@SessionFactory
|
||||||
|
public class SpatialPredicatesTestBindingMode extends SpatialPredicatesTest {
|
||||||
|
@Override
|
||||||
|
public Stream<PredicateRegexes.PredicateRegex> getTestRegexes() {
|
||||||
|
return super.predicateRegexes.bindingModeRegexes();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.hibernate.spatial.integration.predicates;
|
||||||
|
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.spatial.testing.IsSupportedBySpatial;
|
||||||
|
import org.hibernate.spatial.testing.dialects.PredicateRegexes;
|
||||||
|
|
||||||
|
import org.hibernate.testing.orm.junit.RequiresDialectFeature;
|
||||||
|
import org.hibernate.testing.orm.junit.ServiceRegistry;
|
||||||
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
|
import org.hibernate.testing.orm.junit.Setting;
|
||||||
|
|
||||||
|
@RequiresDialectFeature(feature = IsSupportedBySpatial.class)
|
||||||
|
@ServiceRegistry(settings = {
|
||||||
|
@Setting(name = AvailableSettings.CRITERIA_VALUE_HANDLING_MODE, value = "INLINE")
|
||||||
|
})
|
||||||
|
@SessionFactory
|
||||||
|
public class SpatialPredicatesTestInlineMode extends SpatialPredicatesTest{
|
||||||
|
@Override
|
||||||
|
public Stream<PredicateRegexes.PredicateRegex> getTestRegexes() {
|
||||||
|
return super.predicateRegexes.inlineModeRegexes();
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,53 +9,93 @@ package org.hibernate.spatial.testing.dialects;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
|
||||||
public class PredicateRegexes {
|
public class PredicateRegexes {
|
||||||
|
|
||||||
protected final Map<String, String> regexes = new HashMap<>();
|
protected final Map<String, RegexPair> regexes = new HashMap<>();
|
||||||
|
|
||||||
// Note that we alias the function invocation so that
|
// Note that we alias the function invocation so that
|
||||||
// we can map the return value to the required type
|
// we can map the return value to the required type
|
||||||
public PredicateRegexes() {
|
public PredicateRegexes() {
|
||||||
regexes.put(
|
add(
|
||||||
"overlaps",
|
"overlaps",
|
||||||
"select .* from .* where st_overlaps\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=\\?.*"
|
"select .* from .* where st_overlaps\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=true.*",
|
||||||
|
"select .* from .* where st_overlaps\\(.*geom\\s*,.s*?\\)\\s*=\\s*?.*"
|
||||||
);
|
);
|
||||||
regexes.put(
|
add(
|
||||||
"intersects",
|
|
||||||
"select .* from .* where st_intersects\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=\\?.*"
|
|
||||||
);
|
|
||||||
regexes.put(
|
|
||||||
"crosses",
|
"crosses",
|
||||||
"select .* from .* where st_crosses\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=\\?.*"
|
"select .* from .* where st_crosses\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=true.*",
|
||||||
|
"select .* from .* where st_crosses\\(.*geom\\s*,.s*?\\)\\s*=\\s*?.*"
|
||||||
|
|
||||||
);
|
);
|
||||||
regexes.put(
|
add(
|
||||||
"contains",
|
"contains",
|
||||||
"select .* from .* where st_contains\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=\\?.*"
|
"select .* from .* where st_contains\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=true.*",
|
||||||
|
"select .* from .* where st_contains\\(.*geom\\s*,.s*?\\)\\s*=\\s*?.*"
|
||||||
);
|
);
|
||||||
regexes.put(
|
add(
|
||||||
"disjoint",
|
"disjoint",
|
||||||
"select .* from .* where st_disjoint\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=\\?.*"
|
"select .* from .* where st_disjoint\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=true.*",
|
||||||
|
"select .* from .* where st_disjoint\\(.*geom\\s*,.s*?\\)\\s*=\\s*?.*"
|
||||||
);
|
);
|
||||||
regexes.put(
|
add(
|
||||||
"touches",
|
"touches",
|
||||||
"select .* from .* where st_touches\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=\\?.*"
|
"select .* from .* where st_touches\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=true.*",
|
||||||
|
"select .* from .* where st_touches\\(.*geom\\s*,.s*?\\)\\s*=\\s*?.*"
|
||||||
);
|
);
|
||||||
regexes.put(
|
add(
|
||||||
"within",
|
"within",
|
||||||
"select .* from .* where st_within\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=\\?.*"
|
"select .* from .* where st_within\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=true.*",
|
||||||
|
"select .* from .* where st_within\\(.*geom\\s*,.s*?\\)\\s*=\\s*?.*"
|
||||||
|
|
||||||
);
|
);
|
||||||
regexes.put(
|
add(
|
||||||
"eq",
|
"eq",
|
||||||
"select .* from .* where st_equals\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=\\?.*"
|
"select .* from .* where st_equals\\(.*geom\\s*,.*st_geomfromewkt\\(.*\\)\\s*=true.*",
|
||||||
|
"select .* from .* where st_equals\\(.*geom\\s*,.s*?\\)\\s*=\\s*?.*"
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Stream<Map.Entry<String, String>> all() {
|
public Stream<PredicateRegex> inlineModeRegexes() {
|
||||||
return this.regexes.entrySet().stream();
|
return extractForMode( entry -> new PredicateRegex( entry.getKey(), entry.getValue().inlineMode ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Stream<PredicateRegex> bindingModeRegexes() {
|
||||||
|
return extractForMode( entry -> new PredicateRegex( entry.getKey(), entry.getValue().bindingMode ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
private Stream<PredicateRegex> extractForMode(Function<Map.Entry<String, RegexPair>, PredicateRegex> mkPredRegex) {
|
||||||
|
return this.regexes
|
||||||
|
.entrySet()
|
||||||
|
.stream()
|
||||||
|
.map( mkPredRegex );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void add(String predicate, String inlineRegex, String bindingRegex) {
|
||||||
|
regexes.put( predicate, new RegexPair( inlineRegex, bindingRegex ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
static public class PredicateRegex {
|
||||||
|
public final String predicate;
|
||||||
|
public final String regex;
|
||||||
|
|
||||||
|
PredicateRegex(String predicate, String regex) {
|
||||||
|
this.predicate = predicate;
|
||||||
|
this.regex = regex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class RegexPair {
|
||||||
|
final String inlineMode;
|
||||||
|
final String bindingMode;
|
||||||
|
|
||||||
|
private RegexPair(String inline, String binding) {
|
||||||
|
inlineMode = inline;
|
||||||
|
bindingMode = binding;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue