/**
  * Applies operation to source and returns modified source.
  *
  * @param Query $src
  * @param OperationInterface|SortOperation $operation
  * @return Query
  */
 public function process($src, OperationInterface $operation)
 {
     $field = $operation->getField();
     $order = $operation->getOrder();
     $src->order .= "ORDER BY {$field} {$order}";
     return $src;
 }
 /**
  * Applies operation to data source and returns modified data source.
  *
  * @param QueryBuilder $src
  * @param OperationInterface|SortOperation $operation
  * @return QueryBuilder
  */
 public function process($src, OperationInterface $operation)
 {
     $field = $operation->getField();
     $order = $operation->getOrder();
     $src->orderBy($field, $order);
     return $src;
 }
 /**
  * Applies operation to source and returns modified source.
  *
  * @param $src
  * @param OperationInterface|SortOperation $operation
  * @return mixed
  */
 public function process($src, OperationInterface $operation)
 {
     $field = $operation->getField();
     $desc = $operation->getOrder() === SortOperation::DESC;
     usort($src, function ($row1, $row2) use($field, $desc) {
         $val1 = mp\getValue($row1, $field);
         $val2 = mp\getValue($row2, $field);
         if ($val1 == $val2) {
             return 0;
         }
         $res = $val1 < $val2 ? -1 : 1;
         return $desc ? -$res : $res;
     });
     return $src;
 }