Пример #1
0
 /**
  * Find row number of a record in the result set of a selection. The selection
  * must be ordered.
  * @param ReadSelectionBuilder $selection A read selection.
  * @param Record $record A record.
  * @throws InvalidSelectionException If the selection is not ordered.
  * @return int Row number.
  */
 public function rowNumberSelection(ReadSelectionBuilder $selection, Record $record)
 {
     if (empty($selection->orderBy)) {
         throw new InvalidSelectionException(tr('Can\'t find row number in selection without ordering'));
     }
     $condition = new ConditionBuilder();
     foreach ($selection->orderBy as $orderBy) {
         $column = $orderBy['column'];
         $type = $this->getType($column)->placeholder;
         if ($orderBy['descending']) {
             $condition->and($column . ' > ' . $type, $record->{$column});
         } else {
             $condition->and($column . ' < ' . $type, $record->{$column});
         }
     }
     return $selection->and($condition)->count() + 1;
 }