• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/discount/gift/relateddata.php
  • Класс: BitrixSaleDiscountGiftRelatedDataTable
  • Вызов: RelatedDataTable::insertBatch
static function insertBatch(array $items)
{
	$tableName = static::getTableName();
	$connection = Application::getConnection();
	$sqlHelper = $connection->getSqlHelper();

	$query = $prefix = '';
	if($connection instanceof MysqlCommonConnection)
	{
		foreach ($items as $item)
		{
			list($prefix, $values) = $sqlHelper->prepareInsert($tableName, $item);

			$query .= ($query? ', ' : ' ') . '(' . $values . ')';
			if(mb_strlen($query) > self::MAX_LENGTH_BATCH_MYSQL_QUERY)
			{
				$connection->queryExecute("INSERT INTO {$tableName} ({$prefix}) VALUES {$query}");
				$query = '';
			}
		}
		unset($item);

		if($query && $prefix)
		{
			$connection->queryExecute("INSERT INTO {$tableName} ({$prefix}) VALUES {$query}");
		}
	}
	elseif($connection instanceof MssqlConnection)
	{
		$valueData = array();
		foreach ($items as $item)
		{
			list($prefix, $values) = $sqlHelper->prepareInsert($tableName, $item);
			$valueData[] = "SELECT {$values}";
		}
		unset($item);

		$valuesSql = implode(' UNION ALL ', $valueData);
		if($valuesSql && $prefix)
		{
			$connection->queryExecute("INSERT INTO {$tableName} ({$prefix}) $valuesSql");
		}
	}
	elseif($connection instanceof OracleConnection)
	{
		$valueData = array();
		foreach ($items as $item)
		{
			list($prefix, $values) = $sqlHelper->prepareInsert($tableName, $item);
			$valueData[] = "SELECT {$values} FROM dual";
		}
		unset($item);

		$valuesSql = implode(' UNION ALL ', $valueData);
		if($valuesSql && $prefix)
		{
			$connection->queryExecute("INSERT INTO {$tableName} ({$prefix}) $valuesSql");
		}
	}
}