• Модуль: perfmon
  • Путь к файлу: ~/bitrix/modules/perfmon/lib/sql/schema.php
  • Класс: BitrixPerfmonSqlSchema
  • Вызов: Schema::executeStatement
protected function executeStatement(Tokenizer $tokenizer)
{
	/** @var Table $table */
	$tokenizer->resetState();
	$tokenizer->skipWhiteSpace();
	if ($tokenizer->testUpperText('CREATE'))
	{
		$this->executeCreate($tokenizer);
	}
	elseif ($tokenizer->testUpperText('INSERT'))
	{
		//skip insert into
	}
	elseif ($tokenizer->testUpperText('SET'))
	{
		//skip set identity_insert
	}
	elseif ($tokenizer->testUpperText('ALTER'))
	{
		$this->executeAlter($tokenizer);
	}
	elseif ($tokenizer->testUpperText('IF'))
	{
		$tokenizer->skipWhiteSpace();
		if ($tokenizer->testUpperText('OBJECT_ID'))
		{
			while (!$tokenizer->endOfInput())
			{
				if ($tokenizer->nextToken()->upper === 'CREATE')
					break;
			}
			$tokenizer->nextToken();
			$tokenizer->skipWhiteSpace();
			if ($tokenizer->testUpperText('TABLE'))
			{
				$this->executeCreateTable($tokenizer);
			}
			else
			{
				throw new NotSupportedException("'CREATE TABLE' expected. line:".$tokenizer->getCurrentToken()->line);
			}
		}
		elseif ($tokenizer->testUpperText('NOT'))
		{
			$tokenizer->skipWhiteSpace();
			if ($tokenizer->testUpperText('EXISTS'))
			{
				while (!$tokenizer->endOfInput())
				{
					if ($tokenizer->nextToken()->upper === 'CREATE')
						break;
				}
				$tokenizer->nextToken();
				$tokenizer->skipWhiteSpace();

				if ($tokenizer->testUpperText('UNIQUE'))
				{
					$unique = true;
					$tokenizer->skipWhiteSpace();
				}
				else
				{
					$unique = false;
				}

				if ($tokenizer->testUpperText('INDEX'))
				{
					$this->executeCreateIndex($tokenizer, $unique);
				}
				else
				{
					throw new NotSupportedException("'CREATE INDEX' expected. line:".$tokenizer->getCurrentToken()->line);
				}
			}
			else
			{
				throw new NotSupportedException("'NOT EXISTS' expected. line:".$tokenizer->getCurrentToken()->line);
			}
		}
		else
		{
			throw new NotSupportedException("'OBJECT_ID' expected. line:".$tokenizer->getCurrentToken()->line);
		}
	}
	elseif (!$tokenizer->endOfInput())
	{
		throw new NotSupportedException("'CREATE' expected. line:".$tokenizer->getCurrentToken()->line);
	}
}