Viewing file: ArrayStatement.php (4.85 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Doctrine\DBAL\Cache;
use ArrayIterator; use Doctrine\DBAL\Driver\FetchUtils; use Doctrine\DBAL\Driver\Result; use Doctrine\DBAL\Driver\ResultStatement; use Doctrine\DBAL\FetchMode; use InvalidArgumentException; use IteratorAggregate; use PDO; use ReturnTypeWillChange;
use function array_merge; use function array_values; use function count; use function reset;
/** * @deprecated */ class ArrayStatement implements IteratorAggregate, ResultStatement, Result { /** @var mixed[] */ private $data;
/** @var int */ private $columnCount = 0;
/** @var int */ private $num = 0;
/** @var int */ private $defaultFetchMode = FetchMode::MIXED;
/** * @param mixed[] $data */ public function __construct(array $data) { $this->data = $data; if (! count($data)) { return; }
$this->columnCount = count($data[0]); }
/** * {@inheritdoc} * * @deprecated Use free() instead. */ public function closeCursor() { $this->free();
return true; }
/** * {@inheritdoc} */ public function rowCount() { return count($this->data); }
/** * {@inheritdoc} */ public function columnCount() { return $this->columnCount; }
/** * {@inheritdoc} * * @deprecated Use one of the fetch- or iterate-related methods. */ public function setFetchMode($fetchMode, $arg2 = null, $arg3 = null) { if ($arg2 !== null || $arg3 !== null) { throw new InvalidArgumentException('Caching layer does not support 2nd/3rd argument to setFetchMode()'); }
$this->defaultFetchMode = $fetchMode;
return true; }
/** * {@inheritdoc} * * @deprecated Use iterateNumeric(), iterateAssociative() or iterateColumn() instead. */ #[ReturnTypeWillChange] public function getIterator() { $data = $this->fetchAll();
return new ArrayIterator($data); }
/** * {@inheritdoc} * * @deprecated Use fetchNumeric(), fetchAssociative() or fetchOne() instead. */ public function fetch($fetchMode = null, $cursorOrientation = PDO::FETCH_ORI_NEXT, $cursorOffset = 0) { if (! isset($this->data[$this->num])) { return false; }
$row = $this->data[$this->num++]; $fetchMode = $fetchMode ?: $this->defaultFetchMode;
if ($fetchMode === FetchMode::ASSOCIATIVE) { return $row; }
if ($fetchMode === FetchMode::NUMERIC) { return array_values($row); }
if ($fetchMode === FetchMode::MIXED) { return array_merge($row, array_values($row)); }
if ($fetchMode === FetchMode::COLUMN) { return reset($row); }
throw new InvalidArgumentException('Invalid fetch-style given for fetching result.'); }
/** * {@inheritdoc} * * @deprecated Use fetchAllNumeric(), fetchAllAssociative() or fetchFirstColumn() instead. */ public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null) { $rows = []; while ($row = $this->fetch($fetchMode)) { $rows[] = $row; }
return $rows; }
/** * {@inheritdoc} * * @deprecated Use fetchOne() instead. */ public function fetchColumn($columnIndex = 0) { $row = $this->fetch(FetchMode::NUMERIC);
// TODO: verify that return false is the correct behavior return $row[$columnIndex] ?? false; }
/** * {@inheritdoc} */ public function fetchNumeric() { $row = $this->doFetch();
if ($row === false) { return false; }
return array_values($row); }
/** * {@inheritdoc} */ public function fetchAssociative() { return $this->doFetch(); }
/** * {@inheritdoc} */ public function fetchOne() { $row = $this->doFetch();
if ($row === false) { return false; }
return reset($row); }
/** * {@inheritdoc} */ public function fetchAllNumeric(): array { return FetchUtils::fetchAllNumeric($this); }
/** * {@inheritdoc} */ public function fetchAllAssociative(): array { return FetchUtils::fetchAllAssociative($this); }
/** * {@inheritdoc} */ public function fetchFirstColumn(): array { return FetchUtils::fetchFirstColumn($this); }
public function free(): void { $this->data = []; }
/** * @return mixed|false */ private function doFetch() { if (! isset($this->data[$this->num])) { return false; }
return $this->data[$this->num++]; } }
|