aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-core
diff options
context:
space:
mode:
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>2014-02-20 17:57:20 +0100
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>2014-02-25 08:43:24 +0100
commitd41462d3f6f8a3114e6d7b22906a19a4d150cf92 (patch)
tree84ff70ea3f8618887d7ad60234683ce3e6254294 /sonar-core
parent2438e8442ab65565b361a9e4a0ca85a1c19f6d59 (diff)
downloadsonarqube-d41462d3f6f8a3114e6d7b22906a19a4d150cf92.tar.gz
sonarqube-d41462d3f6f8a3114e6d7b22906a19a4d150cf92.zip
SONAR-4366 Create DB components for management of quality gate conditions
Diffstat (limited to 'sonar-core')
-rw-r--r--sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java3
-rw-r--r--sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java10
-rw-r--r--sonar-core/src/main/java/org/sonar/core/qualitygate/db/QualityGateConditionDao.java109
-rw-r--r--sonar-core/src/main/java/org/sonar/core/qualitygate/db/QualityGateConditionDto.java103
-rw-r--r--sonar-core/src/main/java/org/sonar/core/qualitygate/db/QualityGateConditionMapper.java35
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql1
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl10
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/qualitygate/db/QualityGateConditionMapper.xml39
-rw-r--r--sonar-core/src/test/java/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest.java83
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/delete-result.xml8
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/insert-result.xml5
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/insert.xml3
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/selectForQualityGate.xml9
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/update-result.xml9
14 files changed, 422 insertions, 5 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java
index 8e2a9f07174..4131095f5ff 100644
--- a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java
+++ b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java
@@ -33,7 +33,7 @@ import java.util.List;
*/
public class DatabaseVersion implements BatchComponent, ServerComponent {
- public static final int LAST_VERSION = 510;
+ public static final int LAST_VERSION = 511;
public static enum Status {
UP_TO_DATE, REQUIRES_UPGRADE, REQUIRES_DOWNGRADE, FRESH_INSTALL
@@ -77,6 +77,7 @@ public class DatabaseVersion implements BatchComponent, ServerComponent {
"perm_templates_users",
"perm_templates_groups",
"quality_gates",
+ "quality_gate_conditions",
"projects",
"project_links",
"project_measures",
diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java b/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
index 1b38ccd7f0d..85adbd63778 100644
--- a/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
+++ b/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
@@ -19,9 +19,6 @@
*/
package org.sonar.core.persistence;
-import org.sonar.core.qualitygate.db.QualityGateMapper;
-
-import org.sonar.core.qualitygate.db.QualityGateDto;
import ch.qos.logback.classic.Level;
import com.google.common.io.Closeables;
import org.apache.ibatis.builder.xml.XMLMapperBuilder;
@@ -58,6 +55,10 @@ import org.sonar.core.properties.PropertiesMapper;
import org.sonar.core.properties.PropertyDto;
import org.sonar.core.purge.PurgeMapper;
import org.sonar.core.purge.PurgeableSnapshotDto;
+import org.sonar.core.qualitygate.db.QualityGateConditionDto;
+import org.sonar.core.qualitygate.db.QualityGateConditionMapper;
+import org.sonar.core.qualitygate.db.QualityGateDto;
+import org.sonar.core.qualitygate.db.QualityGateMapper;
import org.sonar.core.qualityprofile.db.*;
import org.sonar.core.resource.*;
import org.sonar.core.rule.*;
@@ -111,6 +112,7 @@ public class MyBatis implements BatchComponent, ServerComponent {
loadAlias(conf, "Property", PropertyDto.class);
loadAlias(conf, "PurgeableSnapshot", PurgeableSnapshotDto.class);
loadAlias(conf, "QualityGate", QualityGateDto.class);
+ loadAlias(conf, "QualityGateCondition", QualityGateConditionDto.class);
loadAlias(conf, "Resource", ResourceDto.class);
loadAlias(conf, "ResourceIndex", ResourceIndexDto.class);
loadAlias(conf, "ResourceSnapshot", ResourceSnapshotDto.class);
@@ -159,7 +161,7 @@ public class MyBatis implements BatchComponent, ServerComponent {
MeasureMapper.class, SnapshotDataMapper.class, SnapshotSourceMapper.class, ActionPlanMapper.class, ActionPlanStatsMapper.class,
NotificationQueueMapper.class, CharacteristicMapper.class, RuleTagMapper.class,
GroupMembershipMapper.class, QualityProfileMapper.class, ActiveRuleMapper.class,
- MeasureDataMapper.class, QualityGateMapper.class
+ MeasureDataMapper.class, QualityGateMapper.class, QualityGateConditionMapper.class
};
loadMappers(conf, mappers);
configureLogback(mappers);
diff --git a/sonar-core/src/main/java/org/sonar/core/qualitygate/db/QualityGateConditionDao.java b/sonar-core/src/main/java/org/sonar/core/qualitygate/db/QualityGateConditionDao.java
new file mode 100644
index 00000000000..54ede4798c1
--- /dev/null
+++ b/sonar-core/src/main/java/org/sonar/core/qualitygate/db/QualityGateConditionDao.java
@@ -0,0 +1,109 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.core.qualitygate.db;
+
+import org.apache.ibatis.session.SqlSession;
+import org.sonar.core.persistence.MyBatis;
+
+import java.util.Collection;
+
+/**
+ * @since 4.3
+ */
+public class QualityGateConditionDao {
+
+ private final MyBatis myBatis;
+
+ public QualityGateConditionDao(MyBatis myBatis) {
+ this.myBatis = myBatis;
+ }
+
+ public void insert(QualityGateConditionDto newQualityGate) {
+ SqlSession session = myBatis.openSession();
+ try {
+ insert(newQualityGate, session);
+ session.commit();
+ } finally {
+ MyBatis.closeQuietly(session);
+ }
+ }
+
+ public void insert(QualityGateConditionDto newQualityGate, SqlSession session) {
+ getMapper(session).insert(newQualityGate);
+ }
+
+ public Collection<QualityGateConditionDto> selectForQualityGate(long qGateId) {
+ SqlSession session = myBatis.openSession();
+ try {
+ return selectForQualityGate(qGateId, session);
+ } finally {
+ MyBatis.closeQuietly(session);
+ }
+ }
+
+ public Collection<QualityGateConditionDto> selectForQualityGate(long qGateId, SqlSession session) {
+ return getMapper(session).selectForQualityGate(qGateId);
+ }
+
+ public QualityGateConditionDto selectById(long id) {
+ SqlSession session = myBatis.openSession();
+ try {
+ return selectById(id, session);
+ } finally {
+ MyBatis.closeQuietly(session);
+ }
+ }
+
+ public QualityGateConditionDto selectById(long id, SqlSession session) {
+ return getMapper(session).selectById(id);
+ }
+
+ public void delete(QualityGateConditionDto qGate) {
+ SqlSession session = myBatis.openSession();
+ try {
+ delete(qGate, session);
+ session.commit();
+ } finally {
+ MyBatis.closeQuietly(session);
+ }
+ }
+
+ public void delete(QualityGateConditionDto qGate, SqlSession session) {
+ getMapper(session).delete(qGate.getId());
+ }
+
+ public void update(QualityGateConditionDto qGate) {
+ SqlSession session = myBatis.openSession();
+ try {
+ update(qGate, session);
+ session.commit();
+ } finally {
+ MyBatis.closeQuietly(session);
+ }
+ }
+
+ public void update(QualityGateConditionDto qGate, SqlSession session) {
+ getMapper(session).update(qGate);
+ }
+
+ private QualityGateConditionMapper getMapper(SqlSession session) {
+ return session.getMapper(QualityGateConditionMapper.class);
+ }
+}
diff --git a/sonar-core/src/main/java/org/sonar/core/qualitygate/db/QualityGateConditionDto.java b/sonar-core/src/main/java/org/sonar/core/qualitygate/db/QualityGateConditionDto.java
new file mode 100644
index 00000000000..e6652820b5b
--- /dev/null
+++ b/sonar-core/src/main/java/org/sonar/core/qualitygate/db/QualityGateConditionDto.java
@@ -0,0 +1,103 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.core.qualitygate.db;
+
+/**
+ * @since 4.3
+ */
+public class QualityGateConditionDto {
+
+ private long id;
+
+ private long qualityGateId;
+
+ private long metricId;
+
+ private int period;
+
+ private String operator;
+
+ private String warningThreshold;
+
+ private String errorThreshold;
+
+ public long getId() {
+ return id;
+ }
+
+ public QualityGateConditionDto setId(long id) {
+ this.id = id;
+ return this;
+ }
+
+ public long getQualityGateId() {
+ return qualityGateId;
+ }
+
+ public QualityGateConditionDto setQualityGateId(long qualityGateId) {
+ this.qualityGateId = qualityGateId;
+ return this;
+ }
+
+ public long getMetricId() {
+ return metricId;
+ }
+
+ public QualityGateConditionDto setMetricId(long metricId) {
+ this.metricId = metricId;
+ return this;
+ }
+
+ public int getPeriod() {
+ return period;
+ }
+
+ public QualityGateConditionDto setPeriod(int period) {
+ this.period = period;
+ return this;
+ }
+
+ public String getOperator() {
+ return operator;
+ }
+
+ public QualityGateConditionDto setOperator(String operator) {
+ this.operator = operator;
+ return this;
+ }
+
+ public String getWarningThreshold() {
+ return warningThreshold;
+ }
+
+ public QualityGateConditionDto setWarningThreshold(String warningThreshold) {
+ this.warningThreshold = warningThreshold;
+ return this;
+ }
+
+ public String getErrorThreshold() {
+ return errorThreshold;
+ }
+
+ public QualityGateConditionDto setErrorThreshold(String errorThreshold) {
+ this.errorThreshold = errorThreshold;
+ return this;
+ }
+}
diff --git a/sonar-core/src/main/java/org/sonar/core/qualitygate/db/QualityGateConditionMapper.java b/sonar-core/src/main/java/org/sonar/core/qualitygate/db/QualityGateConditionMapper.java
new file mode 100644
index 00000000000..6d27e1d8556
--- /dev/null
+++ b/sonar-core/src/main/java/org/sonar/core/qualitygate/db/QualityGateConditionMapper.java
@@ -0,0 +1,35 @@
+package org.sonar.core.qualitygate.db;
+
+import java.util.List;
+
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+public interface QualityGateConditionMapper {
+
+ void insert(QualityGateConditionDto newCondition);
+
+ List<QualityGateConditionDto> selectForQualityGate(long qGateId);
+
+ void update(QualityGateConditionDto newCondition);
+
+ QualityGateConditionDto selectById(long id);
+
+ void delete(long id);
+}
diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql
index a08579d8976..3fb9d9bc0b3 100644
--- a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql
+++ b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql
@@ -209,6 +209,7 @@ INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('496');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('497');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('498');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('510');
+INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('511');
INSERT INTO USERS(ID, LOGIN, NAME, EMAIL, CRYPTED_PASSWORD, SALT, CREATED_AT, UPDATED_AT, REMEMBER_TOKEN, REMEMBER_TOKEN_EXPIRES_AT) VALUES (1, 'admin', 'Administrator', '', 'a373a0e667abb2604c1fd571eb4ad47fe8cc0878', '48bc4b0d93179b5103fd3885ea9119498e9d161b', '2011-09-26 22:27:48.0', '2011-09-26 22:27:48.0', null, null);
ALTER TABLE USERS ALTER COLUMN ID RESTART WITH 2;
diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl b/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl
index 9fb2bf557ed..0db8de5c4db 100644
--- a/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl
+++ b/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl
@@ -204,6 +204,16 @@ CREATE TABLE "QUALITY_GATES" (
"NAME" VARCHAR(100) NOT NULL,
);
+CREATE TABLE "QUALITY_GATE_CONDITIONS" (
+ "ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
+ "QGATE_ID" INTEGER,
+ "METRIC_ID" INTEGER,
+ "OPERATOR" VARCHAR(3),
+ "VALUE_ERROR" VARCHAR(64),
+ "VALUE_WARNING" VARCHAR(64),
+ "PERIOD" INTEGER,
+);
+
CREATE TABLE "PROPERTIES" (
"ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
"PROP_KEY" VARCHAR(512),
diff --git a/sonar-core/src/main/resources/org/sonar/core/qualitygate/db/QualityGateConditionMapper.xml b/sonar-core/src/main/resources/org/sonar/core/qualitygate/db/QualityGateConditionMapper.xml
new file mode 100644
index 00000000000..84ee9aa247f
--- /dev/null
+++ b/sonar-core/src/main/resources/org/sonar/core/qualitygate/db/QualityGateConditionMapper.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="org.sonar.core.qualitygate.db.QualityGateConditionMapper">
+
+ <insert id="insert" parameterType="QualityGateCondition" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
+ insert into quality_gate_conditions (qgate_id, metric_id, operator, value_error, value_warning, period)
+ values (#{qualityGateId}, #{metricId}, #{operator}, #{warningThreshold}, #{errorThreshold}, #{period})
+ </insert>
+
+ <sql id="conditionColumns">
+ qgate_id as qualityGateId, metric_id as metricId, operator, value_warning as warningThreshold, value_error as errorThreshold, period
+ </sql>
+
+ <select id="selectForQualityGate" resultType="QualityGateCondition" parameterType="long">
+ select <include refid="conditionColumns"/> from quality_gate_conditions where qgate_id=#{qGateId}
+ order by id asc
+ </select>
+
+ <select id="selectById" parameterType="long" resultType="QualityGateCondition">
+ select <include refid="conditionColumns"/> from quality_gate_conditions where id=#{id}
+ </select>
+
+ <update id="delete" parameterType="long">
+ delete from quality_gate_conditions where id=#{id}
+ </update>
+
+ <update id="update" parameterType="QualityGateCondition">
+ update quality_gate_conditions set
+ metric_id=#{metricId},
+ operator=#{operator},
+ value_warning=#{warningThreshold},
+ value_error=#{errorThreshold},
+ period=#{period}
+ where id=#{id}
+ </update>
+
+</mapper>
+
diff --git a/sonar-core/src/test/java/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest.java b/sonar-core/src/test/java/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest.java
new file mode 100644
index 00000000000..096d4fbb7a3
--- /dev/null
+++ b/sonar-core/src/test/java/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest.java
@@ -0,0 +1,83 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.core.qualitygate.db;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.sonar.core.persistence.AbstractDaoTestCase;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+public class QualityGateConditionDaoTest extends AbstractDaoTestCase {
+
+ private static QualityGateConditionDao dao;
+
+ @Before
+ public void createDao() throws Exception {
+ dao = new QualityGateConditionDao(getMyBatis());
+ }
+
+ @Test
+ public void testInsert() throws Exception {
+ setupData("insert");
+ QualityGateConditionDto newCondition = new QualityGateConditionDto()
+ .setQualityGateId(1L).setMetricId(2L).setOperator(">").setWarningThreshold("10").setErrorThreshold("20").setPeriod(3);
+ dao.insert(newCondition);
+ checkTable("insert", "quality_gate_conditions", "name");
+ assertThat(newCondition.getId()).isNotNull();
+ }
+
+ @Test
+ public void testSelectForQualityGate() throws Exception {
+ setupData("selectForQualityGate");
+ assertThat(dao.selectForQualityGate(1L)).hasSize(3);
+ assertThat(dao.selectForQualityGate(2L)).hasSize(2);
+ }
+
+ @Test
+ public void testSelectById() throws Exception {
+ setupData("selectForQualityGate");
+ QualityGateConditionDto selectById = dao.selectById(1L);
+ assertThat(selectById).isNotNull();
+ assertThat(selectById.getId()).isNotNull();
+ assertThat(selectById.getMetricId()).isEqualTo(2L);
+ assertThat(selectById.getOperator()).isEqualTo("<");
+ assertThat(selectById.getPeriod()).isEqualTo(3);
+ assertThat(selectById.getQualityGateId()).isEqualTo(1L);
+ assertThat(selectById.getWarningThreshold()).isEqualTo("10");
+ assertThat(selectById.getErrorThreshold()).isEqualTo("20");
+ assertThat(dao.selectById(42L)).isNull();
+ }
+
+ @Test
+ public void testDelete() throws Exception {
+ setupData("selectForQualityGate");
+ dao.delete(new QualityGateConditionDto().setId(1L));
+ checkTable("delete", "quality_gate_conditions");
+ }
+
+ @Test
+ public void testUpdate() throws Exception {
+ setupData("selectForQualityGate");
+ dao.update(new QualityGateConditionDto().setId(1L).setMetricId(7L).setOperator(">").setPeriod(1).setWarningThreshold("50").setErrorThreshold("80"));
+ checkTable("update", "quality_gate_conditions");
+ }
+
+}
diff --git a/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/delete-result.xml b/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/delete-result.xml
new file mode 100644
index 00000000000..6547653931a
--- /dev/null
+++ b/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/delete-result.xml
@@ -0,0 +1,8 @@
+<dataset>
+
+ <quality_gate_conditions id="2" qgate_id="1" metric_id="3" operator="&lt;" value_warning="10" value_error="20" period="[null]" />
+ <quality_gate_conditions id="3" qgate_id="1" metric_id="4" operator="&lt;" value_warning="10" value_error="[null]" period="1" />
+ <quality_gate_conditions id="4" qgate_id="2" metric_id="5" operator="&lt;" value_warning="[null]" value_error="20" period="3" />
+ <quality_gate_conditions id="5" qgate_id="2" metric_id="6" operator="&lt;" value_warning="[null]" value_error="20" period="[null]" />
+
+</dataset>
diff --git a/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/insert-result.xml b/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/insert-result.xml
new file mode 100644
index 00000000000..4037e3783bc
--- /dev/null
+++ b/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/insert-result.xml
@@ -0,0 +1,5 @@
+<dataset>
+
+ <quality_gate_conditions id="1" qgate_id="1" metric_id="2" operator="&lt;" value_warning="10" value_error="20" period="3" />
+
+</dataset>
diff --git a/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/insert.xml b/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/insert.xml
new file mode 100644
index 00000000000..871dedcb5e9
--- /dev/null
+++ b/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/insert.xml
@@ -0,0 +1,3 @@
+<dataset>
+
+</dataset>
diff --git a/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/selectForQualityGate.xml b/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/selectForQualityGate.xml
new file mode 100644
index 00000000000..2b5e08055b7
--- /dev/null
+++ b/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/selectForQualityGate.xml
@@ -0,0 +1,9 @@
+<dataset>
+
+ <quality_gate_conditions id="1" qgate_id="1" metric_id="2" operator="&lt;" value_warning="10" value_error="20" period="3" />
+ <quality_gate_conditions id="2" qgate_id="1" metric_id="3" operator="&lt;" value_warning="10" value_error="20" period="[null]" />
+ <quality_gate_conditions id="3" qgate_id="1" metric_id="4" operator="&lt;" value_warning="10" value_error="[null]" period="1" />
+ <quality_gate_conditions id="4" qgate_id="2" metric_id="5" operator="&lt;" value_warning="[null]" value_error="20" period="3" />
+ <quality_gate_conditions id="5" qgate_id="2" metric_id="6" operator="&lt;" value_warning="[null]" value_error="20" period="[null]" />
+
+</dataset>
diff --git a/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/update-result.xml b/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/update-result.xml
new file mode 100644
index 00000000000..503a7ba0c76
--- /dev/null
+++ b/sonar-core/src/test/resources/org/sonar/core/qualitygate/db/QualityGateConditionDaoTest/update-result.xml
@@ -0,0 +1,9 @@
+<dataset>
+
+ <quality_gate_conditions id="1" qgate_id="1" metric_id="7" operator="&gt;" value_warning="50" value_error="80" period="1" />
+ <quality_gate_conditions id="2" qgate_id="1" metric_id="3" operator="&lt;" value_warning="10" value_error="20" period="[null]" />
+ <quality_gate_conditions id="3" qgate_id="1" metric_id="4" operator="&lt;" value_warning="10" value_error="[null]" period="1" />
+ <quality_gate_conditions id="4" qgate_id="2" metric_id="5" operator="&lt;" value_warning="[null]" value_error="20" period="3" />
+ <quality_gate_conditions id="5" qgate_id="2" metric_id="6" operator="&lt;" value_warning="[null]" value_error="20" period="[null]" />
+
+</dataset>