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

bchapuis pushed a commit to branch calcite-framework
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git

commit fa97d3cb045bfa9d3b16d2d13f9e484b56a43220
Author: Bertil Chapuis <[email protected]>
AuthorDate: Sat Jan 18 14:09:51 2025 +0100

    Improve GeoPackage store
---
 .../baremaps/geopackage/GeoPackageDataStore.java   | 22 +++++++++-------------
 .../baremaps/geopackage/GeoPackageDataTable.java   | 20 ++++++++++++++++----
 2 files changed, 25 insertions(+), 17 deletions(-)

diff --git 
a/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataStore.java
 
b/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataStore.java
index 74290917a..71ddb3fb2 100644
--- 
a/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataStore.java
+++ 
b/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataStore.java
@@ -29,9 +29,9 @@ import org.apache.baremaps.store.DataTable;
 /**
  * A {@link DataStore} corresponding to a GeoPackage file.
  */
-public class GeoPackageDataStore implements DataStore, AutoCloseable {
+public class GeoPackageDataStore implements DataStore {
 
-  private final GeoPackage geoPackage;
+  private final Path file;
 
   /**
    * Constructs a {@link GeoPackageDataStore} from a GeoPackage file.
@@ -39,15 +39,7 @@ public class GeoPackageDataStore implements DataStore, 
AutoCloseable {
    * @param file the path to the GeoPackage file
    */
   public GeoPackageDataStore(Path file) {
-    this.geoPackage = GeoPackageManager.open(file.toFile());
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void close() throws Exception {
-    geoPackage.close();
+    this.file = file;
   }
 
   /**
@@ -55,7 +47,11 @@ public class GeoPackageDataStore implements DataStore, 
AutoCloseable {
    */
   @Override
   public List<String> list() throws DataStoreException {
-    return geoPackage.getFeatureTables();
+    try (GeoPackage geoPackage = GeoPackageManager.open(file.toFile())) {
+      return geoPackage.getFeatureTables();
+    } catch (Exception e) {
+      throw new DataStoreException(e);
+    }
   }
 
   /**
@@ -63,7 +59,7 @@ public class GeoPackageDataStore implements DataStore, 
AutoCloseable {
    */
   @Override
   public DataTable get(String name) throws DataStoreException {
-    return new GeoPackageDataTable(geoPackage.getFeatureDao(name));
+    return new GeoPackageDataTable(file, name);
   }
 
   /**
diff --git 
a/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataTable.java
 
b/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataTable.java
index 8ea223665..59e91c180 100644
--- 
a/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataTable.java
+++ 
b/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataTable.java
@@ -18,7 +18,10 @@
 package org.apache.baremaps.geopackage;
 
 
+import java.nio.file.Path;
 import java.util.*;
+import mil.nga.geopackage.GeoPackage;
+import mil.nga.geopackage.GeoPackageManager;
 import mil.nga.geopackage.features.user.FeatureColumn;
 import mil.nga.geopackage.features.user.FeatureDao;
 import mil.nga.geopackage.features.user.FeatureResultSet;
@@ -33,6 +36,12 @@ import org.locationtech.jts.geom.*;
  */
 public class GeoPackageDataTable implements DataTable {
 
+  private final Path file;
+
+  private final String name;
+
+    private final GeoPackage geoPackage;
+
   private final FeatureDao featureDao;
 
   private final DataSchema schema;
@@ -42,11 +51,14 @@ public class GeoPackageDataTable implements DataTable {
   /**
    * Constructs a {@link DataTable} from a feature DAO.
    *
-   * @param featureDao the feature DAO
+   * @param file the path to the GeoPackage file
+   * @param name the name of the data table
    */
-  public GeoPackageDataTable(FeatureDao featureDao) {
-    this.featureDao = featureDao;
-    var name = featureDao.getTableName();
+  public GeoPackageDataTable(Path file, String name) {
+    this.file = file;
+    this.name = name;
+    this.geoPackage = GeoPackageManager.open(file.toFile());
+    this.featureDao = geoPackage.getFeatureDao(name);
     var columns = new ArrayList<DataColumn>();
     for (FeatureColumn column : featureDao.getColumns()) {
       var propertyName = column.getName();

Reply via email to