<?php
/**
 * @file
 * Install, update and uninstall functions for the Serial module.
 */

/**
 * Implements hook_field_schema().
 */
function serial_field_schema($field) {
  $columns = array();

  switch ($field['type']) {
    case 'serial':
      $columns['value'] = array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'sortable' => TRUE,
        'views' => TRUE,
        'index' => TRUE,
      );
      break;
  }

  return array('columns' => $columns);
}

/**
 * Implements hook_schema().
 */
function serial_schema() {
  // Get the standard schema:
  module_load_include('inc', 'serial');

  $table_schema = _serial_get_table_schema();
  $schema = array();

  foreach (_serial_get_all_fields() as $field) {
    $schema[_serial_get_table_name($field->bundle, $field->field_name)] = $table_schema;
  }

  // Return the schema of all the assistant tables (one per field instance).
  return $schema;
}

/**
 * Upgrade path.
 *
 * Switches from nids to uniqids.
 */
function serial_update_7130() {
  module_load_include('inc', 'serial');

  $table_schema = _serial_get_table_schema();

  // Update the schema of old assistant tables.
  foreach (_serial_get_all_fields() as $field) {
    // Empty the table.
    $table = _serial_get_table_name($field->bundle, $field->field_name);
    db_delete($table)->execute();

    // Drop nid field and key.
    db_drop_field($table, 'nid');
    db_drop_unique_key($table, 'nid');

    // Add uniqid field and key.
    db_add_field($table, 'uniqid', $table_schema['fields']['uniqid']);
    db_add_unique_key($table, 'uniqid', array('uniqid'));
  }
}
