Exemple #1
0
 /**
  * @param TokenStream $tokenStream
  * @return Query
  * @throws SyntaxErrorException
  */
 public function parse(TokenStream $tokenStream)
 {
     $queryBuilder = $this->createQueryBuilder();
     while (!$tokenStream->isEnd()) {
         $queryBuilder->addNode($this->tokenParserGroup->parse($tokenStream));
         $tokenStream->nextIf(Token::T_AMPERSAND);
     }
     return $queryBuilder->getQuery();
 }
Exemple #2
0
 public function decode($rqlQueryString)
 {
     $rqlQueryString = RqlParser::prepare_rql_string($rqlQueryString);
     $queryTokenParser = new TokenParserGroup();
     $queryTokenParser->addTokenParser(new TokenParser\Query\GroupTokenParser($queryTokenParser))->addTokenParser(new TokenParser\Query\Basic\LogicOperator\AndTokenParser($queryTokenParser))->addTokenParser(new TokenParser\Query\Basic\LogicOperator\OrTokenParser($queryTokenParser))->addTokenParser(new TokenParser\Query\Basic\LogicOperator\NotTokenParser($queryTokenParser))->addTokenParser(new TokenParser\Query\Basic\ArrayOperator\InTokenParser())->addTokenParser(new TokenParser\Query\Basic\ArrayOperator\OutTokenParser())->addTokenParser(new TokenParser\Query\Basic\ScalarOperator\EqTokenParser())->addTokenParser(new TokenParser\Query\Basic\ScalarOperator\NeTokenParser())->addTokenParser(new TokenParser\Query\Basic\ScalarOperator\LtTokenParser())->addTokenParser(new TokenParser\Query\Basic\ScalarOperator\GtTokenParser())->addTokenParser(new TokenParser\Query\Basic\ScalarOperator\LeTokenParser())->addTokenParser(new TokenParser\Query\Basic\ScalarOperator\GeTokenParser())->addTokenParser(new TokenParser\Query\Basic\ScalarOperator\LikeTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ArrayOperator\InTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ArrayOperator\OutTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ScalarOperator\EqTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ScalarOperator\NeTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ScalarOperator\LtTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ScalarOperator\GtTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ScalarOperator\LeTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ScalarOperator\GeTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ScalarOperator\LikeTokenParser())->addTokenParser(new Fiql\ScalarOperator\MatchTokenParser())->addTokenParser(new Basic\ScalarOperator\MatchTokenParser());
     $parser = (new Parser((new ExpressionParser())->registerTypeCaster('string', new TypeCaster\StringTypeCaster())->registerTypeCaster('integer', new TypeCaster\IntegerTypeCaster())->registerTypeCaster('float', new TypeCaster\FloatTypeCaster())->registerTypeCaster('boolean', new TypeCaster\BooleanTypeCaster())))->addTokenParser(new SelectTokenParser($this->allowedAggregateFunction))->addTokenParser($queryTokenParser)->addTokenParser(new TokenParser\SortTokenParser())->addTokenParser(new TokenParser\LimitTokenParser());
     $rqlQueryObject = $parser->parse((new Lexer())->tokenize($rqlQueryString));
     return $rqlQueryObject;
 }
 public static function createDefault()
 {
     $queryTokenParser = new TokenParserGroup();
     $queryTokenParser->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\GroupTokenParser($queryTokenParser))->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Basic\LogicOperator\AndTokenParser($queryTokenParser))->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Basic\LogicOperator\OrTokenParser($queryTokenParser))->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Basic\LogicOperator\NotTokenParser($queryTokenParser))->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Basic\ArrayOperator\InTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Basic\ArrayOperator\OutTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Basic\ScalarOperator\EqTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Basic\ScalarOperator\NeTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Basic\ScalarOperator\LtTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Basic\ScalarOperator\GtTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Basic\ScalarOperator\LeTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Basic\ScalarOperator\GeTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Basic\ScalarOperator\LikeTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Fiql\ArrayOperator\InTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Fiql\ArrayOperator\OutTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Fiql\ScalarOperator\EqTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Fiql\ScalarOperator\NeTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Fiql\ScalarOperator\LtTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Fiql\ScalarOperator\GtTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Fiql\ScalarOperator\LeTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Fiql\ScalarOperator\GeTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\Query\Fiql\ScalarOperator\LikeTokenParser());
     return (new self((new FixRqlExpressionParser())->registerTypeCaster('string', new \Xiag\Rql\Parser\TypeCaster\StringTypeCaster())->registerTypeCaster('integer', new \Xiag\Rql\Parser\TypeCaster\IntegerTypeCaster())->registerTypeCaster('float', new \Xiag\Rql\Parser\TypeCaster\FloatTypeCaster())->registerTypeCaster('boolean', new \Xiag\Rql\Parser\TypeCaster\BooleanTypeCaster())))->addTokenParser(new \Xiag\Rql\Parser\TokenParser\SelectTokenParser())->addTokenParser($queryTokenParser)->addTokenParser(new \Xiag\Rql\Parser\TokenParser\SortTokenParser())->addTokenParser(new \Xiag\Rql\Parser\TokenParser\LimitTokenParser());
 }
Exemple #4
0
<?php

namespace Xiag\Rql\ParserExample01;

use Xiag\Rql\Parser\Lexer;
use Xiag\Rql\Parser\Parser;
use Xiag\Rql\Parser\ExpressionParser;
use Xiag\Rql\Parser\TokenParserGroup;
use Xiag\Rql\Parser\TokenParser\Query\GroupTokenParser;
use Xiag\Rql\Parser\TokenParser\Query\Fiql;
require __DIR__ . '/../vendor/autoload.php';
$queryTokenParser = new TokenParserGroup();
$queryTokenParser->addTokenParser(new GroupTokenParser($queryTokenParser))->addTokenParser(new Fiql\ArrayOperator\InTokenParser())->addTokenParser(new Fiql\ArrayOperator\OutTokenParser())->addTokenParser(new Fiql\ScalarOperator\EqTokenParser())->addTokenParser(new Fiql\ScalarOperator\NeTokenParser())->addTokenParser(new Fiql\ScalarOperator\LtTokenParser())->addTokenParser(new Fiql\ScalarOperator\GtTokenParser())->addTokenParser(new Fiql\ScalarOperator\LeTokenParser())->addTokenParser(new Fiql\ScalarOperator\GeTokenParser());
$parser = new Parser(new ExpressionParser());
$parser->addTokenParser($queryTokenParser);
$lexer = new Lexer();
// ok
$tokenStream = $lexer->tokenize('((a==true|b!=str)&c>=10&d=in=(1,value,null))');
var_dump($parser->parse($tokenStream));
// error
$tokenStream = $lexer->tokenize('or(eq(a,true),ne(b,str))&gte(c,10)&in(d,(1,value,null))');
var_dump($parser->parse($tokenStream));