in spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/strategy/join/JoinQueryDetector.scala [897:910]
private def isEquiJoin(
left: LogicalPlan,
right: LogicalPlan,
condition: Option[Expression]): Boolean = {
val predicates = condition.map(splitConjunctivePredicates).getOrElse(Nil)
predicates.exists {
case EqualTo(l, r) if l.references.isEmpty || r.references.isEmpty => false
case EqualTo(l, r) if matches(l, left) && matches(r, right) => true
case EqualTo(l, r) if matches(l, right) && matches(r, left) => true
case EqualNullSafe(l, r) if matches(l, left) && matches(r, right) => true
case EqualNullSafe(l, r) if matches(l, right) && matches(r, left) => true
case _ => false
}
}