/**
  * Remove the mapping between AuthNTokens and an Agent
  * 
  * @param object AgentTokenMapping $mapping
  * @return void
  * @access public
  * @since 3/9/05
  */
 function deleteMapping(AgentTokenMapping $mapping)
 {
     $this->_checkConfig();
     $dbc = Services::getService("DatabaseManager");
     $dbc->beginTransaction($this->_dbId);
     $agentId = $mapping->getAgentId();
     $authNTokens = $mapping->getTokens();
     $typeKey = $this->_getTypeKey($mapping->getAuthenticationType());
     // Delete the mapping.
     $query = new DeleteQuery();
     $query->setTable($this->_mappingTable);
     $query->addWhere("agent_id='" . addslashes($agentId->getIdString()) . "'");
     $query->addWhere("token_identifier='" . addslashes($authNTokens->getIdentifier()) . "'", _AND);
     $query->addWhere("fk_type='" . addslashes($typeKey) . "'", _AND);
     $result = $dbc->query($query, $this->_dbId);
     // Delete the type if nothing is referencing it.
     $query = new SelectQuery();
     $query->addTable($this->_mappingTable);
     $query->addColumn("COUNT(*)", "count");
     $query->addWhere("fk_type='" . addslashes($typeKey) . "'");
     $result = $dbc->query($query, $this->_dbId);
     if ($result->getNumberOfRows() == 0) {
         $query = new DeleteQuery();
         $query->addTable($this->_typeTable);
         $query->addWhere("id='" . addslashes($typeKey) . "'");
         $result = $dbc->query($query, $this->_dbId);
     }
     $result->free();
     $dbc->commitTransaction($this->_dbId);
 }