From ff76e3d05a1f1a9b523357276ca45d3d7afe1749 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Tue, 27 Aug 2013 09:22:54 +0200
Subject: [PATCH] OO-735: fix the query used by the portlets "my courses" and
 "my supervised courses", fix the setup script for MySQL 5.6.10 and greater

---
 .../olat/repository/RepositoryManager.java    | 20 +++++++++++++------
 .../database/mysql/setupDatabase.sql          |  2 +-
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java
index c88f6159827..e3f796c206a 100644
--- a/src/main/java/org/olat/repository/RepositoryManager.java
+++ b/src/main/java/org/olat/repository/RepositoryManager.java
@@ -2244,9 +2244,13 @@ public class RepositoryManager extends BasicManager {
 	public List<RepositoryEntryLight> getParticipantRepositoryEntry(Identity identity, int maxResults, RepositoryEntryOrder... orderby) {
 		StringBuilder sb = new StringBuilder(200);
 		sb.append("select v from repoentrylight as v ")
-		  .append(" inner join fetch v.olatResource as res ")
-		  .append(" where v.key in (select vm.key from participantrepoentry as vm where vm.memberId=:identityKey)")
-		  .append(" and (v.access>=3 or (v.access=").append(RepositoryEntry.ACC_OWNERS).append(" and v.membersOnly=true))");
+		  .append(" inner join fetch v.olatResource as res ");
+		if("mysql".equals(dbInstance.getDbVendor())) {
+			sb.append(" where exists (select vm.key from participantrepoentry as vm where v.key=vm.key and vm.memberId=:identityKey)");
+		} else {
+			sb.append(" where v.key in (select vm.key from participantrepoentry as vm where vm.memberId=:identityKey)");
+		}
+		sb.append(" and (v.access>=3 or (v.access=").append(RepositoryEntry.ACC_OWNERS).append(" and v.membersOnly=true))");
 		appendOrderBy(sb, "v", orderby);
 		
 		TypedQuery<RepositoryEntryLight> query = dbInstance.getCurrentEntityManager()
@@ -2263,9 +2267,13 @@ public class RepositoryManager extends BasicManager {
 	public List<RepositoryEntryLight> getTutorRepositoryEntry(Identity identity, int maxResults, RepositoryEntryOrder... orderby) {
 		StringBuilder sb = new StringBuilder(200);
 		sb.append("select v from repoentrylight as v ")
-		  .append(" inner join fetch v.olatResource as res ")
-		  .append(" where v.key in (select vm.key from tutorrepoentry as vm where vm.memberId=:identityKey)")
-		  .append(" and (v.access>=3 or (v.access=").append(RepositoryEntry.ACC_OWNERS).append(" and v.membersOnly=true))");
+		  .append(" inner join fetch v.olatResource as res ");
+		if("mysql".equals(dbInstance.getDbVendor())) {
+			sb.append(" where exists (select vm.key from tutorrepoentry as vm where v.key=vm.key and vm.memberId=:identityKey)");
+		} else {
+			sb.append(" where v.key in (select vm.key from tutorrepoentry as vm where vm.memberId=:identityKey)");
+		}
+		sb.append(" and (v.access>=3 or (v.access=").append(RepositoryEntry.ACC_OWNERS).append(" and v.membersOnly=true))");
 		appendOrderBy(sb, "v", orderby);
 		
 		TypedQuery<RepositoryEntryLight> query = dbInstance.getCurrentEntityManager()
diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql
index 5c6caf39f72..f230f86d841 100644
--- a/src/main/resources/database/mysql/setupDatabase.sql
+++ b/src/main/resources/database/mysql/setupDatabase.sql
@@ -2209,7 +2209,7 @@ alter table o_qp_item add constraint idx_qp_item_type_id foreign key (fk_type) r
 alter table o_qp_item add constraint idx_qp_item_license_id foreign key (fk_license) references o_qp_license(id);
 
 alter table o_qp_taxonomy_level add constraint idx_qp_field_2_parent_id foreign key (fk_parent_field) references o_qp_taxonomy_level(id);
-create index idx_taxon_mat_pathon on o_qp_taxonomy_level (q_mat_path_ids);
+create index idx_taxon_mat_pathon on o_qp_taxonomy_level (q_mat_path_ids(255));
 
 alter table o_qp_item_type add unique (q_type(200));
 
-- 
GitLab