|
1 | 1 | from datetime import datetime |
2 | | -from typing import Any, Dict, Iterable, List, Optional, Tuple, Union |
| 2 | +from typing import Any, Dict, Iterable, List, Optional, Tuple |
3 | 3 |
|
4 | 4 | from asyncpg import Connection |
5 | 5 |
|
@@ -260,9 +260,7 @@ def fixes_default(fixes: List[List[Dict[str, Any]]]) -> List[List[Dict[str, Any] |
260 | 260 | ) |
261 | 261 |
|
262 | 262 |
|
263 | | -async def _gets( |
264 | | - db: Connection, params: Params, mvt: bool = False |
265 | | -) -> Union[List[Dict[str, Any]], bytes]: |
| 263 | +def _get_sql(db: Connection, params: Params) -> Tuple[str, List[Any]]: |
266 | 264 | sqlbase = """ |
267 | 265 | SELECT |
268 | 266 | uuid_to_bigint(uuid) as id, |
@@ -337,40 +335,46 @@ async def _gets( |
337 | 335 | ${len(sql_params)}""" |
338 | 336 |
|
339 | 337 | sql = sqlbase % (join, where) |
| 338 | + return (sql, sql_params) |
| 339 | + |
| 340 | + |
| 341 | +async def _gets_mvt(db: Connection, params: Params) -> bytes: |
| 342 | + sql, sql_params = _get_sql(db, params) |
| 343 | + sql_params.extend([params.limit, params.zoom, params.tilex, params.tiley]) |
| 344 | + sql = f""" |
| 345 | + WITH |
| 346 | + query AS ({sql}), |
| 347 | + issues AS ( |
| 348 | + SELECT |
| 349 | + (id >> 32)::integer AS id, uuid, coalesce(item, 0) AS item, coalesce(class, 0) AS class, |
| 350 | + ST_AsMVTGeom( |
| 351 | + ST_Transform(ST_SetSRID(ST_MakePoint(lon, lat), 4326), 3857), |
| 352 | + ST_TileEnvelope(${len(sql_params)-2}, ${len(sql_params)-1}, ${len(sql_params)}), |
| 353 | + 4096, 0, false |
| 354 | + ) AS geom |
| 355 | + FROM query |
| 356 | + ), |
| 357 | + limit_ AS ( |
| 358 | + SELECT |
| 359 | + ST_AsMVTGeom( |
| 360 | + ST_Centroid(ST_TileEnvelope(${len(sql_params)-2}, ${len(sql_params)-1}, ${len(sql_params)})), |
| 361 | + ST_TileEnvelope(${len(sql_params)-2}, ${len(sql_params)-1}, ${len(sql_params)}), |
| 362 | + 4096, 0, false |
| 363 | + ) AS geom |
| 364 | + WHERE (SELECT COUNT(*) FROM query) >= ${len(sql_params)-3} |
| 365 | + ), |
| 366 | + layers AS ( |
| 367 | + SELECT ST_AsMVT(issues, 'issues', 4096, 'geom', 'id') AS layer FROM issues |
| 368 | + UNION ALL |
| 369 | + SELECT ST_AsMVT(limit_, 'limit', 4096, 'geom') AS layer FROM limit_ |
| 370 | + ) |
| 371 | + SELECT string_agg(layer, ''::bytea) FROM layers |
| 372 | + """ |
| 373 | + return await db.fetchval(sql, *sql_params) |
340 | 374 |
|
341 | | - if mvt: |
342 | | - sql_params.extend([params.limit, params.zoom, params.tilex, params.tiley]) |
343 | | - sql = f""" |
344 | | - WITH |
345 | | - query AS ({sql}), |
346 | | - issues AS ( |
347 | | - SELECT |
348 | | - (id >> 32)::integer AS id, uuid, coalesce(item, 0) AS item, coalesce(class, 0) AS class, |
349 | | - ST_AsMVTGeom( |
350 | | - ST_Transform(ST_SetSRID(ST_MakePoint(lon, lat), 4326), 3857), |
351 | | - ST_TileEnvelope(${len(sql_params)-2}, ${len(sql_params)-1}, ${len(sql_params)}), |
352 | | - 4096, 0, false |
353 | | - ) AS geom |
354 | | - FROM query |
355 | | - ), |
356 | | - limit_ AS ( |
357 | | - SELECT |
358 | | - ST_AsMVTGeom( |
359 | | - ST_Centroid(ST_TileEnvelope(${len(sql_params)-2}, ${len(sql_params)-1}, ${len(sql_params)})), |
360 | | - ST_TileEnvelope(${len(sql_params)-2}, ${len(sql_params)-1}, ${len(sql_params)}), |
361 | | - 4096, 0, false |
362 | | - ) AS geom |
363 | | - WHERE (SELECT COUNT(*) FROM query) >= ${len(sql_params)-3} |
364 | | - ), |
365 | | - layers AS ( |
366 | | - SELECT ST_AsMVT(issues, 'issues', 4096, 'geom', 'id') AS layer FROM issues |
367 | | - UNION ALL |
368 | | - SELECT ST_AsMVT(limit_, 'limit', 4096, 'geom') AS layer FROM limit_ |
369 | | - ) |
370 | | - SELECT string_agg(layer, ''::bytea) FROM layers |
371 | | - """ |
372 | | - return await db.fetchval(sql, *sql_params) |
373 | 375 |
|
| 376 | +async def _gets(db: Connection, params: Params) -> List[Dict[str, Any]]: |
| 377 | + sql, sql_params = _get_sql(db, params) |
374 | 378 | results = list(await db.fetch(sql, *sql_params)) |
375 | 379 | return list( |
376 | 380 | map( |
|
0 commit comments