/**
     * Processes raw relations for all classes.
     *
     * @return void
     */
    protected function processClassRawRelations()
    {
        $sql = 'SELECT Id, RawRelations
				FROM Classes
				WHERE RawRelations IS NOT NULL';
        $raw_relations = $this->db->yieldPairs($sql, array('empty_relations' => json_encode(array())));
        foreach ($raw_relations as $class_id => $class_raw_relations) {
            $sql = 'SELECT RelatedClass
					FROM ClassRelations
					WHERE ClassId = :class_id';
            $old_class_relations = $this->db->fetchCol($sql, array('class_id' => $class_id));
            $new_class_relations = array();
            foreach (json_decode($class_raw_relations, true) as $class_raw_relation) {
                list($related_class, $relation_type, $is_internal) = $class_raw_relation;
                $new_class_relations[] = $this->addRelation($class_id, $related_class, $relation_type, $is_internal, $old_class_relations);
            }
            $delete_class_relations = array_diff($old_class_relations, $new_class_relations);
            if ($delete_class_relations) {
                $sql = 'DELETE FROM ClassRelations
						WHERE ClassId = :class_id AND RelatedClassId IN (:related_class_ids)';
                $this->db->perform($sql, array('class_id' => $class_id, 'related_class_ids' => $delete_class_relations));
            }
        }
        $sql = 'UPDATE Classes
				SET RawRelations = NULL';
        $this->db->perform($sql);
    }
 /**
  *
  * Fetches the first column of rows as a sequential array.
  *
  * @param string $statement The SQL statement to prepare and execute.
  *
  * @param array $values Values to bind to the query.
  *
  * @param callable $callable A callable to be applied to each of the rows
  * to be returned.
  *
  * @return array
  *
  */
 public function fetchCol($statement, array $values = array(), $callable = null)
 {
     $result = $this->pdo->fetchCol($statement, $values, $callable);
     $this->logProfiles(__FUNCTION__);
     return $result;
 }