core/src/main/java/com/orientechnologies/orient/core/sql/executor/OSelectExecutionPlanner.java
protected static OProjection translateDistinct(OProjection projection) {
    if (projection != null && projection.getItems().size() == 1) {
      if (isDistinct(projection.getItems().get(0))) {
        projection = projection.copy();
        OProjectionItem item = projection.getItems().get(0);
        OFunctionCall function = ((OBaseExpression) item.getExpression().getMathExpression()).getIdentifier().getLevelZero()
            .getFunctionCall();
        OExpression exp = function.getParams().get(0);
        OProjectionItem resultItem = new OProjectionItem(-1);
        resultItem.setAlias(item.getAlias());
        resultItem.setExpression(exp.copy());
        OProjection result = new OProjection(-1);
        result.setItems(new ArrayList<>());
        result.setDistinct(true);
        result.getItems().add(resultItem);
        return result;
      }
    }
    return projection;
  }
protected static OProjection translateDistinct(OProjection projection) {
    if (projection != null && projection.getItems().size() == 1) {
      if (isDistinct(projection.getItems().get(0))) {
        projection = projection.copy();
        OProjectionItem item = projection.getItems().get(0);
        OFunctionCall function = ((OBaseExpression) item.getExpression().getMathExpression()).getIdentifier().getLevelZero()
            .getFunctionCall();
        OExpression exp = function.getParams().get(0);
        OProjectionItem resultItem = new OProjectionItem(-1);
        resultItem.setAlias(item.getAlias());
        resultItem.setExpression(exp.copy());
        OProjection result = new OProjection(-1);
        result.setItems(new ArrayList<>());
        result.setDistinct(true);
        result.getItems().add(resultItem);
        return result;
      }
    }
    return projection;
  }
protected static OProjection translateDistinct ( OProjection projection ) { if ( projection != null && projection . getItems ( ) . size ( ) == 1 ) { if ( isDistinct ( projection . getItems ( ) . get ( 0 ) ) ) { projection = projection . copy ( ) ; OProjectionItem item = projection . getItems ( ) . get ( 0 ) ; OFunctionCall function = ( ( OBaseExpression ) item . getExpression ( ) . getMathExpression ( ) ) . getIdentifier ( ) . getLevelZero ( ) . getFunctionCall ( ) ; OExpression exp = function . getParams ( ) . get ( 0 ) ; OProjectionItem resultItem = new OProjectionItem ( - 1 ) ; resultItem . setAlias ( item . getAlias ( ) ) ; resultItem . setExpression ( exp . copy ( ) ) ; OProjection result = new OProjection ( - 1 ) ; result . setItems ( new ArrayList <> ( ) ) ; result . setDistinct ( true ) ; result . getItems ( ) . add ( resultItem ) ; return result ; } } return projection ; }
for backward compatibility, translate "distinct(foo)" to "DISTINCT foo". This method modifies the projection itself.

@param projection the projection
for backward compatibility translate distinct ( foo ) to DISTINCT foo . This method modifies the projection itself .