1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
<?php
declare(strict_types=1);
namespace Doctrine\ORM\Query;
use ArrayAccess;
use Doctrine\Deprecations\Deprecation;
use Doctrine\ORM\AbstractQuery;
use Iterator;
use ReturnTypeWillChange;
use function key;
use function next;
use function reset;
/**
* @deprecated This class will be removed in 3.0 without replacement.
*
* @template-implements Iterator<TreeWalker>
* @template-implements ArrayAccess<int, TreeWalker>
*/
class TreeWalkerChainIterator implements Iterator, ArrayAccess
{
/** @var class-string<TreeWalker>[] */
private $walkers = [];
/** @var TreeWalkerChain */
private $treeWalkerChain;
/** @var AbstractQuery */
private $query;
/** @var ParserResult */
private $parserResult;
/**
* @param AbstractQuery $query
* @param ParserResult $parserResult
*/
public function __construct(TreeWalkerChain $treeWalkerChain, $query, $parserResult)
{
Deprecation::trigger(
'doctrine/orm',
'https://github.com/doctrine/orm/pull/9511',
'%s is deprecated and will be removed without replacement.',
self::class
);
$this->treeWalkerChain = $treeWalkerChain;
$this->query = $query;
$this->parserResult = $parserResult;
}
/**
* @return string|false
* @psalm-return class-string<TreeWalker>|false
*/
#[ReturnTypeWillChange]
public function rewind()
{
return reset($this->walkers);
}
/** @return TreeWalker|null */
#[ReturnTypeWillChange]
public function current()
{
return $this->offsetGet(key($this->walkers));
}
/** @return int */
#[ReturnTypeWillChange]
public function key()
{
return key($this->walkers);
}
/** @return TreeWalker|null */
#[ReturnTypeWillChange]
public function next()
{
next($this->walkers);
return $this->offsetGet(key($this->walkers));
}
/**
* {@inheritdoc}
*
* @return bool
*/
#[ReturnTypeWillChange]
public function valid()
{
return key($this->walkers) !== null;
}
/**
* @param mixed $offset
* @psalm-param array-key|null $offset
*
* @return bool
*/
#[ReturnTypeWillChange]
public function offsetExists($offset)
{
return isset($this->walkers[$offset ?? '']);
}
/**
* @param mixed $offset
* @psalm-param array-key|null $offset
*
* @return TreeWalker|null
*/
#[ReturnTypeWillChange]
public function offsetGet($offset)
{
if ($this->offsetExists($offset)) {
return new $this->walkers[$offset](
$this->query,
$this->parserResult,
$this->treeWalkerChain->getQueryComponents()
);
}
return null;
}
/**
* {@inheritdoc}
*
* @param string $value
* @psalm-param array-key|null $offset
*
* @return void
*/
#[ReturnTypeWillChange]
public function offsetSet($offset, $value)
{
if ($offset === null) {
$this->walkers[] = $value;
} else {
$this->walkers[$offset] = $value;
}
}
/**
* @param mixed $offset
* @psalm-param array-key|null $offset
*
* @return void
*/
#[ReturnTypeWillChange]
public function offsetUnset($offset)
{
if ($this->offsetExists($offset)) {
unset($this->walkers[$offset ?? '']);
}
}
}
|