/**
  * Performs conversion of SELECT statement
  */
 protected function addSelectStatement()
 {
     foreach ($this->definition['columns'] as $column) {
         $columnName = $column['name'];
         $fieldName = $this->getFieldName($columnName);
         $functionExpr = null;
         $functionReturnType = null;
         if (!empty($column['func'])) {
             $function = $this->functionProvider->getFunction($column['func']['name'], $column['func']['group_name'], $column['func']['group_type']);
             $functionExpr = $function['expr'];
             if (isset($function['return_type'])) {
                 $functionReturnType = $function['return_type'];
             } else {
                 $functionReturnType = null;
             }
         }
         $isDistinct = !empty($column['distinct']);
         $tableAlias = $this->getTableAliasForColumn($columnName);
         if (isset($column['label'])) {
             $columnLabel = $column['label'];
         } else {
             $columnLabel = $fieldName;
         }
         $this->addSelectColumn($this->getEntityClassName($columnName), $tableAlias, $fieldName, $this->buildColumnExpression($columnName, $tableAlias, $fieldName), $this->getColumnAlias($this->buildColumnAliasKey($column)), $columnLabel, $functionExpr, $functionReturnType, $isDistinct);
     }
 }
 /**
  * @param array $column
  *
  * @return array Where array has elements: string|FunctionInterface|null, string|null
  */
 protected function createColumnFunction(array $column)
 {
     if (!empty($column['func'])) {
         $function = $this->functionProvider->getFunction($column['func']['name'], $column['func']['group_name'], $column['func']['group_type']);
         $functionExpr = $function['expr'];
         $functionReturnType = isset($function['return_type']) ? $function['return_type'] : null;
         return [$functionExpr, $functionReturnType];
     }
     return [null, null];
 }