diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs | 80 |
1 files changed, 35 insertions, 45 deletions
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs index 9c5cf6f1c..5ce44efd5 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs @@ -7,7 +7,6 @@ using MediaBrowser.Model.Serialization; using System; using System.Collections.Generic; using System.Data; -using System.Data.SQLite; using System.IO; using System.Linq; using System.Threading; @@ -20,12 +19,12 @@ namespace MediaBrowser.Server.Implementations.Persistence /// </summary> public class SqliteItemRepository : IItemRepository { - private SQLiteConnection _connection; + private IDbConnection _connection; private readonly ILogger _logger; private readonly TypeMapper _typeMapper = new TypeMapper(); - + /// <summary> /// Gets the name of the repository /// </summary> @@ -52,15 +51,15 @@ namespace MediaBrowser.Server.Implementations.Persistence /// <summary> /// The _save item command /// </summary> - private SQLiteCommand _saveItemCommand; + private IDbCommand _saveItemCommand; private readonly string _criticReviewsPath; private SqliteChapterRepository _chapterRepository; - private SQLiteCommand _deleteChildrenCommand; - private SQLiteCommand _saveChildrenCommand; - + private IDbCommand _deleteChildrenCommand; + private IDbCommand _saveChildrenCommand; + /// <summary> /// Initializes a new instance of the <see cref="SqliteItemRepository"/> class. /// </summary> @@ -104,7 +103,7 @@ namespace MediaBrowser.Server.Implementations.Persistence public async Task Initialize() { var dbFile = Path.Combine(_appPaths.DataPath, "library.db"); - + _connection = await SqliteExtensions.ConnectToDb(dbFile).ConfigureAwait(false); string[] queries = { @@ -136,29 +135,20 @@ namespace MediaBrowser.Server.Implementations.Persistence /// </summary> private void PrepareStatements() { - _saveItemCommand = new SQLiteCommand - { - CommandText = "replace into TypedBaseItems (guid, type, data) values (@1, @2, @3)" - }; - - _saveItemCommand.Parameters.Add(new SQLiteParameter("@1")); - _saveItemCommand.Parameters.Add(new SQLiteParameter("@2")); - _saveItemCommand.Parameters.Add(new SQLiteParameter("@3")); - - _deleteChildrenCommand = new SQLiteCommand - { - CommandText = "delete from ChildrenIds where ParentId=@ParentId" - }; - - _deleteChildrenCommand.Parameters.Add(new SQLiteParameter("@ParentId")); - - _saveChildrenCommand = new SQLiteCommand - { - CommandText = "replace into ChildrenIds (ParentId, ItemId) values (@ParentId, @ItemId)" - }; - - _saveChildrenCommand.Parameters.Add(new SQLiteParameter("@ParentId")); - _saveChildrenCommand.Parameters.Add(new SQLiteParameter("@ItemId")); + _saveItemCommand = _connection.CreateCommand(); + _saveItemCommand.CommandText = "replace into TypedBaseItems (guid, type, data) values (@1, @2, @3)"; + _saveItemCommand.Parameters.Add(_saveItemCommand, "@1"); + _saveItemCommand.Parameters.Add(_saveItemCommand, "@2"); + _saveItemCommand.Parameters.Add(_saveItemCommand, "@3"); + + _deleteChildrenCommand = _connection.CreateCommand(); + _deleteChildrenCommand.CommandText = "delete from ChildrenIds where ParentId=@ParentId"; + _deleteChildrenCommand.Parameters.Add(_deleteChildrenCommand, "@ParentId"); + + _saveChildrenCommand = _connection.CreateCommand(); + _saveChildrenCommand.CommandText = "replace into ChildrenIds (ParentId, ItemId) values (@ParentId, @ItemId)"; + _saveChildrenCommand.Parameters.Add(_saveChildrenCommand, "@ParentId"); + _saveChildrenCommand.Parameters.Add(_saveChildrenCommand, "@ItemId"); } /// <summary> @@ -205,7 +195,7 @@ namespace MediaBrowser.Server.Implementations.Persistence await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false); - SQLiteTransaction transaction = null; + IDbTransaction transaction = null; try { @@ -215,13 +205,13 @@ namespace MediaBrowser.Server.Implementations.Persistence { cancellationToken.ThrowIfCancellationRequested(); - _saveItemCommand.Parameters[0].Value = item.Id; - _saveItemCommand.Parameters[1].Value = item.GetType().FullName; - _saveItemCommand.Parameters[2].Value = _jsonSerializer.SerializeToBytes(item); + _saveItemCommand.GetParameter(0).Value = item.Id; + _saveItemCommand.GetParameter(1).Value = item.GetType().FullName; + _saveItemCommand.GetParameter(2).Value = _jsonSerializer.SerializeToBytes(item); _saveItemCommand.Transaction = transaction; - await _saveItemCommand.ExecuteNonQueryAsync(cancellationToken); + _saveItemCommand.ExecuteNonQuery(); } transaction.Commit(); @@ -274,8 +264,7 @@ namespace MediaBrowser.Server.Implementations.Persistence using (var cmd = _connection.CreateCommand()) { cmd.CommandText = "select type,data from TypedBaseItems where guid = @guid"; - var guidParam = cmd.Parameters.Add("@guid", DbType.Guid); - guidParam.Value = id; + cmd.Parameters.Add(cmd, "@guid", DbType.Guid).Value = id; using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow)) { @@ -446,7 +435,7 @@ namespace MediaBrowser.Server.Implementations.Persistence { cmd.CommandText = "select ItemId from ChildrenIds where ParentId = @ParentId"; - cmd.Parameters.Add("@ParentId", DbType.Guid).Value = parentId; + cmd.Parameters.Add(cmd, "@ParentId", DbType.Guid).Value = parentId; using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult)) { @@ -479,27 +468,28 @@ namespace MediaBrowser.Server.Implementations.Persistence await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false); - SQLiteTransaction transaction = null; + IDbTransaction transaction = null; try { transaction = _connection.BeginTransaction(); // First delete - _deleteChildrenCommand.Parameters[0].Value = parentId; + _deleteChildrenCommand.GetParameter(0).Value = parentId; _deleteChildrenCommand.Transaction = transaction; - await _deleteChildrenCommand.ExecuteNonQueryAsync(cancellationToken); + + _deleteChildrenCommand.ExecuteNonQuery(); foreach (var id in children) { cancellationToken.ThrowIfCancellationRequested(); - _saveChildrenCommand.Parameters[0].Value = parentId; - _saveChildrenCommand.Parameters[1].Value = id; + _saveChildrenCommand.GetParameter(0).Value = parentId; + _saveChildrenCommand.GetParameter(1).Value = id; _saveChildrenCommand.Transaction = transaction; - await _saveChildrenCommand.ExecuteNonQueryAsync(cancellationToken); + _saveChildrenCommand.ExecuteNonQuery(); } transaction.Commit(); |
