@Override
  public Pattern<ApplyNode> getPattern() {
    return PATTERN;
  }
This optimizers looks for InPredicate expressions in ApplyNodes and replaces the nodes with
SemiJoin nodes.

<p>Plan before optimizer:

<pre>
Filter(a IN b):
  Apply
    - correlation: []  // empty
    - input: some plan A producing symbol a
    - subquery: some plan B producing symbol b
</pre>

<p>Plan after optimizer:

<pre>
Filter(semijoinresult):
  SemiJoin
    - source: plan A
    - filteringSource: B
    - sourceJoinSymbol: symbol a
    - filteringSourceJoinSymbol: symbol b
    - semiJoinOutput: semijoinresult
</pre>
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/TransformUncorrelatedInPredicateSubqueryToSemiJoin.java