From b091560e77f8c682cdfd563c037dac3be6bf5dea Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Sun, 14 Aug 2016 10:17:31 +0200
Subject: [PATCH] OO-2148: the buddies counter query is 20x quicker

---
 src/main/java/org/olat/group/manager/ContactDAO.java      | 6 +++---
 .../resources/database/mysql/alter_9_4_0_to_10_0_0.sql    | 8 ++++----
 src/main/resources/database/mysql/setupDatabase.sql       | 8 ++++----
 3 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/main/java/org/olat/group/manager/ContactDAO.java b/src/main/java/org/olat/group/manager/ContactDAO.java
index 12fdfcaa572..e4f58e17e91 100644
--- a/src/main/java/org/olat/group/manager/ContactDAO.java
+++ b/src/main/java/org/olat/group/manager/ContactDAO.java
@@ -64,9 +64,9 @@ public class ContactDAO {
 		sb.append("select contact.identity.key from businessgroup bgroup ")
 		  .append(" inner join bgroup.baseGroup baseGroup")
 		  .append(" inner join baseGroup.members contact")
-		  .append(" where exists (select me.key from bgroupmember as me where me.group.key=baseGroup.key and me.identity.key=:identKey)")
-		  .append("  and ((bgroup.ownersVisibleIntern=true and contact.role='coach')")
-		  .append("  or (bgroup.participantsVisibleIntern=true and contact.role='participant'))");
+		  .append(" inner join baseGroup.members me on (me.identity.key=:identKey)")
+		  .append(" where (bgroup.ownersVisibleIntern=true and contact.role='coach')")
+		  .append("  or (bgroup.participantsVisibleIntern=true and contact.role='participant')");
 
 		return dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Long.class)
 				.setParameter("identKey", me.getKey())
diff --git a/src/main/resources/database/mysql/alter_9_4_0_to_10_0_0.sql b/src/main/resources/database/mysql/alter_9_4_0_to_10_0_0.sql
index 215b4348b6c..fa77bf4ddbd 100644
--- a/src/main/resources/database/mysql/alter_9_4_0_to_10_0_0.sql
+++ b/src/main/resources/database/mysql/alter_9_4_0_to_10_0_0.sql
@@ -197,9 +197,9 @@ create view o_gp_contactkey_v as (
    inner join o_bs_group_member as bg_member on (bg_member.fk_group_id = bgroup.fk_group_id)
    inner join o_bs_group_member as bg_me on (bg_me.fk_group_id = bgroup.fk_group_id)
    where
-      (bgroup.ownersintern=true and bg_member.g_role='coach')
+      (bgroup.ownersintern=1 and bg_member.g_role='coach')
       or
-      (bgroup.participantsintern=true and bg_member.g_role='participant')
+      (bgroup.participantsintern=1 and bg_member.g_role='participant')
 );
 
 create view o_gp_contactext_v as (
@@ -221,9 +221,9 @@ create view o_gp_contactext_v as (
    inner join o_userproperty as last_member on (last_member.fk_user_id = us_member.user_id and last_member.propname='lastName')
    inner join o_bs_group_member as bg_me on (bg_me.fk_group_id = bgroup.fk_group_id)
    where
-      (bgroup.ownersintern=true and bg_member.g_role='coach')
+      (bgroup.ownersintern=1 and bg_member.g_role='coach')
       or
-      (bgroup.participantsintern=true and bg_member.g_role='participant')
+      (bgroup.participantsintern=1 and bg_member.g_role='participant')
 );
 
 create or replace view o_re_membership_v as (
diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql
index d79c5ea585a..d6d53df2cc2 100644
--- a/src/main/resources/database/mysql/setupDatabase.sql
+++ b/src/main/resources/database/mysql/setupDatabase.sql
@@ -1591,9 +1591,9 @@ create view o_gp_contactkey_v as (
    inner join o_bs_group_member as bg_member on (bg_member.fk_group_id = bgroup.fk_group_id)
    inner join o_bs_group_member as bg_me on (bg_me.fk_group_id = bgroup.fk_group_id)
    where
-      (bgroup.ownersintern=true and bg_member.g_role='coach')
+      (bgroup.ownersintern=1 and bg_member.g_role='coach')
       or
-      (bgroup.participantsintern=true and bg_member.g_role='participant')
+      (bgroup.participantsintern=1 and bg_member.g_role='participant')
 );
 
 create view o_gp_contactext_v as (
@@ -1615,9 +1615,9 @@ create view o_gp_contactext_v as (
    inner join o_userproperty as last_member on (last_member.fk_user_id = us_member.user_id and last_member.propname='lastName')
    inner join o_bs_group_member as bg_me on (bg_me.fk_group_id = bgroup.fk_group_id)
    where
-      (bgroup.ownersintern=true and bg_member.g_role='coach')
+      (bgroup.ownersintern=1 and bg_member.g_role='coach')
       or
-      (bgroup.participantsintern=true and bg_member.g_role='participant')
+      (bgroup.participantsintern=1 and bg_member.g_role='participant')
 );
 
 
-- 
GitLab