Example #1
0
 public function convertSqlToJob(SQLTokenIterator $tokens)
 {
     $tokens->seekTokenNum(SqlToken::T_USE());
     if ($tokens->getCurrentTokenNumber() !== SqlToken::T_USE()) {
         throw new MalformedSqlException("Tried to parse USE statement when token-iterator does not point to T_USE!", $tokens);
     }
     if ($tokens->seekTokenNum(T_VARIABLE)) {
         $databaseName = Variable::factory($tokens->getCurrentTokenString());
     } elseif ($tokens->seekTokenNum(T_STRING)) {
         $databaseName = $tokens->getCurrentTokenString();
     } elseif ($tokens->seekTokenNum(T_CONSTANT_ENCAPSED_STRING)) {
         $databaseName = $tokens->getCurrentTokenString();
         if (($databaseName[0] === '"' || $databaseName[0] === "'") && $databaseName[0] === $databaseName[strlen($databaseName) - 1]) {
             // remove quotes if needed
             $databaseName = substr($databaseName, 1, strlen($databaseName) - 2);
         }
     } else {
         throw new MalformedSqlException("Missing database-specifier for USE statement!", $tokens);
     }
     $databaseNameValue = new ValuePart();
     $databaseNameValue->addChainValue($databaseName);
     $useJob = new UseStatement();
     $useJob->setDatabase($databaseNameValue);
     return $useJob;
 }
Example #2
0
 public function convertSqlToJob(SQLTokenIterator $tokens)
 {
     $parts = array();
     do {
         if ($tokens->seekTokenNum(T_VARIABLE)) {
             $part = Variable::factory($tokens->getCurrentTokenString());
         } elseif ($tokens->seekTokens([T_STRING, T_CONSTANT_ENCAPSED_STRING])) {
             $part = $tokens->getCurrentTokenString();
             if ($part[0] === '`' && $part[strlen($part) - 1] === '`') {
                 $part = substr($part, 1, strlen($part) - 2);
             } elseif ($part[0] === '"' && $part[strlen($part) - 1] === '"') {
                 $part = substr($part, 1, strlen($part) - 2);
             } elseif ($part[0] === "'" && $part[strlen($part) - 1] === "'") {
                 $part = substr($part, 1, strlen($part) - 2);
             }
         } else {
             throw new ErrorException("Tried to convert sql-column-specifier when token-iterator does not point to T_STRING!");
         }
         $parts[] = $part;
     } while ($tokens->seekTokenText("."));
     $specifier = ColumnSpecifier::factory(implode(".", $parts));
     return $specifier;
 }
Example #3
0
 public function parsePlainValue(SQLTokenIterator $tokens, ValueJob $valueJob)
 {
     switch (true) {
         case $tokens->seekTokenNum(T_NUM_STRING):
             $valueJob->addChainValue((double) $tokens->getCurrentTokenString());
             break;
         case $tokens->seekTokenNum(T_CONSTANT_ENCAPSED_STRING):
             $string = $tokens->getCurrentTokenString();
             if (($string[0] === '"' || $string[0] === "'") && $string[0] === $string[strlen($string) - 1]) {
                 // remove quotes if needed
                 $string = substr($string, 1, strlen($string) - 2);
             }
             $valueJob->addChainValue($string);
             break;
         case $tokens->seekTokenNum(T_VARIABLE):
             $variableString = $tokens->getCurrentTokenString();
             $variable = Variable::factory($variableString);
             if ($variableString === '?') {
                 $variable->setIndex($tokens->countTokenOccourences(T_VARIABLE, 0, $tokens->getIndex() - 1));
             }
             $valueJob->addChainValue($variable);
             break;
         case $this->parenthesisParser->canParseTokens($tokens):
             $valueJob->addChainValue($this->parenthesisParser->convertSqlToJob($tokens));
             break;
         case $this->functionParser->canParseTokens($tokens):
             $valueJob->addChainValue($this->functionParser->convertSqlToJob($tokens));
             break;
         case $this->columnParser->canParseTokens($tokens):
             $valueJob->addChainValue($this->columnParser->convertSqlToJob($tokens));
             break;
         case $this->caseParser->canParseTokens($tokens):
             $valueJob->addChainValue($this->caseParser->convertSqlToJob($tokens));
             break;
         case $tokens->seekTokenNum(SqlToken::T_DEFAULT()):
         case $tokens->seekTokenNum(SqlToken::T_NULL()):
         case $tokens->seekTokenNum(SqlToken::T_FALSE()):
         case $tokens->seekTokenNum(SqlToken::T_TRUE()):
         case $tokens->seekTokenNum(SqlToken::T_CURRENT_TIMESTAMP()):
         case $tokens->seekTokenNum(SqlToken::T_CURRENT_DATE()):
         case $tokens->seekTokenNum(SqlToken::T_CURRENT_TIME()):
         case $tokens->seekTokenNum(SqlToken::T_CURRENT_USER()):
             $valueJob->addChainValue($tokens->getCurrentTokenNumber());
             break;
         default:
             return false;
     }
     return true;
 }
Example #4
0
 protected function parseCreateDatabase(SQLTokenIterator $tokens)
 {
     if ($tokens->seekTokenNum(SqlToken::T_IF())) {
         if (!$tokens->seekTokenNum(SqlToken::T_NOT()) || !$tokens->seekTokenNum(SqlToken::T_EXISTS())) {
             throw new MalformedSqlException("Invalid create-database statement (invalid 'IF NOT EXISTS')!", $tokens);
         }
         $ifNotExist = true;
     } else {
         $ifNotExist = false;
     }
     if ($tokens->seekTokenNum(T_VARIABLE)) {
         $databaseName = Variable::factory($tokens->getCurrentTokenString());
     } elseif ($tokens->seekTokenNum(T_STRING)) {
         $databaseName = $tokens->getCurrentTokenString();
     } elseif ($tokens->seekTokenNum(T_CONSTANT_ENCAPSED_STRING)) {
         $databaseName = $tokens->getCurrentTokenString();
         if (($databaseName[0] === '"' || $databaseName[0] === "'") && $databaseName[0] === $databaseName[strlen($databaseName) - 1]) {
             // remove quotes if needed
             $databaseName = substr($databaseName, 1, strlen($databaseName) - 2);
         }
     } else {
         throw new MalformedSqlException("Missing name of database to create!", $tokens);
     }
     $createJob = new CreateDatabaseStatement();
     $createJob->setIfNotExists($ifNotExist);
     $createJob->setName($databaseName);
     return $createJob;
 }