. */ /** * SelectStatement ::= SelectClause FromClause [WhereClause] [GroupByClause] [HavingClause] [OrderByClause] * * @author Guilherme Blanco * @author Janne Vanhala * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link http://www.phpdoctrine.org * @since 2.0 * @version $Revision$ */ class Doctrine_ORM_Query_Parser_SelectStatement extends Doctrine_ORM_Query_ParserRule { protected $_AST = null; protected $_selectClause = null; public function syntax($paramHolder) { // SelectStatement ::= SelectClause FromClause [WhereClause] [GroupByClause] [HavingClause] [OrderByClause] $this->_AST = $this->AST('SelectStatement'); // Disable the semantical check for SelectClause now. This is needed // since we dont know the query components yet (will be known only // when the FROM and WHERE clause are processed). $paramHolder->set('semanticalCheck', false); $this->_selectClause = $this->parse('SelectClause', $paramHolder); $paramHolder->remove('semanticalCheck'); $this->_AST->setFromClause($this->parse('FromClause', $paramHolder)); if ($this->_isNextToken(Doctrine_ORM_Query_Token::T_WHERE)) { $this->_AST->setWhereClause($this->parse('WhereClause', $paramHolder)); } if ($this->_isNextToken(Doctrine_ORM_Query_Token::T_GROUP)) { $this->_AST->setGroupByClause($this->parse('GroupByClause', $paramHolder)); } if ($this->_isNextToken(Doctrine_ORM_Query_Token::T_HAVING)) { $this->_AST->setHavingClause($this->parse('HavingClause', $paramHolder)); } if ($this->_isNextToken(Doctrine_ORM_Query_Token::T_ORDER)) { $this->_AST->setOrderByClause($this->parse('OrderByClause', $paramHolder)); } } public function semantical($paramHolder) { // We need to invoke the semantical check of SelectClause here, since // it was not yet checked. // The semantical checks will be forwarded to all SelectClause dependant grammar rules $this->_AST->setSelectClause($this->_selectClause->semantical($paramHolder)); // Return AST node return $this->_AST; } }