Exemplo n.º 1
0
 public function convertSqlToJob(SQLTokenIterator $tokens)
 {
     if (!$this->canParseTokens($tokens)) {
         throw new ErrorException("Tried to convert sql function to job entity when token index is not at function!");
     }
     $tokens->seekIndex($tokens->getExclusiveTokenIndex());
     $functionJob = new FunctionJob();
     $functionJob->setName($tokens->getCurrentTokenString());
     if (!$tokens->seekTokenText('(')) {
         throw new MalformedSqlException("Missing beginning parenthesis for argument-list in function call!", $tokens);
     }
     if (!$tokens->seekTokenText(')')) {
         do {
             try {
                 while ($this->parameterConditionParser->canParseTokens($tokens)) {
                     $functionJob->addParameter($this->parameterConditionParser->convertSqlToJob($tokens));
                 }
                 switch (true) {
                     case $this->valueParser->canParseTokens($tokens):
                         $functionJob->addArgumentValue($this->valueParser->convertSqlToJob($tokens));
                         break;
                     case $this->selectParser->canParseTokens($tokens):
                         $functionJob->addArgumentValue($this->selectParser->convertSqlToJob($tokens));
                         break;
                     case $tokens->seekTokenText('*'):
                         $functionJob->addArgumentValue('*');
                         break;
                     default:
                         throw new MalformedSqlException("Invalid argument defintion in function call!", $tokens);
                 }
                 while ($this->parameterConditionParser->canParseTokens($tokens)) {
                     $functionJob->addParameter($this->parameterConditionParser->convertSqlToJob($tokens));
                 }
             } catch (\ErrorException $exception) {
                 throw new MalformedSqlException($exception->getMessage(), $tokens);
             }
         } while ($tokens->seekTokenText(','));
         if (!$tokens->seekTokenText(')')) {
             throw new MalformedSqlException("Missing ending parenthesis for argument-list in function call!", $tokens);
         }
     }
     return $functionJob;
 }