aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Data/BaseSqliteRepository.cs
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2016-11-21 12:29:18 -0500
committerGitHub <noreply@github.com>2016-11-21 12:29:18 -0500
commitf80cc1bbd4145a682234d4d1d286c70f562f36bd (patch)
tree2ecc0e11aa1f394295f6269069da5ed6b9ed0667 /Emby.Server.Implementations/Data/BaseSqliteRepository.cs
parentb2ea3272e70a0f520133ee6a74d958e044d4392e (diff)
parent1acebd992229ee9bd6e7677f68174672fae53622 (diff)
Merge pull request #2299 from MediaBrowser/dev
Dev
Diffstat (limited to 'Emby.Server.Implementations/Data/BaseSqliteRepository.cs')
-rw-r--r--Emby.Server.Implementations/Data/BaseSqliteRepository.cs83
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 = "";