From 2deee38103fdb12dcc09f0fe63a98ae6e9d8f541 Mon Sep 17 00:00:00 2001 From: Karel Maesen Date: Wed, 3 Nov 2021 20:26:07 +0100 Subject: [PATCH] HHH-14906 Support for H2GIS Notice that the tests cannot be run from the gradlew cli due to compatability issues with the H2 version --- gradle/libraries.gradle | 1 + hibernate-spatial/hibernate-spatial.gradle | 6 +- .../contributor/ContributorResolver.java | 4 +- .../{h2geodb => h2gis}/GeoDBDialect.java | 2 +- .../{h2geodb => h2gis}/GeoDBGeometryType.java | 30 ++++++++- .../dialect/{h2geodb => h2gis}/GeoDbWkb.java | 2 +- .../h2gis/H2GisDialectContributor.java | 51 ++++++++++++++ .../dialect/{h2geodb => h2gis}/package.html | 0 .../integration/StoreAndRetrieveTests.java | 2 +- .../spatial/testing/IsSupportedBySpatial.java | 7 +- .../spatial/testing/SpatialTestBase.java | 18 ++++- .../spatial/testing/TestSupportFactories.java | 13 ++-- .../testing/converter/GeometryConverter.java | 2 +- .../converter/GeometryConverterTest.java | 2 +- .../h2geodb/GeoDBExpectationsFactory.java | 2 +- .../dialects/h2geodb/GeoDBTestSupport.java | 34 ---------- .../dialects/h2geodb/H2GisTestSupport.java | 67 +++++++++++++++++++ .../test-geodb-data-set.xml | 0 18 files changed, 189 insertions(+), 54 deletions(-) rename hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/{h2geodb => h2gis}/GeoDBDialect.java (91%) rename hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/{h2geodb => h2gis}/GeoDBGeometryType.java (74%) rename hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/{h2geodb => h2gis}/GeoDbWkb.java (98%) create mode 100644 hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/H2GisDialectContributor.java rename hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/{h2geodb => h2gis}/package.html (100%) delete mode 100644 hibernate-spatial/src/test/java/org/hibernate/spatial/testing/dialects/h2geodb/GeoDBTestSupport.java create mode 100644 hibernate-spatial/src/test/java/org/hibernate/spatial/testing/dialects/h2geodb/H2GisTestSupport.java rename hibernate-spatial/src/test/resources/{h2geodb => h2gis}/test-geodb-data-set.xml (100%) diff --git a/gradle/libraries.gradle b/gradle/libraries.gradle index ab46c1c45a..7bd5a60ce0 100644 --- a/gradle/libraries.gradle +++ b/gradle/libraries.gradle @@ -151,6 +151,7 @@ ext { byteman_install: "org.jboss.byteman:byteman-install:${bytemanVersion}", byteman_bmunit: "org.jboss.byteman:byteman-bmunit:${bytemanVersion}", h2: "com.h2database:h2:${h2Version}", + h2gis: "org.orbisgis:h2gis:1.5.0", hsqldb: "org.hsqldb:hsqldb:2.3.6", derby: "org.apache.derby:derby:10.14.2.0", postgresql: 'org.postgresql:postgresql:42.2.16', diff --git a/hibernate-spatial/hibernate-spatial.gradle b/hibernate-spatial/hibernate-spatial.gradle index 66136850ff..b4a8394c13 100644 --- a/hibernate-spatial/hibernate-spatial.gradle +++ b/hibernate-spatial/hibernate-spatial.gradle @@ -22,7 +22,6 @@ dependencies { testImplementation project(':hibernate-testing') testImplementation project(':hibernate-ant') testImplementation project( path: ':hibernate-core', configuration: 'tests' ) - testImplementation libraries.jakarta_validation testImplementation libraries.jandex testImplementation libraries.classmate @@ -30,6 +29,7 @@ dependencies { testImplementation libraries.dom4j testImplementation libraries.postgresql + testImplementation libraries.h2gis testRuntimeOnly libraries.jakarta_el testRuntimeOnly 'jaxen:jaxen:1.1' @@ -41,7 +41,9 @@ sourceSets.test.resources { } tasks.test { - enabled = ['pgsql', 'cockroachdb', 'mariadb', 'mysql_docker', 'mysql_docker'].contains( project.db ) + // for now we cannot run with 'h2' project.db due to compatability issues + // H2 requires 4.200 but H2GIS 1.5 needs 4.197 + enabled = ['pgsql', 'pgsql_ci', 'cockroachdb', 'mariadb', 'mysql_docker', 'mysql_docker'].contains( project.db ) } tasks.test.include '**/*' diff --git a/hibernate-spatial/src/main/java/org/hibernate/spatial/contributor/ContributorResolver.java b/hibernate-spatial/src/main/java/org/hibernate/spatial/contributor/ContributorResolver.java index f6e923e289..aca8b0f974 100644 --- a/hibernate-spatial/src/main/java/org/hibernate/spatial/contributor/ContributorResolver.java +++ b/hibernate-spatial/src/main/java/org/hibernate/spatial/contributor/ContributorResolver.java @@ -13,12 +13,14 @@ import java.util.function.Function; import org.hibernate.dialect.CockroachDialect; import org.hibernate.dialect.Dialect; +import org.hibernate.dialect.H2Dialect; import org.hibernate.dialect.MariaDBDialect; import org.hibernate.dialect.MySQLDialect; import org.hibernate.dialect.PostgreSQLDialect; import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.service.ServiceRegistry; import org.hibernate.spatial.dialect.cockroachdb.CockroachDbContributor; +import org.hibernate.spatial.dialect.h2gis.H2GisDialectContributor; import org.hibernate.spatial.dialect.mariadb.MariaDBDialectContributor; import org.hibernate.spatial.dialect.mysql.MySQLDialectContributor; import org.hibernate.spatial.dialect.postgis.PostgisDialectContributor; @@ -28,13 +30,13 @@ class ContributorResolver { private final static Map, Function> CONTRIBUTOR_MAP = new HashMap<>(); - static { //TypeContributorImplementor CONTRIBUTOR_MAP.put( PostgreSQLDialect.class, PostgisDialectContributor::new ); CONTRIBUTOR_MAP.put( CockroachDialect.class, CockroachDbContributor::new ); CONTRIBUTOR_MAP.put( MariaDBDialect.class, MariaDBDialectContributor::new ); CONTRIBUTOR_MAP.put( MySQLDialect.class, MySQLDialectContributor::new ); + CONTRIBUTOR_MAP.put( H2Dialect.class, H2GisDialectContributor::new ); } private ContributorResolver() { diff --git a/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2geodb/GeoDBDialect.java b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/GeoDBDialect.java similarity index 91% rename from hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2geodb/GeoDBDialect.java rename to hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/GeoDBDialect.java index 6a75637746..99fbc72604 100644 --- a/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2geodb/GeoDBDialect.java +++ b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/GeoDBDialect.java @@ -5,7 +5,7 @@ * See the lgpl.txt file in the root directory or . */ -package org.hibernate.spatial.dialect.h2geodb; +package org.hibernate.spatial.dialect.h2gis; import org.hibernate.dialect.H2Dialect; import org.hibernate.spatial.SpatialDialect; diff --git a/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2geodb/GeoDBGeometryType.java b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/GeoDBGeometryType.java similarity index 74% rename from hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2geodb/GeoDBGeometryType.java rename to hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/GeoDBGeometryType.java index 28c0444747..c345d086cb 100644 --- a/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2geodb/GeoDBGeometryType.java +++ b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/GeoDBGeometryType.java @@ -5,7 +5,7 @@ * See the lgpl.txt file in the root directory or . */ -package org.hibernate.spatial.dialect.h2geodb; +package org.hibernate.spatial.dialect.h2gis; import java.sql.CallableStatement; import java.sql.PreparedStatement; @@ -13,6 +13,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; +import org.hibernate.spatial.GeolatteGeometryJavaTypeDescriptor; import org.hibernate.type.SqlTypes; import org.hibernate.type.descriptor.ValueBinder; import org.hibernate.type.descriptor.ValueExtractor; @@ -20,9 +21,12 @@ import org.hibernate.type.descriptor.WrapperOptions; import org.hibernate.type.descriptor.java.JavaType; import org.hibernate.type.descriptor.jdbc.BasicBinder; import org.hibernate.type.descriptor.jdbc.BasicExtractor; +import org.hibernate.type.descriptor.jdbc.JdbcLiteralFormatter; import org.hibernate.type.descriptor.jdbc.JdbcType; import org.geolatte.geom.Geometry; +import org.geolatte.geom.codec.Wkt; +import org.geolatte.geom.jts.JTS; /** * Descriptor for GeoDB Geometries. @@ -46,6 +50,30 @@ public class GeoDBGeometryType implements JdbcType { return SqlTypes.GEOMETRY; } + //todo -- simplify as with postgis/mariadb + @Override + public JdbcLiteralFormatter getJdbcLiteralFormatter(JavaType javaTypeDescriptor) { + return (appender, value, dialect, wrapperOptions) -> { + Geometry geom; + if ( javaTypeDescriptor instanceof GeolatteGeometryJavaTypeDescriptor ) { + geom = (Geometry) value; + } + else { + geom = jts2Gl( value ); + } + appender.appendSql( "ST_GeomFromText('" ); + appender.appendSql( Wkt.toWkt( geom, Wkt.Dialect.SFA_1_1_0 ) ); + appender.appendSql( "'," ); + appender.appendSql( ( geom.getSRID() ) ); + appender.appendSql( ")" ); + }; + } + + private Geometry jts2Gl(T value) { + return JTS.from( (org.locationtech.jts.geom.Geometry) value ); + } + + @Override public ValueBinder getBinder(final JavaType javaTypeDescriptor) { return new BasicBinder( javaTypeDescriptor, this ) { diff --git a/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2geodb/GeoDbWkb.java b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/GeoDbWkb.java similarity index 98% rename from hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2geodb/GeoDbWkb.java rename to hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/GeoDbWkb.java index a95c752969..925ca9b323 100644 --- a/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2geodb/GeoDbWkb.java +++ b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/GeoDbWkb.java @@ -5,7 +5,7 @@ * See the lgpl.txt file in the root directory or . */ -package org.hibernate.spatial.dialect.h2geodb; +package org.hibernate.spatial.dialect.h2gis; import java.io.ByteArrayOutputStream; diff --git a/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/H2GisDialectContributor.java b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/H2GisDialectContributor.java new file mode 100644 index 0000000000..d6112560ee --- /dev/null +++ b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/H2GisDialectContributor.java @@ -0,0 +1,51 @@ +/* + * 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 . + */ + +package org.hibernate.spatial.dialect.h2gis; + +import org.hibernate.boot.model.FunctionContributions; +import org.hibernate.boot.model.TypeContributions; +import org.hibernate.query.sqm.function.SqmFunctionRegistry; +import org.hibernate.service.ServiceRegistry; +import org.hibernate.spatial.GeolatteGeometryType; +import org.hibernate.spatial.HSMessageLogger; +import org.hibernate.spatial.JTSGeometryType; +import org.hibernate.spatial.contributor.ContributorImplementor; +import org.hibernate.spatial.dialect.postgis.PGGeometryType; +import org.hibernate.spatial.dialect.postgis.PostgisSqmFunctionDescriptors; + +public class H2GisDialectContributor implements ContributorImplementor { + + private final ServiceRegistry serviceRegistryegistry; + + public H2GisDialectContributor(ServiceRegistry serviceRegistry) { + this.serviceRegistryegistry = serviceRegistry; + } + + public void contributeTypes(TypeContributions typeContributions) { + HSMessageLogger.LOGGER.typeContributions( this.getClass().getCanonicalName() ); + typeContributions.contributeType( new GeolatteGeometryType( GeoDBGeometryType.INSTANCE ) ); + typeContributions.contributeType( new JTSGeometryType( GeoDBGeometryType.INSTANCE ) ); + } + + @Override + public void contributeFunctions(FunctionContributions functionContributions) { + HSMessageLogger.LOGGER.functionContributions( this.getClass().getCanonicalName() ); + final PostgisSqmFunctionDescriptors postgisFunctions = new PostgisSqmFunctionDescriptors( functionContributions ); + final SqmFunctionRegistry functionRegistry = functionContributions.getFunctionRegistry(); + postgisFunctions.asMap().forEach( (key, desc) -> { + functionRegistry.register( key.getName(), desc ); + key.getAltName().ifPresent( altName -> functionRegistry.registerAlternateKey( altName, key.getName() ) ); + } ); + } + + + @Override + public ServiceRegistry getServiceRegistry() { + return this.serviceRegistryegistry; + } +} diff --git a/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2geodb/package.html b/hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/package.html similarity index 100% rename from hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2geodb/package.html rename to hibernate-spatial/src/main/java/org/hibernate/spatial/dialect/h2gis/package.html diff --git a/hibernate-spatial/src/test/java/org/hibernate/spatial/integration/StoreAndRetrieveTests.java b/hibernate-spatial/src/test/java/org/hibernate/spatial/integration/StoreAndRetrieveTests.java index e4f2914f4d..1b54b8e786 100644 --- a/hibernate-spatial/src/test/java/org/hibernate/spatial/integration/StoreAndRetrieveTests.java +++ b/hibernate-spatial/src/test/java/org/hibernate/spatial/integration/StoreAndRetrieveTests.java @@ -75,7 +75,7 @@ public class StoreAndRetrieveTests extends SpatialTestDataProvider implements Se } @Test - public void testStoringNullGeometries(SessionFactoryScope scope) { + public void testStoringNullGeometries(SessionFactoryScope scope) { scope.inTransaction( this::storeNullGeometry ); scope.inTransaction( this::retrieveAndCompareNullGeometry ); } diff --git a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/IsSupportedBySpatial.java b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/IsSupportedBySpatial.java index b3866e9d98..f131de5c6d 100644 --- a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/IsSupportedBySpatial.java +++ b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/IsSupportedBySpatial.java @@ -9,6 +9,7 @@ package org.hibernate.spatial.testing; import org.hibernate.dialect.CockroachDialect; import org.hibernate.dialect.Dialect; +import org.hibernate.dialect.H2Dialect; import org.hibernate.dialect.MariaDBDialect; import org.hibernate.dialect.MySQLDialect; import org.hibernate.dialect.PostgreSQLDialect; @@ -17,10 +18,9 @@ import org.hibernate.testing.orm.junit.DialectFeatureCheck; /** * Checks if the Dialect is actually supported by Spatial - * + *

* Note: the tests in this module need to be explicitly enabled in the gradle build config. So this check is * maybe no longer needed. - * */ public class IsSupportedBySpatial implements DialectFeatureCheck { @Override @@ -28,6 +28,7 @@ public class IsSupportedBySpatial implements DialectFeatureCheck { return dialect instanceof PostgreSQLDialect || dialect instanceof CockroachDialect || dialect instanceof MySQLDialect - || dialect instanceof MariaDBDialect; + || dialect instanceof MariaDBDialect + || dialect instanceof H2Dialect; } } diff --git a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/SpatialTestBase.java b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/SpatialTestBase.java index a9239e9c75..00822562be 100644 --- a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/SpatialTestBase.java +++ b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/SpatialTestBase.java @@ -7,8 +7,11 @@ package org.hibernate.spatial.testing; +import java.sql.Connection; +import java.sql.SQLException; import java.util.Set; +import org.hibernate.dialect.H2Dialect; import org.hibernate.spatial.CommonSpatialFunction; import org.hibernate.spatial.integration.SpatialTestDataProvider; import org.hibernate.spatial.testing.datareader.TestSupport; @@ -16,12 +19,15 @@ 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.DialectContext; import org.hibernate.testing.orm.junit.DomainModel; 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.h2gis.functions.factory.H2GISFunctions; + @DomainModel(modelDescriptorClasses = SpatialDomainModel.class) abstract public class SpatialTestBase extends SpatialTestDataProvider implements SessionFactoryScopeAware { @@ -41,7 +47,17 @@ abstract public class SpatialTestBase .getSqmFunctionRegistry() .getFunctions() .keySet(); - + if ( DialectContext.getDialect() instanceof H2Dialect ) { + this.scope.inSession( session -> { + try { + Connection cn = session.getJdbcConnectionAccess().obtainConnection(); + H2GISFunctions.load( cn ); + } + catch (SQLException e) { + throw new RuntimeException( e ); + } + } ); + } } } diff --git a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/TestSupportFactories.java b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/TestSupportFactories.java index d7b95f4507..6944e81c81 100644 --- a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/TestSupportFactories.java +++ b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/TestSupportFactories.java @@ -9,19 +9,18 @@ package org.hibernate.spatial.testing; import org.hibernate.dialect.CockroachDialect; import org.hibernate.dialect.Dialect; +import org.hibernate.dialect.H2Dialect; import org.hibernate.dialect.MariaDBDialect; import org.hibernate.dialect.MySQLDialect; import org.hibernate.dialect.PostgreSQLDialect; -import org.hibernate.spatial.SpatialDialect; import org.hibernate.spatial.testing.datareader.TestSupport; import org.hibernate.spatial.testing.dialects.cockroachdb.CockroachDBTestSupport; import org.hibernate.spatial.testing.dialects.db2.DB2TestSupport; -import org.hibernate.spatial.testing.dialects.h2geodb.GeoDBTestSupport; +import org.hibernate.spatial.testing.dialects.h2geodb.H2GisTestSupport; import org.hibernate.spatial.testing.dialects.hana.HANATestSupport; import org.hibernate.spatial.testing.dialects.mariadb.MariaDBTestSupport; import org.hibernate.spatial.testing.dialects.mysql.MySQL56TestSupport; import org.hibernate.spatial.testing.dialects.mysql.MySQL8TestSupport; -import org.hibernate.spatial.testing.dialects.mysql.MySQLTestSupport; import org.hibernate.spatial.testing.dialects.oracle.OracleSDOTestSupport; import org.hibernate.spatial.testing.dialects.postgis.PostgisTestSupport; import org.hibernate.spatial.testing.dialects.sqlserver.SQLServerTestSupport; @@ -58,13 +57,15 @@ public class TestSupportFactories { return CockroachDBTestSupport.class; } + if ( MySQLDialect.class.isAssignableFrom( dialect.getClass() ) ) { - return dialect.getVersion() >= 800 ? MySQL8TestSupport.class : MySQL56TestSupport.class; + return dialect.getVersion() >= 800 ? MySQL8TestSupport.class : MySQL56TestSupport.class; } - if ( "org.hibernate.spatial.dialect.h2geodb.GeoDBDialect".equals( canonicalName ) ) { - return GeoDBTestSupport.class; + if ( H2Dialect.class.isAssignableFrom( dialect.getClass() ) ) { + return H2GisTestSupport.class; } + if ( "org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect".equals( canonicalName ) ) { return SQLServerTestSupport.class; } diff --git a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/converter/GeometryConverter.java b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/converter/GeometryConverter.java index 8f56d811bd..fa4e1be192 100644 --- a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/converter/GeometryConverter.java +++ b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/converter/GeometryConverter.java @@ -9,7 +9,7 @@ package org.hibernate.spatial.testing.converter; import jakarta.persistence.AttributeConverter; import jakarta.persistence.Converter; -import org.hibernate.spatial.dialect.h2geodb.GeoDbWkb; +import org.hibernate.spatial.dialect.h2gis.GeoDbWkb; import org.geolatte.geom.Geometry; diff --git a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/converter/GeometryConverterTest.java b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/converter/GeometryConverterTest.java index 52a92c3099..362062404f 100644 --- a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/converter/GeometryConverterTest.java +++ b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/converter/GeometryConverterTest.java @@ -15,7 +15,7 @@ import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.metamodel.model.convert.spi.JpaAttributeConverter; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.spatial.GeolatteGeometryJavaTypeDescriptor; -import org.hibernate.spatial.dialect.h2geodb.GeoDBDialect; +import org.hibernate.spatial.dialect.h2gis.GeoDBDialect; import org.hibernate.tool.schema.Action; import org.hibernate.type.descriptor.converter.AttributeConverterTypeAdapter; import org.hibernate.type.spi.TypeConfiguration; diff --git a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/dialects/h2geodb/GeoDBExpectationsFactory.java b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/dialects/h2geodb/GeoDBExpectationsFactory.java index cbace20333..96e002eb24 100644 --- a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/dialects/h2geodb/GeoDBExpectationsFactory.java +++ b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/dialects/h2geodb/GeoDBExpectationsFactory.java @@ -10,7 +10,7 @@ */ package org.hibernate.spatial.testing.dialects.h2geodb; -import org.hibernate.spatial.dialect.h2geodb.GeoDbWkb; +import org.hibernate.spatial.dialect.h2gis.GeoDbWkb; import org.hibernate.spatial.testing.AbstractExpectationsFactory; import org.hibernate.spatial.testing.NativeSQLStatement; diff --git a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/dialects/h2geodb/GeoDBTestSupport.java b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/dialects/h2geodb/GeoDBTestSupport.java deleted file mode 100644 index 445701913e..0000000000 --- a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/dialects/h2geodb/GeoDBTestSupport.java +++ /dev/null @@ -1,34 +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 . - */ - -package org.hibernate.spatial.testing.dialects.h2geodb; - -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.TestSupport; - -/** - * @author Karel Maesen, Geovise BVBA - * creation-date: Oct 2, 2010 - */ -public class GeoDBTestSupport extends TestSupport { - - @Override - public TestData createTestData(TestDataPurpose purpose) { - return TestData.fromFile( "h2geodb/test-geodb-data-set.xml" ); - } - - public JTSGeometryEquality createGeometryEquality() { - return new GeoDBGeometryEquality(); - } - - public AbstractExpectationsFactory createExpectationsFactory() { - return new GeoDBExpectationsFactory(); - } - -} diff --git a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/dialects/h2geodb/H2GisTestSupport.java b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/dialects/h2geodb/H2GisTestSupport.java new file mode 100644 index 0000000000..86612a5b82 --- /dev/null +++ b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/dialects/h2geodb/H2GisTestSupport.java @@ -0,0 +1,67 @@ +/* + * 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 . + */ + +package org.hibernate.spatial.testing.dialects.h2geodb; + +import java.util.Map; + +import org.hibernate.spatial.CommonSpatialFunction; +import org.hibernate.spatial.GeomCodec; +import org.hibernate.spatial.dialect.h2gis.GeoDbWkb; +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.TestSupport; +import org.hibernate.spatial.testing.dialects.NativeSQLTemplates; +import org.hibernate.spatial.testing.dialects.PredicateRegexes; + +import org.geolatte.geom.Geometry; + +/** + * @author Karel Maesen, Geovise BVBA + * creation-date: Oct 2, 2010 + */ +public class H2GisTestSupport extends TestSupport { + + @Override + public TestData createTestData(TestDataPurpose purpose) { + return TestData.fromFile( "h2gis/test-geodb-data-set.xml" ); + } + + public JTSGeometryEquality createGeometryEquality() { + return new GeoDBGeometryEquality(); + } + + public AbstractExpectationsFactory createExpectationsFactory() { + return new GeoDBExpectationsFactory(); + } + + @Override + public NativeSQLTemplates templates() { + return new NativeSQLTemplates(); + } + + @Override + public PredicateRegexes predicateRegexes() { + return new PredicateRegexes("st_geomfromtext"); + } + + @Override + public Map hqlOverrides() { + return super.hqlOverrides(); + } + + @Override + public GeomCodec codec() { + return new GeomCodec() { + @Override + public Geometry toGeometry(Object in) { + return GeoDbWkb.from( in ); + } + }; + } +} diff --git a/hibernate-spatial/src/test/resources/h2geodb/test-geodb-data-set.xml b/hibernate-spatial/src/test/resources/h2gis/test-geodb-data-set.xml similarity index 100% rename from hibernate-spatial/src/test/resources/h2geodb/test-geodb-data-set.xml rename to hibernate-spatial/src/test/resources/h2gis/test-geodb-data-set.xml