function DatabaseSchema_pgsql::addField

Overrides DatabaseSchema::addField

File

includes/database/pgsql/schema.inc, line 537

Class

DatabaseSchema_pgsql

Code

public function addField($table, $field, $spec, $new_keys = array()) {
    if (!$this->tableExists($table)) {
        throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add field @table.@field: table doesn't exist.", array(
            '@field' => $field,
            '@table' => $table,
        )));
    }
    if ($this->fieldExists($table, $field)) {
        throw new DatabaseSchemaObjectExistsException(t("Cannot add field @table.@field: field already exists.", array(
            '@field' => $field,
            '@table' => $table,
        )));
    }
    $fixnull = FALSE;
    if (!empty($spec['not null']) && !isset($spec['default'])) {
        $fixnull = TRUE;
        $spec['not null'] = FALSE;
    }
    $query = 'ALTER TABLE {' . $table . '} ADD COLUMN ';
    $query .= $this->createFieldSql($field, $this->processField($spec));
    $this->connection
        ->query($query);
    if (isset($spec['initial'])) {
        $this->connection
            ->update($table)
            ->fields(array(
            $field => $spec['initial'],
        ))
            ->execute();
    }
    if ($fixnull) {
        $this->connection
            ->query("ALTER TABLE {" . $table . "} ALTER {$field} SET NOT NULL");
    }
    if (isset($new_keys)) {
        $this->_createKeys($table, $new_keys);
    }
    // Add column comment.
    if (!empty($spec['description'])) {
        $this->connection
            ->query('COMMENT ON COLUMN {' . $table . '}.' . $field . ' IS ' . $this->prepareComment($spec['description']));
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.