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();
}