@Override
  protected Boolean visitSimpleCaseExpression(
      SimpleCaseExpression actual, Expression expectedExpression) {
    if (!(expectedExpression instanceof SimpleCaseExpression)) {
      return false;
    }
    SimpleCaseExpression expected = (SimpleCaseExpression) expectedExpression;

    return process(actual.getOperand(), expected.getOperand())
        && process(actual.getWhenClauses(), expected.getWhenClauses())
        && process(actual.getDefaultValue(), expected.getDefaultValue());
  }
Expression visitor which verifies if given expression (actual) is matching other expression given
as context (expected). Visitor returns true if plans match to each other.

<p>Note that actual expression is using real name references (table columns etc) while expected
expression is using symbol aliases. Given symbol alias can point only to one real name reference.

<p>Example:

<pre>
NOT (orderkey = 3 AND custkey = 3 AND orderkey < 10)
</pre>

will match to:

<pre>
NOT (X = 3 AND Y = 3 AND X < 10)
</pre>

, but will not match to:

<pre>
NOT (X = 3 AND Y = 3 AND Z < 10)
</pre>

nor to

<pre>
NOT (X = 3 AND X = 3 AND X < 10)
</pre>
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/assertions/ExpressionVerifier.java