ST_Intersects is deemed too expensive by the query planer which
leads to odd plans when index use is avoided.
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: