]> git.openstreetmap.org Git - nominatim.git/commitdiff
use coalsce() instead of indexless postgis functions
authorSarah Hoffmann <lonvia@denofr.de>
Sat, 12 Aug 2023 17:14:13 +0000 (19:14 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Sat, 12 Aug 2023 17:14:13 +0000 (19:14 +0200)
ST_Intersects is deemed too expensive by the query planer which
leads to odd plans when index use is avoided.

nominatim/db/sqlalchemy_types.py

index 9e1f9fcecf8c1dc819e616bbbe708f40ccfd7949..7b9590363db2a055962e61ac2d850397cfc0e5d2 100644 (file)
@@ -70,11 +70,12 @@ class Geometry(types.UserDefinedType): # type: ignore[type-arg]
 
 
         def ST_DWithin_no_index(self, other: SaColumn, distance: SaColumn) -> SaColumn:
 
 
         def ST_DWithin_no_index(self, other: SaColumn, distance: SaColumn) -> SaColumn:
-            return sa.func._ST_DWithin(self, other, distance, type_=sa.Boolean)
+            return sa.func.ST_DWithin(sa.func.coalesce(sa.null(), self),
+                                      other, distance, type_=sa.Boolean)
 
 
 
 
-        def ST_Intersects_no_index(self, other: SaColumn) -> SaColumn:
-            return sa.func._ST_Intersects(self, other, type_=sa.Boolean)
+        def ST_Intersects_no_index(self, other: SaColumn) -> 'sa.Operators':
+            return sa.func.coalesce(sa.null(), self).op('&&')(other)
 
 
         def ST_Distance(self, other: SaColumn) -> SaColumn:
 
 
         def ST_Distance(self, other: SaColumn) -> SaColumn: