- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/location/tree.php
- Класс: BitrixSaleLocationis
- Вызов: is::mergeRelationsFromTemporalTable
static function mergeRelationsFromTemporalTable($temporalTabName, $additinalFlds = array(), $fldMap = array())
{
$dbConnection = MainHttpApplication::getConnection();
$dbHelper = $dbConnection->getSqlHelper();
$temporalTabName = Assert::expectStringNotNull($temporalTabName, false, 'Name of temporal table must be a non-zero length string');
$temporalTabName = $dbHelper->forSql($temporalTabName);
$entityTableName = static::getTableName();
if(!is_array($additinalFlds))
$additinalFlds = array();
$additinalFlds = array_merge(array('LEFT_MARGIN', 'RIGHT_MARGIN', 'DEPTH_LEVEL'), $additinalFlds);
$fldReplace = array();
foreach($additinalFlds as &$fld)
{
$fld = $dbHelper->forSql($fld);
$fldReplace[$fld] = is_array($fldMap) && isset($fldMap[$fld]) ? $dbHelper->forSql($fldMap[$fld]) : $fld;
}
$idReplace = is_array($fldMap) && isset($fldMap['ID']) ? $dbHelper->forSql($fldMap['ID']) : 'ID';
if($dbConnection->getType() == 'mysql')
{
$sql = 'update '.$entityTableName.', '.$temporalTabName.' set ';
$additFldCnt = count($additinalFlds);
for($i = 0; $i < $additFldCnt; $i++)
{
$sql .= $entityTableName.'.'.$additinalFlds[$i].' = '.$temporalTabName.'.'.$fldReplace[$additinalFlds[$i]].($i == count($additinalFlds) - 1 ? '' : ', ');
}
$sql .= ' where '.$entityTableName.'.ID = '.$temporalTabName.'.'.$idReplace;
}
elseif($dbConnection->getType() == 'mssql')
{
$sql = 'update '.$entityTableName.' set ';
$additFldCnt = count($additinalFlds);
for($i = 0; $i < $additFldCnt; $i++)
{
$sql .= $additinalFlds[$i].' = '.$temporalTabName.'.'.$fldReplace[$additinalFlds[$i]].($i == count($additinalFlds) - 1 ? '' : ', ');
}
$sql .= ' from '.$entityTableName.' join '.$temporalTabName.' on '.$entityTableName.'.ID = '.$temporalTabName.'.'.$idReplace;
}
elseif($dbConnection->getType() == 'oracle')
{
// update tab1 set (aa,bb) = (select aa,bb from tab2 where tab2.id = tab1.id)
$sql = 'update '.$entityTableName.' set ('.
implode(', ', $additinalFlds).
') = (select '.
implode(', ', $fldReplace).
' from '.$temporalTabName.' where '.$entityTableName.'.ID = '.$temporalTabName.'.'.$idReplace.')';
}
$dbConnection->query($sql);
}