You are here

function nodequeue_update_7300 in Nodequeue 7.3

Remove qid fields and adjust keys and indexes to use machine name.

File

./nodequeue.install, line 406
Install, update and uninstall functions for the nodequeue module.

Code

function nodequeue_update_7300() {
  $name_field = array(
    'description' => 'The machine name for the queue.',
    'type' => 'varchar',
    'length' => 128,
  );

  // Get an array map of qid/name values before deleting qid field from
  // nodequeue_queue table.
  $queues = db_select('nodequeue_queue', 'nq')
    ->fields('nq', array(
    'qid',
    'name',
  ))
    ->execute()
    ->fetchAllKeyed(0, 1);

  // Changes to noqueue_queue table.
  // Change qid from serial to int first, otherwise removing the primary key
  // isn't possible.
  db_change_field('nodequeue_queue', 'qid', 'qid', array(
    'type' => 'int',
    'unsigned' => TRUE,
    'not null' => TRUE,
  ));
  db_drop_primary_key('nodequeue_queue');
  db_drop_unique_key('nodequeue_queue', 'name');
  db_add_primary_key('nodequeue_queue', array(
    'name',
  ));
  db_drop_field('nodequeue_queue', 'qid');

  // Changes to nodequeue_roles table.
  db_drop_index('nodequeue_roles', 'qid');
  db_add_field('nodequeue_roles', 'name', $name_field);
  nodequeue_update_populate_name_field('nodequeue_roles', $queues);
  db_drop_field('nodequeue_roles', 'qid');
  db_add_index('nodequeue_roles', 'name', array(
    'name',
  ));

  // Changes to nodequeue_types table.
  db_drop_index('nodequeue_types', 'qid');
  db_add_field('nodequeue_types', 'name', $name_field);
  nodequeue_update_populate_name_field('nodequeue_types', $queues);
  db_drop_field('nodequeue_types', 'qid');
  db_add_index('nodequeue_types', 'name', array(
    'name',
  ));

  // Changes to nodequeue_subqueue table.
  db_drop_index('nodequeue_subqueue', 'qid');
  db_add_field('nodequeue_subqueue', 'name', $name_field);
  nodequeue_update_populate_name_field('nodequeue_subqueue', $queues);
  db_drop_field('nodequeue_subqueue', 'qid');
  db_add_index('nodequeue_subqueue', 'name', array(
    'name',
  ));

  // Changes to nodequeue_nodes table.
  db_drop_index('nodequeue_nodes', 'qid_nid');
  db_add_field('nodequeue_nodes', 'name', $name_field);
  nodequeue_update_populate_name_field('nodequeue_nodes', $queues);
  db_drop_field('nodequeue_nodes', 'qid');
  db_add_index('nodequeue_nodes', 'name_nid', array(
    'name',
    'nid',
  ));

  // Upgrade smartqueue table here, to avoid problems, since qid is removed from
  // nodequeue_queue table, we can't map qids to names after this update
  // function is ran.
  if (db_table_exists('smartqueue')) {

    // Change qid from serial to int first, otherwise removing the primary key
    // isn't possible.
    db_change_field('smartqueue', 'qid', 'qid', array(
      'type' => 'int',
      'unsigned' => TRUE,
      'not null' => TRUE,
    ));
    db_add_field('smartqueue', 'name', $name_field);
    nodequeue_update_populate_name_field('smartqueue', $queues);
    db_drop_primary_key('smartqueue');
    db_add_primary_key('smartqueue', array(
      'name',
    ));
    db_drop_field('smartqueue', 'qid');
  }
}