HHH-14906 Fix naming inconsistencies
Also fixes some minor checkstyle violations and removes dead code
This commit is contained in:
parent
65aa8f7a5b
commit
022d2c0a13
|
@ -199,11 +199,11 @@ The dialect `CockroachDB` support the `GEOMETRY` type in CockroachDB v20.2 and l
|
||||||
The `GEOGRAPHY` type is not currently supported.
|
The `GEOGRAPHY` type is not currently supported.
|
||||||
====
|
====
|
||||||
|
|
||||||
GeoDB (H2)::
|
H2GIS::
|
||||||
The `GeoDBDialect` supports the GeoDB a spatial extension of the H2 in-memory database.
|
The `H2DBDialect` supports the H2GIS, a spatial extension of the H2 in-memory database.
|
||||||
[NOTE]
|
[NOTE]
|
||||||
====
|
====
|
||||||
The dialect has been tested with GeoDB version 0.7
|
The dialect has been tested with H2GIS version 1.5
|
||||||
====
|
====
|
||||||
|
|
||||||
DB2::
|
DB2::
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
import org.apache.tools.ant.filters.ReplaceTokens
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
|
@ -14,36 +12,41 @@ apply plugin: 'org.hibernate.matrix-test'
|
||||||
|
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api project(':hibernate-core')
|
api project( ':hibernate-core' )
|
||||||
api libraries.geolatte
|
api libraries.geolatte
|
||||||
|
|
||||||
compileOnly libraries.postgresql
|
compileOnly libraries.postgresql
|
||||||
|
|
||||||
testImplementation project(':hibernate-testing')
|
testImplementation project( ':hibernate-testing' )
|
||||||
testImplementation project(':hibernate-ant')
|
testImplementation project( ':hibernate-ant' )
|
||||||
testImplementation project( path: ':hibernate-core', configuration: 'tests' )
|
testImplementation project( path: ':hibernate-core', configuration: 'tests' )
|
||||||
testImplementation libraries.jakarta_validation
|
testImplementation libraries.jakarta_validation
|
||||||
testImplementation libraries.jandex
|
testImplementation libraries.jandex
|
||||||
testImplementation libraries.classmate
|
testImplementation libraries.classmate
|
||||||
testImplementation libraries.jakarta_validator
|
testImplementation libraries.jakarta_validator
|
||||||
testImplementation libraries.dom4j
|
testImplementation libraries.dom4j
|
||||||
|
|
||||||
testImplementation libraries.postgresql
|
testImplementation libraries.postgresql
|
||||||
testImplementation libraries.h2gis
|
testImplementation libraries.h2gis
|
||||||
|
|
||||||
testRuntimeOnly libraries.jakarta_el
|
testRuntimeOnly libraries.jakarta_el
|
||||||
testRuntimeOnly 'jaxen:jaxen:1.1'
|
testRuntimeOnly 'jaxen:jaxen:1.1'
|
||||||
testRuntimeOnly libraries.byteBuddy
|
testRuntimeOnly libraries.byteBuddy
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets.test.resources {
|
sourceSets.test.resources {
|
||||||
setSrcDirs(['src/test/java', 'src/test/resources'])
|
setSrcDirs( ['src/test/java', 'src/test/resources'] )
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.test {
|
tasks.test {
|
||||||
// for now we cannot run with 'h2' project.db due to compatability issues
|
// for now we cannot run with 'h2' project.db due to compatability issues H2 requires 4.200 but H2GIS 1.5 needs 4.197
|
||||||
// H2 requires 4.200 but H2GIS 1.5 needs 4.197
|
enabled = ['pgsql',
|
||||||
enabled = ['pgsql', 'pgsql_ci', 'cockroachdb', 'mariadb', 'mysql_ci', 'mysql_docker'].contains( project.db )
|
// 'h2', -- for now we cannot run with 'h2'due to compatability issues we needs H2 at 4.200 but H2GIS only works with 4.197
|
||||||
|
// 'pgsql_ci', -- disable running in CI until typing issues are resolved
|
||||||
|
'cockroachdb',
|
||||||
|
'mariadb',
|
||||||
|
// 'mysql_ci',
|
||||||
|
'mysql_docker'].contains( project.db )
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.test.include '**/*'
|
tasks.test.include '**/*'
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.dialect.h2gis;
|
|
||||||
|
|
||||||
import org.hibernate.dialect.H2Dialect;
|
|
||||||
import org.hibernate.spatial.SpatialDialect;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extends the H2Dialect by also including information on spatial functions.
|
|
||||||
*
|
|
||||||
* @author Jan Boonen, Geodan IT b.v.
|
|
||||||
*/
|
|
||||||
public class GeoDBDialect extends H2Dialect implements SpatialDialect {
|
|
||||||
|
|
||||||
}
|
|
|
@ -13,7 +13,6 @@ import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Types;
|
import java.sql.Types;
|
||||||
|
|
||||||
import org.hibernate.spatial.GeolatteGeometryJavaTypeDescriptor;
|
|
||||||
import org.hibernate.spatial.GeometryLiteralFormatter;
|
import org.hibernate.spatial.GeometryLiteralFormatter;
|
||||||
import org.hibernate.type.SqlTypes;
|
import org.hibernate.type.SqlTypes;
|
||||||
import org.hibernate.type.descriptor.ValueBinder;
|
import org.hibernate.type.descriptor.ValueBinder;
|
||||||
|
@ -34,12 +33,12 @@ import org.geolatte.geom.jts.JTS;
|
||||||
*
|
*
|
||||||
* @author Karel Maesen, Geovise BVBA
|
* @author Karel Maesen, Geovise BVBA
|
||||||
*/
|
*/
|
||||||
public class GeoDBGeometryType implements JdbcType {
|
public class H2GISGeometryType implements JdbcType {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An instance of this Descriptor
|
* An instance of this Descriptor
|
||||||
*/
|
*/
|
||||||
public static final GeoDBGeometryType INSTANCE = new GeoDBGeometryType();
|
public static final H2GISGeometryType INSTANCE = new H2GISGeometryType();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getJdbcTypeCode() {
|
public int getJdbcTypeCode() {
|
||||||
|
@ -51,17 +50,11 @@ public class GeoDBGeometryType implements JdbcType {
|
||||||
return SqlTypes.GEOMETRY;
|
return SqlTypes.GEOMETRY;
|
||||||
}
|
}
|
||||||
|
|
||||||
//todo -- simplify as with postgis/mariadb
|
|
||||||
@Override
|
@Override
|
||||||
public <T> JdbcLiteralFormatter<T> getJdbcLiteralFormatter(JavaType<T> javaTypeDescriptor) {
|
public <T> JdbcLiteralFormatter<T> getJdbcLiteralFormatter(JavaType<T> javaTypeDescriptor) {
|
||||||
return new GeometryLiteralFormatter<T>( javaTypeDescriptor, Wkt.Dialect.SFA_1_1_0, "ST_GeomFromText" );
|
return new GeometryLiteralFormatter<T>( javaTypeDescriptor, Wkt.Dialect.SFA_1_1_0, "ST_GeomFromText" );
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> Geometry<?> jts2Gl(T value) {
|
|
||||||
return JTS.from( (org.locationtech.jts.geom.Geometry) value );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <X> ValueBinder<X> getBinder(final JavaType<X> javaTypeDescriptor) {
|
public <X> ValueBinder<X> getBinder(final JavaType<X> javaTypeDescriptor) {
|
||||||
return new BasicBinder<X>( javaTypeDescriptor, this ) {
|
return new BasicBinder<X>( javaTypeDescriptor, this ) {
|
||||||
|
@ -69,14 +62,14 @@ public class GeoDBGeometryType implements JdbcType {
|
||||||
protected void doBind(PreparedStatement st, X value, int index, WrapperOptions options)
|
protected void doBind(PreparedStatement st, X value, int index, WrapperOptions options)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
final Geometry geometry = getJavaTypeDescriptor().unwrap( value, Geometry.class, options );
|
final Geometry geometry = getJavaTypeDescriptor().unwrap( value, Geometry.class, options );
|
||||||
st.setBytes( index, GeoDbWkb.to( geometry ) );
|
st.setBytes( index, H2GISWkb.to( geometry ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doBind(CallableStatement st, X value, String name, WrapperOptions options)
|
protected void doBind(CallableStatement st, X value, String name, WrapperOptions options)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
final Geometry geometry = getJavaTypeDescriptor().unwrap( value, Geometry.class, options );
|
final Geometry geometry = getJavaTypeDescriptor().unwrap( value, Geometry.class, options );
|
||||||
st.setBytes( name, GeoDbWkb.to( geometry ) );
|
st.setBytes( name, H2GISWkb.to( geometry ) );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -87,18 +80,18 @@ public class GeoDBGeometryType implements JdbcType {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected X doExtract(ResultSet rs, int paramIndex, WrapperOptions options) throws SQLException {
|
protected X doExtract(ResultSet rs, int paramIndex, WrapperOptions options) throws SQLException {
|
||||||
return getJavaTypeDescriptor().wrap( GeoDbWkb.from( rs.getObject( paramIndex ) ), options );
|
return getJavaTypeDescriptor().wrap( H2GISWkb.from( rs.getObject( paramIndex ) ), options );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected X doExtract(CallableStatement statement, int index, WrapperOptions options) throws SQLException {
|
protected X doExtract(CallableStatement statement, int index, WrapperOptions options) throws SQLException {
|
||||||
return getJavaTypeDescriptor().wrap( GeoDbWkb.from( statement.getObject( index ) ), options );
|
return getJavaTypeDescriptor().wrap( H2GISWkb.from( statement.getObject( index ) ), options );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected X doExtract(CallableStatement statement, String name, WrapperOptions options)
|
protected X doExtract(CallableStatement statement, String name, WrapperOptions options)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
return getJavaTypeDescriptor().wrap( GeoDbWkb.from( statement.getObject( name ) ), options );
|
return getJavaTypeDescriptor().wrap( H2GISWkb.from( statement.getObject( name ) ), options );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
|
@ -33,21 +33,21 @@ import org.geolatte.geom.crs.CoordinateReferenceSystems;
|
||||||
import org.geolatte.geom.jts.JTS;
|
import org.geolatte.geom.jts.JTS;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A utility class to serialize from/to GeoDB WKB's.
|
* A utility class to serialize from/to H2GIS WKB's.
|
||||||
* <p/>
|
* <p/>
|
||||||
* <p>Note: this utility makes it unnecessary to have a dependency on GeoDB. As long as GeoDB is
|
* <p>Note: this utility makes it unnecessary to have a dependency on GeoDB. As long as GeoDB is
|
||||||
* not available in common maven repositories, such a dependency is to be avoided.</p>
|
* not available in common maven repositories, such a dependency is to be avoided.</p>
|
||||||
*
|
*
|
||||||
* @author Karel Maesen, Geovise BVBA
|
* @author Karel Maesen, Geovise BVBA
|
||||||
*/
|
*/
|
||||||
public class GeoDbWkb {
|
public class H2GISWkb {
|
||||||
|
|
||||||
private static final HSMessageLogger LOGGER = Logger.getMessageLogger(
|
private static final HSMessageLogger LOGGER = Logger.getMessageLogger(
|
||||||
HSMessageLogger.class,
|
HSMessageLogger.class,
|
||||||
GeoDbWkb.class.getName()
|
H2GISWkb.class.getName()
|
||||||
);
|
);
|
||||||
|
|
||||||
private GeoDbWkb() {
|
private H2GISWkb() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -113,6 +113,7 @@ public class GeoDbWkb {
|
||||||
return new Polygon<C2D>( ps, CoordinateReferenceSystems.PROJECTED_2D_METER );
|
return new Polygon<C2D>( ps, CoordinateReferenceSystems.PROJECTED_2D_METER );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//todo This type of function really belongs in a general helper class
|
||||||
private static ByteBuffer toByteBuffer(Blob blob) {
|
private static ByteBuffer toByteBuffer(Blob blob) {
|
||||||
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
final byte[] buf = new byte[1024];
|
final byte[] buf = new byte[1024];
|
|
@ -14,8 +14,8 @@ import org.hibernate.service.ServiceRegistry;
|
||||||
import org.hibernate.spatial.GeolatteGeometryType;
|
import org.hibernate.spatial.GeolatteGeometryType;
|
||||||
import org.hibernate.spatial.HSMessageLogger;
|
import org.hibernate.spatial.HSMessageLogger;
|
||||||
import org.hibernate.spatial.JTSGeometryType;
|
import org.hibernate.spatial.JTSGeometryType;
|
||||||
|
import org.hibernate.spatial.KeyedSqmFunctionDescriptors;
|
||||||
import org.hibernate.spatial.contributor.ContributorImplementor;
|
import org.hibernate.spatial.contributor.ContributorImplementor;
|
||||||
import org.hibernate.spatial.dialect.postgis.PGGeometryType;
|
|
||||||
import org.hibernate.spatial.dialect.postgis.PostgisSqmFunctionDescriptors;
|
import org.hibernate.spatial.dialect.postgis.PostgisSqmFunctionDescriptors;
|
||||||
|
|
||||||
public class H2GisDialectContributor implements ContributorImplementor {
|
public class H2GisDialectContributor implements ContributorImplementor {
|
||||||
|
@ -28,16 +28,16 @@ public class H2GisDialectContributor implements ContributorImplementor {
|
||||||
|
|
||||||
public void contributeTypes(TypeContributions typeContributions) {
|
public void contributeTypes(TypeContributions typeContributions) {
|
||||||
HSMessageLogger.LOGGER.typeContributions( this.getClass().getCanonicalName() );
|
HSMessageLogger.LOGGER.typeContributions( this.getClass().getCanonicalName() );
|
||||||
typeContributions.contributeType( new GeolatteGeometryType( GeoDBGeometryType.INSTANCE ) );
|
typeContributions.contributeType( new GeolatteGeometryType( H2GISGeometryType.INSTANCE ) );
|
||||||
typeContributions.contributeType( new JTSGeometryType( GeoDBGeometryType.INSTANCE ) );
|
typeContributions.contributeType( new JTSGeometryType( H2GISGeometryType.INSTANCE ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void contributeFunctions(FunctionContributions functionContributions) {
|
public void contributeFunctions(FunctionContributions functionContributions) {
|
||||||
HSMessageLogger.LOGGER.functionContributions( this.getClass().getCanonicalName() );
|
HSMessageLogger.LOGGER.functionContributions( this.getClass().getCanonicalName() );
|
||||||
final PostgisSqmFunctionDescriptors postgisFunctions = new PostgisSqmFunctionDescriptors( functionContributions );
|
final KeyedSqmFunctionDescriptors functions = new H2SqmFunctionDescriptors( functionContributions );
|
||||||
final SqmFunctionRegistry functionRegistry = functionContributions.getFunctionRegistry();
|
final SqmFunctionRegistry functionRegistry = functionContributions.getFunctionRegistry();
|
||||||
postgisFunctions.asMap().forEach( (key, desc) -> {
|
functions.asMap().forEach( (key, desc) -> {
|
||||||
functionRegistry.register( key.getName(), desc );
|
functionRegistry.register( key.getName(), desc );
|
||||||
key.getAltName().ifPresent( altName -> functionRegistry.registerAlternateKey( altName, key.getName() ) );
|
key.getAltName().ifPresent( altName -> functionRegistry.registerAlternateKey( altName, key.getName() ) );
|
||||||
} );
|
} );
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
/*
|
||||||
|
* 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.dialect.h2gis;
|
||||||
|
|
||||||
|
import org.hibernate.boot.model.FunctionContributions;
|
||||||
|
import org.hibernate.spatial.BaseSqmFunctionDescriptors;
|
||||||
|
|
||||||
|
public class H2SqmFunctionDescriptors extends BaseSqmFunctionDescriptors {
|
||||||
|
public H2SqmFunctionDescriptors(FunctionContributions contributions) {
|
||||||
|
super( contributions );
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,10 +10,10 @@
|
||||||
<head></head>
|
<head></head>
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
This package contains the H2 Dialect extensions for the GeoDB dialect.
|
This package contains the H2GIS Dialect extensions for the H2Dialect.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
For more information on GeoDB, see <a href="https://github.com/jdeolive/geodb">https://github.com/jdeolive/geodb</a>.
|
For more information on H2GIS, see <a href="http://www.h2gis.org/">the H2GIS website</a>.
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -22,6 +22,7 @@ import org.hibernate.spatial.SpatialDialect;
|
||||||
* Rectangles (MBR's). This dialect my therefore produce different results than the other MySQL spatial dialects.
|
* Rectangles (MBR's). This dialect my therefore produce different results than the other MySQL spatial dialects.
|
||||||
*
|
*
|
||||||
* @author Karel Maesen
|
* @author Karel Maesen
|
||||||
|
* @deprecated Spatial Dialects are no longer needed
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public class MySQL56SpatialDialect extends MySQL55Dialect implements SpatialDialect {
|
public class MySQL56SpatialDialect extends MySQL55Dialect implements SpatialDialect {
|
||||||
|
|
|
@ -13,6 +13,7 @@ import org.hibernate.spatial.SpatialDialect;
|
||||||
* A Dialect for MySQL 5 using InnoDB engine, with support for its spatial features
|
* A Dialect for MySQL 5 using InnoDB engine, with support for its spatial features
|
||||||
*
|
*
|
||||||
* @author Karel Maesen, Geovise BVBA
|
* @author Karel Maesen, Geovise BVBA
|
||||||
|
* @deprecated Spatial Dialects are no longer needed
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public class MySQL5SpatialDialect extends MySQL5Dialect implements SpatialDialect {
|
public class MySQL5SpatialDialect extends MySQL5Dialect implements SpatialDialect {
|
||||||
|
|
|
@ -13,6 +13,7 @@ import org.hibernate.spatial.SpatialDialect;
|
||||||
* A Dialect for MySQL with support for its spatial features
|
* A Dialect for MySQL with support for its spatial features
|
||||||
*
|
*
|
||||||
* @author Karel Maesen, Boni Gopalan
|
* @author Karel Maesen, Boni Gopalan
|
||||||
|
* @deprecated SpatialDialects are no longer needed in Hibernate 6
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public class MySQLSpatialDialect extends MySQLDialect implements SpatialDialect {
|
public class MySQLSpatialDialect extends MySQLDialect implements SpatialDialect {
|
||||||
|
|
|
@ -1,94 +0,0 @@
|
||||||
/*
|
|
||||||
* 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>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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.testing;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.function.Function;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.hibernate.mapping.PersistentClass;
|
|
||||||
import org.hibernate.spatial.integration.SpatialTestDataProvider;
|
|
||||||
import org.hibernate.spatial.testing.domain.GeomEntity;
|
|
||||||
import org.hibernate.spatial.testing.domain.JtsGeomEntity;
|
|
||||||
import org.hibernate.spatial.testing.domain.SpatialDomainModel;
|
|
||||||
|
|
||||||
import org.hibernate.testing.orm.junit.DomainModel;
|
|
||||||
import org.hibernate.testing.orm.junit.SessionFactory;
|
|
||||||
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
|
||||||
import org.hibernate.testing.orm.junit.SessionFactoryScopeAware;
|
|
||||||
import org.junit.jupiter.api.AfterEach;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.params.ParameterizedTest;
|
|
||||||
import org.junit.jupiter.params.provider.ValueSource;
|
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
|
|
||||||
@SuppressWarnings("ALL")
|
|
||||||
@DomainModel(modelDescriptorClasses = SpatialDomainModel.class)
|
|
||||||
@SessionFactory
|
|
||||||
public abstract class BaseSpatialFunctionTestCase extends SpatialTestDataProvider
|
|
||||||
implements SessionFactoryScopeAware {
|
|
||||||
|
|
||||||
private SessionFactoryScope scope;
|
|
||||||
List received;
|
|
||||||
List expected;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void injectSessionFactoryScope(SessionFactoryScope scope) {
|
|
||||||
this.scope = scope;
|
|
||||||
}
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
public void beforeEach() {
|
|
||||||
scope.inTransaction( session -> super.entities( JtsGeomEntity.class ).forEach( session::save ) );
|
|
||||||
scope.inTransaction( session -> super.entities( GeomEntity.class ).forEach( session::save ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
@AfterEach
|
|
||||||
public void cleanup() {
|
|
||||||
scope.inTransaction( session -> session.createQuery( "delete from GeomEntity" ).executeUpdate() );
|
|
||||||
scope.inTransaction( session -> session.createQuery( "delete from JtsGeomEntity" ).executeUpdate() );
|
|
||||||
}
|
|
||||||
|
|
||||||
@ParameterizedTest
|
|
||||||
@ValueSource(classes = { GeomEntity.class, JtsGeomEntity.class })
|
|
||||||
public void testFunction(Class entityClass) {
|
|
||||||
PersistentClass geomEntity = scope.getMetadataImplementor().getEntityBinding( entityClass.getCanonicalName() );
|
|
||||||
String table = geomEntity.getTable().getName();
|
|
||||||
scope.inSession( session -> {
|
|
||||||
expected = (List) session.createNativeQuery(
|
|
||||||
sqlTemplate().mkNativeSQLString( table ) )
|
|
||||||
.getResultList()
|
|
||||||
.stream().map( mapper() )
|
|
||||||
.collect( Collectors.toList() );
|
|
||||||
} );
|
|
||||||
|
|
||||||
scope.inSession( session -> {
|
|
||||||
received = (List) session.createQuery( jqlQueryTemplate().mkHQLString( entityClass.getCanonicalName() ) )
|
|
||||||
.getResultList()
|
|
||||||
.stream()
|
|
||||||
.map( mapper() )
|
|
||||||
.collect( Collectors.toList() );
|
|
||||||
} );
|
|
||||||
assertEquals( expected, received );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract HQLTemplate jqlQueryTemplate();
|
|
||||||
|
|
||||||
protected abstract NativeSQLTemplate sqlTemplate();
|
|
||||||
|
|
||||||
protected abstract Function<Object, Object> mapper();
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.testing;
|
|
||||||
|
|
||||||
import org.geolatte.geom.Geometry;
|
|
||||||
import org.geolatte.geom.GeometryPositionEquality;
|
|
||||||
import org.geolatte.geom.Position;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by Karel Maesen, Geovise BVBA on 15/02/2018.
|
|
||||||
*/
|
|
||||||
public class GeolatteGeometryEquality<P extends Position> implements GeometryEquality<Geometry<P>> {
|
|
||||||
|
|
||||||
private final org.geolatte.geom.GeometryEquality delegate;
|
|
||||||
|
|
||||||
public GeolatteGeometryEquality() {
|
|
||||||
this( new GeometryPositionEquality() );
|
|
||||||
}
|
|
||||||
|
|
||||||
public GeolatteGeometryEquality(org.geolatte.geom.GeometryEquality delegate) {
|
|
||||||
this.delegate = delegate;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean test(Geometry<P> geom1, Geometry<P> geom2) {
|
|
||||||
return delegate.equals( geom1, geom2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -48,15 +48,7 @@ abstract public class SpatialTestBase
|
||||||
.getFunctions()
|
.getFunctions()
|
||||||
.keySet();
|
.keySet();
|
||||||
if ( DialectContext.getDialect() instanceof H2Dialect ) {
|
if ( DialectContext.getDialect() instanceof H2Dialect ) {
|
||||||
this.scope.inSession( session -> {
|
initH2GISExtensionsForInMemDb();
|
||||||
try {
|
|
||||||
Connection cn = session.getJdbcConnectionAccess().obtainConnection();
|
|
||||||
H2GISFunctions.load( cn );
|
|
||||||
}
|
|
||||||
catch (SQLException e) {
|
|
||||||
throw new RuntimeException( e );
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,4 +76,17 @@ abstract public class SpatialTestBase
|
||||||
return supportedFunctions.contains( function.name() );
|
return supportedFunctions.contains( function.name() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void initH2GISExtensionsForInMemDb() {
|
||||||
|
this.scope.inSession( session -> {
|
||||||
|
try {
|
||||||
|
Connection cn = session.getJdbcConnectionAccess().obtainConnection();
|
||||||
|
H2GISFunctions.load( cn );
|
||||||
|
}
|
||||||
|
catch (SQLException e) {
|
||||||
|
throw new RuntimeException( e );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ import org.hibernate.dialect.PostgreSQLDialect;
|
||||||
import org.hibernate.spatial.testing.datareader.TestSupport;
|
import org.hibernate.spatial.testing.datareader.TestSupport;
|
||||||
import org.hibernate.spatial.testing.dialects.cockroachdb.CockroachDBTestSupport;
|
import org.hibernate.spatial.testing.dialects.cockroachdb.CockroachDBTestSupport;
|
||||||
import org.hibernate.spatial.testing.dialects.db2.DB2TestSupport;
|
import org.hibernate.spatial.testing.dialects.db2.DB2TestSupport;
|
||||||
import org.hibernate.spatial.testing.dialects.h2geodb.H2GisTestSupport;
|
import org.hibernate.spatial.testing.dialects.h2gis.H2GisTestSupport;
|
||||||
import org.hibernate.spatial.testing.dialects.hana.HANATestSupport;
|
import org.hibernate.spatial.testing.dialects.hana.HANATestSupport;
|
||||||
import org.hibernate.spatial.testing.dialects.mariadb.MariaDBTestSupport;
|
import org.hibernate.spatial.testing.dialects.mariadb.MariaDBTestSupport;
|
||||||
import org.hibernate.spatial.testing.dialects.mysql.MySQL56TestSupport;
|
import org.hibernate.spatial.testing.dialects.mysql.MySQL56TestSupport;
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.testing;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Karel Maesen, Geovise BVBA
|
|
||||||
* creation-date: 1/24/13
|
|
||||||
*/
|
|
||||||
public class WktUtility {
|
|
||||||
|
|
||||||
static public int getSRID(String wkt) {
|
|
||||||
String[] tokens = wkt.split( ";" );
|
|
||||||
if ( tokens.length == 1 ) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
String[] sridTokens = tokens[0].split( "=" );
|
|
||||||
if ( sridTokens.length < 2 ) {
|
|
||||||
throw new IllegalArgumentException( "Can't parse " + wkt );
|
|
||||||
}
|
|
||||||
return Integer.parseInt( sridTokens[1] );
|
|
||||||
}
|
|
||||||
|
|
||||||
static public String getWkt(String wkt) {
|
|
||||||
String[] tokens = wkt.split( ";" );
|
|
||||||
if ( tokens.length > 1 ) {
|
|
||||||
return tokens[1];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return wkt;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -9,7 +9,7 @@ package org.hibernate.spatial.testing.converter;
|
||||||
import jakarta.persistence.AttributeConverter;
|
import jakarta.persistence.AttributeConverter;
|
||||||
import jakarta.persistence.Converter;
|
import jakarta.persistence.Converter;
|
||||||
|
|
||||||
import org.hibernate.spatial.dialect.h2gis.GeoDbWkb;
|
import org.hibernate.spatial.dialect.h2gis.H2GISWkb;
|
||||||
|
|
||||||
import org.geolatte.geom.Geometry;
|
import org.geolatte.geom.Geometry;
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ public class GeometryConverter implements AttributeConverter<Geometry, byte[]> {
|
||||||
if ( attribute == null ) {
|
if ( attribute == null ) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return GeoDbWkb.to( attribute );
|
return H2GISWkb.to( attribute );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -31,6 +31,6 @@ public class GeometryConverter implements AttributeConverter<Geometry, byte[]> {
|
||||||
if ( dbData == null ) {
|
if ( dbData == null ) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return GeoDbWkb.from( dbData );
|
return H2GISWkb.from( dbData );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,17 +11,16 @@ import org.hibernate.boot.registry.StandardServiceRegistry;
|
||||||
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||||
import org.hibernate.boot.spi.MetadataBuilderImplementor;
|
import org.hibernate.boot.spi.MetadataBuilderImplementor;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.dialect.H2Dialect;
|
||||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||||
import org.hibernate.metamodel.model.convert.spi.JpaAttributeConverter;
|
import org.hibernate.metamodel.model.convert.spi.JpaAttributeConverter;
|
||||||
import org.hibernate.persister.entity.EntityPersister;
|
import org.hibernate.persister.entity.EntityPersister;
|
||||||
import org.hibernate.spatial.GeolatteGeometryJavaTypeDescriptor;
|
import org.hibernate.spatial.GeolatteGeometryJavaTypeDescriptor;
|
||||||
import org.hibernate.spatial.dialect.h2gis.GeoDBDialect;
|
|
||||||
import org.hibernate.tool.schema.Action;
|
import org.hibernate.tool.schema.Action;
|
||||||
import org.hibernate.type.descriptor.converter.AttributeConverterTypeAdapter;
|
import org.hibernate.type.descriptor.converter.AttributeConverterTypeAdapter;
|
||||||
import org.hibernate.type.spi.TypeConfiguration;
|
import org.hibernate.type.spi.TypeConfiguration;
|
||||||
|
|
||||||
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
||||||
import org.junit.Ignore;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import org.geolatte.geom.Geometry;
|
import org.geolatte.geom.Geometry;
|
||||||
|
@ -33,13 +32,12 @@ import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping;
|
||||||
/**
|
/**
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
@Ignore
|
|
||||||
public class GeometryConverterTest extends BaseUnitTestCase {
|
public class GeometryConverterTest extends BaseUnitTestCase {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testConverterUsage() {
|
public void testConverterUsage() {
|
||||||
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
|
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
|
||||||
.applySetting( AvailableSettings.DIALECT, GeoDBDialect.class )
|
.applySetting( AvailableSettings.DIALECT, H2Dialect.class )
|
||||||
.applySetting( AvailableSettings.HBM2DDL_AUTO, Action.CREATE_DROP )
|
.applySetting( AvailableSettings.HBM2DDL_AUTO, Action.CREATE_DROP )
|
||||||
.build()) {
|
.build()) {
|
||||||
final MetadataSources metadataSources = new MetadataSources( ssr )
|
final MetadataSources metadataSources = new MetadataSources( ssr )
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.testing.dialects.h2geodb;
|
|
||||||
|
|
||||||
import org.hibernate.spatial.testing.JTSGeometryEquality;
|
|
||||||
|
|
||||||
import org.locationtech.jts.geom.Coordinate;
|
|
||||||
import org.locationtech.jts.geom.Geometry;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extends the test for {@link Geometry} equality, because GeoDB uses JTS
|
|
||||||
* Geometry objects, which cannot be cast to {@link org.hibernate.spatial.jts.mgeom.MGeometry} objects.
|
|
||||||
*
|
|
||||||
* @author Jan Boonen, Geodan IT b.v.
|
|
||||||
* @deprecated This should no longer be necesseary
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public class GeoDBGeometryEquality extends JTSGeometryEquality {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean test(Geometry geom1, Geometry geom2) {
|
|
||||||
if ( geom1 != null && geom1.isEmpty() ) {
|
|
||||||
return geom2 == null || geom2.isEmpty();
|
|
||||||
}
|
|
||||||
return super.test( geom1, geom2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean testSimpleGeometryEquality(Geometry geom1, Geometry geom2) {
|
|
||||||
return testVerticesEquality( geom1, geom2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean testVerticesEquality(Geometry geom1, Geometry geom2) {
|
|
||||||
if ( geom1.getNumPoints() != geom2.getNumPoints() ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
for ( int i = 0; i < geom1.getNumPoints(); i++ ) {
|
|
||||||
Coordinate cn1 = geom1.getCoordinates()[i];
|
|
||||||
Coordinate cn2 = geom2.getCoordinates()[i];
|
|
||||||
if ( !cn1.equals2D( cn2 ) ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -8,9 +8,9 @@
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package org.hibernate.spatial.testing.dialects.h2geodb;
|
package org.hibernate.spatial.testing.dialects.h2gis;
|
||||||
|
|
||||||
import org.hibernate.spatial.dialect.h2gis.GeoDbWkb;
|
import org.hibernate.spatial.dialect.h2gis.H2GISWkb;
|
||||||
import org.hibernate.spatial.testing.AbstractExpectationsFactory;
|
import org.hibernate.spatial.testing.AbstractExpectationsFactory;
|
||||||
import org.hibernate.spatial.testing.NativeSQLStatement;
|
import org.hibernate.spatial.testing.NativeSQLStatement;
|
||||||
|
|
||||||
|
@ -25,9 +25,9 @@ import org.locationtech.jts.geom.Point;
|
||||||
*
|
*
|
||||||
* @Author Jan Boonen, Geodan IT b.v.
|
* @Author Jan Boonen, Geodan IT b.v.
|
||||||
*/
|
*/
|
||||||
public class GeoDBExpectationsFactory extends AbstractExpectationsFactory {
|
public class H2GISExpectationsFactory extends AbstractExpectationsFactory {
|
||||||
|
|
||||||
public GeoDBExpectationsFactory() {
|
public H2GISExpectationsFactory() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,7 +356,7 @@ public class GeoDBExpectationsFactory extends AbstractExpectationsFactory {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Geometry decode(Object o) {
|
protected Geometry decode(Object o) {
|
||||||
return JTS.to( GeoDbWkb.from( o ) );
|
return JTS.to( H2GISWkb.from( o ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -5,15 +5,14 @@
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.hibernate.spatial.testing.dialects.h2geodb;
|
package org.hibernate.spatial.testing.dialects.h2gis;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.spatial.CommonSpatialFunction;
|
import org.hibernate.spatial.CommonSpatialFunction;
|
||||||
import org.hibernate.spatial.GeomCodec;
|
import org.hibernate.spatial.GeomCodec;
|
||||||
import org.hibernate.spatial.dialect.h2gis.GeoDbWkb;
|
import org.hibernate.spatial.dialect.h2gis.H2GISWkb;
|
||||||
import org.hibernate.spatial.testing.AbstractExpectationsFactory;
|
import org.hibernate.spatial.testing.AbstractExpectationsFactory;
|
||||||
import org.hibernate.spatial.testing.JTSGeometryEquality;
|
|
||||||
import org.hibernate.spatial.testing.datareader.TestData;
|
import org.hibernate.spatial.testing.datareader.TestData;
|
||||||
import org.hibernate.spatial.testing.datareader.TestSupport;
|
import org.hibernate.spatial.testing.datareader.TestSupport;
|
||||||
import org.hibernate.spatial.testing.dialects.NativeSQLTemplates;
|
import org.hibernate.spatial.testing.dialects.NativeSQLTemplates;
|
||||||
|
@ -29,15 +28,11 @@ public class H2GisTestSupport extends TestSupport {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TestData createTestData(TestDataPurpose purpose) {
|
public TestData createTestData(TestDataPurpose purpose) {
|
||||||
return TestData.fromFile( "h2gis/test-geodb-data-set.xml" );
|
return TestData.fromFile( "h2gis/test-data-set.xml" );
|
||||||
}
|
|
||||||
|
|
||||||
public JTSGeometryEquality createGeometryEquality() {
|
|
||||||
return new GeoDBGeometryEquality();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractExpectationsFactory createExpectationsFactory() {
|
public AbstractExpectationsFactory createExpectationsFactory() {
|
||||||
return new GeoDBExpectationsFactory();
|
return new H2GISExpectationsFactory();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -47,7 +42,7 @@ public class H2GisTestSupport extends TestSupport {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PredicateRegexes predicateRegexes() {
|
public PredicateRegexes predicateRegexes() {
|
||||||
return new PredicateRegexes("st_geomfromtext");
|
return new PredicateRegexes( "st_geomfromtext" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -60,7 +55,7 @@ public class H2GisTestSupport extends TestSupport {
|
||||||
return new GeomCodec() {
|
return new GeomCodec() {
|
||||||
@Override
|
@Override
|
||||||
public Geometry<?> toGeometry(Object in) {
|
public Geometry<?> toGeometry(Object in) {
|
||||||
return GeoDbWkb.from( in );
|
return H2GISWkb.from( in );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
Loading…
Reference in New Issue