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