aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xbmc/pvr/PVRDatabase.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/xbmc/pvr/PVRDatabase.cpp b/xbmc/pvr/PVRDatabase.cpp
index fbfc5d0d3f..3622985102 100644
--- a/xbmc/pvr/PVRDatabase.cpp
+++ b/xbmc/pvr/PVRDatabase.cpp
@@ -609,8 +609,19 @@ bool CPVRDatabase::RemoveStaleChannelsFromGroup(const CPVRChannelGroup &group)
if (!group.IsInternalGroup())
{
/* First remove channels that don't exist in the main channels table */
- CStdString strQuery = FormatSQL("DELETE m FROM map_channelgroups_channels m LEFT JOIN channels c ON (c.idChannel = m.idChannel) WHERE c.idChannel IS NULL");
- bDelete = ExecuteQuery(strQuery);
+
+ // XXX work around for frodo: fix this up so it uses one query for all db types
+ // mysql doesn't support subqueries when deleting and sqlite doesn't support joins when deleting
+ if (g_advancedSettings.m_databaseTV.type.Equals("mysql"))
+ {
+ CStdString strQuery = FormatSQL("DELETE m FROM map_channelgroups_channels m LEFT JOIN channels c ON (c.idChannel = m.idChannel) WHERE c.idChannel IS NULL");
+ bDelete = ExecuteQuery(strQuery);
+ }
+ else
+ {
+ CStdString strWhereClause = FormatSQL("idChannel IN (SELECT m.idChannel FROM map_channelgroups_channels m LEFT JOIN channels on m.idChannel = channels.idChannel WHERE channels.idChannel IS NULL)");
+ bDelete = DeleteValues("map_channelgroups_channels", strWhereClause);
+ }
}
if (group.m_members.size() > 0)