You are here

function hosting_client_update_1 in Hostmaster (Aegir) 6

Add the unique index to the client table

This will also run through all existing clients and merge / delete the ones that don't belong.

File

modules/hosting/client/hosting_client.install, line 97
Install, update and uninstall for the clients module.

Code

function hosting_client_update_1() {
  switch ($GLOBALS['db_type']) {
    case 'mysql':
    case 'mysqli':
      $ret = array();
      $result = db_query("SELECT email, count(distinct nid) as count FROM {hosting_client} GROUP BY email");
      while ($distinct = db_fetch_object($result)) {
        if ($distinct->count > 1) {

          # we have found duplicates.
          $result2 = db_query("SELECT nid FROM {hosting_client} WHERE email = '%s' ORDER BY nid", $distinct->email);
          $first = false;
          while ($client = db_fetch_object($result2)) {
            if (!$first) {

              // this is the key all the others will be assigned to.
              $first = $client->nid;
            }
            else {

              // reset nodes to the first occurrence, and delete the duplicate
              db_query("UPDATE {hosting_site} SET client=%d WHERE client=%d", $first, $client->nid);
              node_delete($client->nid);
            }
          }
        }
      }
      $ret[] = update_sql("CREATE UNIQUE INDEX hosting_client_email_idx ON hosting_client (email)");
      break;
  }
  return $ret;
}