diff options
Diffstat (limited to 'sonar-db')
4 files changed, 28 insertions, 5 deletions
diff --git a/sonar-db/src/main/java/org/sonar/db/component/ComponentQuery.java b/sonar-db/src/main/java/org/sonar/db/component/ComponentQuery.java index 57d4536f968..142d98ce781 100644 --- a/sonar-db/src/main/java/org/sonar/db/component/ComponentQuery.java +++ b/sonar-db/src/main/java/org/sonar/db/component/ComponentQuery.java @@ -30,8 +30,10 @@ import static org.sonar.db.WildcardPosition.AFTER; public class ComponentQuery { private final String nameOrKeyQuery; private final String[] qualifiers; + private final String language; - public ComponentQuery(@Nullable String nameOrKeyQuery, String... qualifiers) { + public ComponentQuery(@Nullable String nameOrKeyQuery, String language, String... qualifiers) { + this.language = language; checkArgument(qualifiers.length > 0, "At least one qualifier must be provided"); this.nameOrKeyQuery = nameOrKeyQuery; @@ -56,4 +58,9 @@ public class ComponentQuery { public String getNameOrKeyQueryToSqlForProjectKey() { return buildLikeValue(nameOrKeyQuery, AFTER); } + + @CheckForNull + public String getLanguage() { + return language; + } } diff --git a/sonar-db/src/main/resources/org/sonar/db/component/ComponentMapper.xml b/sonar-db/src/main/resources/org/sonar/db/component/ComponentMapper.xml index f88928f83ca..0618022f2f8 100644 --- a/sonar-db/src/main/resources/org/sonar/db/component/ComponentMapper.xml +++ b/sonar-db/src/main/resources/org/sonar/db/component/ComponentMapper.xml @@ -283,6 +283,9 @@ <foreach collection="query.qualifiers" item="qualifier" open="(" close=")" separator=","> #{qualifier} </foreach> + <if test="query.language!=null"> + AND p.language = #{query.language} + </if> <if test="query.nameOrKeyQuery!=null"> AND (exists ( select 1 diff --git a/sonar-db/src/test/java/org/sonar/db/component/ComponentDaoTest.java b/sonar-db/src/test/java/org/sonar/db/component/ComponentDaoTest.java index 5cf3d42c5f7..3c3491ca31e 100644 --- a/sonar-db/src/test/java/org/sonar/db/component/ComponentDaoTest.java +++ b/sonar-db/src/test/java/org/sonar/db/component/ComponentDaoTest.java @@ -683,7 +683,7 @@ public class ComponentDaoTest { db.commit(); componentDb.indexProjects(); - ComponentQuery query = new ComponentQuery("oJect", Qualifiers.PROJECT); + ComponentQuery query = new ComponentQuery("oJect", null, Qualifiers.PROJECT); List<ComponentDto> result = underTest.selectByQuery(dbSession, query, 1, 3); assertThat(result).hasSize(3); @@ -697,7 +697,7 @@ public class ComponentDaoTest { db.commit(); componentDb.indexProjects(); - ComponentQuery query = new ComponentQuery("-\\_%/-", Qualifiers.PROJECT); + ComponentQuery query = new ComponentQuery("-\\_%/-", null, Qualifiers.PROJECT); List<ComponentDto> result = underTest.selectByQuery(dbSession, query, 0, 10); assertThat(result).hasSize(1); @@ -711,7 +711,7 @@ public class ComponentDaoTest { db.commit(); componentDb.indexProjects(); - ComponentQuery query = new ComponentQuery("project-_%-", Qualifiers.PROJECT); + ComponentQuery query = new ComponentQuery("project-_%-", null, Qualifiers.PROJECT); List<ComponentDto> result = underTest.selectByQuery(dbSession, query, 0, 10); assertThat(result).hasSize(1); @@ -719,6 +719,19 @@ public class ComponentDaoTest { } @Test + public void select_by_query_filter_on_language() { + componentDb.insertComponent(newProjectDto().setKey("java-project-key").setLanguage("java")); + componentDb.insertComponent(newProjectDto().setKey("cpp-project-key").setLanguage("cpp")); + db.commit(); + + ComponentQuery query = new ComponentQuery(null, "java", Qualifiers.PROJECT); + List<ComponentDto> result = underTest.selectByQuery(dbSession, query, 0, 10); + + assertThat(result).hasSize(1); + assertThat(result.get(0).key()).isEqualTo("java-project-key"); + } + + @Test public void select_direct_children_of_a_project() { ComponentDto project = newProjectDto().setKey("project-key").setUuid("project-uuid"); SnapshotDto projectSnapshot = componentDb.insertProjectAndSnapshot(project); diff --git a/sonar-db/src/test/java/org/sonar/db/component/ComponentQueryTest.java b/sonar-db/src/test/java/org/sonar/db/component/ComponentQueryTest.java index 7ba69c6f7b9..94dbecd7e22 100644 --- a/sonar-db/src/test/java/org/sonar/db/component/ComponentQueryTest.java +++ b/sonar-db/src/test/java/org/sonar/db/component/ComponentQueryTest.java @@ -35,6 +35,6 @@ public class ComponentQueryTest { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("At least one qualifier must be provided"); - underTest = new ComponentQuery(null); + underTest = new ComponentQuery(null, "java"); } } |