code: @Override
      public void adjustDifferentiatorField(TupleValueExpression tve) {
          int storageIndex = tve.getColumnIndex();
          Integer scanIndex = m_differentiatorMap.get(storageIndex);
          assert(scanIndex != null);
          tve.setDifferentiator(storageIndex);
      }
docs: When a project node is added to the top of the plan, we need to adjust
  the differentiator field of TVEs to reflect differences in the scan
  schema vs the storage schema of a table, so that fields with duplicate names
  produced by expanding "SELECT *" can resolve correctly.
  
  We recurse until we find either a join node or a scan node.
  
  For scan nodes, we need to reflect the difference between the
  storage order of columns produced by a subquery, and the columns
  that are actually projected (via an inlined project) from the scan,
  since unused columns are typically omitted from the output schema
  of the scan.
  
  @param  tve