- Модуль: 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;
}