/** * @inheritdoc * @return AbstractQueryNode */ public function parse(TokenStream $tokenStream) { $operator = null; $queries = []; $tokenStream->expect(Token::T_OPEN_PARENTHESIS); do { $queries[] = $this->conditionParser->parse($tokenStream); if ($tokenStream->nextIf(Token::T_AMPERSAND)) { if ($operator === null) { $operator = Token::T_AMPERSAND; } elseif ($operator !== Token::T_AMPERSAND) { throw new SyntaxErrorException('Cannot mix "&" and "|" within a group'); } } elseif ($tokenStream->nextIf(Token::T_VERTICAL_BAR)) { if ($operator === null) { $operator = Token::T_VERTICAL_BAR; } elseif ($operator !== Token::T_VERTICAL_BAR) { throw new SyntaxErrorException('Cannot mix "&" and "|" within a group'); } } else { break; } } while (true); $tokenStream->expect(Token::T_CLOSE_PARENTHESIS); if ($operator === Token::T_VERTICAL_BAR) { return new OrNode($queries); } elseif ($operator === Token::T_AMPERSAND) { return new AndNode($queries); } else { return $queries[0]; } }
/** * @param \Xiag\Rql\Parser\TokenStream $tokenStream * * @return \AndreasGlaser\DoctrineRql\Extension\Xiag\Rql\Parser\Node\Query\AbstractNullOperatorNode * @author Andreas Glaser */ public function parse(TokenStream $tokenStream) { $tokenStream->expect(Token::T_OPERATOR, $this->getOperatorName()); $tokenStream->expect(Token::T_OPEN_PARENTHESIS); $field = $this->fieldNameParser->parse($tokenStream); $tokenStream->expect(Token::T_CLOSE_PARENTHESIS); return $this->createNode($field); }
/** * @inheritdoc */ public function parse(TokenStream $tokenStream) { $tokenStream->expect(Token::T_OPEN_PARENTHESIS); $values = []; do { $values[] = $this->itemParser->parse($tokenStream); if (!$tokenStream->nextIf(Token::T_COMMA)) { break; } } while (true); $tokenStream->expect(Token::T_CLOSE_PARENTHESIS); return $values; }
/** * @inheritdoc */ public function parse(TokenStream $tokenStream) { $limit = null; $offset = null; $tokenStream->expect(Token::T_OPERATOR, 'limit'); $tokenStream->expect(Token::T_OPEN_PARENTHESIS); $limit = $this->valueParser->parse($tokenStream); if ($tokenStream->nextIf(Token::T_COMMA)) { $offset = $this->valueParser->parse($tokenStream); } $tokenStream->expect(Token::T_CLOSE_PARENTHESIS); return new LimitNode($limit, $offset); }
/** * @inheritdoc */ public function parse(TokenStream $tokenStream) { $tokenStream->expect(Token::T_OPERATOR, $this->getOperatorName()); $tokenStream->expect(Token::T_OPEN_PARENTHESIS); $queries = []; do { $queries[] = $this->conditionParser->parse($tokenStream); if (!$tokenStream->nextIf(Token::T_COMMA)) { break; } } while (true); $tokenStream->expect(Token::T_CLOSE_PARENTHESIS); return $this->createNode($queries); }
/** * @inheritdoc */ public function parse(TokenStream $tokenStream) { $fields = []; $tokenStream->expect(Token::T_OPERATOR, 'select'); $tokenStream->expect(Token::T_OPEN_PARENTHESIS); do { $fields[] = $this->fieldNameParser->parse($tokenStream); if (!$tokenStream->nextIf(Token::T_COMMA)) { break; } } while (true); $tokenStream->expect(Token::T_CLOSE_PARENTHESIS); return new SelectNode($fields); }
/** * @inheritdoc */ public function parse(TokenStream $tokenStream) { $fields = []; $tokenStream->expect(Token::T_OPERATOR, 'sort'); $tokenStream->expect(Token::T_OPEN_PARENTHESIS); do { $direction = $tokenStream->expect([Token::T_PLUS, Token::T_MINUS]); $fields[$this->fieldNameParser->parse($tokenStream)] = $direction->test(Token::T_PLUS) ? SortNode::SORT_ASC : SortNode::SORT_DESC; if (!$tokenStream->nextIf(Token::T_COMMA)) { break; } } while (true); $tokenStream->expect(Token::T_CLOSE_PARENTHESIS); return new SortNode($fields); }