/** * 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; }