/** * 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; }