Skip to content

Commit

Permalink
fix SQL JOIN statements in CVideoDatabase::GetMoviesByActor/GetTvShow…
Browse files Browse the repository at this point in the history
…sByActor/GetEpisodesByActor

Those JOINs need to be LEFT JOINs because if one of the joined tables (e.g. directorlinktvshow) is empty
it will clear the whole result set independent of what matches result from the join with actorlinktvshow.
(approved by firnsy)
  • Loading branch information
Montellese committed Dec 17, 2011
1 parent dc0514f commit da93227
Showing 1 changed file with 12 additions and 12 deletions.
24 changes: 12 additions & 12 deletions xbmc/video/VideoDatabase.cpp
Expand Up @@ -1462,30 +1462,30 @@ void CVideoDatabase::DeleteDetailsForTvShow(const CStdString& strPath)
//********************************************************************************************************************************
void CVideoDatabase::GetMoviesByActor(const CStdString& strActor, CFileItemList& items)
{
CStdString where = PrepareSQL("JOIN actorlinkmovie ON actorlinkmovie.idMovie=movieview.idMovie "
"JOIN actors a ON a.idActor=actorlinkmovie.idActor "
"JOIN directorlinkmovie ON directorlinkmovie.idMovie=movieview.idMovie "
"JOIN actors d ON d.idActor=directorlinkmovie.idDirector "
CStdString where = PrepareSQL("LEFT JOIN actorlinkmovie ON actorlinkmovie.idMovie=movieview.idMovie "
"LEFT JOIN actors a ON a.idActor=actorlinkmovie.idActor "
"LEFT JOIN directorlinkmovie ON directorlinkmovie.idMovie=movieview.idMovie "
"LEFT JOIN actors d ON d.idActor=directorlinkmovie.idDirector "
"WHERE a.strActor='%s' OR d.strActor='%s' GROUP BY movieview.idMovie", strActor.c_str(), strActor.c_str());
GetMoviesByWhere("videodb://1/2/", where, "", items);
}

void CVideoDatabase::GetTvShowsByActor(const CStdString& strActor, CFileItemList& items)
{
CStdString where = PrepareSQL("JOIN actorlinktvshow ON actorlinktvshow.idShow=tvshowview.idShow "
"JOIN actors a ON a.idActor=actorlinktvshow.idActor "
"JOIN directorlinktvshow ON directorlinktvshow.idShow=tvshowview.idShow "
"JOIN actors d ON d.idActor=directorlinktvshow.idDirector "
CStdString where = PrepareSQL("LEFT JOIN actorlinktvshow ON actorlinktvshow.idShow=tvshowview.idShow "
"LEFT JOIN actors a ON a.idActor=actorlinktvshow.idActor "
"LEFT JOIN directorlinktvshow ON directorlinktvshow.idShow=tvshowview.idShow "
"LEFT JOIN actors d ON d.idActor=directorlinktvshow.idDirector "
"WHERE a.strActor='%s' OR d.strActor='%s' GROUP BY tvshowview.idShow", strActor.c_str(), strActor.c_str());
GetTvShowsByWhere("videodb://2/2/", where, items);
}

void CVideoDatabase::GetEpisodesByActor(const CStdString& strActor, CFileItemList& items)
{
CStdString where = PrepareSQL("JOIN actorlinkepisode ON actorlinkepisode.idEpisode=episodeview.idEpisode "
"JOIN actors a ON a.idActor=actorlinkepisode.idActor "
"JOIN directorlinkepisode ON directorlinkepisode.idEpisode=episodeview.idEpisode "
"JOIN actors d ON d.idActor=directorlinkepisode.idDirector "
CStdString where = PrepareSQL("LEFT JOIN actorlinkepisode ON actorlinkepisode.idEpisode=episodeview.idEpisode "
"LEFT JOIN actors a ON a.idActor=actorlinkepisode.idActor "
"LEFT JOIN directorlinkepisode ON directorlinkepisode.idEpisode=episodeview.idEpisode "
"LEFT JOIN actors d ON d.idActor=directorlinkepisode.idDirector "
"WHERE a.strActor='%s' OR d.strActor='%s' GROUP BY episodeview.idEpisode", strActor.c_str(), strActor.c_str());
GetEpisodesByWhere("videodb://2/2/", where, items);
}
Expand Down

0 comments on commit da93227

Please sign in to comment.