From cdfb009df876e4f5bcc99b5017ef7f4154131a4c Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 29 Sep 2013 18:00:08 -0400 Subject: [PATCH] limit knowledge of sqlite --- .../SqliteDisplayPreferencesRepository.cs | 27 +++---- .../Persistence/SqliteExtensions.cs | 36 +-------- .../Persistence/SqliteItemRepository.cs | 80 ++++++++----------- 3 files changed, 47 insertions(+), 96 deletions(-) diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteDisplayPreferencesRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteDisplayPreferencesRepository.cs index 8cd618d210..909745fe3d 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteDisplayPreferencesRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteDisplayPreferencesRepository.cs @@ -5,7 +5,6 @@ using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; using System; using System.Data; -using System.Data.SQLite; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -17,7 +16,7 @@ namespace MediaBrowser.Server.Implementations.Persistence /// public class SqliteDisplayPreferencesRepository : IDisplayPreferencesRepository { - private SQLiteConnection _connection; + private IDbConnection _connection; private readonly ILogger _logger; @@ -124,7 +123,7 @@ namespace MediaBrowser.Server.Implementations.Persistence await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false); - SQLiteTransaction transaction = null; + IDbTransaction transaction = null; try { @@ -133,14 +132,15 @@ namespace MediaBrowser.Server.Implementations.Persistence using (var cmd = _connection.CreateCommand()) { cmd.CommandText = "replace into userdisplaypreferences (id, userid, client, data) values (@1, @2, @3, @4)"; - cmd.AddParam("@1", displayPreferences.Id); - cmd.AddParam("@2", userId); - cmd.AddParam("@3", client); - cmd.AddParam("@4", serialized); + + cmd.Parameters.Add(cmd, "@1", DbType.Guid).Value = displayPreferences.Id; + cmd.Parameters.Add(cmd, "@2", DbType.Guid).Value = userId; + cmd.Parameters.Add(cmd, "@3", DbType.String).Value = client; + cmd.Parameters.Add(cmd, "@4", DbType.Binary).Value = serialized; cmd.Transaction = transaction; - await cmd.ExecuteNonQueryAsync(cancellationToken); + cmd.ExecuteNonQuery(); } transaction.Commit(); @@ -194,14 +194,9 @@ namespace MediaBrowser.Server.Implementations.Persistence var cmd = _connection.CreateCommand(); cmd.CommandText = "select data from userdisplaypreferences where id = @id and userId=@userId and client=@client"; - var idParam = cmd.Parameters.Add("@id", DbType.Guid); - idParam.Value = displayPreferencesId; - - var userIdParam = cmd.Parameters.Add("@userId", DbType.Guid); - userIdParam.Value = userId; - - var clientParam = cmd.Parameters.Add("@client", DbType.String); - clientParam.Value = client; + cmd.Parameters.Add(cmd, "@id", DbType.Guid).Value = displayPreferencesId; + cmd.Parameters.Add(cmd, "@userId", DbType.Guid).Value = userId; + cmd.Parameters.Add(cmd, "@client", DbType.String).Value = client; using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow)) { diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteExtensions.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteExtensions.cs index fa5e016c16..41e419e1ab 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteExtensions.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteExtensions.cs @@ -12,40 +12,6 @@ namespace MediaBrowser.Server.Implementations.Persistence /// static class SqliteExtensions { - /// - /// Adds the param. - /// - /// The CMD. - /// The param. - /// SQLiteParameter. - /// - public static SQLiteParameter AddParam(this SQLiteCommand cmd, string param) - { - if (string.IsNullOrEmpty(param)) - { - throw new ArgumentNullException(); - } - - var sqliteParam = new SQLiteParameter(param); - cmd.Parameters.Add(sqliteParam); - return sqliteParam; - } - - /// - /// Adds the param. - /// - /// The CMD. - /// The param. - /// The data. - /// SQLiteParameter. - /// - public static SQLiteParameter AddParam(this SQLiteCommand cmd, string param, object data) - { - var sqliteParam = AddParam(cmd, param); - sqliteParam.Value = data; - return sqliteParam; - } - /// /// Determines whether the specified conn is open. /// @@ -160,7 +126,7 @@ namespace MediaBrowser.Server.Implementations.Persistence /// The db path. /// Task{IDbConnection}. /// dbPath - public static async Task ConnectToDb(string dbPath) + public static async Task ConnectToDb(string dbPath) { if (string.IsNullOrEmpty(dbPath)) { diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs index 9c5cf6f1c5..5ce44efd54 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 /// public class SqliteItemRepository : IItemRepository { - private SQLiteConnection _connection; + private IDbConnection _connection; private readonly ILogger _logger; private readonly TypeMapper _typeMapper = new TypeMapper(); - + /// /// Gets the name of the repository /// @@ -52,15 +51,15 @@ namespace MediaBrowser.Server.Implementations.Persistence /// /// The _save item command /// - 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; + /// /// Initializes a new instance of the class. /// @@ -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 /// 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"); } /// @@ -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();