private List<Pista> getPistas( String uuid, String name, String estado, String esporte, String responsavelUuid) { SQLiteDatabase db = dbHelper.getReadableDatabase(); List<Pista> pistas = new ArrayList<>(); try { SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); queryBuilder.setTables( TABLE + " INNER JOIN " + LocalDAO.TABLE + " ON " + Columns._UUID.getColumnNameWithTable() + " = " + LocalDAO.Columns._UUID.getColumnNameWithTable() + " LEFT OUTER JOIN " + HorarioDAO.TABLE + " ON " + Columns._UUID.getColumnNameWithTable() + " = " + HorarioDAO.Columns._UUID.getColumnNameWithTable() + " LEFT OUTER JOIN " + LocalizavelEsporteDAO.TABLE + " ON " + Columns._UUID.getColumnNameWithTable() + " = " + LocalizavelEsporteDAO.Columns._UUID.getColumnNameWithTable() + " INNER JOIN " + EsporteDAO.TABLE + " ON " + LocalizavelEsporteDAO.Columns._ESPORTE_ID.getColumnNameWithTable() + " = " + EsporteDAO.Columns._ID.getColumnNameWithTable()); StringBuilder selection = new StringBuilder("1 = 1"); List<String> selectionArgs = new ArrayList<>(); if (uuid != null && !uuid.isEmpty()) { selection.append(" AND ").append(Columns._UUID.getColumnNameWithTable()).append(" = ? "); selectionArgs.add(uuid); } if (name != null && !name.isEmpty()) { selection.append(" AND ").append(Columns._NOME.getColumnNameWithTable()).append(" LIKE ? "); selectionArgs.add(name + "%"); } if (estado != null && !estado.isEmpty()) { selection .append(" AND ") .append(LocalDAO.Columns._ESTADO.getColumnNameWithTable()) .append(" = ? "); selectionArgs.add(estado); } if (esporte != null && !esporte.isEmpty()) { selection .append(" AND ") .append(EsporteDAO.Columns._CATEGORIA.getColumnNameWithTable()) .append(" = ? "); selectionArgs.add(esporte); } if (responsavelUuid != null && !responsavelUuid.isEmpty()) { selection .append(" AND ") .append(Columns._RESPONSAVEL_UUID.getColumnNameWithTable()) .append(" = ? "); selectionArgs.add(responsavelUuid); } Cursor cursor = queryBuilder.query( db, getColumnsProjectionWithAlias( Columns.class, LocalDAO.Columns.class, HorarioDAO.Columns.class), selection.toString(), selectionArgs.toArray(new String[selectionArgs.size()]), getGroupBy(Columns.class, LocalDAO.Columns.class, HorarioDAO.Columns.class), null, null); if (cursor.moveToFirst()) { do { Pista pista = getPista(cursor, true); pista.setLocal(localDAO.getLocal(cursor, true)); pista.setHorario(horarioDAO.getHorario(cursor, true)); pista.setEsportes(localizavelEsporteDAO.getEsportes(db, pista.getUuid())); pistas.add(pista); } while (cursor.moveToNext()); } cursor.close(); } catch (Exception ex) { Log.e(TAG, "Error getting pistas.", ex); } finally { dbHelper.close(db); } return pistas; }