diff options
Diffstat (limited to 'Emby.Server.Implementations/Data/BaseSqliteRepository.cs')
| -rw-r--r-- | Emby.Server.Implementations/Data/BaseSqliteRepository.cs | 83 |
1 files changed, 44 insertions, 39 deletions
diff --git a/Emby.Server.Implementations/Data/BaseSqliteRepository.cs b/Emby.Server.Implementations/Data/BaseSqliteRepository.cs index c506411d4..d4226ec25 100644 --- a/Emby.Server.Implementations/Data/BaseSqliteRepository.cs +++ b/Emby.Server.Implementations/Data/BaseSqliteRepository.cs @@ -30,11 +30,6 @@ namespace Emby.Server.Implementations.Data get { return false; } } - protected virtual bool EnableConnectionPooling - { - get { return true; } - } - static BaseSqliteRepository() { SQLite3.EnableSharedCache = false; @@ -45,7 +40,9 @@ namespace Emby.Server.Implementations.Data private static bool _versionLogged; - protected virtual SQLiteDatabaseConnection CreateConnection(bool isReadOnly = false) + private string _defaultWal; + + protected SQLiteDatabaseConnection CreateConnection(bool isReadOnly = false, Action<SQLiteDatabaseConnection> onConnect = null) { if (!_versionLogged) { @@ -56,60 +53,73 @@ namespace Emby.Server.Implementations.Data ConnectionFlags connectionFlags; - //isReadOnly = false; - if (isReadOnly) { - connectionFlags = ConnectionFlags.ReadOnly; - //connectionFlags = ConnectionFlags.Create; - //connectionFlags |= ConnectionFlags.ReadWrite; + //Logger.Info("Opening read connection"); } else { - connectionFlags = ConnectionFlags.Create; - connectionFlags |= ConnectionFlags.ReadWrite; + //Logger.Info("Opening write connection"); } - if (EnableConnectionPooling) + isReadOnly = false; + + if (isReadOnly) { - connectionFlags |= ConnectionFlags.SharedCached; + connectionFlags = ConnectionFlags.ReadOnly; + //connectionFlags = ConnectionFlags.Create; + //connectionFlags |= ConnectionFlags.ReadWrite; } else { - connectionFlags |= ConnectionFlags.PrivateCache; + connectionFlags = ConnectionFlags.Create; + connectionFlags |= ConnectionFlags.ReadWrite; } + connectionFlags |= ConnectionFlags.SharedCached; connectionFlags |= ConnectionFlags.NoMutex; var db = SQLite3.Open(DbFilePath, connectionFlags, null); + if (string.IsNullOrWhiteSpace(_defaultWal)) + { + _defaultWal = db.Query("PRAGMA journal_mode").SelectScalarString().First(); + } + var queries = new List<string> { - "pragma default_temp_store = memory", - "PRAGMA page_size=4096", - "PRAGMA journal_mode=WAL", - "PRAGMA temp_store=memory", - "PRAGMA synchronous=Normal", + "PRAGMA default_temp_store=memory", + "pragma temp_store = memory", + "PRAGMA journal_mode=WAL" //"PRAGMA cache size=-10000" }; - var cacheSize = CacheSize; - if (cacheSize.HasValue) - { + //var cacheSize = CacheSize; + //if (cacheSize.HasValue) + //{ - } + //} - if (EnableExclusiveMode) - { - queries.Add("PRAGMA locking_mode=EXCLUSIVE"); - } + ////foreach (var query in queries) + ////{ + //// db.Execute(query); + ////} - //foreach (var query in queries) - //{ - // db.Execute(query); - //} + //Logger.Info("synchronous: " + db.Query("PRAGMA synchronous").SelectScalarString().First()); + //Logger.Info("temp_store: " + db.Query("PRAGMA temp_store").SelectScalarString().First()); - db.ExecuteAll(string.Join(";", queries.ToArray())); + //if (!string.Equals(_defaultWal, "wal", StringComparison.OrdinalIgnoreCase) || onConnect != null) + { + using (WriteLock.Write()) + { + db.ExecuteAll(string.Join(";", queries.ToArray())); + + if (onConnect != null) + { + onConnect(db); + } + } + } return db; } @@ -122,11 +132,6 @@ namespace Emby.Server.Implementations.Data } } - protected virtual bool EnableExclusiveMode - { - get { return false; } - } - internal static void CheckOk(int rc) { string msg = ""; |
