Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow queries to be "explained" in WebProfilerBundle #7

Closed
guilhermeblanco opened this issue Jan 16, 2012 · 12 comments
Closed

Allow queries to be "explained" in WebProfilerBundle #7

guilhermeblanco opened this issue Jan 16, 2012 · 12 comments
Assignees

Comments

@guilhermeblanco
Copy link
Member

Hi,

Currently it's possible to view the queries execute and parameters used.
It would be awesome if we also add a link close the query allowing to execute the EXPLAIN command, so people could also optimize Indexes if necessary.

Cheers,

Guilherme Blanco

@ghost ghost assigned stof Jan 16, 2012
@stof
Copy link
Member

stof commented Jan 16, 2012

I really like the idea. This will require some refactoring of the data collector (and of course the displaying in the webprofiler).

I will work on it this weekend.

@Tobion
Copy link
Contributor

Tobion commented Jan 20, 2012

Related to symfony/symfony#2930

@stof
Copy link
Member

stof commented Jan 20, 2012

@Tobion It is a totally different thing. When explaining the query, I will never replace the parameters by hand. I will simply let PDO bind them when running the EXPLAIN query.

@Tobion
Copy link
Contributor

Tobion commented Jan 20, 2012

I see, so you also want to provide a UI for the EXPLAIN result.

@stof
Copy link
Member

stof commented Jan 20, 2012

This cannot be implemented currently.
The DBAL logger is called before conversion from the PHP values to the database values. Because of this, the profiler has to sanitize the queries because the parameters may not be serializable. So we cannot execute the query again with EXPLAIN.as we are not able to bind the parameters again.

Btw, the feature request linked by @Tobion cannot be implemented either for the same reason

@Tobion
Copy link
Contributor

Tobion commented Jan 20, 2012

I think it should be changed in that the DBAL logger only logs the database values. The PHP values are not usefull in this case.

@stof
Copy link
Member

stof commented Jan 20, 2012

@beberlei what do you think about it ?

@guilhermeblanco
Copy link
Member Author

@stof I'm ok with this change, specially because this currently means Logger is unusable to log, so against its concept.

Even though, this change may be considered as a BC break, it sounds like a bug to me (because what is logged is not actually the query executed neither the parameters are the correct ones)

@stof
Copy link
Member

stof commented Jan 21, 2012

@guilhermeblanco anyway, to be able to use such change in the DBAL logger for Symfony 2.1, we need to have this change in Doctrine 2.2. Is it too late already ?

@guilhermeblanco
Copy link
Member Author

@stof it will depends of how @beberlei is going to consider this
. I'd consider as a bug, so fixing it would be valid. If he also considers on this perspective, it will be in 2.2

@beberlei
Copy link
Member

@stof I am +1, but i cant yet see how it works in the code. Happily awaiting a PR. Will merge this into 2.2

fabpot added a commit to symfony/symfony that referenced this issue Jan 23, 2012
Commits
-------

e37783f [DoctrineBridge] Refactored the query sanitization in the collector
3b260d2 Refactored the collector to separate the loggers per connection

Discussion
----------

Doctrine collector

