69 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
/*
 | 
						|
 * This file is part of the Doctrine Bundle
 | 
						|
 *
 | 
						|
 * The code was originally distributed inside the Symfony framework.
 | 
						|
 *
 | 
						|
 * (c) Fabien Potencier <fabien@symfony.com>
 | 
						|
 * (c) Doctrine Project, Benjamin Eberlei <kontakt@beberlei.de>
 | 
						|
 *
 | 
						|
 * For the full copyright and license information, please view the LICENSE
 | 
						|
 * file that was distributed with this source code.
 | 
						|
 */
 | 
						|
 | 
						|
namespace Doctrine\Bundle\DoctrineBundle\Controller;
 | 
						|
 | 
						|
use Symfony\Component\DependencyInjection\ContainerAware;
 | 
						|
use Symfony\Component\HttpFoundation\Response;
 | 
						|
 | 
						|
/**
 | 
						|
 * ProfilerController.
 | 
						|
 *
 | 
						|
 * @author Christophe Coevoet <stof@notk.org>
 | 
						|
 */
 | 
						|
class ProfilerController extends ContainerAware
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Renders the profiler panel for the given token.
 | 
						|
     *
 | 
						|
     * @param string $token The profiler token
 | 
						|
     * @param string $connectionName
 | 
						|
     * @param integer $query
 | 
						|
     *
 | 
						|
     * @return Response A Response instance
 | 
						|
     */
 | 
						|
    public function explainAction($token, $connectionName, $query)
 | 
						|
    {
 | 
						|
        /** @var $profiler \Symfony\Component\HttpKernel\Profiler\Profiler */
 | 
						|
        $profiler = $this->container->get('profiler');
 | 
						|
        $profiler->disable();
 | 
						|
 | 
						|
        $profile = $profiler->loadProfile($token);
 | 
						|
        $queries = $profile->getCollector('db')->getQueries();
 | 
						|
 | 
						|
        if (!isset($queries[$connectionName][$query])) {
 | 
						|
            return new Response('This query does not exist.');
 | 
						|
        }
 | 
						|
 | 
						|
        $query = $queries[$connectionName][$query];
 | 
						|
        if (!$query['explainable']) {
 | 
						|
            return new Response('This query cannot be explained.');
 | 
						|
        }
 | 
						|
 | 
						|
        /** @var $connection \Doctrine\DBAL\Connection */
 | 
						|
        $connection = $this->container->get('doctrine')->getConnection($connectionName);
 | 
						|
        try {
 | 
						|
            $results = $connection->executeQuery('EXPLAIN '.$query['sql'], $query['params'], $query['types'])
 | 
						|
                ->fetchAll(\PDO::FETCH_ASSOC);
 | 
						|
        } catch (\Exception $e) {
 | 
						|
            return new Response('This query cannot be explained.');
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->container->get('templating')->renderResponse('DoctrineBundle:Collector:explain.html.twig', array(
 | 
						|
            'data' => $results,
 | 
						|
            'query' => $query,
 | 
						|
        ));
 | 
						|
    }
 | 
						|
}
 |