/** * Walks down a SelectStatement AST node, thereby generating the appropriate SQL. * * @return string The SQL. */ public function walkSelectStatement(AST\SelectStatement $AST) { $sql = $this->walkSelectClause($AST->selectClause); $sql .= $this->walkFromClause($AST->fromClause); $sql .= $this->walkWhereClause($AST->whereClause); $sql .= $AST->groupByClause ? $this->walkGroupByClause($AST->groupByClause) : ''; $sql .= $AST->havingClause ? $this->walkHavingClause($AST->havingClause) : ''; if (($orderByClause = $AST->orderByClause) !== null) { $sql .= $AST->orderByClause ? $this->walkOrderByClause($AST->orderByClause) : ''; } else { if (($orderBySql = $this->_generateOrderedCollectionOrderByItems()) !== '') { $sql .= ' ORDER BY ' . $orderBySql; } } $sql = $this->_platform->modifyLimitQuery($sql, $this->_query->getMaxResults(), $this->_query->getFirstResult()); if (($lockMode = $this->_query->getHint(Query::HINT_LOCK_MODE)) !== false) { if ($lockMode == LockMode::PESSIMISTIC_READ) { $sql .= " " . $this->_platform->getReadLockSQL(); } else { if ($lockMode == LockMode::PESSIMISTIC_WRITE) { $sql .= " " . $this->_platform->getWriteLockSQL(); } else { if ($lockMode == LockMode::OPTIMISTIC) { foreach ($this->_selectedClasses as $class) { if (!$class->isVersioned) { throw \Doctrine\ORM\OptimisticLockException::lockFailed(); } } } } } } return $sql; }