private bool Migrate_5 ()
{
Execute ("ALTER TABLE CoreTracks ADD COLUMN TitleLowered TEXT");
Execute ("ALTER TABLE CoreArtists ADD COLUMN NameLowered TEXT");
Execute ("ALTER TABLE CoreAlbums ADD COLUMN TitleLowered TEXT");
// Set default so sorting isn't whack while we regenerate
Execute ("UPDATE CoreTracks SET TitleLowered = lower(Title)");
Execute ("UPDATE CoreArtists SET NameLowered = lower(Name)");
Execute ("UPDATE CoreAlbums SET TitleLowered = lower(Title)");
// Drop old indexes
Execute ("DROP INDEX IF EXISTS CoreTracksPrimarySourceIndex");
Execute ("DROP INDEX IF EXISTS CoreTracksArtistIndex");
Execute ("DROP INDEX IF EXISTS CoreTracksAlbumIndex");
Execute ("DROP INDEX IF EXISTS CoreTracksRatingIndex");
Execute ("DROP INDEX IF EXISTS CoreTracksLastPlayedStampIndex");
Execute ("DROP INDEX IF EXISTS CoreTracksDateAddedStampIndex");
Execute ("DROP INDEX IF EXISTS CoreTracksPlayCountIndex");
Execute ("DROP INDEX IF EXISTS CoreTracksTitleIndex");
Execute ("DROP INDEX IF EXISTS CoreAlbumsIndex");
Execute ("DROP INDEX IF EXISTS CoreAlbumsArtistID");
Execute ("DROP INDEX IF EXISTS CoreArtistsIndex");
Execute ("DROP INDEX IF EXISTS CorePlaylistEntriesIndex");
Execute ("DROP INDEX IF EXISTS CorePlaylistTrackIDIndex");
Execute ("DROP INDEX IF EXISTS CoreSmartPlaylistEntriesPlaylistIndex");
Execute ("DROP INDEX IF EXISTS CoreSmartPlaylistEntriesTrackIndex");
// Create new indexes
Execute ("CREATE INDEX IF NOT EXISTS CoreTracksIndex ON CoreTracks(ArtistID, AlbumID, PrimarySourceID, Disc, TrackNumber, Uri)");
Execute ("CREATE INDEX IF NOT EXISTS CoreArtistsIndex ON CoreArtists(NameLowered)");
Execute ("CREATE INDEX IF NOT EXISTS CoreAlbumsIndex ON CoreAlbums(ArtistID, TitleLowered)");
Execute ("CREATE INDEX IF NOT EXISTS CoreSmartPlaylistEntriesIndex ON CoreSmartPlaylistEntries(SmartPlaylistID, TrackID)");
Execute ("CREATE INDEX IF NOT EXISTS CorePlaylistEntriesIndex ON CorePlaylistEntries(PlaylistID, TrackID)");
return true;
}