}
if (version < 9)
{ // get rid of the old path table and add the type column
- m_pDS->dropIndex("path", "idxPath");
m_pDS->exec("DROP TABLE path");
m_pDS->exec("CREATE TABLE path (id integer primary key, urlhash integer, url text, type text, texture text)\n");
- m_pDS->exec("CREATE INDEX idxPath ON path(urlhash, type)");
}
if (version < 10)
{ // get rid of urlhash in both tables...
- m_pDS->dropIndex("path", "idxPath");
m_pDS->exec("DROP TABLE path");
m_pDS->exec("CREATE TABLE path (id integer primary key, url text, type text, texture text)\n");
- m_pDS->exec("CREATE INDEX idxPath ON path(url, type)");
- m_pDS->dropIndex("texture", "idxTexture");
m_pDS->exec("CREATE TEMPORARY TABLE texture_backup(id,url,cachedurl,usecount,lastusetime,imagehash,lasthashcheck)");
m_pDS->exec("INSERT INTO texture_backup SELECT id,url,cachedurl,usecount,lastusetime,imagehash,lasthashcheck FROM texture");
m_pDS->exec("DROP TABLE texture");
m_pDS->exec("CREATE TABLE texture (id integer primary key, url text, cachedurl text, usecount integer, lastusetime text, imagehash text, lasthashcheck text)");
- m_pDS->exec("CREATE INDEX idxTexture ON texture(url)");
m_pDS->exec("INSERT INTO texture SELECT * FROM texture_backup");
m_pDS->exec("DROP TABLE texture_backup");
}
{ // create new sizes table and move usecount info to it.
m_pDS->exec("DROP TABLE texture");
m_pDS->exec("CREATE TABLE texture (id integer primary key, url text, cachedurl text, imagehash text, lasthashcheck text)");
- m_pDS->exec("CREATE INDEX idxTexture ON texture(url)");
m_pDS->exec("CREATE TABLE sizes (idtexture integer, size integer, width integer, height integer, usecount integer, lastusetime text)");
- m_pDS->exec("CREATE INDEX idxSize ON sizes(idtexture, size)");
- m_pDS->exec("CREATE TRIGGER textureDelete AFTER delete ON texture FOR EACH ROW BEGIN delete from sizes where sizes.idtexture=old.id; END");
- }
- if (version < 13)
- { // index for updateusecount
- m_pDS->exec("CREATE INDEX idxSize2 ON sizes(idtexture, width, height)");
}
return true;
}
if (version < 13)
{
m_pDS->exec("CREATE TABLE dependencies (id integer, addon text, version text, optional boolean)\n");
- m_pDS->exec("CREATE INDEX idxDependencies ON dependencies(id)");
}
if (version < 14)
{
if (version < 15)
{
m_pDS->exec("CREATE TABLE blacklist (id integer primary key, addonID text, version text)\n");
- m_pDS->exec("CREATE UNIQUE INDEX idxBlack ON blacklist(addonID)");
}
if (version < 16)
{
m_pDS->exec("CREATE TABLE package (id integer primary key, addonID text, filename text, hash text)\n");
- m_pDS->exec("CREATE UNIQUE INDEX idxPackage ON package(filename)");
}
return true;
}
BeginTransaction();
try
{
+ // drop old analytics, update table(s), recreate analytics, update version
+ m_pDB->drop_analytics();
success = UpdateOldVersion(version);
if (success)
+ {
+ CreateAnalytics();
success = UpdateVersionNumber();
+ }
}
catch (...)
{
{
if (iVersion < 5)
m_pDS->exec("ALTER TABLE epgtags ADD sGenre varchar(128);");
- if (iVersion < 6)
- {
- m_pDS->exec("DROP INDEX idx_epg_iBroadcastUid;");
- m_pDS->exec("DROP INDEX idx_epg_idEpg;");
- m_pDS->exec("DROP INDEX idx_epg_iStartTime;");
- m_pDS->exec("DROP INDEX idx_epg_iEndTime;");
- }
- if (iVersion < 7)
- {
- m_pDS->exec("CREATE INDEX idx_epg_iEndTime on epgtags(iEndTime);");
- }
}
catch (...)
{
void CMusicDatabase::CreateViews()
{
CLog::Log(LOGINFO, "create song view");
- m_pDS->exec("DROP VIEW IF EXISTS songview");
m_pDS->exec("CREATE VIEW songview AS SELECT "
" song.idSong AS idSong, "
" song.strArtists AS strArtists,"
" song.idSong=karaokedata.idSong");
CLog::Log(LOGINFO, "create album view");
- m_pDS->exec("DROP VIEW IF EXISTS albumview");
m_pDS->exec("CREATE VIEW albumview AS SELECT "
" album.idAlbum AS idAlbum, "
" strAlbum, "
" FROM album ");
CLog::Log(LOGINFO, "create artist view");
- m_pDS->exec("DROP VIEW IF EXISTS artistview");
m_pDS->exec("CREATE VIEW artistview AS SELECT"
" idArtist, strArtist, "
" strMusicBrainzArtistID, "
" strYearsActive, strImage, strFanart "
"FROM artist");
- CLog::Log(LOGINFO, "create albumartistview");
- m_pDS->exec("DROP VIEW IF EXISTS albumartistview");
+ CLog::Log(LOGINFO, "create albumartist view");
m_pDS->exec("CREATE VIEW albumartistview AS SELECT"
" album_artist.idAlbum AS idAlbum, "
" album_artist.idArtist AS idArtist, "
"FROM album_artist "
"JOIN artist ON "
" album_artist.idArtist = artist.idArtist");
- CLog::Log(LOGINFO, "create songartistview");
- m_pDS->exec("DROP VIEW IF EXISTS songartistview");
+
+ CLog::Log(LOGINFO, "create songartist view");
m_pDS->exec("CREATE VIEW songartistview AS SELECT"
" song_artist.idSong AS idSong, "
" song_artist.idArtist AS idArtist, "
}
}
}
- if (version < 17)
- {
- m_pDS->exec("CREATE INDEX idxAlbum2 ON album(idArtist)");
- m_pDS->exec("CREATE INDEX idxSong3 ON song(idAlbum)");
- m_pDS->exec("CREATE INDEX idxSong4 ON song(idArtist)");
- m_pDS->exec("CREATE INDEX idxSong5 ON song(idGenre)");
- m_pDS->exec("CREATE INDEX idxSong6 ON song(idPath)");
- }
if (version < 19)
{
int len = g_advancedSettings.m_musicItemSeparator.size() + 1;
if (version < 21)
{
m_pDS->exec("CREATE TABLE album_artist ( idArtist integer, idAlbum integer, boolFeatured integer, iOrder integer )\n");
- m_pDS->exec("CREATE UNIQUE INDEX idxAlbumArtist_1 ON album_artist ( idAlbum, idArtist )\n");
- m_pDS->exec("CREATE UNIQUE INDEX idxAlbumArtist_2 ON album_artist ( idArtist, idAlbum )\n");
- m_pDS->exec("CREATE INDEX idxAlbumArtist_3 ON album_artist ( boolFeatured )\n");
m_pDS->exec("INSERT INTO album_artist (idArtist, idAlbum, boolFeatured, iOrder) SELECT idArtist, idAlbum, 1, iPosition FROM exartistalbum");
m_pDS->exec("REPLACE INTO album_artist (idArtist, idAlbum, boolFeatured, iOrder) SELECT idArtist, idAlbum, 0, 0 FROM album");
m_pDS->exec("DROP TABLE album");
m_pDS->exec("ALTER TABLE album_new RENAME TO album");
- m_pDS->exec("CREATE INDEX idxAlbum ON album(strAlbum)");
m_pDS->exec("DROP TABLE IF EXISTS exartistalbum");
}
if (version < 22)
{
m_pDS->exec("CREATE TABLE song_artist ( idArtist integer, idSong integer, boolFeatured integer, iOrder integer )\n");
- m_pDS->exec("CREATE UNIQUE INDEX idxSongArtist_1 ON song_artist ( idSong, idArtist )\n");
- m_pDS->exec("CREATE UNIQUE INDEX idxSongArtist_2 ON song_artist ( idArtist, idSong )\n");
- m_pDS->exec("CREATE INDEX idxSongArtist_3 ON song_artist ( boolFeatured )\n");
m_pDS->exec("INSERT INTO song_artist (idArtist, idSong, boolFeatured, iOrder) SELECT idArtist, idSong, 1, iPosition FROM exartistsong");
m_pDS->exec("REPLACE INTO song_artist (idArtist, idSong, boolFeatured, iOrder) SELECT idArtist, idSong, 0, 0 FROM song");
m_pDS->exec("DROP TABLE song");
m_pDS->exec("ALTER TABLE song_new RENAME TO song");
- m_pDS->exec("CREATE INDEX idxSong ON song(strTitle)");
- m_pDS->exec("CREATE INDEX idxSong1 ON song(iTimesPlayed)");
- m_pDS->exec("CREATE INDEX idxSong2 ON song(lastplayed)");
- m_pDS->exec("CREATE INDEX idxSong3 ON song(idAlbum)");
- m_pDS->exec("CREATE INDEX idxSong6 ON song(idPath)");
m_pDS->exec("DROP TABLE IF EXISTS exartistsong");
}
if (version < 23)
{
m_pDS->exec("CREATE TABLE album_genre ( idGenre integer, idAlbum integer, iOrder integer )\n");
- m_pDS->exec("CREATE UNIQUE INDEX idxAlbumGenre_1 ON album_genre ( idAlbum, idGenre )\n");
- m_pDS->exec("CREATE UNIQUE INDEX idxAlbumGenre_2 ON album_genre ( idGenre, idAlbum )\n");
m_pDS->exec("INSERT INTO album_genre ( idGenre, idAlbum, iOrder) SELECT idGenre, idAlbum, iPosition FROM exgenrealbum");
m_pDS->exec("REPLACE INTO album_genre ( idGenre, idAlbum, iOrder) SELECT idGenre, idAlbum, 0 FROM album");
m_pDS->exec("DROP TABLE album");
m_pDS->exec("ALTER TABLE album_new RENAME TO album");
- m_pDS->exec("CREATE INDEX idxAlbum ON album(strAlbum)");
m_pDS->exec("DROP TABLE IF EXISTS exgenrealbum");
}
if (version < 24)
{
m_pDS->exec("CREATE TABLE song_genre ( idGenre integer, idSong integer, iOrder integer )\n");
- m_pDS->exec("CREATE UNIQUE INDEX idxSongGenre_1 ON song_genre ( idSong, idGenre )\n");
- m_pDS->exec("CREATE UNIQUE INDEX idxSongGenre_2 ON song_genre ( idGenre, idSong )\n");
m_pDS->exec("INSERT INTO song_genre ( idGenre, idSong, iOrder) SELECT idGenre, idSong, iPosition FROM exgenresong");
m_pDS->exec("REPLACE INTO song_genre ( idGenre, idSong, iOrder) SELECT idGenre, idSong, 0 FROM song");
m_pDS->exec("DROP TABLE song");
m_pDS->exec("ALTER TABLE song_new RENAME TO song");
- m_pDS->exec("CREATE INDEX idxSong ON song(strTitle)");
- m_pDS->exec("CREATE INDEX idxSong1 ON song(iTimesPlayed)");
- m_pDS->exec("CREATE INDEX idxSong2 ON song(lastplayed)");
- m_pDS->exec("CREATE INDEX idxSong3 ON song(idAlbum)");
- m_pDS->exec("CREATE INDEX idxSong6 ON song(idPath)");
m_pDS->exec("DROP TABLE IF EXISTS exgenresong");
}
if (version < 25)
{
m_pDS->exec("ALTER TABLE album ADD bCompilation integer not null default '0'");
- m_pDS->exec("CREATE INDEX idxAlbum_1 ON album(bCompilation)");
}
if (version < 26)
{ // add art table
m_pDS->exec("CREATE TABLE art(art_id INTEGER PRIMARY KEY, media_id INTEGER, media_type TEXT, type TEXT, url TEXT)");
- m_pDS->exec("CREATE INDEX ix_art ON art(media_id, media_type(20), type(20))");
- m_pDS->exec("CREATE TRIGGER delete_song AFTER DELETE ON song FOR EACH ROW BEGIN DELETE FROM art WHERE media_id=old.idSong AND media_type='song'; END");
- m_pDS->exec("CREATE TRIGGER delete_album AFTER DELETE ON album FOR EACH ROW BEGIN DELETE FROM art WHERE media_id=old.idAlbum AND media_type='album'; END");
- m_pDS->exec("CREATE TRIGGER delete_artist AFTER DELETE ON artist FOR EACH ROW BEGIN DELETE FROM art WHERE media_id=old.idArtist AND media_type='artist'; END");
}
if (version < 27)
m_pDS->exec(PrepareSQL("UPDATE song SET strFileName='%s' WHERE idSong=%d", filename.c_str(), i->first));
}
}
- if (version < 33)
- {
- m_pDS->exec("DROP INDEX idxSong6 ON song");
- m_pDS->exec("CREATE INDEX idxSong6 on song( idPath, strFileName(255) )");
- }
if (version < 34)
{
m_pDS->exec("DROP TABLE song");
m_pDS->exec("ALTER TABLE song_new RENAME TO song");
- m_pDS->exec("CREATE INDEX idxSong ON song(strTitle)");
- m_pDS->exec("CREATE INDEX idxSong1 ON song(iTimesPlayed)");
- m_pDS->exec("CREATE INDEX idxSong2 ON song(lastplayed)");
- m_pDS->exec("CREATE INDEX idxSong3 ON song(idAlbum)");
- m_pDS->exec("CREATE INDEX idxSong6 ON song(idPath)");
-
+
m_pDS->exec("UPDATE song SET strMusicBrainzTrackID = NULL");
- m_pDS->exec("CREATE UNIQUE INDEX idxArtist1 ON artist(strMusicBrainzArtistID(36))");
}
if (version < 35)
{
- m_pDS->exec("CREATE UNIQUE INDEX idxAlbum_2 ON album(strMusicBrainzAlbumID(36))");
- m_pDS->exec("CREATE UNIQUE INDEX idxSong7 ON song( idAlbum, strMusicBrainzTrackID(36) )");
m_pDS->exec("ALTER TABLE album_artist ADD strJoinPhrase text\n");
m_pDS->exec("ALTER TABLE song_artist ADD strJoinPhrase text\n");
CMediaSettings::Get().SetMusicNeedsUpdate(35);
}
}
}
-
- if (version < 37)
- {
- m_pDS->exec("DROP INDEX idxSong6 ON song");
- m_pDS->exec("CREATE INDEX idxSong6 on song( idPath, strFileName(255) )");
- }
if (version < 39)
{
" strType, iRating "
" FROM album LEFT JOIN albuminfo ON album.idAlbum = albuminfo.idAlbum");
m_pDS->exec("UPDATE albuminfosong SET idAlbumInfo = (SELECT idAlbum FROM albuminfo WHERE albuminfo.idAlbumInfo = albuminfosong.idAlbumInfo)");
- m_pDS->exec("CREATE INDEX idxAlbumInfoSong_1 ON albuminfosong ( idAlbumInfo )\n");
m_pDS->exec(PrepareSQL("UPDATE album_new SET lastScraped='%s' WHERE idAlbum IN (SELECT idAlbum FROM albuminfo)", CDateTime::GetCurrentDateTime().GetAsDBDateTime().c_str()));
m_pDS->exec("DROP TABLE album");
m_pDS->exec("DROP TABLE albuminfo");
m_pDS->exec("DROP TABLE artist");
m_pDS->exec("DROP TABLE artistinfo");
m_pDS->exec("ALTER TABLE artist_new RENAME TO artist");
- m_pDS->exec("CREATE INDEX idxDiscography_1 ON discography ( idArtist )\n");
}
if (version < 42)
{
m_pDS->exec("UPDATE song_artist SET strJoinPhrase = '' WHERE 100*idSong+iOrder IN (SELECT id FROM (SELECT 100*idSong+max(iOrder) AS id FROM song_artist GROUP BY idSong) AS sub)");
m_pDS->exec("UPDATE album_artist SET strJoinPhrase = '' WHERE 100*idAlbum+iOrder IN (SELECT id FROM (SELECT 100*idAlbum+max(iOrder) AS id FROM album_artist GROUP BY idAlbum) AS sub)");
}
- if (version < 43)
- { // (re)create triggers
- m_pDS->exec("DROP TRIGGER IF EXISTS tgrAlbumSong");
- m_pDS->exec("DROP TRIGGER IF EXISTS tgrAlbumArtist");
- m_pDS->exec("DROP TRIGGER IF EXISTS tgrAlbumGenre");
- m_pDS->exec("DROP TRIGGER IF EXISTS tgrAlbumInfoSong");
- m_pDS->exec("DROP TRIGGER IF EXISTS tgrArtistAlbum");
- m_pDS->exec("DROP TRIGGER IF EXISTS tgrArtistSong");
- m_pDS->exec("DROP TRIGGER IF EXISTS tgrArtistDiscography");
- m_pDS->exec("DROP TRIGGER IF EXISTS tgrSongArtist");
- m_pDS->exec("DROP TRIGGER IF EXISTS tgrSongGenre");
- m_pDS->exec("DROP TRIGGER IF EXISTS tgrSongKaraokedata");
- m_pDS->exec("DROP TRIGGER IF EXISTS delete_song");
- m_pDS->exec("DROP TRIGGER IF EXISTS delete_album");
- m_pDS->exec("DROP TRIGGER IF EXISTS delete_artist");
-
- m_pDS->exec("CREATE TRIGGER delete_album AFTER delete ON album FOR EACH ROW BEGIN"
- " DELETE FROM song WHERE song.idAlbum = old.idAlbum;"
- " DELETE FROM album_artist WHERE album_artist.idAlbum = old.idAlbum;"
- " DELETE FROM album_genre WHERE album_genre.idAlbum = old.idAlbum;"
- " DELETE FROM albuminfosong WHERE albuminfosong.idAlbumInfo=old.idAlbum;"
- " DELETE FROM art WHERE media_id=old.idAlbum AND media_type='album';"
- " END");
- m_pDS->exec("CREATE TRIGGER delete_artist AFTER delete ON artist FOR EACH ROW BEGIN"
- " DELETE FROM album_artist WHERE album_artist.idArtist = old.idArtist;"
- " DELETE FROM song_artist WHERE song_artist.idArtist = old.idArtist;"
- " DELETE FROM discography WHERE discography.idArtist = old.idArtist;"
- " DELETE FROM art WHERE media_id=old.idArtist AND media_type='artist';"
- " END");
- m_pDS->exec("CREATE TRIGGER delete_song AFTER delete ON song FOR EACH ROW BEGIN"
- " DELETE FROM song_artist WHERE song_artist.idSong = old.idSong;"
- " DELETE FROM song_genre WHERE song_genre.idSong = old.idSong;"
- " DELETE FROM karaokedata WHERE karaokedata.idSong = old.idSong;"
- " DELETE FROM art WHERE media_id=old.idSong AND media_type='song';"
- " END");
- }
- if (version < 44)
- {
- m_pDS->exec("CREATE INDEX idxAlbum ON album(strAlbum(255))");
- m_pDS->exec("CREATE INDEX idxAlbum_1 ON album(bCompilation)");
- m_pDS->exec("CREATE UNIQUE INDEX idxAlbum_2 ON album(strMusicBrainzAlbumID(36))");
-
- m_pDS->exec("CREATE INDEX idxArtist ON artist(strArtist(255))");
- m_pDS->exec("CREATE UNIQUE INDEX idxArtist1 ON artist(strMusicBrainzArtistID(36))");
-
- m_pDS->exec("DROP INDEX idxGenre ON genre");
- m_pDS->exec("CREATE INDEX idxGenre ON genre(strGenre(255))");
- m_pDS->exec("DROP INDEX idxPath ON path");
- m_pDS->exec("CREATE INDEX idxPath ON path(strPath(255))");
- m_pDS->exec("DROP INDEX idxSong ON song");
- m_pDS->exec("CREATE INDEX idxSong ON song(strTitle(255))");
- }
- // always recreate the views after any table change
- CreateViews();
-
return true;
}
}
else
{
- if (iVersion < 12)
- m_pDS->exec("DROP VIEW vw_last_watched;");
-
if (iVersion < 13)
m_pDS->exec("ALTER TABLE channels ADD idEpg integer;");
m_pDS->exec("UPDATE channelsettings SET iDeinterlaceMode = 1 WHERE iInterlaceMethod = 1"); // method auto => mode auto
m_pDS->exec("UPDATE channelsettings SET iDeinterlaceMode = 0, iInterlaceMethod = 1 WHERE iInterlaceMethod = 0"); // method none => mode off, method auto
}
- if (iVersion < 18)
- {
- m_pDS->exec("DROP INDEX idx_channels_iClientId;");
- m_pDS->exec("DROP INDEX idx_channels_iLastWatched;");
- m_pDS->exec("DROP INDEX idx_channels_bIsRadio;");
- m_pDS->exec("DROP INDEX idx_channels_bIsHidden;");
- m_pDS->exec("DROP INDEX idx_idChannel_idGroup;");
- m_pDS->exec("DROP INDEX idx_idGroup_iChannelNumber;");
- m_pDS->exec("CREATE UNIQUE INDEX idx_channels_iClientId_iUniqueId on channels(iClientId, iUniqueId);");
- m_pDS->exec("CREATE UNIQUE INDEX idx_idGroup_idChannel on map_channelgroups_channels(idGroup, idChannel);");
- }
if (iVersion < 19)
{
// bit of a hack, but we need to keep the version/contents of the non-pvr databases the same to allow clean upgrades
void CVideoDatabase::CreateViews()
{
CLog::Log(LOGINFO, "create episodeview");
- m_pDS->exec("DROP VIEW IF EXISTS episodeview");
CStdString episodeview = PrepareSQL("CREATE VIEW episodeview AS SELECT "
" episode.*,"
" files.strFileName AS strFileName,"
m_pDS->exec(episodeview.c_str());
CLog::Log(LOGINFO, "create tvshowview");
- m_pDS->exec("DROP VIEW IF EXISTS tvshowview");
CStdString tvshowview = PrepareSQL("CREATE VIEW tvshowview AS SELECT "
" tvshow.*,"
" path.strPath AS strPath,"
m_pDS->exec(tvshowview.c_str());
CLog::Log(LOGINFO, "create musicvideoview");
- m_pDS->exec("DROP VIEW IF EXISTS musicvideoview");
m_pDS->exec("CREATE VIEW musicvideoview AS SELECT"
" musicvideo.*,"
" files.strFileName as strFileName,"
" bookmark.idFile=musicvideo.idFile AND bookmark.type=1");
CLog::Log(LOGINFO, "create movieview");
- m_pDS->exec("DROP VIEW IF EXISTS movieview");
m_pDS->exec("CREATE VIEW movieview AS SELECT"
" movie.*,"
" sets.strSet AS strSet,"
UpdateBasePath("episode", "idEpisode", VIDEODB_ID_EPISODE_BASEPATH);
UpdateBasePath("tvshow", "idShow", VIDEODB_ID_TV_BASEPATH, true);
}
- if (iVersion < 46)
- { // add indices for dir entry lookups
- m_pDS->exec("CREATE INDEX ixMovieBasePath ON movie ( c22(255) )");
- m_pDS->exec("CREATE INDEX ixMusicVideoBasePath ON musicvideo ( c13(255) )");
- m_pDS->exec("CREATE INDEX ixEpisodeBasePath ON episode ( c18(255) )");
- m_pDS->exec("CREATE INDEX ixTVShowBasePath ON tvshow ( c16(255) )");
- }
if (iVersion < 50)
{
m_pDS->exec("ALTER TABLE settings ADD ScalingMethod integer");
m_pDS->exec("ALTER TABLE actorlinkepisode ADD iOrder integer");
}
if (iVersion < 52)
- { // Add basepath link to path table for faster content retrieval, and indicies
+ { // Add basepath link to path table for faster content retrieval
m_pDS->exec("ALTER TABLE movie ADD c23 text");
m_pDS->exec("ALTER TABLE episode ADD c23 text");
m_pDS->exec("ALTER TABLE musicvideo ADD c23 text");
m_pDS->exec("ALTER TABLE tvshow ADD c23 text");
- m_pDS->dropIndex("movie", "ixMovieBasePath");
- m_pDS->dropIndex("musicvideo", "ixMusicVideoBasePath");
- m_pDS->dropIndex("episode", "ixEpisodeBasePath");
- m_pDS->dropIndex("tvshow", "ixTVShowBasePath");
- m_pDS->exec("CREATE INDEX ixMovieBasePath ON movie ( c23(12) )");
- m_pDS->exec("CREATE INDEX ixMusicVideoBasePath ON musicvideo ( c14(12) )");
- m_pDS->exec("CREATE INDEX ixEpisodeBasePath ON episode ( c19(12) )");
- m_pDS->exec("CREATE INDEX ixTVShowBasePath ON tvshow ( c17(12) )");
// now update the base path links
UpdateBasePathID("movie", "idMovie", VIDEODB_ID_BASEPATH, VIDEODB_ID_PARENTPATHID);
UpdateBasePathID("musicvideo", "idMVideo", VIDEODB_ID_MUSICVIDEO_BASEPATH, VIDEODB_ID_MUSICVIDEO_PARENTPATHID);
UpdateBasePathID("episode", "idEpisode", VIDEODB_ID_EPISODE_BASEPATH, VIDEODB_ID_EPISODE_PARENTPATHID);
UpdateBasePathID("tvshow", "idShow", VIDEODB_ID_TV_BASEPATH, VIDEODB_ID_TV_PARENTPATHID);
}
- if (iVersion < 54)
- { // Change INDEX for bookmark table
- m_pDS->dropIndex("bookmark", "ix_bookmark");
- m_pDS->exec("CREATE INDEX ix_bookmark ON bookmark (idFile, type)");
- }
if (iVersion < 55)
{
m_pDS->exec("ALTER TABLE settings ADD DeinterlaceMode integer");
if (iVersion < 62)
{ // add seasons table
m_pDS->exec("CREATE TABLE seasons ( idSeason integer primary key, idShow integer, season integer)");
- m_pDS->exec("CREATE INDEX ix_seasons ON seasons (idShow, season)");
// insert all seasons for each show
m_pDS->query("SELECT idShow FROM tvshow");
while (!m_pDS->eof())
" SELECT DISTINCT"
" idShow,c%02d"
" FROM"
- " episodeview"
+ " episode"
+ " JOIN tvshowlinkepisode ON"
+ " episode.idEpisode=tvshowlinkepisode.idEpisode"
" WHERE idShow=%i", VIDEODB_ID_EPISODE_SEASON, m_pDS->fv(0).get_asInt());
m_pDS2->exec(sql.c_str());
// and the "all seasons node"
if (iVersion < 63)
{ // add art table
m_pDS->exec("CREATE TABLE art(art_id INTEGER PRIMARY KEY, media_id INTEGER, media_type TEXT, type TEXT, url TEXT)");
- m_pDS->exec("CREATE INDEX ix_art ON art(media_id, media_type(20), type(20))");
- m_pDS->exec("CREATE TRIGGER delete_movie AFTER DELETE ON movie FOR EACH ROW BEGIN DELETE FROM art WHERE media_id=old.idMovie AND media_type='movie'; END");
- m_pDS->exec("CREATE TRIGGER delete_tvshow AFTER DELETE ON tvshow FOR EACH ROW BEGIN DELETE FROM art WHERE media_id=old.idShow AND media_type='tvshow'; END");
- m_pDS->exec("CREATE TRIGGER delete_musicvideo AFTER DELETE ON musicvideo FOR EACH ROW BEGIN DELETE FROM art WHERE media_id=old.idMVideo AND media_type='musicvideo'; END");
- m_pDS->exec("CREATE TRIGGER delete_episode AFTER DELETE ON episode FOR EACH ROW BEGIN DELETE FROM art WHERE media_id=old.idEpisode AND media_type='episode'; END");
- m_pDS->exec("CREATE TRIGGER delete_season AFTER DELETE ON seasons FOR EACH ROW BEGIN DELETE FROM art WHERE media_id=old.idSeason AND media_type='season'; END");
- m_pDS->exec("CREATE TRIGGER delete_set AFTER DELETE ON sets FOR EACH ROW BEGIN DELETE FROM art WHERE media_id=old.idSet AND media_type='set'; END");
- m_pDS->exec("CREATE TRIGGER delete_person AFTER DELETE ON actors FOR EACH ROW BEGIN DELETE FROM art WHERE media_id=old.idActor AND media_type IN ('actor','artist','writer','director'); END");
CMediaSettings::Get().SetVideoNeedsUpdate(63);
CSettings::Get().Save();
m_pDS->next();
}
m_pDS->exec("DROP TABLE tvshowlinkepisode");
- m_pDS->exec("CREATE INDEX ix_episode_show1 on episode(idEpisode,idShow)");
- m_pDS->exec("CREATE INDEX ix_episode_show2 on episode(idShow,idEpisode)");
}
if (iVersion < 67)
{
m_pDS->exec("CREATE TABLE tag (idTag integer primary key, strTag text)");
- m_pDS->exec("CREATE UNIQUE INDEX ix_tag_1 ON tag (strTag(255))");
-
m_pDS->exec("CREATE TABLE taglinks (idTag integer, idMedia integer, media_type TEXT)");
- m_pDS->exec("CREATE UNIQUE INDEX ix_taglinks_1 ON taglinks (idTag, media_type(20), idMedia)");
- m_pDS->exec("CREATE UNIQUE INDEX ix_taglinks_2 ON taglinks (idMedia, media_type(20), idTag)");
- m_pDS->exec("CREATE INDEX ix_taglinks_3 ON taglinks (media_type(20))");
}
if (iVersion < 68)
{ // add idSet to movie table
}
}
}
- if (iVersion < 73)
- {
- m_pDS->exec("DROP TRIGGER IF EXISTS delete_movie");
- m_pDS->exec("DROP TRIGGER IF EXISTS delete_tvshow");
- m_pDS->exec("DROP TRIGGER IF EXISTS delete_musicvideo");
- m_pDS->exec("DROP TRIGGER IF EXISTS delete_episode");
- m_pDS->exec("DROP TRIGGER IF EXISTS delete_season");
- m_pDS->exec("DROP TRIGGER IF EXISTS delete_set");
- m_pDS->exec("DROP TRIGGER IF EXISTS delete_person");
-
- m_pDS->exec("CREATE TRIGGER delete_movie AFTER DELETE ON movie FOR EACH ROW BEGIN "
- "DELETE FROM art WHERE media_id=old.idMovie AND media_type='movie'; "
- "DELETE FROM taglinks 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 art WHERE media_id=old.idShow AND media_type='tvshow'; "
- "DELETE FROM taglinks WHERE idMedia=old.idShow AND media_type='tvshow'; "
- "END");
- m_pDS->exec("CREATE TRIGGER delete_musicvideo AFTER DELETE ON musicvideo FOR EACH ROW BEGIN "
- "DELETE FROM art WHERE media_id=old.idMVideo AND media_type='musicvideo'; "
- "DELETE FROM taglinks WHERE idMedia=old.idMVideo AND media_type='musicvideo'; "
- "END");
- m_pDS->exec("CREATE TRIGGER delete_episode AFTER DELETE ON episode FOR EACH ROW BEGIN "
- "DELETE FROM art WHERE media_id=old.idEpisode AND media_type='episode'; "
- "END");
- m_pDS->exec("CREATE TRIGGER delete_season AFTER DELETE ON seasons FOR EACH ROW BEGIN "
- "DELETE FROM art WHERE media_id=old.idSeason AND media_type='season'; "
- "END");
- m_pDS->exec("CREATE TRIGGER delete_set AFTER DELETE ON sets FOR EACH ROW BEGIN "
- "DELETE FROM art WHERE media_id=old.idSet AND media_type='set'; "
- "END");
- m_pDS->exec("CREATE TRIGGER delete_person AFTER DELETE ON actors FOR EACH ROW BEGIN "
- "DELETE FROM art WHERE media_id=old.idActor AND media_type IN ('actor','artist','writer','director'); "
- "END");
- m_pDS->exec("CREATE TRIGGER delete_tag AFTER DELETE ON taglinks FOR EACH ROW BEGIN "
- "DELETE FROM tag WHERE idTag=old.idTag AND idTag NOT IN (SELECT DISTINCT idTag FROM taglinks); "
- "END");
- }
if (iVersion < 74)
{ // update the runtime columns
vector< pair<string, int> > tables;
m_pDS->exec(PrepareSQL("update %s set c%02d=%d where id%s=%d", (i->first=="mvideo")?"musicvideo":i->first.c_str(), i->second, j->second, i->first.c_str(), j->first));
}
}
- if (iVersion < 75)
- { // make indices on path, file non-unique (mysql has a prefix index, and prefixes aren't necessarily unique)
- m_pDS->dropIndex("path", "ix_path");
- m_pDS->dropIndex("files", "ix_files");
- m_pDS->exec("CREATE INDEX ix_path ON path ( strPath(255) )");
- m_pDS->exec("CREATE INDEX ix_files ON files ( idPath, strFilename(255) )");
- }
if (iVersion < 76)
{
m_pDS->exec("ALTER TABLE settings ADD StereoMode integer");
if (iVersion < 77)
m_pDS->exec("ALTER TABLE streamdetails ADD strStereoMode text");
- // always recreate the view after any table change
- CreateViews();
return true;
}
{
// convert the "path" table
m_pDS->exec("CREATE TABLE tmp_view AS SELECT * FROM view");
- m_pDS->exec("DROP INDEX idxViews");
- m_pDS->exec("DROP INDEX idxViewsWindow");
m_pDS->exec("DROP TABLE view");
m_pDS->exec("CREATE TABLE view ("
"sortOrder integer,"
"sortAttributes integer,"
"skin text)\n");
- m_pDS->exec("CREATE INDEX idxViews ON view(path)");
- m_pDS->exec("CREATE INDEX idxViewsWindow ON view(window)");
m_pDS->query("SELECT * FROM tmp_view");
while (!m_pDS->eof())