getEntityManager()->getConnection()->getDatabasePlatform(); $sql = $platform->modifyLimitQuery($this->sql, $query->getMaxResults(), $query->getFirstResult()); $lockMode = $query->getHint(Query::HINT_LOCK_MODE) ?: LockMode::NONE; if ($lockMode !== LockMode::NONE && $lockMode !== LockMode::OPTIMISTIC && $lockMode !== LockMode::PESSIMISTIC_READ && $lockMode !== LockMode::PESSIMISTIC_WRITE) { throw QueryException::invalidLockMode(); } if ($lockMode === LockMode::PESSIMISTIC_READ) { $sql .= ' ' . $this->getReadLockSQL($platform); } elseif ($lockMode === LockMode::PESSIMISTIC_WRITE) { $sql .= ' ' . $this->getWriteLockSQL($platform); } return $sql; } /** @return FinalizedSelectExecutor */ public function createExecutor(Query $query): AbstractSqlExecutor { return new FinalizedSelectExecutor($this->finalizeSql($query)); } }