@ -128,7 +128,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
connection . RunQueries ( new [ ]
{
"pragma temp_store = memory" ,
"PRAGMA main.locking_mode=EXCLUSIVE"
"pragma default_temp_store = memory" ,
"PRAGMA locking_mode=EXCLUSIVE"
} , Logger ) ;
@ -139,7 +140,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
/// Opens the connection to the database
/// </summary>
/// <returns>Task.</returns>
public async Task Initialize ( )
public async Task Initialize ( SqliteUserDataRepository userDataRepo )
{
_connection = await CreateConnection ( false ) . ConfigureAwait ( false ) ;
@ -163,18 +164,22 @@ namespace MediaBrowser.Server.Implementations.Persistence
"create index if not exists idx_ItemValues2 on ItemValues(ItemId,Type)" ,
"create table if not exists ProviderIds (ItemId GUID, Name TEXT, Value TEXT, PRIMARY KEY (ItemId, Name))" ,
"create index if not exists Idx_ProviderIds on ProviderIds(ItemId)" ,
// covering index
"create index if not exists Idx_ProviderIds1 on ProviderIds(ItemId,Name,Value)" ,
"create table if not exists Images (ItemId GUID NOT NULL, Path TEXT NOT NULL, ImageType INT NOT NULL, DateModified DATETIME, IsPlaceHolder BIT NOT NULL, SortOrder INT)" ,
"create index if not exists idx_Images on Images(ItemId)" ,
"create table if not exists People (ItemId GUID, Name TEXT NOT NULL, Role TEXT, PersonType TEXT, SortOrder int, ListOrder int)" ,
"drop index if exists idxPeopleItemId" ,
"create index if not exists idxPeopleItemId1 on People(ItemId,ListOrder)" ,
"create index if not exists idxPeopleName on People(Name)" ,
"create table if not exists " + ChaptersTableName + " (ItemId GUID, ChapterIndex INT, StartPositionTicks BIGINT, Name TEXT, ImagePath TEXT, PRIMARY KEY (ItemId, ChapterIndex))" ,
createMediaStreamsTableCommand ,
"create index if not exists idx_mediastreams1 on mediastreams(ItemId)" ,
} ;
@ -266,24 +271,39 @@ namespace MediaBrowser.Server.Implementations.Persistence
_connection . AddColumn ( Logger , "ItemValues" , "CleanValue" , "Text" ) ;
string [ ] postQueries =
{
// obsolete
"drop index if exists idx_TypedBaseItems" ,
"drop index if exists idx_mediastreams" ,
"drop index if exists idx_" + ChaptersTableName ,
"drop index if exists idx_UserDataKeys1" ,
"drop index if exists idx_UserDataKeys2" ,
"drop index if exists idx_TypeTopParentId3" ,
"drop index if exists idx_TypeTopParentId2" ,
"drop index if exists idx_TypeTopParentId4" ,
"drop index if exists idx_Type" ,
"drop index if exists idx_TypeTopParentId" ,
"drop index if exists idx_GuidType" ,
"drop index if exists idx_TopParentId" ,
"drop index if exists idx_TypeTopParentId6" ,
"drop index if exists idx_ItemValues2" ,
"drop index if exists Idx_ProviderIds" ,
"create index if not exists idx_PresentationUniqueKey on TypedBaseItems(PresentationUniqueKey)" ,
"create index if not exists idx_GuidType on TypedBaseItems(Guid,Type)" ,
"create index if not exists idx_GuidTypeIsFolderIsVirtualItem on TypedBaseItems(Guid,Type,IsFolder,IsVirtualItem)" ,
//"create index if not exists idx_GuidMediaTypeIsFolderIsVirtualItem on TypedBaseItems(Guid,MediaType,IsFolder,IsVirtualItem)",
"create index if not exists idx_CleanNameType on TypedBaseItems(CleanName,Type)" ,
"create index if not exists idx_Type on TypedBaseItems(Type)" ,
"create index if not exists idx_TopParentId on TypedBaseItems(TopParentId)" ,
"create index if not exists idx_TypeTopParentId on TypedBaseItems(Type,TopParentId)" ,
// covering index
"create index if not exists idx_T opParentIdGui d on TypedBaseItems(TopParentId,Gui d)",
// live tv programs
"create index if not exists idx_TypeTopParentIdStartDate on TypedBaseItems(Type,TopParentId,StartDate)" ,
// used by movie suggestions
"create index if not exists idx_TypeTopParentIdGroup on TypedBaseItems(Type,TopParentId,PresentationUniqueKey)" ,
"create index if not exists idx_TypeTopParentId2 on TypedBaseItems(TopParentId,MediaType,IsVirtualItem)" ,
"create index if not exists idx_TypeTopParentId3 on TypedBaseItems(TopParentId,IsFolder,IsVirtualItem)" ,
"create index if not exists idx_TypeTopParentId4 on TypedBaseItems(TopParentId,Type,IsVirtualItem)" ,
"create index if not exists idx_TypeTopParentId5 on TypedBaseItems(TopParentId,IsVirtualItem)" ,
"create index if not exists idx_TypeTopParentId6 on TypedBaseItems(TopParentId,Type,IsVirtualItem,PresentationUniqueKey)" ,
// latest items
"create index if not exists idx_TypeTopParentId9 on TypedBaseItems(TopParentId,Type,IsVirtualItem,PresentationUniqueKey,DateCreated)" ,
@ -294,9 +314,10 @@ namespace MediaBrowser.Server.Implementations.Persistence
// items by name
"create index if not exists idx_ItemValues3 on ItemValues(ItemId,Type,CleanValue)" ,
"create index if not exists idx_ItemValues4 on ItemValues(ItemId,Type,Value,CleanValue)" ,
// "create index if not exists idx_UserDataKeys1 on UserDataKeys(ItemId)",
"create index if not exists idx_UserDataKeys 2 on UserDataKeys(ItemId,Priorit y)"
// covering index
"create index if not exists idx_UserDataKeys 3 on UserDataKeys(ItemId,Priority,UserDataKe y)"
} ;
_connection . RunQueries ( postQueries , Logger ) ;
@ -306,6 +327,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
new MediaStreamColumns ( _connection , Logger ) . AddColumns ( ) ;
DataExtensions . Attach ( _connection , Path . Combine ( _config . ApplicationPaths . DataPath , "userdata_v2.db" ) , "UserDataDb" ) ;
await userDataRepo . Initialize ( _connection ) . ConfigureAwait ( false ) ;
//await Vacuum(_connection).ConfigureAwait(false);
}
private readonly string [ ] _retriveItemColumns =
@ -1819,7 +1842,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
var slowThreshold = 1000 ;
#if DEBUG
slowThreshold = 8 0;
slowThreshold = 6 0;
# endif
if ( elapsed > = slowThreshold )