use coalsce() instead of indexless postgis functions

ST_Intersects is deemed too expensive by the query planer which
leads to odd plans when index use is avoided.
This commit is contained in:
Sarah Hoffmann
2023-08-12 19:14:13 +02:00
parent cab2a74740
commit 611b925368

View File

@@ -70,11 +70,12 @@ class Geometry(types.UserDefinedType): # type: ignore[type-arg]
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: