diff options
Diffstat (limited to 'MediaBrowser.Server.Startup.Common/Persistence/SqliteExtensions.cs')
| -rw-r--r-- | MediaBrowser.Server.Startup.Common/Persistence/SqliteExtensions.cs | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/MediaBrowser.Server.Startup.Common/Persistence/SqliteExtensions.cs b/MediaBrowser.Server.Startup.Common/Persistence/SqliteExtensions.cs new file mode 100644 index 000000000..b99fbb5d1 --- /dev/null +++ b/MediaBrowser.Server.Startup.Common/Persistence/SqliteExtensions.cs @@ -0,0 +1,53 @@ +using System; +using System.Data; +using System.Data.SQLite; +using System.Threading.Tasks; +using MediaBrowser.Model.Logging; + +namespace MediaBrowser.Server.Startup.Common.Persistence +{ + /// <summary> + /// Class SQLiteExtensions + /// </summary> + public static class SqliteExtensions + { + /// <summary> + /// Connects to db. + /// </summary> + public static async Task<IDbConnection> ConnectToDb(string dbPath, bool isReadOnly, bool enablePooling, int? cacheSize, ILogger logger) + { + if (string.IsNullOrEmpty(dbPath)) + { + throw new ArgumentNullException("dbPath"); + } + + SQLiteConnection.SetMemoryStatus(false); + + var connectionstr = new SQLiteConnectionStringBuilder + { + PageSize = 4096, + CacheSize = cacheSize ?? 2000, + SyncMode = SynchronizationModes.Normal, + DataSource = dbPath, + JournalMode = SQLiteJournalModeEnum.Wal, + + // This is causing crashing under linux + Pooling = enablePooling && Environment.OSVersion.Platform == PlatformID.Win32NT, + ReadOnly = isReadOnly + }; + + var connectionString = connectionstr.ConnectionString; + + if (!enablePooling) + { + logger.Info("Sqlite {0} opening {1}", SQLiteConnection.SQLiteVersion, connectionString); + } + + var connection = new SQLiteConnection(connectionString); + + await connection.OpenAsync().ConfigureAwait(false); + + return connection; + } + } +} |
