• Модуль: highloadblock
  • Путь к файлу: ~/bitrix/modules/highloadblock/lib/highloadblocktable.php
  • Класс: BitrixHighloadblockHighloadBlockTable
  • Вызов: HighloadBlockTable::add
static function add(array $data)
{
	$result = parent::add($data);

	if (!$result->isSuccess(true))
	{
		return $result;
	}

	// create table in db
	$connection = Application::getConnection();
	$dbtype = $connection->getType();
	$sqlHelper = $connection->getSqlHelper();

	if ($dbtype == 'mysql')
	{
		$connection->query('
			CREATE TABLE '.$sqlHelper->quote($data['TABLE_NAME']).' (ID int(11) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (ID))
		');
	}
	elseif ($dbtype == 'pgsql')
	{
		$connection->query('
			CREATE TABLE '.$sqlHelper->quote($data['TABLE_NAME']).' (ID serial NOT NULL, PRIMARY KEY (ID))
		');
	}
	elseif ($dbtype == 'mssql')
	{
		$connection->query('
			CREATE TABLE '.$sqlHelper->quote($data['TABLE_NAME']).' (ID int NOT NULL IDENTITY (1, 1),
			CONSTRAINT '.$data['TABLE_NAME'].'_ibpk_1 PRIMARY KEY (ID))
		');
	}
	elseif ($dbtype == 'oracle')
	{
		$connection->query('
			CREATE TABLE '.$sqlHelper->quote($data['TABLE_NAME']).' (ID number(11) NOT NULL, PRIMARY KEY (ID))
		');

		$connection->query('
			CREATE SEQUENCE sq_'.$data['TABLE_NAME'].'
		');

		$connection->query('
			CREATE OR REPLACE TRIGGER '.$data['TABLE_NAME'].'_insert
				BEFORE INSERT
				ON '.$sqlHelper->quote($data['TABLE_NAME']).'
				FOR EACH ROW
					BEGIN
					IF :NEW.ID IS NULL THEN
						SELECT sq_'.$data['TABLE_NAME'].'.NEXTVAL INTO :NEW.ID FROM dual;
					END IF;
				END;
		');
	}
	else
	{
		throw new MainSystemException('Unknown DB type');
	}

	return $result;
}