in spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/JoinQueryDetector.scala [57:155]
private def getJoinDetection(
left: LogicalPlan,
right: LogicalPlan,
predicate: ST_Predicate,
extraCondition: Option[Expression] = None): Option[JoinQueryDetection] = {
predicate match {
case ST_Contains(Seq(leftShape, rightShape)) =>
Some(
JoinQueryDetection(
left,
right,
leftShape,
rightShape,
SpatialPredicate.CONTAINS,
false,
extraCondition))
case ST_Intersects(Seq(leftShape, rightShape)) =>
Some(
JoinQueryDetection(
left,
right,
leftShape,
rightShape,
SpatialPredicate.INTERSECTS,
false,
extraCondition))
case ST_Within(Seq(leftShape, rightShape)) =>
Some(
JoinQueryDetection(
left,
right,
leftShape,
rightShape,
SpatialPredicate.WITHIN,
false,
extraCondition))
case ST_Covers(Seq(leftShape, rightShape)) =>
Some(
JoinQueryDetection(
left,
right,
leftShape,
rightShape,
SpatialPredicate.COVERS,
false,
extraCondition))
case ST_CoveredBy(Seq(leftShape, rightShape)) =>
Some(
JoinQueryDetection(
left,
right,
leftShape,
rightShape,
SpatialPredicate.COVERED_BY,
false,
extraCondition))
case ST_Overlaps(Seq(leftShape, rightShape)) =>
Some(
JoinQueryDetection(
left,
right,
leftShape,
rightShape,
SpatialPredicate.OVERLAPS,
false,
extraCondition))
case ST_Touches(Seq(leftShape, rightShape)) =>
Some(
JoinQueryDetection(
left,
right,
leftShape,
rightShape,
SpatialPredicate.TOUCHES,
false,
extraCondition))
case ST_Equals(Seq(leftShape, rightShape)) =>
Some(
JoinQueryDetection(
left,
right,
leftShape,
rightShape,
SpatialPredicate.EQUALS,
false,
extraCondition))
case ST_Crosses(Seq(leftShape, rightShape)) =>
Some(
JoinQueryDetection(
left,
right,
leftShape,
rightShape,
SpatialPredicate.CROSSES,
false,
extraCondition))
case _ => None
}
}