@Override
  public PlanNode optimize(PlanNode plan, Context context) {
    requireNonNull(plan, "plan is null");

    Visitor visitor = new Visitor(metadata, SymbolMapper::symbolMapper);
    PlanAndMappings result = plan.accept(visitor, UnaliasContext.empty());
    return result.getRoot();
  }
Re-maps symbol references that are just aliases of each other (e.g., due to projections like
{@code $0 := $1})

<p>E.g.,

<p>{@code Output[$0, $1] -> Project[$0 := $2, $1 := $3 * 100] -> Aggregate[$2, $3 := sum($4)] ->
...}

<p>gets rewritten as

<p>{@code Output[$2, $1] -> Project[$2, $1 := $3 * 100] -> Aggregate[$2, $3 := sum($4)] -> ...}
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/UnaliasSymbolReferences.java