From 84f2df55bdfe7391ef14607450a1de8f151626ad Mon Sep 17 00:00:00 2001 From: Bruno Nocera Zanette <brunonzanette@gmail.com> Date: Mon, 22 Sep 2014 20:22:38 -0300 Subject: [PATCH] Fix municipio query & optimize query construction Fix municipio query & optimize query construction --- .../ufpr/c3sl/estacaojuventude/Programa.java | 67 +++++++------------ 1 file changed, 24 insertions(+), 43 deletions(-) diff --git a/src/main/java/br/ufpr/c3sl/estacaojuventude/Programa.java b/src/main/java/br/ufpr/c3sl/estacaojuventude/Programa.java index 2f88d3a..b692d00 100644 --- a/src/main/java/br/ufpr/c3sl/estacaojuventude/Programa.java +++ b/src/main/java/br/ufpr/c3sl/estacaojuventude/Programa.java @@ -133,32 +133,19 @@ public class Programa { * */ public static List<Programa> findWithParameters(String nomeOficial, String nomeMunicipio, Set<Tematica> tematicas) { - String querySelectFrom = "SELECT distinct p.* FROM programa p, ocorrencia_municipal o"; - String queryWhere = " WHERE p.status = 'Efetivo' AND o.status = 'Efetivo'"; + String querySelect = "SELECT distinct p.*"; + String queryFrom = " FROM programa p"; + String queryWhere = " WHERE p.status = 'Efetivo'"; String query = ""; - if (tematicas.isEmpty()) { - if (nomeOficial != null && nomeMunicipio == null){ - queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')"; - } - else if (nomeOficial == null && nomeMunicipio != null){ - querySelectFrom += ", municipio m"; - queryWhere += " AND o.municipio = m.id"; - queryWhere += " AND p.id = o.programa_vinculado AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')"; - } - else if (nomeOficial != null && nomeMunicipio != null) { - querySelectFrom += ", municipio m"; - queryWhere += " AND o.municipio = m.id"; - queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')"; - queryWhere += " AND p.id = o.programa_vinculado AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')"; - } - } - else { //(!tematicas.isEmpty()) - querySelectFrom += " ,programa_tematicas pt, tematica t"; + if (!tematicas.isEmpty()) { + queryFrom += " ,programa_tematicas pt, tematica t"; queryWhere += " AND p.id = pt.programa AND t.id = pt.tematicas"; - String strTemas = "("; + Integer i = 0; Integer tam = tematicas.size(); + + String strTemas = "("; for (Iterator<Tematica> t = tematicas.iterator(); t.hasNext();) { strTemas += "t.nome = '"+t.next().getNome()+"'"; i++; @@ -166,29 +153,23 @@ public class Programa { strTemas += " OR "; } strTemas += ")"; - if (nomeOficial == null && nomeMunicipio == null){ - queryWhere += " AND "+strTemas; - } - else if (nomeOficial != null && nomeMunicipio == null) { - queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')"; - queryWhere += " AND "+strTemas; - } - else if (nomeOficial == null && nomeMunicipio != null) { - querySelectFrom += ", municipio m"; - queryWhere += " AND o.municipio = m.id"; - queryWhere += " AND p.id = o.programa_vinculado AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')"; - queryWhere += " AND "+strTemas; - } - else if (nomeOficial != null && nomeMunicipio != null) { - querySelectFrom += ", municipio m"; - queryWhere += " AND o.municipio = m.id"; - queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')"; - queryWhere += " AND p.id = o.programa_vinculado AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')"; - queryWhere += " AND "+strTemas; - } + queryWhere += " AND "+strTemas; } - query = querySelectFrom + queryWhere; - return entityManager().createNativeQuery(query, Programa.class).getResultList(); + + if (nomeOficial != null){ + queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')"; + } + + if (nomeMunicipio != null){ + queryFrom += ", ocorrencia_municipal o, ocorrencia_municipal_municipios om, municipio m"; + queryWhere += " AND o.status = 'Efetivo'"; + queryWhere += " AND p.id = o.programa_vinculado AND o.id = om.ocorrencia_municipal AND om.municipios = m.id"; + queryWhere += " AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')"; + } + + query = querySelect + queryFrom + queryWhere; + + return entityManager().createNativeQuery(query, Programa.class).getResultList(); } } -- GitLab