- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/location/db/blockinserter.php
- Класс: BitrixSaleLocationDBBlockInserter
- Вызов: BlockInserter::insert
public function insert($row)
{
if(!is_array($row) || empty($row))
return;
$this->index++;
$this->bufferSize++;
if($this->autoIncFld !== false)
{
$row[$this->autoIncFld] = $this->index;
Helper::incrementSequenceForTable($this->tableName); // if this is oracle and we insert auto increment key directly, we must provide sequence increment manually
}
$sql = Helper::getBatchInsertValues($row, $this->tableName, $this->fldVector, $this->map);
/*
MySQL & MsSQL: insert into b_test (F1,F2) values ('one','two'),('one1','two1'),('one2','two2')
Oracle: insert all into b_test (F1,F2) values ('one','two') into b_test (F1,F2) values ('one1','two1') into b_test (F1,F2) values ('one2','two2') select * from dual
*/
$nextBuffer = (empty($this->buffer) ? $this->insertHead : $this->buffer.Helper::getBatchInsertSeparator()).$sql;
// here check length
if(defined(SITE_CHARSET) && SITE_CHARSET == 'UTF-8')
$len = mb_strlen($nextBuffer);
else
$len = mb_strlen($nextBuffer);
if(($this->mtu - (mb_strlen($nextBuffer) + 100)) < self::RED_LINE)
{
$this->flush(); // flushing the previous buffer (now $this->buffer == '')
$this->buffer = $this->insertHead.$sql;
}
else
$this->buffer = $nextBuffer;
return $this->index;
}