• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/location/migration/migrate.php
  • Класс: BitrixSaleLocationMigrationCUpdaterLocationPro
  • Вызов: CUpdaterLocationPro::createTable
protected function createTable($tableName = '', $columns = array(), $constraints = array())
{
	if(!mb_strlen($tableName) || !is_array($columns) || empty($columns) || $this->TableExists($tableName))
		return false;

	global $DB;

	$tableName = $DB->ForSql($tableName);
	$tableNameUC = mb_strtoupper($tableName);

	// queries that should be called after table creation
	$afterTableCreate = array();

	// column sqls separated by dbtype
	$columnsSql = array();
	foreach($columns as $colName => $colProps)
		if($col = self::prepareFieldSql($colProps, $afterTableCreate))
			$columnsSql[$colName] = $col;

	// constraint sqls separated by dbtype
	$constSql = self::prepareConstraintSql($constraints);

	$queries = array();

	if($sql = self::prepareCreateTable($tableName, $columnsSql, $constSql, self::DB_TYPE_MYSQL))
		$queries[self::DB_TYPE_MYSQL] = $sql;

	if($sql = self::prepareCreateTable($tableNameUC, $columnsSql, $constSql, self::DB_TYPE_MSSQL))
		$queries[self::DB_TYPE_MSSQL] = $sql;

	if($sql = self::prepareCreateTable($tableNameUC, $columnsSql, $constSql, self::DB_TYPE_ORACLE))
		$queries[self::DB_TYPE_ORACLE] = $sql;

	if(!empty($queries))
		$this->Query($queries);

	foreach($afterTableCreate as $dbType => $queries)
	{
		foreach($queries as $query)
		{
			$this->Query(array(
				$dbType => str_replace('%TABLE_NAME%', self::DB_TYPE_MYSQL == $dbType ? $tableName : $tableNameUC, $query)
			));
		}
	}

	return true;
}