Ejemplo n.º 1
0
 /**
  * @dataProvider validSequenceProvider
  *
  * @param array $definitions
  * @param array $sequence
  */
 public function testValidSequences(array $definitions, array $sequence)
 {
     $sequencer = \Mockery::mock("\\Silktide\\Reposition\\QueryBuilder\\TokenSequencerInterface");
     $sequencer->shouldReceive("getType")->andReturn("test");
     $sequencer->shouldReceive("getSequence")->andReturn($sequence);
     $parser = new TokenParser($definitions);
     $parser->parseTokenSequence($sequencer);
 }
 /**
  * @param TokenSequencerInterface $query
  *
  * @throws InterpretationException
  * @return CompiledQuery
  */
 public function interpret(TokenSequencerInterface $query)
 {
     if (empty($this->metadataProvider)) {
         throw new InterpretationException("Cannot interpret any queries without an Entity Metadata Provider");
     }
     $this->tokenParser->parseTokenSequence($query);
     // select interpreter
     $selectedInterpreter = null;
     $queryType = $query->getType();
     foreach ($this->queryTypeInterpreters as $interpreter) {
         /** @var AbstractSqlQueryTypeInterpreter $interpreter */
         if ($interpreter->supportedQueryType() == $queryType) {
             $selectedInterpreter = $interpreter;
             break;
         }
     }
     if (empty($selectedInterpreter)) {
         throw new InterpretationException("Cannot interpret query. The query type '{$queryType}' is not supported by any of the installed QueryTypeInterpreters");
     }
     $compiledQuery = new CompiledQuery();
     $compiledQuery->setQuery($selectedInterpreter->interpretQuery($query));
     $compiledQuery->setArguments($selectedInterpreter->getValues());
     $compiledQuery->setPrimaryKeySequence($selectedInterpreter->getPrimaryKeySequence());
     return $compiledQuery;
 }