- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/db/pgsqlconnection.php
- Класс: BitrixMainDBPgsqlConnection
- Вызов: PgsqlConnection::createTable
public function createTable($tableName, $fields, $primary = array(), $autoincrement = array())
{
$sql = 'CREATE TABLE '.$this->getSqlHelper()->quote($tableName).' (';
$sqlFields = array();
foreach ($fields as $columnName => $field)
{
if (!($field instanceof ScalarField))
{
throw new ArgumentException(sprintf(
'Field `%s` should be an EntityScalarField instance', $columnName
));
}
$realColumnName = $field->getColumnName();
if (in_array($columnName, $autoincrement, true))
{
$type = 'INT GENERATED BY DEFAULT AS IDENTITY'; // size = 4
if ($field instanceof IntegerField)
{
switch ($field->getSize())
{
case 2:
$type = 'SMALLINT GENERATED BY DEFAULT AS IDENTITY';
break;
case 8:
$type = 'BIGINT GENERATED BY DEFAULT AS IDENTITY';
break;
}
}
}
else
{
$type = $this->getSqlHelper()->getColumnTypeByField($field);
}
$sqlFields[] = $this->getSqlHelper()->quote($realColumnName)
. ' ' . $type
. ($field->isNullable() ? '' : ' NOT NULL')
;
}
$sql .= join(', ', $sqlFields);
if (!empty($primary))
{
foreach ($primary as &$primaryColumn)
{
$realColumnName = $fields[$primaryColumn]->getColumnName();
$primaryColumn = $this->getSqlHelper()->quote($realColumnName);
}
$sql .= ', PRIMARY KEY('.join(', ', $primary).')';
}
$sql .= ')';
$this->query($sql);
}