- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/location/migration/migrate.php
- Класс: BitrixSaleLocationMigrationCUpdaterLocationPro
- Вызов: CUpdaterLocationPro::insertTreeInfo
private function insertTreeInfo()
{
// We make temporal table, place margins, parent and lang data into it, then perform an update of the old table from the temporal one.
$this->createTemporalTable(
self::TABLE_TEMP_TREE,
array(
'ID' => array(
'TYPE' => array(
self::DB_TYPE_MYSQL => 'int',
self::DB_TYPE_MSSQL => 'int',
self::DB_TYPE_ORACLE => 'NUMBER(18)',
)
),
'PARENT_ID' => array(
'TYPE' => array(
self::DB_TYPE_MYSQL => 'int',
self::DB_TYPE_MSSQL => 'int',
self::DB_TYPE_ORACLE => 'NUMBER(18)',
)
),
'TYPE_ID' => array(
'TYPE' => array(
self::DB_TYPE_MYSQL => 'int',
self::DB_TYPE_MSSQL => 'int',
self::DB_TYPE_ORACLE => 'NUMBER(18)',
)
),
'DEPTH_LEVEL' => array(
'TYPE' => array(
self::DB_TYPE_MYSQL => 'int',
self::DB_TYPE_MSSQL => 'int',
self::DB_TYPE_ORACLE => 'NUMBER(18)',
)
),
'LEFT_MARGIN' => array(
'TYPE' => array(
self::DB_TYPE_MYSQL => 'int',
self::DB_TYPE_MSSQL => 'int',
self::DB_TYPE_ORACLE => 'NUMBER(18)',
)
),
'RIGHT_MARGIN' => array(
'TYPE' => array(
self::DB_TYPE_MYSQL => 'int',
self::DB_TYPE_MSSQL => 'int',
self::DB_TYPE_ORACLE => 'NUMBER(18)',
)
)
)
);
$handle = new BlockInserter(array(
'tableName' => self::TABLE_TEMP_TREE,
'exactFields' => array(
'ID' => array('data_type' => 'integer'),
'PARENT_ID' => array('data_type' => 'integer'),
'TYPE_ID' => array('data_type' => 'integer'),
'DEPTH_LEVEL' => array('data_type' => 'integer'),
'LEFT_MARGIN' => array('data_type' => 'integer'),
'RIGHT_MARGIN' => array('data_type' => 'integer'),
),
'parameters' => array(
'mtu' => 9999
)
));
// fill temporal table
if(is_array($this->data['TREE']))
{
foreach($this->data['TREE'] as $id => $node)
{
$handle->insert(array(
'ID' => $id,
'PARENT_ID' => $node['PARENT_ID'],
'TYPE_ID' => $node['TYPE_ID'],
'DEPTH_LEVEL' => $node['DEPTH_LEVEL'],
'LEFT_MARGIN' => $node['LEFT_MARGIN'],
'RIGHT_MARGIN' => $node['RIGHT_MARGIN'],
));
}
}
$handle->flush();
// merge temp table with location table
LocationLocationTable::mergeRelationsFromTemporalTable(self::TABLE_TEMP_TREE, array('TYPE_ID', 'PARENT_ID'));
$this->dropTable(self::TABLE_TEMP_TREE);
}