You are here

function db_add_field in Drupal 6

Same name in this branch
  1. 6 includes/database.mysql-common.inc \db_add_field()
  2. 6 includes/database.pgsql.inc \db_add_field()
Same name and namespace in other branches
  1. 8 core/includes/database.inc \db_add_field()
  2. 7 includes/database/database.inc \db_add_field()

Add a new field to a table.

Parameters

$ret: Array to which query results will be added.

$table: Name of the table to be altered.

$field: Name of the field to be added.

$spec: The field specification array, as taken from a schema definition. The specification may also contain the key 'initial', the newly created field will be set to the value of the key in all rows. This is most useful for creating NOT NULL columns with no default value in existing tables.

$new_keys: (optional) Keys and indexes specification to be created on the table along with adding the field. The format is the same as a table specification but without the 'fields' element. If you are adding a type 'serial' field, you MUST specify at least one key or index including it in this array. See db_change_field() for more explanation why.

Related topics

11 calls to db_add_field()
db_change_field in includes/database.pgsql.inc
Change a field definition.
system_update_6001 in modules/system/system.install
Add version id column to {term_node} to allow taxonomy module to use revisions.
system_update_6010 in modules/system/system.install
Add variable replacement for watchdog messages.
system_update_6021 in modules/system/system.install
Migrate the menu items from the old menu system to the new menu_links table.
system_update_6022 in modules/system/system.install
Update files tables to associate files to a uid by default instead of a nid. Rename file_revisions to upload since it should only be used by the upload module used by upload to link files to nodes.

... See full list

File

includes/database.pgsql.inc, line 667
Database interface code for PostgreSQL database servers.

Code

function db_add_field(&$ret, $table, $field, $spec, $new_keys = array()) {
  $fixnull = FALSE;
  if (!empty($spec['not null']) && !isset($spec['default'])) {
    $fixnull = TRUE;
    $spec['not null'] = FALSE;
  }
  $query = 'ALTER TABLE {' . $table . '} ADD COLUMN ';
  $query .= _db_create_field_sql($field, _db_process_field($spec));
  $ret[] = update_sql($query);
  if (isset($spec['initial'])) {

    // All this because update_sql does not support %-placeholders.
    $sql = 'UPDATE {' . $table . '} SET ' . $field . ' = ' . db_type_placeholder($spec['type']);
    $result = db_query($sql, $spec['initial']);
    $ret[] = array(
      'success' => $result !== FALSE,
      'query' => check_plain($sql . ' (' . $spec['initial'] . ')'),
    );
  }
  if ($fixnull) {
    $ret[] = update_sql("ALTER TABLE {" . $table . "} ALTER {$field} SET NOT NULL");
  }
  if (isset($new_keys)) {
    _db_create_keys($ret, $table, $new_keys);
  }
}