From db3abe6b10ad093d3b1ad8716c57e33824ee5a3f Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Fri, 22 Aug 2014 08:57:34 +0200
Subject: [PATCH] OO-984: if rating and comment is disabled, don't join fetch
 the repository statistics

---
 .../RepositoryEntryMyCourseQueries.java       | 20 ++++++++++++++-----
 .../model/RepositoryEntryMyCourseImpl.java    |  5 ++---
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java b/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java
index 046ff773c3f..0ff14945f63 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java
@@ -47,6 +47,7 @@ import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryMyView;
 import org.olat.repository.RepositoryModule;
 import org.olat.repository.model.RepositoryEntryMyCourseImpl;
+import org.olat.repository.model.RepositoryEntryStatistics;
 import org.olat.repository.model.SearchMyRepositoryEntryViewParams;
 import org.olat.repository.model.SearchMyRepositoryEntryViewParams.Filter;
 import org.olat.repository.model.SearchMyRepositoryEntryViewParams.OrderBy;
@@ -103,6 +104,8 @@ public class RepositoryEntryMyCourseQueries {
 			query.setMaxResults(maxResults);
 		}
 		
+		boolean neddStats = repositoryModule.isRatingEnabled() || repositoryModule.isCommentEnabled();
+		
 		List<Long> effKeys = new ArrayList<>();
 		List<Object[]> objects = query.getResultList();
 		List<RepositoryEntryMyView> views = new ArrayList<>(objects.size());
@@ -115,7 +118,13 @@ public class RepositoryEntryMyCourseQueries {
 			long offers = numOffers == null ? 0l : numOffers.longValue();
 			Integer myRating = (Integer)object[3];
 			
-			RepositoryEntryMyCourseImpl view = new RepositoryEntryMyCourseImpl(re, hasMarks, offers, myRating);
+			RepositoryEntryStatistics stats;
+			if(neddStats) {
+				stats = re.getStatistics();
+			} else {
+				stats = null;
+			}
+			RepositoryEntryMyCourseImpl view = new RepositoryEntryMyCourseImpl(re, stats, hasMarks, offers, myRating);
 			views.add(view);
 			viewsMap.put(re.getOlatResource(), view);
 			
@@ -157,7 +166,6 @@ public class RepositoryEntryMyCourseQueries {
 			sb.append("select count(v.key) ")
 			  .append(" from repositoryentry as v, ").append(IdentityImpl.class.getName()).append(" as ident ")
 			  .append(" inner join v.olatResource as res")
-			  .append(" inner join v.statistics as stats")
 			  .append(" left join v.lifecycle as lifecycle ");
 		} else {
 			sb.append("select v, ")
@@ -185,9 +193,11 @@ public class RepositoryEntryMyCourseQueries {
 			  .append(" ) as effKey");
 			appendOrderByInSelect(params, sb);
 			sb.append(" from repositoryentry as v, ").append(IdentityImpl.class.getName()).append(" as ident ")
-			  .append(" inner join ").append(oracle ? "" : "fetch").append(" v.olatResource as res")
-			  .append(" inner join fetch v.statistics as stats")
-			  .append(" left join fetch v.lifecycle as lifecycle ");
+			  .append(" inner join ").append(oracle ? "" : "fetch").append(" v.olatResource as res");
+			if(repositoryModule.isRatingEnabled() || repositoryModule.isCommentEnabled()) {
+				sb.append(" inner join fetch v.statistics as stats");
+			}
+			sb.append(" left join fetch v.lifecycle as lifecycle ");
 		}
 		//user course informations
 		//efficiency statements
diff --git a/src/main/java/org/olat/repository/model/RepositoryEntryMyCourseImpl.java b/src/main/java/org/olat/repository/model/RepositoryEntryMyCourseImpl.java
index f2d98ee8d4c..015f76894c8 100644
--- a/src/main/java/org/olat/repository/model/RepositoryEntryMyCourseImpl.java
+++ b/src/main/java/org/olat/repository/model/RepositoryEntryMyCourseImpl.java
@@ -67,7 +67,7 @@ public class RepositoryEntryMyCourseImpl implements RepositoryEntryMyView, Creat
 
 	private long offersAvailable;
 	
-	public RepositoryEntryMyCourseImpl(RepositoryEntry re,
+	public RepositoryEntryMyCourseImpl(RepositoryEntry re, RepositoryEntryStatistics stats,
 			boolean marked, long offersAvailable, Integer myRating) {
 		key = re.getKey();
 		externalRef = re.getExternalRef();
@@ -85,8 +85,7 @@ public class RepositoryEntryMyCourseImpl implements RepositoryEntryMyView, Creat
 
 		this.marked = marked;
 		this.myRating = myRating;
-		
-		RepositoryEntryStatistics stats = re.getStatistics();
+
 		if(stats != null) {
 			averageRating = stats.getRating();
 			numOfRatings = stats.getNumOfRatings();
-- 
GitLab