Example #1
0
 /**
  * Creates index object from tokens.
  * <p>
  * If parameter $indexName is not passed then current position should point to the name of the index.
  *
  * @param Tokenizer $tokenizer Tokens collection.
  * @param boolean $unique Uniqueness flag.
  * @param string $indexName Optional name of the index.
  *
  * @return Index
  * @throws NotSupportedException
  */
 public static function create(Tokenizer $tokenizer, $unique = false, $indexName = '')
 {
     if (!$indexName) {
         if ($tokenizer->getCurrentToken()->text !== '(') {
             $indexName = $tokenizer->getCurrentToken()->text;
             $tokenizer->nextToken();
             $tokenizer->skipWhiteSpace();
         }
     }
     if ($tokenizer->testUpperText('ON')) {
         $tokenizer->skipWhiteSpace();
         /** @noinspection PhpUnusedLocalVariableInspection */
         $tableName = $tokenizer->getCurrentToken()->text;
         $tokenizer->nextToken();
         $tokenizer->skipWhiteSpace();
     }
     $index = new self($indexName, $unique);
     if ($tokenizer->testText('(')) {
         $tokenizer->skipWhiteSpace();
         $token = $tokenizer->getCurrentToken();
         $level = $token->level;
         $column = '';
         do {
             if ($token->text === ',') {
                 $index->addColumn($column);
                 $column = '';
             } else {
                 $column .= $token->text;
             }
             $token = $tokenizer->nextToken();
         } while (!$tokenizer->endOfInput() && $token->level >= $level);
         if ($column) {
             $index->addColumn($column);
         }
         if (!$tokenizer->testText(')')) {
             throw new NotSupportedException("')' expected. line:" . $tokenizer->getCurrentToken()->line);
         }
     } else {
         throw new NotSupportedException("'(' expected. line:" . $tokenizer->getCurrentToken()->line);
     }
     return $index;
 }