code: public HashMap<AbstractExpression, Set<AbstractExpression> > getAllEquivalenceFilters()
      {
          HashMap<AbstractExpression, Set<AbstractExpression> > equivalenceSet =
                  new HashMap< >();
          ArrayDeque<JoinNode> joinNodes = new ArrayDeque<>();
          // Iterate over the join nodes to collect their join and where equivalence filter expressions
          joinNodes.add(this);
          while ( ! joinNodes.isEmpty()) {
              JoinNode joinNode = joinNodes.poll();
              joinNode.collectEquivalenceFilters(equivalenceSet, joinNodes);
          }
          return equivalenceSet;
      }
docs: Summarize the WHERE clause expressions of type COMPARE_EQUAL for the entire statement,
  that can be used to determine query statement partitioning.
  This is tricky in the case of JOIN filters because "partition_column = constant"
  does not exclude joined result rows from occurring on all partitions.
  This generally still requires a multi-partition plan.
  But a join filter of the form "outer.partition_column = inner.partition_column" DOES allow
  a multi-partition join to be executed in parallel on each partition -- each tuple on the OUTER
  side will either get properly matched OR get a null-padded tuple on its local partition and any
  differently-valued inner side rows that may exist on other partitions have no bearing on this.
  So ALL manner of where clause but ONLY inner-outer column=column JOIN clauses can
  influence partitioning.