. */ /** * JoinAssociationPathExpression ::= JoinCollectionValuedPathExpression | JoinSingleValuedAssociationPathExpression * * @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_JoinAssociationPathExpression extends Doctrine_ORM_Query_ParserRule { public function syntax() { // JoinAssociationPathExpression ::= JoinCollectionValuedPathExpression | JoinSingleValuedAssociationPathExpression return $this->parse($this->_isSingleValuedPathExpression() ? 'JoinSingleValuedAssociationPathExpression' : 'JoinCollectionValuedPathExpression' ); } private function _isSingleValuedPathExpression() { $parserResult = $this->_parser->getParserResult(); // Trying to recoginize this grammar: // IdentificationVariable "." (CollectionValuedAssociationField | SingleValuedAssociationField) $token = $this->_parser->lookahead; $this->_parser->getScanner()->resetPeek(); if ($parserResult->hasQueryComponent($token['value'])) { $queryComponent = $parserResult->getQueryComponent($token['value']); $token = $this->_parser->getScanner()->peek(); // If we have a dot ".", then next char must be the "*" if ($token['type'] === Doctrine_ORM_Query_Token::T_DOT) { $token = $this->_parser->getScanner()->peek(); if ( ! ($queryComponent['metadata']->hasAssociation($token['value']) && $queryComponent['metadata']->getAssociation($token['value'])->isOneToTone())) { return true; } } } return false; } }