diff options
author | Kai Sommerfeld <3226626+ksooo@users.noreply.github.com> | 2023-12-31 11:07:37 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-31 11:07:37 +0100 |
commit | ab216ac356aa8ba3a0a775f668f84f9a9ec921d0 (patch) | |
tree | c890a24df8d6526378eb4e8b746ff83b5d421bad | |
parent | e19bf0e4a74c3894a0983ccbd892be11722f9bd0 (diff) | |
parent | 8b53e54e5e8cb12d7a3dad4c7db344ed94014170 (diff) |
Merge pull request #24370 from CrystalP/videodb-fixes-refactor
[Videodb] Fix of previous data migration and refactors
-rw-r--r-- | xbmc/video/VideoDatabase.cpp | 150 |
1 files changed, 85 insertions, 65 deletions
diff --git a/xbmc/video/VideoDatabase.cpp b/xbmc/video/VideoDatabase.cpp index 8dc2ae15be..5947455dc8 100644 --- a/xbmc/video/VideoDatabase.cpp +++ b/xbmc/video/VideoDatabase.cpp @@ -206,7 +206,7 @@ void CVideoDatabase::CreateTables() InitializeVideoVersionTypeTable(GetSchemaVersion()); CLog::Log(LOGINFO, "create videoversion table"); - m_pDS->exec("CREATE TABLE videoversion (idFile INTEGER PRIMARY KEY, idMedia INTEGER, mediaType " + m_pDS->exec("CREATE TABLE videoversion (idFile INTEGER PRIMARY KEY, idMedia INTEGER, media_type " "TEXT, itemType INTEGER, idType INTEGER)"); } @@ -289,7 +289,7 @@ void CVideoDatabase::CreateAnalytics() "actor_link (media_id, media_type(20), actor_id)"); m_pDS->exec("CREATE INDEX ix_actor_link_3 ON actor_link (media_type(20))"); - m_pDS->exec("CREATE INDEX ix_videoversion ON videoversion (idMedia, mediaType(20))"); + m_pDS->exec("CREATE INDEX ix_videoversion ON videoversion (idMedia, media_type(20))"); m_pDS->exec(PrepareSQL("CREATE INDEX ix_movie_title ON movie (c%02d(255))", VIDEODB_ID_TITLE)); @@ -313,7 +313,7 @@ void CVideoDatabase::CreateAnalytics() "DELETE FROM tag_link WHERE media_id=old.idMovie AND media_type='movie'; " "DELETE FROM rating WHERE media_id=old.idMovie AND media_type='movie'; " "DELETE FROM uniqueid WHERE media_id=old.idMovie AND media_type='movie'; " - "DELETE FROM videoversion WHERE idMedia=old.idMovie AND mediaType='movie'; " + "DELETE FROM videoversion WHERE idMedia=old.idMovie AND media_type='movie'; " "END"); m_pDS->exec("CREATE TRIGGER delete_tvshow AFTER DELETE ON tvshow FOR EACH ROW BEGIN " "DELETE FROM actor_link WHERE media_id=old.idShow AND media_type='tvshow'; " @@ -552,53 +552,54 @@ void CVideoDatabase::CreateViews() CLog::Log(LOGINFO, "create movie_view"); - std::string movieview = PrepareSQL("CREATE VIEW movie_view AS SELECT" - " movie.*," - " sets.strSet AS strSet," - " sets.strOverview AS strSetOverview," - " files.strFileName AS strFileName," - " path.strPath AS strPath," - " files.playCount AS playCount," - " files.lastPlayed AS lastPlayed, " - " files.dateAdded AS dateAdded, " - " bookmark.timeInSeconds AS resumeTimeInSeconds, " - " bookmark.totalTimeInSeconds AS totalTimeInSeconds, " - " bookmark.playerState AS playerState, " - " rating.rating AS rating, " - " rating.votes AS votes, " - " rating.rating_type AS rating_type, " - " uniqueid.value AS uniqueid_value, " - " uniqueid.type AS uniqueid_type, " - " EXISTS( " - " SELECT 1 " - " FROM videoversion vv " - " WHERE vv.idMedia = movie.idMovie " - " AND vv.mediaType = 'movie' " - " AND vv.itemType = %02d " - " AND vv.idFile <> movie.idFile " - " ) AS hasVideoVersions, " - " EXISTS( " - " SELECT 1 " - " FROM videoversion vv " - " WHERE vv.idMedia = movie.idMovie " - " AND vv.mediaType = 'movie' " - " AND vv.itemType = %02d " - " ) AS hasVideoExtras " - "FROM movie" - " LEFT JOIN sets ON" - " sets.idSet = movie.idSet" - " JOIN files ON" - " files.idFile=movie.idFile" - " JOIN path ON" - " path.idPath=files.idPath" - " LEFT JOIN bookmark ON" - " bookmark.idFile=movie.idFile AND bookmark.type=1" - " LEFT JOIN rating ON" - " rating.rating_id=movie.c%02d" - " LEFT JOIN uniqueid ON" - " uniqueid.uniqueid_id=movie.c%02d", - VideoAssetType::VERSION, VideoAssetType::EXTRA, - VIDEODB_ID_RATING_ID, VIDEODB_ID_IDENT_ID); + std::string movieview = + PrepareSQL("CREATE VIEW movie_view AS SELECT" + " movie.*," + " sets.strSet AS strSet," + " sets.strOverview AS strSetOverview," + " files.strFileName AS strFileName," + " path.strPath AS strPath," + " files.playCount AS playCount," + " files.lastPlayed AS lastPlayed, " + " files.dateAdded AS dateAdded, " + " bookmark.timeInSeconds AS resumeTimeInSeconds, " + " bookmark.totalTimeInSeconds AS totalTimeInSeconds, " + " bookmark.playerState AS playerState, " + " rating.rating AS rating, " + " rating.votes AS votes, " + " rating.rating_type AS rating_type, " + " uniqueid.value AS uniqueid_value, " + " uniqueid.type AS uniqueid_type, " + " EXISTS( " + " SELECT 1 " + " FROM videoversion vv " + " WHERE vv.idMedia = movie.idMovie " + " AND vv.media_type = '%s' " + " AND vv.itemType = %i " + " AND vv.idFile <> movie.idFile " + " ) AS hasVideoVersions, " + " EXISTS( " + " SELECT 1 " + " FROM videoversion vv " + " WHERE vv.idMedia = movie.idMovie " + " AND vv.media_type = '%s' " + " AND vv.itemType = %i " + " ) AS hasVideoExtras " + "FROM movie" + " LEFT JOIN sets ON" + " sets.idSet = movie.idSet" + " JOIN files ON" + " files.idFile=movie.idFile" + " JOIN path ON" + " path.idPath=files.idPath" + " LEFT JOIN bookmark ON" + " bookmark.idFile=movie.idFile AND bookmark.type=1" + " LEFT JOIN rating ON" + " rating.rating_id=movie.c%02d" + " LEFT JOIN uniqueid ON" + " uniqueid.uniqueid_id=movie.c%02d", + MediaTypeMovie, VideoAssetType::VERSION, MediaTypeMovie, VideoAssetType::EXTRA, + VIDEODB_ID_RATING_ID, VIDEODB_ID_IDENT_ID); m_pDS->exec(movieview); } @@ -1460,9 +1461,11 @@ int CVideoDatabase::AddNewMovie(CVideoInfoTag& details) m_pDS->exec( PrepareSQL("INSERT INTO movie (idMovie, idFile) VALUES (NULL, %i)", details.m_iFileId)); details.m_iDbId = static_cast<int>(m_pDS->lastinsertid()); - m_pDS->exec(PrepareSQL("INSERT INTO videoversion VALUES(%i, %i, 'movie', %i, '%i')", - details.m_iFileId, details.m_iDbId, VideoAssetType::VERSION, - VIDEO_VERSION_ID_DEFAULT)); + m_pDS->exec( + PrepareSQL("INSERT INTO videoversion (idFile, idMedia, media_type, itemType, idType) " + "VALUES(%i, %i, '%s', %i, %i)", + details.m_iFileId, details.m_iDbId, MediaTypeMovie, VideoAssetType::VERSION, + VIDEO_VERSION_ID_DEFAULT)); CommitTransaction(); @@ -6231,11 +6234,28 @@ void CVideoDatabase::UpdateTables(int iVersion) } m_pDS->close(); } + + if (iVersion < 128) + { + m_pDS2->exec("ALTER TABLE videoversion RENAME COLUMN mediaType TO media_type"); + + // Fix gap in the migration to videodb v127 for unused user-defined video version types. + // Unfortunately due to original design we cannot tell which ones were movie versions or + // extras and now they're all displayed in the version type selection for movies. + // Remove them all as the better fix of providing a GUI to manage version types will not be + // available in Omega v21. That implies the loss of the unused user-defined version names + // created since v21 beta 2. + m_pDS2->exec(PrepareSQL("DELETE FROM videoversiontype " + "WHERE id NOT IN (SELECT idType FROM videoversion) " + "AND owner = %i " + "AND itemType = %i", + VideoAssetTypeOwner::USER, VideoAssetType::VERSION)); + } } int CVideoDatabase::GetSchemaVersion() const { - return 127; + return 128; } bool CVideoDatabase::LookupByFolders(const std::string &path, bool shows) @@ -11437,8 +11457,8 @@ bool CVideoDatabase::GetFilter(CDbUrl &videoUrl, Filter &filter, SortDescription const int idVideoVersion = option->second.asInteger(); if (idVideoVersion > 0) filter.AppendWhere(PrepareSQL("idMovie IN (SELECT idMedia FROM videoversion WHERE " - "mediaType = 'movie' AND idType = %i)", - idVideoVersion)); + "media_type = '%s' AND idType = %i)", + MediaTypeMovie, idVideoVersion)); } AppendIdLinkFilter("tag", "tag", "movie", "movie", "idMovie", options, filter); @@ -11883,7 +11903,7 @@ void CVideoDatabase::GetVideoVersions(VideoDbContentType itemType, "FROM videoversiontype" " JOIN videoversion ON" " videoversion.idType = videoversiontype.id " - "WHERE videoversion.idMedia = %i AND videoversion.mediaType = '%s' " + "WHERE videoversion.idMedia = %i AND videoversion.media_type = '%s' " "AND videoversion.itemType = %i", dbId, mediaType.c_str(), videoAssetType)); @@ -12069,11 +12089,11 @@ bool CVideoDatabase::IsDefaultVideoVersion(int idFile) try { m_pDS->query( - PrepareSQL("SELECT idMedia, mediaType FROM videoversion WHERE idFile = %i", idFile)); + PrepareSQL("SELECT idMedia, media_type FROM videoversion WHERE idFile = %i", idFile)); if (m_pDS->num_rows() > 0) { int idMedia = m_pDS->fv("idMedia").get_asInt(); - std::string mediaType = m_pDS->fv("mediaType").get_asString(); + std::string mediaType = m_pDS->fv("media_type").get_asString(); if (mediaType == MediaTypeMovie) { @@ -12179,7 +12199,7 @@ void CVideoDatabase::AddVideoVersion(VideoDbContentType itemType, m_pDS->exec(PrepareSQL("INSERT INTO videoversion VALUES(%i, %i, '%s', %i, %i)", idFile, dbId, mediaType.c_str(), videoAssetType, idVideoVersion)); else - m_pDS->exec(PrepareSQL("UPDATE videoversion SET idMedia = %i, mediaType = '%s', itemType = " + m_pDS->exec(PrepareSQL("UPDATE videoversion SET idMedia = %i, media_type = '%s', itemType = " "%i, idType = %i WHERE idFile = %i", dbId, mediaType.c_str(), videoAssetType, idVideoVersion, idFile)); @@ -12212,7 +12232,7 @@ int CVideoDatabase::GetVideoVersionFile(VideoDbContentType itemType, int dbId, i try { m_pDS2->query(PrepareSQL( - "SELECT idFile FROM videoversion WHERE idMedia = %i AND mediaType = '%s' and idType = %i", + "SELECT idFile FROM videoversion WHERE idMedia = %i AND media_type = '%s' and idType = %i", dbId, mediaType.c_str(), idVideoVersion)); if (!m_pDS2->eof()) @@ -12260,7 +12280,7 @@ int CVideoDatabase::GetVideoVersionInfo(int idFile, m_pDS->query(PrepareSQL("SELECT videoversiontype.name AS name," " videoversiontype.id AS id," " videoversion.idMedia AS idMedia," - " videoversion.mediaType AS mediaType," + " videoversion.media_type AS mediaType," " videoversion.itemType AS itemType " "FROM videoversion" " JOIN videoversiontype ON " @@ -12273,7 +12293,7 @@ int CVideoDatabase::GetVideoVersionInfo(int idFile, idVideoVersion = m_pDS->fv("id").get_asInt(); typeVideoVersion = m_pDS->fv("name").get_asString(); idMedia = m_pDS->fv("idMedia").get_asInt(); - mediaType = m_pDS->fv("mediaType").get_asString(); + mediaType = m_pDS->fv("media_type").get_asString(); videoAssetType = static_cast<VideoAssetType>(m_pDS->fv("itemType").get_asInt()); } @@ -12453,12 +12473,12 @@ bool CVideoDatabase::GetVideoItemByVideoVersion(int dbId, CFileItem& item) try { - m_pDS->query(PrepareSQL("SELECT idMedia, mediaType FROM videoversion WHERE idFile = %i", dbId)); + m_pDS->query(PrepareSQL("SELECT idMedia, media_type FROM videoversion WHERE idFile = %i", dbId)); if (m_pDS->num_rows() > 0) { int idMedia = m_pDS->fv("idMedia").get_asInt(); - std::string mediaType = m_pDS->fv("mediaType").get_asString(); + std::string mediaType = m_pDS->fv("media_type").get_asString(); m_pDS->close(); |