vendor/symfony/doctrine-bridge/Middleware/Debug/Statement.php line 68

  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Bridge\Doctrine\Middleware\Debug;
  11. use Doctrine\DBAL\Driver\Middleware\AbstractStatementMiddleware;
  12. use Doctrine\DBAL\Driver\Result as ResultInterface;
  13. use Doctrine\DBAL\Driver\Statement as StatementInterface;
  14. use Doctrine\DBAL\ParameterType;
  15. use Symfony\Component\Stopwatch\Stopwatch;
  16. /**
  17.  * @author Laurent VOULLEMIER <laurent.voullemier@gmail.com>
  18.  *
  19.  * @internal
  20.  */
  21. final class Statement extends AbstractStatementMiddleware
  22. {
  23.     private Query $query;
  24.     public function __construct(
  25.         StatementInterface $statement,
  26.         private DebugDataHolder $debugDataHolder,
  27.         private string $connectionName,
  28.         string $sql,
  29.         private ?Stopwatch $stopwatch null,
  30.     ) {
  31.         parent::__construct($statement);
  32.         $this->query = new Query($sql);
  33.     }
  34.     public function bindParam($param, &$variable$type ParameterType::STRING$length null): bool
  35.     {
  36.         $this->query->setParam($param$variable$type);
  37.         return parent::bindParam($param$variable$type, ...\array_slice(\func_get_args(), 3));
  38.     }
  39.     public function bindValue($param$value$type ParameterType::STRING): bool
  40.     {
  41.         $this->query->setValue($param$value$type);
  42.         return parent::bindValue($param$value$type);
  43.     }
  44.     public function execute($params null): ResultInterface
  45.     {
  46.         if (null !== $params) {
  47.             $this->query->setValues($params);
  48.         }
  49.         // clone to prevent variables by reference to change
  50.         $this->debugDataHolder->addQuery($this->connectionName$query = clone $this->query);
  51.         $this->stopwatch?->start('doctrine''doctrine');
  52.         $query->start();
  53.         try {
  54.             $result parent::execute($params);
  55.         } finally {
  56.             $query->stop();
  57.             $this->stopwatch?->stop('doctrine');
  58.         }
  59.         return $result;
  60.     }
  61. }