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