• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/db/oracledbconnection.php
  • Класс: BitrixMainDBOracleDbConnection
  • Вызов: OracleDbConnection::getIndexName
public function getIndexName($tableName, array $arColumns, $strict = false)
{
	if (!is_array($arColumns) || empty($arColumns))
		return null;

	$isFunc = false;
	$arIndexes = array();

	$result = $this->query("SELECT * FROM USER_IND_COLUMNS WHERE TABLE_NAME = upper('".$this->getSqlHelper()->forSql($tableName)."')");
	while ($ar = $result->fetch())
	{
		$arIndexes[$ar["INDEX_NAME"]][$ar["COLUMN_POSITION"] - 1] = $ar["COLUMN_NAME"];
		if (strncmp($ar["COLUMN_NAME"], "SYS_NC", 6) === 0)
			$isFunc = true;
	}

	if ($isFunc)
	{
		$result = $this->query("SELECT * FROM USER_IND_EXPRESSIONS WHERE TABLE_NAME = upper('".$this->getSqlHelper()->forSql($tableName)."')");
		while ($ar = $result->fetch())
			$arIndexes[$ar["INDEX_NAME"]][$ar["COLUMN_POSITION"] - 1] = $ar["COLUMN_EXPRESSION"];
	}

	$columns = implode(",", $arColumns);
	foreach ($arIndexes as $key => $arKeyColumn)
	{
		ksort($arKeyColumn);
		$keyColumn = implode(",", $arKeyColumn);
		if ($strict)
		{
			if ($keyColumn === $columns)
				return $key;
		}
		else
		{
			if (substr($keyColumn, 0, strlen($columns)) === $columns)
				return $key;
		}
	}

	return null;
}