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

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


The following commit(s) were added to refs/heads/main by this push:
     new 2a4d6b83 Fix invalid query execution (#627)
2a4d6b83 is described below

commit 2a4d6b83bb7378c186f832f316e903136377be11
Author: Bertil Chapuis <[email protected]>
AuthorDate: Fri Apr 28 16:49:02 2023 +0200

    Fix invalid query execution (#627)
---
 .../baremaps/database/tile/PostgresTileStore.java     | 19 ++++++++++---------
 .../org/apache/baremaps/database/tile/TileCache.java  |  7 ++++++-
 .../apache/baremaps/vectortile/VectorTileUtils.java   |  1 +
 .../org/apache/baremaps/server/ServerResources.java   |  9 +++++++--
 4 files changed, 24 insertions(+), 12 deletions(-)

diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/tile/PostgresTileStore.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/tile/PostgresTileStore.java
index be3b33a1..d20fb5bb 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/tile/PostgresTileStore.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/tile/PostgresTileStore.java
@@ -100,16 +100,17 @@ public class PostgresTileStore implements TileStore {
         Statement statement = connection.createStatement();
         ByteArrayOutputStream data = new ByteArrayOutputStream()) {
 
-      String sql = withQuery(tile);
-      logger.debug("Executing query: {}", sql);
-
       int length = 0;
-      try (GZIPOutputStream gzip = new GZIPOutputStream(data);
-          ResultSet resultSet = statement.executeQuery(sql)) {
-        while (resultSet.next()) {
-          byte[] bytes = resultSet.getBytes(1);
-          length += bytes.length;
-          gzip.write(bytes);
+      if (queries.stream().anyMatch(query -> zoomPredicate(query, tile.z()))) {
+        String sql = withQuery(tile);
+        logger.debug("Executing query: {}", sql);
+        try (GZIPOutputStream gzip = new GZIPOutputStream(data);
+            ResultSet resultSet = statement.executeQuery(sql)) {
+          while (resultSet.next()) {
+            byte[] bytes = resultSet.getBytes(1);
+            length += bytes.length;
+            gzip.write(bytes);
+          }
         }
       }
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/tile/TileCache.java 
b/baremaps-core/src/main/java/org/apache/baremaps/database/tile/TileCache.java
index c58ce6dd..ff4d7b0a 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/tile/TileCache.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/tile/TileCache.java
@@ -53,7 +53,12 @@ public class TileCache implements TileStore {
   public ByteBuffer read(Tile tile) throws TileStoreException {
     return cache.get(tile, t -> {
       try {
-        return tileStore.read(t).duplicate();
+        var buffer = tileStore.read(t);
+        if (buffer == null) {
+          return null;
+        } else {
+          return buffer.duplicate();
+        }
       } catch (TileStoreException e) {
         logger.error("Unable to read the tile.", e);
         return null;
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/vectortile/VectorTileUtils.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/vectortile/VectorTileUtils.java
index f3d48a29..9f4d72e6 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/vectortile/VectorTileUtils.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/vectortile/VectorTileUtils.java
@@ -92,6 +92,7 @@ public class VectorTileUtils {
         .encodeTile(vectorTile)
         .toByteString()
         .asReadOnlyByteBuffer();
+
   }
 
   /**
diff --git 
a/baremaps-server/src/main/java/org/apache/baremaps/server/ServerResources.java 
b/baremaps-server/src/main/java/org/apache/baremaps/server/ServerResources.java
index cb7af790..b22b8c67 100644
--- 
a/baremaps-server/src/main/java/org/apache/baremaps/server/ServerResources.java
+++ 
b/baremaps-server/src/main/java/org/apache/baremaps/server/ServerResources.java
@@ -86,9 +86,14 @@ public class ServerResources {
     try {
       ByteBuffer blob = tileStore.read(tile);
       if (blob != null) {
+        byte[] bytes = new byte[blob.remaining()];
+        blob.get(bytes);
         return Response.status(200) // lgtm [java/xss]
-            .header(ACCESS_CONTROL_ALLOW_ORIGIN, "*").header(CONTENT_TYPE, 
TILE_TYPE)
-            .header(CONTENT_ENCODING, 
TILE_ENCODING).entity(blob.array()).build();
+            .header(ACCESS_CONTROL_ALLOW_ORIGIN, "*")
+            .header(CONTENT_TYPE, TILE_TYPE)
+            .header(CONTENT_ENCODING, TILE_ENCODING)
+            .entity(bytes)
+            .build();
       } else {
         return Response.status(204).build();
       }

Reply via email to