Bug fix: no
Feature addition: yes
Backwards compatibility break: yes (for the end user, it will require deleting old profiler data)
Symfony2 tests pass: yes ![Build Status](https://secure.travis-ci.org/stof/symfony.png?branch=doctrine_collector)

This refactors the Doctrine collector to allow implementing doctrine/DoctrineBundle#7
The first commit splits the logging of queries per connection to be able to know which connection was used instead of using a shared stack.

The second commit refactors the sanitation of the parameters to apply the DBAL conversion and then keep the param whenever possible (i.e. when we are sure it is serializable). Such queries will then be explainable in the profiler as we will be able to use the parameters again. Due to the way PDO works, the only cases where we would get an unexplainable queries due to the parameters are queries using a LOB parameter (as it is a resource) or broken queries (passing an object to PDO for instance). And this second case does not make sense to explain the query of course.

---------------------------------------------------------------------------

by stof at 2012-01-23T12:32:16Z

Merging this PR should be synchronized with the DoctrineBundle PR due to the BC break in the collector
@stof
Copy link
Member

stof commented Jan 23, 2012

Implemented by #12

@stof stof closed this as completed Jan 23, 2012
ostrolucky added a commit that referenced this issue Feb 20, 2024
Otherwise we get
```
Uncaught Exception: InvalidArgumentException Could not get class storage for doctrine\common\collections\selectable
Emitted in /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Provider/ClassLikeStorageProvider.php:45
Stack trace in the forked worker:
#0 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/ClassLikes.php(726): Psalm\Internal\Provider\ClassLikeStorageProvider->get()
#1 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/ClassLikes.php(716): Psalm\Internal\Codebase\ClassLikes->getParentInterfaces()
#2 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Codebase.php(763): Psalm\Internal\Codebase\ClassLikes->interfaceExtends()
#3 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/ObjectComparator.php(357): Psalm\Codebase->interfaceExtends()
#4 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/ObjectComparator.php(117): Psalm\Internal\Type\Comparator\ObjectComparator::isIntersectionShallowlyContainedBy()
#5 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/AtomicTypeComparator.php(350): Psalm\Internal\Type\Comparator\ObjectComparator::isShallowlyContainedBy()
#6 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Type.php(891): Psalm\Internal\Type\Comparator\AtomicTypeComparator::isContainedBy()
#7 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Type.php(768): Psalm\Type::intersectAtomicTypes()
#8 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/Reflector/TypeHintResolver.php(112): Psalm\Type::intersectUnionTypes()
#9 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/Reflector/FunctionLikeNodeScanner.php(405): Psalm\Internal\PhpVisitor\Reflector\TypeHintResolver::resolve()
#10 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/ReflectorVisitor.php(207): Psalm\Internal\PhpVisitor\Reflector\FunctionLikeNodeScanner->start()
#11 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(200): Psalm\Internal\PhpVisitor\ReflectorVisitor->enterNode()
#12 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(114): PhpParser\NodeTraverser->traverseArray()
#13 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(223): PhpParser\NodeTraverser->traverseNode()
#14 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(114): PhpParser\NodeTraverser->traverseArray()
#15 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(223): PhpParser\NodeTraverser->traverseNode()
#16 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(91): PhpParser\NodeTraverser->traverseArray()
#17 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Scanner/FileScanner.php(79): PhpParser\NodeTraverser->traverse()
#18 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(554): Psalm\Internal\Scanner\FileScanner->scan()
#19 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(782): Psalm\Internal\Codebase\Scanner->scanFile()
#20 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php(191): Psalm\Internal\Codebase\Scanner->scanAPath()
#21 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(332): Psalm\Internal\Fork\Pool->__construct()
#22 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(280): Psalm\Internal\Codebase\Scanner->scanFilePaths()
#23 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Codebase.php(505): Psalm\Internal\Codebase\Scanner->scanFiles()
#24 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(510): Psalm\Codebase->scanFiles()
#25 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(374): Psalm\Internal\Analyzer\ProjectAnalyzer->check()
#26 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/psalm(9): Psalm\Internal\Cli\Psalm::run()
#27 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/bin/psalm(119): include('...')
#28 {main} in /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php:379
Stack trace:
#0 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php(413): Psalm\Internal\Fork\Pool->readResultsFromChildren()
#1 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(384): Psalm\Internal\Fork\Pool->wait()
#2 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(280): Psalm\Internal\Codebase\Scanner->scanFilePaths()
#3 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Codebase.php(505): Psalm\Internal\Codebase\Scanner->scanFiles()
#4 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(510): Psalm\Codebase->scanFiles()
#5 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(374): Psalm\Internal\Analyzer\ProjectAnalyzer->check()
#6 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/psalm(9): Psalm\Internal\Cli\Psalm::run()
#7 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/bin/psalm(119): include('...')
#8 {main}
(Psalm 5.22.1@e9dad66e11274315dac27e08349c628c7d6a1a43 crashed due to an uncaught Throwable)
```
ostrolucky added a commit that referenced this issue Feb 20, 2024
Otherwise we get
```
Uncaught Exception: InvalidArgumentException Could not get class storage for doctrine\common\collections\selectable
Emitted in /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Provider/ClassLikeStorageProvider.php:45
Stack trace in the forked worker:
#0 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/ClassLikes.php(726): Psalm\Internal\Provider\ClassLikeStorageProvider->get()
#1 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/ClassLikes.php(716): Psalm\Internal\Codebase\ClassLikes->getParentInterfaces()
#2 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Codebase.php(763): Psalm\Internal\Codebase\ClassLikes->interfaceExtends()
#3 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/ObjectComparator.php(357): Psalm\Codebase->interfaceExtends()
#4 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/ObjectComparator.php(117): Psalm\Internal\Type\Comparator\ObjectComparator::isIntersectionShallowlyContainedBy()
#5 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/AtomicTypeComparator.php(350): Psalm\Internal\Type\Comparator\ObjectComparator::isShallowlyContainedBy()
#6 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Type.php(891): Psalm\Internal\Type\Comparator\AtomicTypeComparator::isContainedBy()
#7 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Type.php(768): Psalm\Type::intersectAtomicTypes()
#8 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/Reflector/TypeHintResolver.php(112): Psalm\Type::intersectUnionTypes()
#9 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/Reflector/FunctionLikeNodeScanner.php(405): Psalm\Internal\PhpVisitor\Reflector\TypeHintResolver::resolve()
#10 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/ReflectorVisitor.php(207): Psalm\Internal\PhpVisitor\Reflector\FunctionLikeNodeScanner->start()
#11 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(200): Psalm\Internal\PhpVisitor\ReflectorVisitor->enterNode()
#12 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(114): PhpParser\NodeTraverser->traverseArray()
#13 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(223): PhpParser\NodeTraverser->traverseNode()
#14 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(114): PhpParser\NodeTraverser->traverseArray()
#15 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(223): PhpParser\NodeTraverser->traverseNode()
#16 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(91): PhpParser\NodeTraverser->traverseArray()
#17 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Scanner/FileScanner.php(79): PhpParser\NodeTraverser->traverse()
#18 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(554): Psalm\Internal\Scanner\FileScanner->scan()
#19 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(782): Psalm\Internal\Codebase\Scanner->scanFile()
#20 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php(191): Psalm\Internal\Codebase\Scanner->scanAPath()
#21 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(332): Psalm\Internal\Fork\Pool->__construct()
#22 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(280): Psalm\Internal\Codebase\Scanner->scanFilePaths()
#23 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Codebase.php(505): Psalm\Internal\Codebase\Scanner->scanFiles()
#24 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(510): Psalm\Codebase->scanFiles()
#25 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(374): Psalm\Internal\Analyzer\ProjectAnalyzer->check()
#26 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/psalm(9): Psalm\Internal\Cli\Psalm::run()
#27 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/bin/psalm(119): include('...')
#28 {main} in /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php:379
Stack trace:
#0 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php(413): Psalm\Internal\Fork\Pool->readResultsFromChildren()
#1 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(384): Psalm\Internal\Fork\Pool->wait()
#2 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(280): Psalm\Internal\Codebase\Scanner->scanFilePaths()
#3 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Codebase.php(505): Psalm\Internal\Codebase\Scanner->scanFiles()
#4 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(510): Psalm\Codebase->scanFiles()
#5 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(374): Psalm\Internal\Analyzer\ProjectAnalyzer->check()
#6 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/psalm(9): Psalm\Internal\Cli\Psalm::run()
#7 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/bin/psalm(119): include('...')
#8 {main}
(Psalm 5.22.1@e9dad66e11274315dac27e08349c628c7d6a1a43 crashed due to an uncaught Throwable)
```
ostrolucky added a commit that referenced this issue Feb 20, 2024
Otherwise we get
```
Uncaught Exception: InvalidArgumentException Could not get class storage for doctrine\common\collections\selectable
Emitted in /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Provider/ClassLikeStorageProvider.php:45
Stack trace in the forked worker:
#0 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/ClassLikes.php(726): Psalm\Internal\Provider\ClassLikeStorageProvider->get()
#1 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/ClassLikes.php(716): Psalm\Internal\Codebase\ClassLikes->getParentInterfaces()
#2 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Codebase.php(763): Psalm\Internal\Codebase\ClassLikes->interfaceExtends()
#3 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/ObjectComparator.php(357): Psalm\Codebase->interfaceExtends()
#4 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/ObjectComparator.php(117): Psalm\Internal\Type\Comparator\ObjectComparator::isIntersectionShallowlyContainedBy()
#5 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/AtomicTypeComparator.php(350): Psalm\Internal\Type\Comparator\ObjectComparator::isShallowlyContainedBy()
#6 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Type.php(891): Psalm\Internal\Type\Comparator\AtomicTypeComparator::isContainedBy()
#7 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Type.php(768): Psalm\Type::intersectAtomicTypes()
#8 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/Reflector/TypeHintResolver.php(112): Psalm\Type::intersectUnionTypes()
#9 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/Reflector/FunctionLikeNodeScanner.php(405): Psalm\Internal\PhpVisitor\Reflector\TypeHintResolver::resolve()
#10 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/ReflectorVisitor.php(207): Psalm\Internal\PhpVisitor\Reflector\FunctionLikeNodeScanner->start()
#11 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(200): Psalm\Internal\PhpVisitor\ReflectorVisitor->enterNode()
#12 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(114): PhpParser\NodeTraverser->traverseArray()
#13 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(223): PhpParser\NodeTraverser->traverseNode()
#14 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(114): PhpParser\NodeTraverser->traverseArray()
#15 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(223): PhpParser\NodeTraverser->traverseNode()
#16 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(91): PhpParser\NodeTraverser->traverseArray()
#17 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Scanner/FileScanner.php(79): PhpParser\NodeTraverser->traverse()
#18 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(554): Psalm\Internal\Scanner\FileScanner->scan()
#19 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(782): Psalm\Internal\Codebase\Scanner->scanFile()
#20 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php(191): Psalm\Internal\Codebase\Scanner->scanAPath()
#21 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(332): Psalm\Internal\Fork\Pool->__construct()
#22 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(280): Psalm\Internal\Codebase\Scanner->scanFilePaths()
#23 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Codebase.php(505): Psalm\Internal\Codebase\Scanner->scanFiles()
#24 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(510): Psalm\Codebase->scanFiles()
#25 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(374): Psalm\Internal\Analyzer\ProjectAnalyzer->check()
#26 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/psalm(9): Psalm\Internal\Cli\Psalm::run()
#27 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/bin/psalm(119): include('...')
#28 {main} in /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php:379
Stack trace:
#0 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php(413): Psalm\Internal\Fork\Pool->readResultsFromChildren()
#1 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(384): Psalm\Internal\Fork\Pool->wait()
#2 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(280): Psalm\Internal\Codebase\Scanner->scanFilePaths()
#3 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Codebase.php(505): Psalm\Internal\Codebase\Scanner->scanFiles()
#4 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(510): Psalm\Codebase->scanFiles()
#5 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(374): Psalm\Internal\Analyzer\ProjectAnalyzer->check()
#6 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/psalm(9): Psalm\Internal\Cli\Psalm::run()
#7 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/bin/psalm(119): include('...')
#8 {main}
(Psalm 5.22.1@e9dad66e11274315dac27e08349c628c7d6a1a43 crashed due to an uncaught Throwable)
```
ostrolucky added a commit that referenced this issue Feb 20, 2024
Otherwise we get
```
Uncaught Exception: InvalidArgumentException Could not get class storage for doctrine\common\collections\selectable
Emitted in /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Provider/ClassLikeStorageProvider.php:45
Stack trace in the forked worker:
#0 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/ClassLikes.php(726): Psalm\Internal\Provider\ClassLikeStorageProvider->get()
#1 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/ClassLikes.php(716): Psalm\Internal\Codebase\ClassLikes->getParentInterfaces()
#2 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Codebase.php(763): Psalm\Internal\Codebase\ClassLikes->interfaceExtends()
#3 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/ObjectComparator.php(357): Psalm\Codebase->interfaceExtends()
#4 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/ObjectComparator.php(117): Psalm\Internal\Type\Comparator\ObjectComparator::isIntersectionShallowlyContainedBy()
#5 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/AtomicTypeComparator.php(350): Psalm\Internal\Type\Comparator\ObjectComparator::isShallowlyContainedBy()
#6 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Type.php(891): Psalm\Internal\Type\Comparator\AtomicTypeComparator::isContainedBy()
#7 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Type.php(768): Psalm\Type::intersectAtomicTypes()
#8 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/Reflector/TypeHintResolver.php(112): Psalm\Type::intersectUnionTypes()
#9 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/Reflector/FunctionLikeNodeScanner.php(405): Psalm\Internal\PhpVisitor\Reflector\TypeHintResolver::resolve()
#10 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/ReflectorVisitor.php(207): Psalm\Internal\PhpVisitor\Reflector\FunctionLikeNodeScanner->start()
#11 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(200): Psalm\Internal\PhpVisitor\ReflectorVisitor->enterNode()
#12 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(114): PhpParser\NodeTraverser->traverseArray()
#13 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(223): PhpParser\NodeTraverser->traverseNode()
#14 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(114): PhpParser\NodeTraverser->traverseArray()
#15 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(223): PhpParser\NodeTraverser->traverseNode()
#16 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(91): PhpParser\NodeTraverser->traverseArray()
#17 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Scanner/FileScanner.php(79): PhpParser\NodeTraverser->traverse()
#18 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(554): Psalm\Internal\Scanner\FileScanner->scan()
#19 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(782): Psalm\Internal\Codebase\Scanner->scanFile()
#20 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php(191): Psalm\Internal\Codebase\Scanner->scanAPath()
#21 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(332): Psalm\Internal\Fork\Pool->__construct()
#22 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(280): Psalm\Internal\Codebase\Scanner->scanFilePaths()
#23 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Codebase.php(505): Psalm\Internal\Codebase\Scanner->scanFiles()
#24 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(510): Psalm\Codebase->scanFiles()
#25 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(374): Psalm\Internal\Analyzer\ProjectAnalyzer->check()
#26 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/psalm(9): Psalm\Internal\Cli\Psalm::run()
#27 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/bin/psalm(119): include('...')
#28 {main} in /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php:379
Stack trace:
#0 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php(413): Psalm\Internal\Fork\Pool->readResultsFromChildren()
#1 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(384): Psalm\Internal\Fork\Pool->wait()
#2 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(280): Psalm\Internal\Codebase\Scanner->scanFilePaths()
#3 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Codebase.php(505): Psalm\Internal\Codebase\Scanner->scanFiles()
#4 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(510): Psalm\Codebase->scanFiles()
#5 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(374): Psalm\Internal\Analyzer\ProjectAnalyzer->check()
#6 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/vimeo/psalm/psalm(9): Psalm\Internal\Cli\Psalm::run()
#7 /home/runner/work/DoctrineBundle/DoctrineBundle/vendor/bin/psalm(119): include('...')
#8 {main}
(Psalm 5.22.1@e9dad66e11274315dac27e08349c628c7d6a1a43 crashed due to an uncaught Throwable)
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants