diff options
author | simonbrandhof <simon.brandhof@gmail.com> | 2010-11-18 15:02:54 +0000 |
---|---|---|
committer | simonbrandhof <simon.brandhof@gmail.com> | 2010-11-18 15:02:54 +0000 |
commit | 4bfd79e52cea465f226c78abb253c2073f4c1d4c (patch) | |
tree | d3812db183fbd869e2451148c32b2bd583f1112a /sonar-core | |
parent | f8ba14ececd0a5b60ec7112d4df3266f105541f5 (diff) | |
download | sonarqube-4bfd79e52cea465f226c78abb253c2073f4c1d4c.tar.gz sonarqube-4bfd79e52cea465f226c78abb253c2073f4c1d4c.zip |
SONAR-1663 include the dbcleaner plugin + move all purges in this plugin
Diffstat (limited to 'sonar-core')
5 files changed, 0 insertions, 496 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/purge/AbstractPurge.java b/sonar-core/src/main/java/org/sonar/core/purge/AbstractPurge.java deleted file mode 100644 index a0f46d286d1..00000000000 --- a/sonar-core/src/main/java/org/sonar/core/purge/AbstractPurge.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Sonar, open source software quality management tool. - * Copyright (C) 2009 SonarSource SA - * mailto:contact AT sonarsource DOT com - * - * Sonar is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * Sonar is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with Sonar; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 - */ -package org.sonar.core.purge; - -import org.sonar.api.batch.Purge; -import org.sonar.api.database.DatabaseSession; -import org.sonar.api.database.model.*; -import org.sonar.api.design.DependencyDto; -import org.sonar.api.utils.TimeProfiler; - -import javax.persistence.Query; -import java.util.List; - -public abstract class AbstractPurge implements Purge { - - private static final int MAX_IN_ELEMENTS = 950; - - private int sqlInPageSize = MAX_IN_ELEMENTS; - private DatabaseSession session; - private TimeProfiler profiler = new TimeProfiler().setLevelToDebug(); - - public AbstractPurge(DatabaseSession session) { - this.session = session; - } - - protected DatabaseSession getSession() { - return session; - } - - /** - * Delete SNAPSHOTS and all dependent tables (MEASURES, ...) - */ - protected void deleteSnapshotData(List<Integer> snapshotIds) { - deleteMeasuresBySnapshotId(snapshotIds); - deleteSources(snapshotIds); - deleteViolations(snapshotIds); - deleteDependencies(snapshotIds); - deleteSnapshots(snapshotIds); - } - - protected void deleteDependencies(List<Integer> snapshotIds) { - executeQuery("delete dependencies", snapshotIds, "delete from " + DependencyDto.class.getSimpleName() + " d where d.fromSnapshotId in (:ids)"); - executeQuery("delete dependencies", snapshotIds, "delete from " + DependencyDto.class.getSimpleName() + " d where d.toSnapshotId in (:ids)"); - } - - /** - * Delete all measures, including MEASURE_DATA - */ - protected void deleteMeasuresBySnapshotId(List<Integer> snapshotIds) { - executeQuery("delete measures by snapshot id", snapshotIds, "delete from " + MeasureData.class.getSimpleName() + " m where m.snapshotId in (:ids)"); - executeQuery("delete measures by snapshot id", snapshotIds, "delete from " + MeasureModel.class.getSimpleName() + " m where m.snapshotId in (:ids)"); - } - - /** - * Delete all measures, including MEASURE_DATA - */ - protected void deleteMeasuresById(List<Integer> measureIds) { - executeQuery("delete measures by id", measureIds, "delete from " + MeasureData.class.getSimpleName() + " m where m.measure.id in (:ids)"); - executeQuery("delete measures by id", measureIds, "delete from " + MeasureModel.class.getSimpleName() + " m where m.id in (:ids)"); - } - - /** - * Delete SNAPSHOT_SOURCES table - */ - protected void deleteSources(List<Integer> snapshotIds) { - executeQuery("delete sources", snapshotIds, "delete from " + SnapshotSource.class.getSimpleName() + " e where e.snapshotId in (:ids)"); - } - - /** - * Delete violations (RULE_FAILURES table) - */ - protected void deleteViolations(List<Integer> snapshotIds) { - executeQuery("delete violations", snapshotIds, "delete from " + RuleFailureModel.class.getSimpleName() + " e where e.snapshotId in (:ids)"); - } - - /** - * Delete SNAPSHOTS table - */ - protected void deleteSnapshots(List<Integer> snapshotIds) { - executeQuery("delete snapshots", snapshotIds, "delete from " + Snapshot.class.getSimpleName() + " s where s.id in (:ids)"); - } - - /** - * Paginate execution of SQL requests to avoid exceeding size of rollback segment - */ - private void executeQuery(String name, List<Integer> ids, String hql) { - if (ids == null || ids.isEmpty()) { - return; - } - - TimeProfiler profiler = new TimeProfiler().setLevelToDebug().start("Execute " + name); - - int page = 1; - int index = 0; - while (index < ids.size()) { - TimeProfiler pageProfiler = new TimeProfiler().setLevelToDebug().start("Execute " + name + " " + page + " page"); - Query query = session.createQuery(hql); - List<Integer> paginedSids = ids.subList(index, Math.min(ids.size(), index + sqlInPageSize)); - query.setParameter("ids", paginedSids); - query.executeUpdate(); - index += sqlInPageSize; - page++; - session.commit(); - pageProfiler.stop(); - } - - profiler.stop(); - } - - protected void executeQuery(List<Integer> ids, String hql) { - executeQuery("delete for " + getClass().getSimpleName(), ids, hql); - } - - protected List<Integer> selectIds(Query query) { - profiler.start("Select IDs for " + getClass().getSimpleName()); - List<Integer> result = query.getResultList(); - profiler.stop(); - return result; - } -} diff --git a/sonar-core/src/main/java/org/sonar/core/purge/DefaultPurgeContext.java b/sonar-core/src/main/java/org/sonar/core/purge/DefaultPurgeContext.java deleted file mode 100644 index f2106a6bd58..00000000000 --- a/sonar-core/src/main/java/org/sonar/core/purge/DefaultPurgeContext.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.sonar.core.purge; - -import org.apache.commons.lang.builder.ToStringBuilder; -import org.sonar.api.batch.PurgeContext; -import org.sonar.api.database.model.Snapshot; - -public class DefaultPurgeContext implements PurgeContext { - - private Integer currentSid; - private Integer lastSid; - - public DefaultPurgeContext() { - } - - public DefaultPurgeContext(Snapshot currentSnapshot) { - this(currentSnapshot, null); - } - - public DefaultPurgeContext(Snapshot currentSnapshot, Snapshot lastSnapshot) { - if (currentSnapshot != null) { - currentSid = currentSnapshot.getId(); - } - if (lastSnapshot != null) { - lastSid = lastSnapshot.getId(); - } - } - - public DefaultPurgeContext(Integer currentSid, Integer lastSid) { - this.currentSid = currentSid; - this.lastSid = lastSid; - } - - public DefaultPurgeContext setLastSnapshotId(Integer lastSid) { - this.lastSid = lastSid; - return this; - } - - public DefaultPurgeContext setCurrentSnapshotId(Integer currentSid) { - this.currentSid = currentSid; - return this; - } - - public Integer getPreviousSnapshotId() { - return lastSid; - } - - public Integer getLastSnapshotId() { - return currentSid; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - DefaultPurgeContext context = (DefaultPurgeContext) o; - - if (!currentSid.equals(context.currentSid)) { - return false; - } - if (lastSid != null ? !lastSid.equals(context.lastSid) : context.lastSid != null) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = lastSid != null ? lastSid.hashCode() : 0; - result = 31 * result + currentSid.hashCode(); - return result; - } - - @Override - public String toString() { - return new ToStringBuilder(this) - .append("currentSid", currentSid) - .append("lastSid", lastSid) - .toString(); - } -} diff --git a/sonar-core/src/test/java/org/sonar/core/purge/AbstractPurgeTest.java b/sonar-core/src/test/java/org/sonar/core/purge/AbstractPurgeTest.java deleted file mode 100644 index c1b8d49d975..00000000000 --- a/sonar-core/src/test/java/org/sonar/core/purge/AbstractPurgeTest.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Sonar, open source software quality management tool. - * Copyright (C) 2009 SonarSource SA - * mailto:contact AT sonarsource DOT com - * - * Sonar is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * Sonar is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with Sonar; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 - */ -package org.sonar.core.purge; - -import org.junit.Test; -import org.sonar.api.batch.PurgeContext; -import org.sonar.api.database.DatabaseSession; -import org.sonar.jpa.test.AbstractDbUnitTestCase; - -import java.sql.SQLException; -import java.util.Arrays; - -public class AbstractPurgeTest extends AbstractDbUnitTestCase { - - @Test - public void purgeSnapshots() throws SQLException { - setupData("purgeSnapshots"); - - final FakePurge purge = new FakePurge(getSession()); - purge.purge(null); - - checkTables("purgeSnapshots", "snapshots", "project_measures", "measure_data", "rule_failures", "snapshot_sources", "dependencies"); - } -} - -class FakePurge extends AbstractPurge { - public FakePurge(DatabaseSession session) { - super(session); - } - - public void purge(PurgeContext context) { - deleteSnapshotData(Arrays.asList(3, 4)); - } -}
\ No newline at end of file diff --git a/sonar-core/src/test/resources/org/sonar/core/purge/AbstractPurgeTest/purgeSnapshots-result.xml b/sonar-core/src/test/resources/org/sonar/core/purge/AbstractPurgeTest/purgeSnapshots-result.xml deleted file mode 100644 index f5039b0e8ec..00000000000 --- a/sonar-core/src/test/resources/org/sonar/core/purge/AbstractPurgeTest/purgeSnapshots-result.xml +++ /dev/null @@ -1,111 +0,0 @@ -<dataset> - <rules_categories id="1" name="category one" description="[null]"/> - <rules id="1" name="foo" rules_category_id="1" plugin_config_key="checker/foo" plugin_rule_key="checkstyle.rule1" - plugin_name="maven-checkstyle-plugin" description="description" cardinality="SINGLE" parent_id="[null]" /> - - <metrics id="1" name="ncloc" val_type="INT" description="[null]" domain="[null]" - short_name="" qualitative="false" user_managed="false" enabled="true" worst_value="[null]" optimized_best_value="[null]" best_value="[null]" direction="0" hidden="false"/> - - <!-- project --> - <projects long_name="[null]" id="1" scope="PRJ" qualifier="TRK" kee="mygroup:myartifact" name="project" - root_id="[null]" - description="[null]" - enabled="true" language="java" copy_resource_id="[null]"/> - - <!-- package --> - <projects long_name="[null]" id="2" scope="DIR" qualifier="PAC" kee="mygroup:myartifact:my.package" name="package" - root_id="1" - description="[null]" - enabled="true" language="java" copy_resource_id="[null]"/> - - <!-- files --> - <projects long_name="[null]" id="3" scope="FIL" qualifier="CLA" kee="mygroup:myartifact:my.package.Class1" - name="class" root_id="1" - description="[null]" - enabled="true" language="java" copy_resource_id="[null]"/> - - <projects long_name="[null]" id="4" scope="FIL" qualifier="CLA" kee="mygroup:myartifact:my.package.Class2" - name="class" root_id="1" - description="[null]" - enabled="true" language="java" copy_resource_id="[null]"/> - - - <snapshots depth="[null]" id="1" scope="PRJ" qualifier="TRK" created_at="2008-12-02 13:58:00.00" version="[null]" - project_id="1" - parent_snapshot_id="[null]" root_project_id="[null]" root_snapshot_id="[null]" status="P" islast="false" - path="[null]"/> - - <snapshots depth="[null]" id="2" scope="DIR" qualifier="PAC" created_at="2008-12-02 13:58:00.00" version="[null]" - project_id="2" - parent_snapshot_id="2" root_project_id="[null]" root_snapshot_id="1" status="P" islast="false" - path="[null]"/> - - - <!--<snapshots depth="[null]" id="3" scope="FIL" qualifier="CLA" created_at="2008-12-02 13:58:00.00" version="[null]"--> - <!--project_id="3"--> - <!--parent_snapshot_id="2" root_project_id="[null]" root_snapshot_id="1" status="P" islast="false"--> - <!--path="[null]"/>--> - - <!--<snapshots depth="[null]" id="4" scope="FIL" qualifier="CLA" created_at="2008-12-02 13:58:00.00" version="[null]"--> - <!--project_id="4"--> - <!--parent_snapshot_id="2" root_project_id="[null]" root_snapshot_id="1" status="P" islast="false"--> - <!--path="[null]"/>--> - - - <SNAPSHOT_SOURCES ID="1" SNAPSHOT_ID="30" DATA="some sources"/> - <!--<SNAPSHOT_SOURCES ID="2" SNAPSHOT_ID="4" DATA="some sources"/>--> - - - <RULE_FAILURES ID="1" SNAPSHOT_ID="1" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg1" LINE="[null]" COST="[null]"/> - <RULE_FAILURES ID="2" SNAPSHOT_ID="2" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg2" LINE="[null]" COST="[null]"/> - <!--<RULE_FAILURES ID="3" SNAPSHOT_ID="3" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg3" LINE="[null]" COST="[null]"/>--> - <!--<RULE_FAILURES ID="4" SNAPSHOT_ID="4" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg4" LINE="[null]" COST="[null]"/>--> - - - <project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]" - rule_priority="[null]" - alert_text="[null]" ID="1" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="1" RULES_CATEGORY_ID="1" - RULE_ID="1" - text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]" - alert_status="[null]" description="[null]"/> - - <project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]" - rule_priority="[null]" - alert_text="[null]" ID="2" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="2" RULES_CATEGORY_ID="1" - RULE_ID="1" - text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]" - alert_status="[null]" description="[null]"/> - - <!--<project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]"--> - <!--rule_priority="[null]"--> - <!--alert_text="[null]" ID="3" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="3" RULES_CATEGORY_ID="1"--> - <!--RULE_ID="1"--> - <!--text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]"--> - <!--alert_status="[null]" description="[null]"/>--> - - <!--<project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]"--> - <!--rule_priority="[null]"--> - <!--alert_text="[null]" ID="4" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="4" RULES_CATEGORY_ID="1"--> - <!--RULE_ID="1"--> - <!--text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]"--> - <!--alert_status="[null]" description="[null]"/>--> - - - <measure_data id="1" measure_id="1" snapshot_id="1" data="[null]"/> - <measure_data id="2" measure_id="2" snapshot_id="2" data="[null]"/> - <!--<measure_data id="3" measure_id="3" snapshot_id="3" data="[null]"/>--> - <!--<measure_data id="4" measure_id="4" snapshot_id="4" data="[null]"/>--> - - <dependencies id="1" from_resource_id="1" from_snapshot_id="1" to_resource_id="30" to_snapshot_id="30" - parent_dependency_id="[null]" project_snapshot_id="1" - dep_usage="USES" dep_weight="1" from_scope="PRJ" to_scope="LIB"/> - - <!--<dependencies id="2" from_resource_id="3" from_snapshot_id="3" to_resource_id="40" to_snapshot_id="40"--> - <!--parent_dependency_id="[null]" project_snapshot_id="1"--> - <!--dep_usage="INHERITS" dep_weight="1" from_scope="FIL" to_scope="FIL"/>--> - - <!--<dependencies id="3" from_resource_id="50" from_snapshot_id="50" to_resource_id="3" to_snapshot_id="3"--> - <!--parent_dependency_id="[null]" project_snapshot_id="1"--> - <!--dep_usage="INHERITS" dep_weight="1" from_scope="FIL" to_scope="FIL"/>--> - -</dataset>
\ No newline at end of file diff --git a/sonar-core/src/test/resources/org/sonar/core/purge/AbstractPurgeTest/purgeSnapshots.xml b/sonar-core/src/test/resources/org/sonar/core/purge/AbstractPurgeTest/purgeSnapshots.xml deleted file mode 100644 index 93ef910270a..00000000000 --- a/sonar-core/src/test/resources/org/sonar/core/purge/AbstractPurgeTest/purgeSnapshots.xml +++ /dev/null @@ -1,111 +0,0 @@ -<dataset> - <rules_categories id="1" name="category one" description="[null]"/> - <rules id="1" name="foo" rules_category_id="1" plugin_config_key="checker/foo" plugin_rule_key="checkstyle.rule1" - plugin_name="maven-checkstyle-plugin" description="description" cardinality="SINGLE" parent_id="[null]"/> - - <metrics id="1" name="ncloc" val_type="INT" description="[null]" domain="[null]" - short_name="" qualitative="false" user_managed="false" enabled="true" worst_value="[null]" optimized_best_value="[null]" best_value="[null]" direction="0" hidden="false"/> - - <!-- project --> - <projects long_name="[null]" id="1" scope="PRJ" qualifier="TRK" kee="mygroup:myartifact" name="project" - root_id="[null]" - description="[null]" - enabled="true" language="java" copy_resource_id="[null]"/> - - <!-- package --> - <projects long_name="[null]" id="2" scope="DIR" qualifier="PAC" kee="mygroup:myartifact:my.package" name="package" - root_id="1" - description="[null]" - enabled="true" language="java" copy_resource_id="[null]"/> - - <!-- files --> - <projects long_name="[null]" id="3" scope="FIL" qualifier="CLA" kee="mygroup:myartifact:my.package.Class1" - name="class" root_id="1" - description="[null]" - enabled="true" language="java" copy_resource_id="[null]"/> - - <projects long_name="[null]" id="4" scope="FIL" qualifier="CLA" kee="mygroup:myartifact:my.package.Class2" - name="class" root_id="1" - description="[null]" - enabled="true" language="java" copy_resource_id="[null]"/> - - - <snapshots depth="[null]" id="1" scope="PRJ" qualifier="TRK" created_at="2008-12-02 13:58:00.00" version="[null]" - project_id="1" - parent_snapshot_id="[null]" root_project_id="[null]" root_snapshot_id="[null]" status="P" islast="false" - path="[null]"/> - - <snapshots depth="[null]" id="2" scope="DIR" qualifier="PAC" created_at="2008-12-02 13:58:00.00" version="[null]" - project_id="2" - parent_snapshot_id="2" root_project_id="[null]" root_snapshot_id="1" status="P" islast="false" - path="[null]"/> - - - <snapshots depth="[null]" id="3" scope="FIL" qualifier="CLA" created_at="2008-12-02 13:58:00.00" version="[null]" - project_id="3" - parent_snapshot_id="2" root_project_id="[null]" root_snapshot_id="1" status="P" islast="false" - path="[null]"/> - - <snapshots depth="[null]" id="4" scope="FIL" qualifier="CLA" created_at="2008-12-02 13:58:00.00" version="[null]" - project_id="4" - parent_snapshot_id="2" root_project_id="[null]" root_snapshot_id="1" status="P" islast="false" - path="[null]"/> - - - <SNAPSHOT_SOURCES ID="1" SNAPSHOT_ID="30" DATA="some sources"/> - <SNAPSHOT_SOURCES ID="2" SNAPSHOT_ID="4" DATA="some sources"/> - - - <RULE_FAILURES ID="1" SNAPSHOT_ID="1" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg1" LINE="[null]" COST="[null]"/> - <RULE_FAILURES ID="2" SNAPSHOT_ID="2" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg2" LINE="[null]" COST="[null]"/> - <RULE_FAILURES ID="3" SNAPSHOT_ID="3" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg3" LINE="[null]" COST="[null]"/> - <RULE_FAILURES ID="4" SNAPSHOT_ID="4" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg4" LINE="[null]" COST="[null]"/> - - - <project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]" - rule_priority="[null]" - alert_text="[null]" ID="1" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="1" RULES_CATEGORY_ID="1" - RULE_ID="1" - text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]" - alert_status="[null]" description="[null]"/> - - <project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]" - rule_priority="[null]" - alert_text="[null]" ID="2" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="2" RULES_CATEGORY_ID="1" - RULE_ID="1" - text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]" - alert_status="[null]" description="[null]"/> - - <project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]" - rule_priority="[null]" - alert_text="[null]" ID="3" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="3" RULES_CATEGORY_ID="1" - RULE_ID="1" - text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]" - alert_status="[null]" description="[null]"/> - - <project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]" - rule_priority="[null]" - alert_text="[null]" ID="4" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="4" RULES_CATEGORY_ID="1" - RULE_ID="1" - text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]" - alert_status="[null]" description="[null]"/> - - - <measure_data id="1" measure_id="1" snapshot_id="1" data="[null]"/> - <measure_data id="2" measure_id="2" snapshot_id="2" data="[null]"/> - <measure_data id="3" measure_id="3" snapshot_id="3" data="[null]"/> - <measure_data id="4" measure_id="4" snapshot_id="4" data="[null]"/> - - <dependencies id="1" from_resource_id="1" from_snapshot_id="1" to_resource_id="30" to_snapshot_id="30" - parent_dependency_id="[null]" project_snapshot_id="1" - dep_usage="USES" dep_weight="1" from_scope="PRJ" to_scope="LIB"/> - - <dependencies id="2" from_resource_id="3" from_snapshot_id="3" to_resource_id="40" to_snapshot_id="40" - parent_dependency_id="[null]" project_snapshot_id="1" - dep_usage="INHERITS" dep_weight="1" from_scope="FIL" to_scope="FIL"/> - - <dependencies id="3" from_resource_id="50" from_snapshot_id="50" to_resource_id="3" to_snapshot_id="3" - parent_dependency_id="[null]" project_snapshot_id="1" - dep_usage="INHERITS" dep_weight="1" from_scope="FIL" to_scope="FIL" /> - -</dataset>
\ No newline at end of file |