• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/location/migration/migrate.php
  • Класс: BitrixSaleLocationMigrationCUpdaterLocationPro
  • Вызов: CUpdaterLocationPro::prepareFieldSql
protected function prepareFieldSql($field, &$afterCreate)
{
	$prepared = array();

	global $DB;

	foreach($field['TYPE'] as $dbType => $fldType)
	{
		$prepared[$dbType] = $fldType;

		if($field['PRIMARY'])
			$prepared[$dbType] .= ' primary key';

		if($field['AUTO_INCREMENT'])
		{
			if($dbType == self::DB_TYPE_MYSQL)
				$prepared[$dbType] .= ' auto_increment';
			if($dbType == self::DB_TYPE_MSSQL)
				$prepared[$dbType] .= ' IDENTITY (1, 1)';
			if($dbType == self::DB_TYPE_ORACLE)
			{
				// create a sequence
				$afterCreate[self::DB_TYPE_ORACLE][] = 'CREATE SEQUENCE SQ_B_%TABLE_NAME%';

				// then create a trigger that uses the sequence
				$afterCreate[self::DB_TYPE_ORACLE][] = 'CREATE OR REPLACE TRIGGER %TABLE_NAME%_insert
					BEFORE INSERT
					ON %TABLE_NAME%
					FOR EACH ROW
					BEGIN
						IF :NEW.ID IS NULL THEN
							SELECT SQ_%TABLE_NAME%.NEXTVAL INTO :NEW.ID FROM dual;
						END IF;
					END;';
			}
		}

		if(isset($field['DEFAULT']))
			$prepared[$dbType] .= ' DEFAULT '.(empty($field['DEFAULT']) ? 'NULL' : "'".$DB->ForSql($field['DEFAULT'])."'");

		if(isset($field['NULL']))
			$prepared[$dbType] .= ' '.($field['NULL'] ? '' : 'NOT ').'NULL';

	}

	return $prepared;
}