- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integrity/entity/duplicateentitystatistics.php
- Класс: Bitrix\Crm\Integrity\Entity\DuplicateEntityStatisticsTable
- Вызов: DuplicateEntityStatisticsTable::upsert
static function upsert(array $data)
{
$connection = Main\Application::getConnection();
$sqlHelper = $connection->getSqlHelper();
$entityID = isset($data['ENTITY_ID']) ? intval($data['ENTITY_ID']) : 0;
$entityTypeID = isset($data['ENTITY_TYPE_ID']) ? intval($data['ENTITY_TYPE_ID']) : 0;
$rankingData = isset($data['RANKING_DATA']) ? $data['RANKING_DATA'] : '';
$rankingData = $sqlHelper->forSql($rankingData, 512);
if($connection instanceof Main\DB\MysqlCommonConnection)
{
$connection->queryExecute(
"INSERT INTO b_crm_dp_entity_stat(ENTITY_ID, ENTITY_TYPE_ID, RANKING_DATA)
VALUES({$entityID}, {$entityTypeID}, '{$rankingData}')
ON DUPLICATE KEY UPDATE RANKING_DATA = '{$rankingData}'"
);
}
elseif($connection instanceof Main\DB\MssqlConnection)
{
$dbResult = $connection->query(
"SELECT 'X' FROM b_crm_dp_entity_stat WHERE ENTITY_ID = {$entityID} AND ENTITY_TYPE_ID = {$entityTypeID}"
);
if(is_array($dbResult->fetch()))
{
$connection->queryExecute(
"UPDATE b_crm_dp_entity_stat SET RANKING_DATA = '{$rankingData}'
WHERE ENTITY_ID = {$entityID} AND ENTITY_TYPE_ID = {$entityTypeID}"
);
}
else
{
$connection->queryExecute(
"INSERT INTO b_crm_dp_entity_stat(ENTITY_ID, ENTITY_TYPE_ID, RANKING_DATA)
VALUES({$entityID}, {$entityTypeID}, '{$rankingData}')"
);
}
}
elseif($connection instanceof Main\DB\OracleConnection)
{
$connection->queryExecute("MERGE INTO b_crm_dp_entity_stat USING (SELECT {$entityID} ENTITY_ID, {$entityTypeID} ENTITY_TYPE_ID FROM dual)
source ON
(
source.ENTITY_ID = b_crm_dp_entity_stat.ENTITY_ID
AND source.ENTITY_TYPE_ID = b_crm_dp_entity_stat.ENTITY_TYPE_ID
)
WHEN MATCHED THEN
UPDATE SET b_crm_dp_entity_stat.RANKING_DATA = '{$rankingData}'
WHEN NOT MATCHED THEN
INSERT (ENTITY_ID, ENTITY_TYPE_ID, RANKING_DATA)
VALUES({$entityID}, {$entityTypeID}, '{$rankingData}')"
);
}
else
{
$dbType = $connection->getType();
throw new Main\NotSupportedException("The '{$dbType}' is not supported in current context");
}
}