X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/1f0796778754d8df0dfab9dd01302e26a397f064..2ce2d031fa3d56a915671d46172dd08b4cc43b87:/src/nominatim_api/sql/sqlalchemy_functions.py diff --git a/src/nominatim_api/sql/sqlalchemy_functions.py b/src/nominatim_api/sql/sqlalchemy_functions.py index 81fc83d6..00830f33 100644 --- a/src/nominatim_api/sql/sqlalchemy_functions.py +++ b/src/nominatim_api/sql/sqlalchemy_functions.py @@ -122,15 +122,18 @@ class IsAddressPoint(sa.sql.functions.GenericFunction[Any]): def __init__(self, table: sa.Table) -> None: super().__init__(table.c.rank_address, - table.c.housenumber, table.c.name) + table.c.housenumber, table.c.name, table.c.address) @compiles(IsAddressPoint) def default_is_address_point(element: IsAddressPoint, compiler: 'sa.Compiled', **kw: Any) -> str: - rank, hnr, name = list(element.clauses) - return "(%s = 30 AND (%s IS NOT NULL OR %s ? 'addr:housename'))" % ( + rank, hnr, name, address = list(element.clauses) + return "(%s = 30 AND (%s IS NULL OR NOT %s ? '_inherited')" \ + " AND (%s IS NOT NULL OR %s ? 'addr:housename'))" % ( compiler.process(rank, **kw), + compiler.process(address, **kw), + compiler.process(address, **kw), compiler.process(hnr, **kw), compiler.process(name, **kw)) @@ -138,9 +141,11 @@ def default_is_address_point(element: IsAddressPoint, @compiles(IsAddressPoint, 'sqlite') def sqlite_is_address_point(element: IsAddressPoint, compiler: 'sa.Compiled', **kw: Any) -> str: - rank, hnr, name = list(element.clauses) - return "(%s = 30 AND coalesce(%s, json_extract(%s, '$.addr:housename')) IS NOT NULL)" % ( + rank, hnr, name, address = list(element.clauses) + return "(%s = 30 AND json_extract(%s, '$._inherited') IS NULL" \ + " AND coalesce(%s, json_extract(%s, '$.addr:housename')) IS NOT NULL)" % ( compiler.process(rank, **kw), + compiler.process(address, **kw), compiler.process(hnr, **kw), compiler.process(name, **kw))