• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/location/migration/migrate.php
  • Класс: BitrixSaleLocationMigrationCUpdaterLocationPro
  • Вызов: CUpdaterLocationPro::checkIndexExistsByName
static function checkIndexExistsByName($indexName, $tableName)
{
	if(!mb_strlen($indexName) || !mb_strlen($tableName))
		return false;

	$dbConnection = MainHttpApplication::getConnection();
	$dbConnType = $dbConnection->getType();

	if($dbConnType == self::DB_TYPE_MYSQL_LC)
		$res = $dbConnection->query("show index from ".$tableName);
	elseif($dbConnType == self::DB_TYPE_ORACLE_LC)
		$res = $dbConnection->query("SELECT INDEX_NAME as Key_name FROM USER_IND_COLUMNS WHERE TABLE_NAME = '".ToUpper($tableName)."'");
	elseif($dbConnType == self::DB_TYPE_MSSQL_LC)
	{
		$res = $dbConnection->query("SELECT si.name Key_name
			FROM sysindexkeys s
				INNER JOIN syscolumns c ON s.id = c.id AND s.colid = c.colid
				INNER JOIN sysobjects o ON s.id = o.Id AND o.xtype = 'U'
				LEFT JOIN sysindexes si ON si.indid = s.indid AND si.id = s.id
			WHERE o.name = '".ToUpper($tableName)."'");
	}

	while($item = $res->fetch())
	{
		if (isset($item['Key_name']) && $item['Key_name'] === $indexName)
		{
			return true;
		}
		if (isset($item['KEY_NAME']) && $item['KEY_NAME'] === $indexName)
		{
			return true;
		}
	}

	return false;
}