You are here

function db_add_column in Drupal 4

Same name and namespace in other branches
  1. 5 update.php \db_add_column()
  2. 6 update.php \db_add_column()

Add a column to a database using syntax appropriate for PostgreSQL. Save result of SQL commands in $ret array.

Note: when you add a column with NOT NULL and you are not sure if there are already rows in the table, you MUST also add DEFAULT. Otherwise PostgreSQL won't work when the table is not empty. If NOT NULL and DEFAULT are set the PostgreSQL version will set values of the added column in old rows to the DEFAULT value.

Parameters

$ret: Array to which results will be added.

$table: Name of the table, without {}

$column: Name of the column

$type: Type of column

$attributes: Additional optional attributes. Recognized attributes: not null => TRUE|FALSE default => NULL|FALSE|value (with or without '', it won't be added)

Return value

nothing, but modifies $ret parameter.

15 calls to db_add_column()
system_update_129 in database/updates.inc
system_update_133 in database/updates.inc
system_update_139 in database/updates.inc
system_update_145 in database/updates.inc
system_update_146 in database/updates.inc

... See full list

File

./update.php, line 50
Administrative page for handling updates from one Drupal version to another.

Code

function db_add_column(&$ret, $table, $column, $type, $attributes = array()) {
  if (array_key_exists('not null', $attributes) and $attributes['not null']) {
    $not_null = 'NOT NULL';
  }
  if (array_key_exists('default', $attributes)) {
    if (is_null($attributes['default'])) {
      $default_val = 'NULL';
      $default = 'default NULL';
    }
    elseif ($attributes['default'] === FALSE) {
      $default = '';
    }
    else {
      $default_val = "{$attributes['default']}";
      $default = "default {$attributes['default']}";
    }
  }
  $ret[] = update_sql("ALTER TABLE {" . $table . "} ADD {$column} {$type}");
  if ($default) {
    $ret[] = update_sql("ALTER TABLE {" . $table . "} ALTER {$column} SET {$default}");
  }
  if ($not_null) {
    if ($default) {
      $ret[] = update_sql("UPDATE {" . $table . "} SET {$column} = {$default_val}");
    }
    $ret[] = update_sql("ALTER TABLE {" . $table . "} ALTER {$column} SET NOT NULL");
  }
}