X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/4da4cbfe27a576ae011430b2de205c74435e241b..1f0796778754d8df0dfab9dd01302e26a397f064:/src/nominatim_api/search/db_search_lookups.py diff --git a/src/nominatim_api/search/db_search_lookups.py b/src/nominatim_api/search/db_search_lookups.py index 712cd894..8e411c25 100644 --- a/src/nominatim_api/search/db_search_lookups.py +++ b/src/nominatim_api/search/db_search_lookups.py @@ -15,10 +15,10 @@ from sqlalchemy.ext.compiler import compiles from ..typing import SaFromClause from ..sql.sqlalchemy_types import IntArray -# pylint: disable=consider-using-f-string LookupType = sa.sql.expression.FunctionElement[Any] + class LookupAll(LookupType): """ Find all entries in search_name table that contain all of a given list of tokens using an index for the search. @@ -30,7 +30,7 @@ class LookupAll(LookupType): sa.type_coerce(tokens, IntArray)) -@compiles(LookupAll) # type: ignore[no-untyped-call, misc] +@compiles(LookupAll) def _default_lookup_all(element: LookupAll, compiler: 'sa.Compiled', **kw: Any) -> str: _, col, _, tokens = list(element.clauses) @@ -38,9 +38,9 @@ def _default_lookup_all(element: LookupAll, compiler.process(tokens, **kw)) -@compiles(LookupAll, 'sqlite') # type: ignore[no-untyped-call, misc] +@compiles(LookupAll, 'sqlite') def _sqlite_lookup_all(element: LookupAll, - compiler: 'sa.Compiled', **kw: Any) -> str: + compiler: 'sa.Compiled', **kw: Any) -> str: place, col, colname, tokens = list(element.clauses) return "(%s IN (SELECT CAST(value as bigint) FROM"\ " (SELECT array_intersect_fuzzy(places) as p FROM"\ @@ -50,13 +50,11 @@ def _sqlite_lookup_all(element: LookupAll, " ORDER BY length(places)) as x) as u,"\ " json_each('[' || u.p || ']'))"\ " AND array_contains(%s, %s))"\ - % (compiler.process(place, **kw), - compiler.process(tokens, **kw), - compiler.process(colname, **kw), - compiler.process(col, **kw), - compiler.process(tokens, **kw) - ) - + % (compiler.process(place, **kw), + compiler.process(tokens, **kw), + compiler.process(colname, **kw), + compiler.process(col, **kw), + compiler.process(tokens, **kw)) class LookupAny(LookupType): @@ -69,16 +67,18 @@ class LookupAny(LookupType): super().__init__(table.c.place_id, getattr(table.c, column), column, sa.type_coerce(tokens, IntArray)) -@compiles(LookupAny) # type: ignore[no-untyped-call, misc] + +@compiles(LookupAny) def _default_lookup_any(element: LookupAny, compiler: 'sa.Compiled', **kw: Any) -> str: _, col, _, tokens = list(element.clauses) return "(%s && %s)" % (compiler.process(col, **kw), compiler.process(tokens, **kw)) -@compiles(LookupAny, 'sqlite') # type: ignore[no-untyped-call, misc] + +@compiles(LookupAny, 'sqlite') def _sqlite_lookup_any(element: LookupAny, - compiler: 'sa.Compiled', **kw: Any) -> str: + compiler: 'sa.Compiled', **kw: Any) -> str: place, _, colname, tokens = list(element.clauses) return "%s IN (SELECT CAST(value as bigint) FROM"\ " (SELECT array_union(places) as p FROM reverse_search_name"\ @@ -89,7 +89,6 @@ def _sqlite_lookup_any(element: LookupAny, compiler.process(colname, **kw)) - class Restrict(LookupType): """ Find all entries that contain all of the given tokens. Do not use an index for the search. @@ -101,14 +100,15 @@ class Restrict(LookupType): sa.type_coerce(tokens, IntArray)) -@compiles(Restrict) # type: ignore[no-untyped-call, misc] +@compiles(Restrict) def _default_restrict(element: Restrict, - compiler: 'sa.Compiled', **kw: Any) -> str: + compiler: 'sa.Compiled', **kw: Any) -> str: arg1, arg2 = list(element.clauses) return "(coalesce(null, %s) @> %s)" % (compiler.process(arg1, **kw), compiler.process(arg2, **kw)) -@compiles(Restrict, 'sqlite') # type: ignore[no-untyped-call, misc] + +@compiles(Restrict, 'sqlite') def _sqlite_restrict(element: Restrict, - compiler: 'sa.Compiled', **kw: Any) -> str: + compiler: 'sa.Compiled', **kw: Any) -> str: return "array_contains(%s)" % compiler.process(element.clauses, **kw)