• Модуль: highloadblock
  • Путь к файлу: ~/bitrix/modules/highloadblock/lib/highloadblocktable.php
  • Класс: BitrixHighloadblockHighloadBlockTable
  • Вызов: HighloadBlockTable::update
static function update($primary, array $data)
{
	global $USER_FIELD_MANAGER;

	// get old data
	$oldData = static::getByPrimary($primary)->fetch();

	// update row
	$result = parent::update($primary, $data);

	if (!$result->isSuccess(true))
	{
		return $result;
	}

	// rename table in db
	if (isset($data['TABLE_NAME']) && $data['TABLE_NAME'] !== $oldData['TABLE_NAME'])
	{
		$connection = Application::getConnection();
		$sqlHelper = $connection->getSqlHelper();
		$connection->renameTable($oldData['TABLE_NAME'], $data['TABLE_NAME']);

		if ($connection instanceof MssqlConnection)
		{
			// rename constraint
			$connection->query(sprintf(
				"EXEC sp_rename %s, %s, 'OBJECT'",
				$sqlHelper->quote($oldData['TABLE_NAME'].'_ibpk_1'),
				$sqlHelper->quote($data['TABLE_NAME'].'_ibpk_1')
			));
		}

		// rename also uf multiple tables and its constraints, sequences, and triggers
		/** @noinspection PhpMethodOrClassCallIsNotCaseSensitiveInspection */
		foreach ($USER_FIELD_MANAGER->getUserFields(static::compileEntityId($oldData['ID'])) as $field)
		{
			if ($field['MULTIPLE'] == 'Y')
			{
				$oldUtmTableName = static::getMultipleValueTableName($oldData, $field);
				$newUtmTableName = static::getMultipleValueTableName($data, $field);

				$connection->renameTable($oldUtmTableName, $newUtmTableName);
			}
		}
	}

	return $result;
}