Guest User

Untitled

a guest
Mar 21st, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.87 KB | None | 0 0
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace Application\Doctrine;
  6.  
  7. use Doctrine\ORM\Query\SqlWalker;
  8.  
  9. class UseIndexWalker extends SqlWalker
  10. {
  11. public const HINT_USE_INDEX = 'UseIndexWalker.UseIndex';
  12. public const HINT_FORCE_INDEX = 'UseIndexWalker.ForceIndex';
  13.  
  14. public function walkFromClause($fromClause)
  15. {
  16. $sql = parent::walkFromClause($fromClause);
  17.  
  18. if ('mysql' !== $this->getConnection()->getDatabasePlatform()->getName()) {
  19. return $sql;
  20. }
  21.  
  22. if ($index = $this->getQuery()->getHint(self::HINT_USE_INDEX)) {
  23. return preg_replace('#(\bFROM\s*\w+\s*\w+)#', '\1 USE INDEX (' . $index . ')', $sql);
  24. }
  25.  
  26. if ($index = $this->getQuery()->getHint(self::HINT_FORCE_INDEX)) {
  27. return preg_replace('#(\bFROM\s*\w+\s*\w+)#', '\1 FORCE INDEX (' . $index . ')', $sql);
  28. }
  29.  
  30. return $sql;
  31. }
  32. }
Add Comment
Please, Sign In to add comment