]> source.dussan.org Git - sonarqube.git/commitdiff
Fix violation, add test
authorEvgeny Mandrikov <mandrikov@gmail.com>
Thu, 15 Dec 2011 19:28:52 +0000 (23:28 +0400)
committerEvgeny Mandrikov <mandrikov@gmail.com>
Thu, 15 Dec 2011 20:24:47 +0000 (00:24 +0400)
sonar-core/src/main/java/org/sonar/jpa/session/JpaDatabaseSession.java
sonar-core/src/test/java/org/sonar/jpa/session/JpaDatabaseSessionTest.java

index 91317cba0f4a3c68421237658a3f9a93fff96322..e2a06f979970fbbd3ca2ec5e76be68425b435f17 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.sonar.jpa.session;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Maps;
 import org.apache.commons.lang.StringUtils;
 import org.sonar.api.database.DatabaseSession;
@@ -223,10 +224,10 @@ public class JpaDatabaseSession extends DatabaseSession {
   }
 
   public <T> List<T> getResults(Class<T> entityClass) {
-    return getQueryForCriterias(entityClass, false, null).getResultList();
+    return getQueryForCriterias(entityClass, false, (Object[]) null).getResultList();
   }
 
-  Query getQueryForCriterias(Class<?> entityClass, boolean raiseError, Object... criterias) {
+  private Query getQueryForCriterias(Class<?> entityClass, boolean raiseError, Object... criterias) {
     if (criterias == null && raiseError) {
       throw new IllegalStateException("criterias parameter must be provided");
     }
@@ -251,14 +252,15 @@ public class JpaDatabaseSession extends DatabaseSession {
     return getEntityManager().createQuery(hql.toString());
   }
 
-  private void buildCriteriasHQL(StringBuilder hql, Map<String, Object> mappedCriterias) {
-    for (Iterator<String> i = mappedCriterias.keySet().iterator(); i.hasNext(); ) {
-      String criteria = i.next();
-      hql.append("o.").append(criteria);
-      if (mappedCriterias.get(criteria) == null) {
+  @VisibleForTesting
+  void buildCriteriasHQL(StringBuilder hql, Map<String, Object> mappedCriterias) {
+    for (Iterator<Map.Entry<String, Object>> i = mappedCriterias.entrySet().iterator(); i.hasNext();) {
+      Map.Entry<String, Object> entry = i.next();
+      hql.append("o.").append(entry.getKey());
+      if (entry.getValue() == null) {
         hql.append(" IS NULL");
       } else {
-        hql.append("=:").append(criteria);
+        hql.append("=:").append(entry.getKey());
       }
       if (i.hasNext()) {
         hql.append(" AND ");
index d1314ea431673c24e2368fbf46961ab4941a1abf..697fe1ec035d82d611e13b01b9da990ac00b099e 100644 (file)
@@ -27,8 +27,11 @@ import static org.mockito.Mockito.when;
 import org.junit.Before;
 import org.junit.Test;
 
+import com.google.common.collect.Maps;
+
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.Map;
 
 import javax.persistence.NonUniqueResultException;
 import javax.persistence.Query;
@@ -65,4 +68,14 @@ public class JpaDatabaseSessionTest {
     assertThat(session.getSingleResult(query, "default"), is("default"));
   }
 
+  @Test
+  public void shouldBuildCriteriasHQL() {
+    StringBuilder hql = new StringBuilder();
+    Map<String, Object> mappedCriterias = Maps.newHashMap();
+    mappedCriterias.put("foo", "value");
+    mappedCriterias.put("bar", null);
+    session.buildCriteriasHQL(hql, mappedCriterias);
+    assertThat(hql.toString(), is("o.foo=:foo AND o.bar IS NULL"));
+  }
+
 }