db_add_field

Versions
6
db_add_field(&$ret, $table, $field, $spec, $new_keys = array())
7
db_add_field($table, $field, $spec, $keys_new = array())

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.

$keys_new 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

▾ 12 functions call db_add_field()

db_change_field in includes/database.pgsql.inc
Change a field definition.
hook_update_N in developer/hooks/install.php
Perform a single update.
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.
system_update_6024 in modules/system/system.install
Add translation fields to nodes used by translation module.
system_update_6027 in modules/system/system.install
Add block cache.
system_update_6036 in modules/system/system.install
Change the search schema and indexing.
system_update_6040 in modules/system/system.install
Add a weight column to the upload table.
system_update_6051 in modules/system/system.install
Create a signature_format column.
update_fix_d6_requirements in ./update.php
Perform Drupal 5.x to 6.x updates that are required for update.php to function properly.

Code

includes/database.pgsql.inc, line 680

<?php
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);
  }
}
?>
Login or register to post comments
 
 

All source code and documentation on this site is released under the terms of the GNU General Public License, version 2 and later. Drupal is a registered trademark of Dries Buytaert.