From 2742f27026fb4fec50f6bed4c92f9a95771bdbe5 Mon Sep 17 00:00:00 2001 From: Bertil Chapuis Date: Wed, 8 Jan 2025 11:47:47 +0100 Subject: [PATCH] Set the aliases in postgres tile store for earlier versions of postgres --- .../tilestore/postgres/PostgresTileStore.java | 17 ++++++++++------- .../postgres/PostgresTileStoreTest.java | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/baremaps-core/src/main/java/org/apache/baremaps/tilestore/postgres/PostgresTileStore.java b/baremaps-core/src/main/java/org/apache/baremaps/tilestore/postgres/PostgresTileStore.java index b08436284..06f47a75e 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/tilestore/postgres/PostgresTileStore.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/tilestore/postgres/PostgresTileStore.java @@ -166,14 +166,17 @@ protected static Query prepareQuery(Tileset tileset, int zoom) { var querySqlWithParams = String.format( """ SELECT - id AS id, - tags - 'id' AS tags, - ST_AsMVTGeom(geom, ST_TileEnvelope(?, ?, ?)) AS geom + tile.id AS id, + tile.tags - 'id' AS tags, + ST_AsMVTGeom(tile.geom, ST_TileEnvelope(?, ?, ?)) AS geom FROM ( - SELECT id, tags, geom - FROM (%s) - WHERE geom IS NOT NULL - AND geom && ST_TileEnvelope(?, ?, ?, margin => (64.0/4096))) + SELECT + data.id AS id, + data.tags AS tags, + data.geom AS geom + FROM (%s) AS data + WHERE data.geom IS NOT NULL + AND data.geom && ST_TileEnvelope(?, ?, ?, margin => (64.0/4096))) AS tile """, querySql); layerSql.append(querySqlWithParams); diff --git a/baremaps-core/src/test/java/org/apache/baremaps/tilestore/postgres/PostgresTileStoreTest.java b/baremaps-core/src/test/java/org/apache/baremaps/tilestore/postgres/PostgresTileStoreTest.java index 03142e10a..e3dffabe1 100644 --- a/baremaps-core/src/test/java/org/apache/baremaps/tilestore/postgres/PostgresTileStoreTest.java +++ b/baremaps-core/src/test/java/org/apache/baremaps/tilestore/postgres/PostgresTileStoreTest.java @@ -40,7 +40,7 @@ void prepareQuery() { List.of(new TilesetQuery(0, 20, "SELECT id, tags, geom FROM table"))))); var query = PostgresTileStore.prepareQuery(tileset, 10); assertEquals( - "SELECT (SELECT ST_AsMVT(mvtGeom.*, 'a') FROM (SELECT id AS id, tags - 'id' AS tags, ST_AsMVTGeom(geom, ST_TileEnvelope(?, ?, ?)) AS geom FROM ( SELECT id, tags, geom FROM (SELECT id, tags, geom FROM table) WHERE geom IS NOT NULL AND geom && ST_TileEnvelope(?, ?, ?, margin => (64.0/4096))) ) AS mvtGeom) || (SELECT ST_AsMVT(mvtGeom.*, 'b') FROM (SELECT id AS id, tags - 'id' AS tags, ST_AsMVTGeom(geom, ST_TileEnvelope(?, ?, ?)) AS geom FROM ( SELECT id, tags, geom FROM (SELECT id, tags, geom FROM table) WHERE geom IS NOT NULL AND geom && ST_TileEnvelope(?, ?, ?, margin => (64.0/4096))) ) AS mvtGeom) AS mvtTile", + "SELECT (SELECT ST_AsMVT(mvtGeom.*, 'a') FROM (SELECT tile.id AS id, tile.tags - 'id' AS tags, ST_AsMVTGeom(tile.geom, ST_TileEnvelope(?, ?, ?)) AS geom FROM ( SELECT data.id AS id, data.tags AS tags, data.geom AS geom FROM (SELECT id, tags, geom FROM table) AS data WHERE data.geom IS NOT NULL AND data.geom && ST_TileEnvelope(?, ?, ?, margin => (64.0/4096))) AS tile ) AS mvtGeom) || (SELECT ST_AsMVT(mvtGeom.*, 'b') FROM (SELECT tile.id AS id, tile.tags - 'id' AS tags, ST_AsMVTGeom(tile.geom, ST_TileEnvelope(?, ?, ?)) AS geom FROM ( SELECT data.id AS id, data.tags AS tags, data.geom AS geom FROM (SELECT id, tags, geom FROM table) AS data WHERE data.geom IS NOT NULL AND data.geom && ST_TileEnvelope(?, ?, ?, margin => (64.0/4096))) AS tile ) AS mvtGeom) AS mvtTile", query.sql()); } }