diff --git a/tests/PHPStan/Analyser/nsrt/shopware-connection-profiler.php b/tests/PHPStan/Analyser/nsrt/shopware-connection-profiler.php new file mode 100644 index 0000000000..ced23ea733 --- /dev/null +++ b/tests/PHPStan/Analyser/nsrt/shopware-connection-profiler.php @@ -0,0 +1,43 @@ +} + */ +abstract class ConnectionProfiler +{ + /** + * @return array> + */ + abstract public function getQueries(): array; + + public function getGroupedQueries(): void + { + foreach ($this->getQueries() as $queries) { + $connectionGroupedQueries = []; + foreach ($queries as $i => $query) { + $key = $query['sql']; + if (!isset($connectionGroupedQueries[$key])) { + $connectionGroupedQueries[$key] = $query; + $connectionGroupedQueries[$key]['executionMS'] = 0; + $connectionGroupedQueries[$key]['count'] = 0; + $connectionGroupedQueries[$key]['index'] = $i; // "Explain query" relies on query index in 'queries'. + } + + assertType("array, count: 0, index: int}|array{sql: string, executionMS: float, types: array, count: int<1, max>, index: int}>", $connectionGroupedQueries); + $connectionGroupedQueries[$key]['executionMS'] += $query['executionMS']; + assertType("non-empty-array, count: int<0, max>, index: int}>", $connectionGroupedQueries); + ++$connectionGroupedQueries[$key]['count']; + } + + assertType("array, count: int<1, max>, index: int}>", $connectionGroupedQueries); + usort($connectionGroupedQueries, static fn (array $a, array $b): int => $b['executionMS'] <=> $a['executionMS']); + } + } + +}