This is an automated email from the ASF dual-hosted git repository.

amanin pushed a commit to branch fix/fast-envelope
in repository https://gitbox.apache.org/repos/asf/sis.git

commit b3ac6a59bc58d63293e3a42c2f8fc626edc387ea
Author: Alexis Manin <[email protected]>
AuthorDate: Tue Jan 21 16:34:30 2020 +0100

    wip(SQLStore): Start test cases for spatial functions over in memory H2GIS
---
 storage/sis-sqlstore/pom.xml                       |  6 ++
 .../apache/sis/internal/sql/feature/EWKBTest.java  | 13 +--
 .../org/apache/sis/storage/sql/H2SpatialTest.java  | 98 ++++++++++++++++++++++
 .../org/apache/sis/storage/sql/h2_base.sql         |  9 ++
 4 files changed, 120 insertions(+), 6 deletions(-)

diff --git a/storage/sis-sqlstore/pom.xml b/storage/sis-sqlstore/pom.xml
index 86d7cc4..65d2e13 100644
--- a/storage/sis-sqlstore/pom.xml
+++ b/storage/sis-sqlstore/pom.xml
@@ -171,6 +171,12 @@
       <scope>test</scope>
     </dependency>
 
+    <dependency>
+      <groupId>org.orbisgis</groupId>
+      <artifactId>h2gis</artifactId>
+      <version>1.5.0</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
 </project>
diff --git 
a/storage/sis-sqlstore/src/test/java/org/apache/sis/internal/sql/feature/EWKBTest.java
 
b/storage/sis-sqlstore/src/test/java/org/apache/sis/internal/sql/feature/EWKBTest.java
index 9653e34..398fb83 100644
--- 
a/storage/sis-sqlstore/src/test/java/org/apache/sis/internal/sql/feature/EWKBTest.java
+++ 
b/storage/sis-sqlstore/src/test/java/org/apache/sis/internal/sql/feature/EWKBTest.java
@@ -9,11 +9,10 @@ import org.apache.sis.referencing.CommonCRS;
 import org.apache.sis.setup.GeometryLibrary;
 import org.apache.sis.test.TestCase;
 
-import org.junit.Assert;
-import org.junit.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.CsvFileSource;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class EWKBTest extends TestCase {
 
@@ -24,15 +23,17 @@ public class EWKBTest extends TestCase {
     public void decodeHexadecimal(String wkt, String hexEWKB) throws Exception 
{
         final GeographicCRS expectedCrs = CommonCRS.defaultGeographic();
         final EWKBReader reader = new EWKBReader(GF).forCrs(expectedCrs);
-        Assert.assertEquals("WKT and hexadecimal EWKB representation don't 
match",
-                GF.parseWKT(wkt).implementation(), reader.readHexa(hexEWKB));
+        assertEquals(
+                GF.parseWKT(wkt).implementation(), reader.readHexa(hexEWKB),
+                "WKT and hexadecimal EWKB representation don't match"
+        );
     }
 
     /**
      * The purpose of this test is not to check complex geometries, which is 
validated by above one. We just want to
      * ensure that decoding directly a byte stream behaves in the same way 
than through hexadecimal.
      */
-    @Test
+    @org.junit.Test
     public void testBinary() {
         final ByteBuffer point = ByteBuffer.allocate(163);
         // Skip first byte: XDR mode
@@ -46,6 +47,6 @@ public class EWKBTest extends TestCase {
         point.position(0);
 
         final Object read = new EWKBReader(GeometryLibrary.JTS).read(point);
-        Assert.assertEquals(GF.createPoint(42.2, 43.3), read);
+        assertEquals(GF.createPoint(42.2, 43.3), read);
     }
 }
diff --git 
a/storage/sis-sqlstore/src/test/java/org/apache/sis/storage/sql/H2SpatialTest.java
 
b/storage/sis-sqlstore/src/test/java/org/apache/sis/storage/sql/H2SpatialTest.java
new file mode 100644
index 0000000..9d67a3a
--- /dev/null
+++ 
b/storage/sis-sqlstore/src/test/java/org/apache/sis/storage/sql/H2SpatialTest.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.storage.sql;
+
+import java.sql.Connection;
+import java.util.logging.Level;
+
+import org.opengis.feature.FeatureType;
+import org.opengis.feature.PropertyType;
+import org.opengis.geometry.Envelope;
+
+import org.apache.sis.feature.Features;
+import org.apache.sis.geometry.AbstractEnvelope;
+import org.apache.sis.geometry.Envelope2D;
+import org.apache.sis.referencing.CommonCRS;
+import org.apache.sis.storage.DataStoreException;
+import org.apache.sis.storage.FeatureSet;
+import org.apache.sis.storage.StorageConnector;
+import org.apache.sis.test.sql.TestDatabase;
+import org.apache.sis.util.logging.Logging;
+
+import org.h2gis.functions.factory.H2GISFunctions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class H2SpatialTest {
+
+    private static TestDatabase db;
+    private static SQLStore store;
+
+    @BeforeAll
+    public static void createDatabase() throws Exception {
+        db = TestDatabase.createOnH2("spatialFunctions", false);
+        try (Connection c = db.source.getConnection()) {
+            H2GISFunctions.load(c);
+        }
+        db.executeSQL(H2SpatialTest.class, "file:"+"h2_base.sql");
+
+        store = new SQLStore(
+                new SQLStoreProvider(), new StorageConnector(db.source),
+                SQLStoreProvider.createTableName(null, null, "roads")
+        );
+    }
+
+    @org.junit.Test public void preventVintageError() {}
+
+    @Test
+    public void getEnvelope() throws DataStoreException {
+        final FeatureSet roads = (FeatureSet) store.findResource("roads");
+        final Envelope envelope = roads.getEnvelope()
+                .orElseThrow(() -> new AssertionError("No envelope available 
for spatial dataset"));
+        final Envelope2D expected = new 
Envelope2D(CommonCRS.WGS84.geographic(), 15, 5, 16, 20);
+
+        assertTrue(
+                AbstractEnvelope.castOrCopy(envelope).equals(expected, 1e-4, 
false),
+                () -> String.format("Bad envelope.%nExpected: %s%nBut was: 
%s", expected.toString(), envelope.toString())
+        );
+    }
+
+    //@Test
+    public void readGeometries() throws DataStoreException {
+        final FeatureSet roads = (FeatureSet) store.findResource("ROADS");
+        final FeatureType type = roads.getType();
+        final PropertyType geom = Features.getDefaultGeometry(type);
+        // TODO: check CRS and if it's a linestring, then try to read rows.
+    }
+
+    //@Test
+    public void bboxFilter() throws DataStoreException {
+        // TODO: try to execute a simple query with an envelope.
+    }
+
+    @AfterAll
+    public static void destroyDb() {
+        if (db == null) return;
+        try (AutoCloseable closeDb = db::close ; AutoCloseable closeStore = () 
-> { if (store != null) store.close(); }) {
+        } catch (Exception e) {
+            Logging.getLogger("org.apache.sis.storage.sql").log(Level.WARNING, 
"Cannot properly free test database", e);
+        }
+    }
+}
diff --git 
a/storage/sis-sqlstore/src/test/resources/org/apache/sis/storage/sql/h2_base.sql
 
b/storage/sis-sqlstore/src/test/resources/org/apache/sis/storage/sql/h2_base.sql
new file mode 100644
index 0000000..0090da9
--- /dev/null
+++ 
b/storage/sis-sqlstore/src/test/resources/org/apache/sis/storage/sql/h2_base.sql
@@ -0,0 +1,9 @@
+-- A sample database to test spatial operations over database.
+-- This is designed to work over orbisgis:H2GIS database.
+-- Inspired by official example at 
https://github.com/orbisgis/orbisgis-samples/blob/master/demoh2gis/src/main/java/org/orbisgis/demoh2gis/Main.java
+
+CREATE TABLE ROADS (geometry LINESTRING, speed_limit INT) CHECK 
ST_SRID(geometry)=4326;
+
+INSERT INTO ROADS VALUES (ST_GeomFromText('LINESTRING(15 5, 20 6, 25 7)', 
4326), 80)
+INSERT INTO ROADS VALUES (ST_GeomFromText('LINESTRING(20 6, 21 15, 21 25)', 
4326), 50)
+INSERT INTO ROADS VALUES (ST_GeomFromText('LINESTRING(34 12, 36 13, 35.2 16)', 
4326), 70)

Reply via email to