@Override
  public Pattern<CorrelatedJoinNode> getPattern() {
    return PATTERN;
  }
Scalar filter scan query is something like:

<pre>
    SELECT a,b,c FROM rel WHERE a = correlated1 AND b = correlated2
</pre>

<p>This optimizer can rewrite to mark distinct and filter over a left outer join:

<p>From:

<pre>
- CorrelatedJoin (with correlation list: [C])
  - (input) plan which produces symbols: [A, B, C]
  - (scalar subquery) Project F
    - Filter(D = C AND E > 5)
      - plan which produces symbols: [D, E, F]
</pre>

to:

<pre>
- Filter(CASE isDistinct WHEN true THEN true ELSE fail('Scalar sub-query has returned multiple rows'))
  - MarkDistinct(isDistinct)
    - CorrelatedJoin (with correlation list: [C])
      - AssignUniqueId(adds symbol U)
        - (input) plan which produces symbols: [A, B, C]
      - non scalar subquery
</pre>

<p>This must be run after aggregation decorrelation rules.

<p>This rule is used to support non-aggregation scalar subquery.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/TransformCorrelatedScalarSubquery.java