From bf6655a534a6775d30cafa67bd801276bda1d98d Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 13 Aug 2024 23:45:21 +0200 Subject: =?UTF-8?q?VERSION=200.2=20doctrine=20ORM=20et=20entit=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vendor/doctrine/orm/src/Query/TreeWalkerChain.php | 88 +++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 vendor/doctrine/orm/src/Query/TreeWalkerChain.php (limited to 'vendor/doctrine/orm/src/Query/TreeWalkerChain.php') diff --git a/vendor/doctrine/orm/src/Query/TreeWalkerChain.php b/vendor/doctrine/orm/src/Query/TreeWalkerChain.php new file mode 100644 index 0000000..7bb3051 --- /dev/null +++ b/vendor/doctrine/orm/src/Query/TreeWalkerChain.php @@ -0,0 +1,88 @@ +> + */ + private array $walkers = []; + + /** + * {@inheritDoc} + */ + public function __construct( + private readonly AbstractQuery $query, + private readonly ParserResult $parserResult, + private array $queryComponents, + ) { + } + + /** + * Returns the internal queryComponents array. + * + * {@inheritDoc} + */ + public function getQueryComponents(): array + { + return $this->queryComponents; + } + + /** + * Adds a tree walker to the chain. + * + * @param string $walkerClass The class of the walker to instantiate. + * @psalm-param class-string $walkerClass + */ + public function addTreeWalker(string $walkerClass): void + { + $this->walkers[] = $walkerClass; + } + + public function walkSelectStatement(AST\SelectStatement $selectStatement): void + { + foreach ($this->getWalkers() as $walker) { + $walker->walkSelectStatement($selectStatement); + + $this->queryComponents = $walker->getQueryComponents(); + } + } + + public function walkUpdateStatement(AST\UpdateStatement $updateStatement): void + { + foreach ($this->getWalkers() as $walker) { + $walker->walkUpdateStatement($updateStatement); + } + } + + public function walkDeleteStatement(AST\DeleteStatement $deleteStatement): void + { + foreach ($this->getWalkers() as $walker) { + $walker->walkDeleteStatement($deleteStatement); + } + } + + /** @psalm-return Generator */ + private function getWalkers(): Generator + { + foreach ($this->walkers as $walkerClass) { + yield new $walkerClass($this->query, $this->parserResult, $this->queryComponents); + } + } +} -- cgit v1.2.3