function DatabaseSchema_mysql::addField

Overrides DatabaseSchema::addField

File

includes/database/mysql/schema.inc, line 336

Class

DatabaseSchema_mysql

Code

public function addField($table, $field, $spec, $keys_new = 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 ';
    $query .= $this->createFieldSql($field, $this->processField($spec));
    if ($keys_sql = $this->createKeysSql($keys_new)) {
        $query .= ', ADD ' . implode(', ADD ', $keys_sql);
    }
    $this->connection
        ->query($query);
    if (isset($spec['initial'])) {
        $this->connection
            ->update($table)
            ->fields(array(
            $field => $spec['initial'],
        ))
            ->execute();
    }
    if ($fixnull) {
        $spec['not null'] = TRUE;
        $this->changeField($table, $field, $field, $spec);
    }
}

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