• Модуль: perfmon
  • Путь к файлу: ~/bitrix/modules/perfmon/lib/sql/index.php
  • Класс: BitrixPerfmonSqlIndex
  • Вызов: Index::create
static function create(Tokenizer $tokenizer, $unique = false, $fulltext = 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, $fulltext);

	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);
		}

		//USING BTREE
		$tokenizer->skipWhiteSpace();
		if ($tokenizer->testText('USING'))
		{
			$tokenizer->skipWhiteSpace();
			$token = $tokenizer->nextToken();
			$index->using = $token->text;
		}
	}
	else
	{
		throw new NotSupportedException("'(' expected. line:".$tokenizer->getCurrentToken()->line);
	}

	return $index;
}