core/src/main/java/com/orientechnologies/orient/core/sql/executor/OSelectExecutionPlanner.java
private static List<OProjectionItem> calculateAdditionalOrderByProjections(Set<String> allAliases, OOrderBy orderBy) {
    List<OProjectionItem> result = new ArrayList<>();
    int nextAliasCount = 0;
    if (orderBy != null && orderBy.getItems() != null || !orderBy.getItems().isEmpty()) {
      for (OOrderByItem item : orderBy.getItems()) {
        if (!allAliases.contains(item.getAlias())) {
          OProjectionItem newProj = new OProjectionItem(-1);
          if (item.getAlias() != null) {
            newProj.setExpression(new OExpression(new OIdentifier(item.getAlias()), item.getModifier()));
          } else if (item.getRecordAttr() != null) {
            ORecordAttribute attr = new ORecordAttribute(-1);
            attr.setName(item.getRecordAttr());
            newProj.setExpression(new OExpression(attr, item.getModifier()));
          } else if (item.getRid() != null) {
            OExpression exp = new OExpression(-1);
            exp.setRid(item.getRid().copy());
            newProj.setExpression(exp);
          }
          OIdentifier newAlias = new OIdentifier("_$$$ORDER_BY_ALIAS$$$_" + (nextAliasCount++));
          newProj.setAlias(newAlias);
          item.setAlias(newAlias.getStringValue());
          item.setModifier(null);
          result.add(newProj);
        }
      }
    }
    return result;
  }
private static List<OProjectionItem> calculateAdditionalOrderByProjections(Set<String> allAliases, OOrderBy orderBy) {
    List<OProjectionItem> result = new ArrayList<>();
    int nextAliasCount = 0;
    if (orderBy != null && orderBy.getItems() != null || !orderBy.getItems().isEmpty()) {
      for (OOrderByItem item : orderBy.getItems()) {
        if (!allAliases.contains(item.getAlias())) {
          OProjectionItem newProj = new OProjectionItem(-1);
          if (item.getAlias() != null) {
            newProj.setExpression(new OExpression(new OIdentifier(item.getAlias()), item.getModifier()));
          } else if (item.getRecordAttr() != null) {
            ORecordAttribute attr = new ORecordAttribute(-1);
            attr.setName(item.getRecordAttr());
            newProj.setExpression(new OExpression(attr, item.getModifier()));
          } else if (item.getRid() != null) {
            OExpression exp = new OExpression(-1);
            exp.setRid(item.getRid().copy());
            newProj.setExpression(exp);
          }
          OIdentifier newAlias = new OIdentifier("_$$$ORDER_BY_ALIAS$$$_" + (nextAliasCount++));
          newProj.setAlias(newAlias);
          item.setAlias(newAlias.getStringValue());
          item.setModifier(null);
          result.add(newProj);
        }
      }
    }
    return result;
  }
private static List < OProjectionItem > calculateAdditionalOrderByProjections ( Set < String > allAliases , OOrderBy orderBy ) { List < OProjectionItem > result = new ArrayList <> ( ) ; int nextAliasCount = 0 ; if ( orderBy != null && orderBy . getItems ( ) != null || ! orderBy . getItems ( ) . isEmpty ( ) ) { for ( OOrderByItem item : orderBy . getItems ( ) ) { if ( ! allAliases . contains ( item . getAlias ( ) ) ) { OProjectionItem newProj = new OProjectionItem ( - 1 ) ; if ( item . getAlias ( ) != null ) { newProj . setExpression ( new OExpression ( new OIdentifier ( item . getAlias ( ) ) , item . getModifier ( ) ) ) ; } else if ( item . getRecordAttr ( ) != null ) { ORecordAttribute attr = new ORecordAttribute ( - 1 ) ; attr . setName ( item . getRecordAttr ( ) ) ; newProj . setExpression ( new OExpression ( attr , item . getModifier ( ) ) ) ; } else if ( item . getRid ( ) != null ) { OExpression exp = new OExpression ( - 1 ) ; exp . setRid ( item . getRid ( ) . copy ( ) ) ; newProj . setExpression ( exp ) ; } OIdentifier newAlias = new OIdentifier ( "_$$$ORDER_BY_ALIAS$$$_" + ( nextAliasCount ++ ) ) ; newProj . setAlias ( newAlias ) ; item . setAlias ( newAlias . getStringValue ( ) ) ; item . setModifier ( null ) ; result . add ( newProj ) ; } } } return result ; }
given a list of aliases (present in the existing projections) calculates a list of additional projections to add to the
existing projections to allow ORDER BY calculation. The sorting clause will be modified with new replaced aliases

@param allAliases existing aliases in the projection
@param orderBy    sorting clause

@return a list of additional projections to add to the existing projections to allow ORDER BY calculation (empty if nothing has
to be added).
given a list of aliases ( present in the existing projections ) calculates a list of additional projections to add to the existing projections to allow ORDER BY calculation . The sorting clause will be modified with new replaced aliases