make get_addressdata calls cachable

VALUEs() is not a cachable construct in SQLAlchemy, so use arrays
instead. Also add a special case for single results, the usual result
for reverse queries.
This commit is contained in:
Sarah Hoffmann
2023-07-06 10:54:56 +02:00
parent 9cb9b670d1
commit e67355ab0e
2 changed files with 70 additions and 35 deletions

View File

@@ -10,7 +10,7 @@ SQLAlchemy definitions for all tables used by the frontend.
from typing import Any
import sqlalchemy as sa
from sqlalchemy.dialects.postgresql import HSTORE, ARRAY, JSONB
from sqlalchemy.dialects.postgresql import HSTORE, ARRAY, JSONB, array
from sqlalchemy.dialects.sqlite import JSON as sqlite_json
from nominatim.db.sqlalchemy_types import Geometry
@@ -21,6 +21,7 @@ class PostgresTypes:
Composite = HSTORE
Json = JSONB
IntArray = ARRAY(sa.Integer()) #pylint: disable=invalid-name
to_array = array
class SqliteTypes:
@@ -30,6 +31,12 @@ class SqliteTypes:
Json = sqlite_json
IntArray = sqlite_json
@staticmethod
def to_array(arr: Any) -> Any:
""" Sqlite has no special conversion for arrays.
"""
return arr
#pylint: disable=too-many-instance-attributes
class SearchTables: