diff --git a/calendar/classes/local/event/strategies/raw_event_retrieval_strategy.php b/calendar/classes/local/event/strategies/raw_event_retrieval_strategy.php
index 37d1a8038e2..f442a64a15c 100644
--- a/calendar/classes/local/event/strategies/raw_event_retrieval_strategy.php
+++ b/calendar/classes/local/event/strategies/raw_event_retrieval_strategy.php
@@ -278,7 +278,12 @@ class raw_event_retrieval_strategy implements raw_event_retrieval_strategy_inter
// Build the WHERE condition for the sub-query.
if (!empty($subqueryconditions)) {
- $subquerywhere = 'WHERE ' . implode(" OR ", $subqueryconditions);
+ $unionstartquery = "SELECT modulename, instance, eventtype, priority
+ FROM {event} ev
+ WHERE ";
+ $subqueryunion = $unionstartquery . implode(" UNION $unionstartquery ", $subqueryconditions);
+ } else {
+ $subqueryunion = '{event}';
}
// Merge subquery parameters to the parameters of the main query.
@@ -291,8 +296,7 @@ class raw_event_retrieval_strategy implements raw_event_retrieval_strategy_inter
ev.instance,
ev.eventtype,
MIN(ev.priority) as priority
- FROM {event} ev
- $subquerywhere
+ FROM ($subqueryunion) ev
GROUP BY ev.modulename, ev.instance, ev.eventtype";
// Build the main query.
diff --git a/lib/db/install.xml b/lib/db/install.xml
index fcef7da2b25..9a30e74c4f5 100644
--- a/lib/db/install.xml
+++ b/lib/db/install.xml
@@ -461,6 +461,8 @@