limit knowledge of sqlite

This commit is contained in:
Luke Pulverenti 2013-09-29 18:00:08 -04:00
parent 373bdf4825
commit cdfb009df8
3 changed files with 45 additions and 94 deletions

View File

@ -5,7 +5,6 @@ using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using System; using System;
using System.Data; using System.Data;
using System.Data.SQLite;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -17,7 +16,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
/// </summary> /// </summary>
public class SqliteDisplayPreferencesRepository : IDisplayPreferencesRepository public class SqliteDisplayPreferencesRepository : IDisplayPreferencesRepository
{ {
private SQLiteConnection _connection; private IDbConnection _connection;
private readonly ILogger _logger; private readonly ILogger _logger;
@ -124,7 +123,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false); await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false);
SQLiteTransaction transaction = null; IDbTransaction transaction = null;
try try
{ {
@ -133,14 +132,15 @@ namespace MediaBrowser.Server.Implementations.Persistence
using (var cmd = _connection.CreateCommand()) using (var cmd = _connection.CreateCommand())
{ {
cmd.CommandText = "replace into userdisplaypreferences (id, userid, client, data) values (@1, @2, @3, @4)"; cmd.CommandText = "replace into userdisplaypreferences (id, userid, client, data) values (@1, @2, @3, @4)";
cmd.AddParam("@1", displayPreferences.Id);
cmd.AddParam("@2", userId); cmd.Parameters.Add(cmd, "@1", DbType.Guid).Value = displayPreferences.Id;
cmd.AddParam("@3", client); cmd.Parameters.Add(cmd, "@2", DbType.Guid).Value = userId;
cmd.AddParam("@4", serialized); cmd.Parameters.Add(cmd, "@3", DbType.String).Value = client;
cmd.Parameters.Add(cmd, "@4", DbType.Binary).Value = serialized;
cmd.Transaction = transaction; cmd.Transaction = transaction;
await cmd.ExecuteNonQueryAsync(cancellationToken); cmd.ExecuteNonQuery();
} }
transaction.Commit(); transaction.Commit();
@ -194,14 +194,9 @@ namespace MediaBrowser.Server.Implementations.Persistence
var cmd = _connection.CreateCommand(); var cmd = _connection.CreateCommand();
cmd.CommandText = "select data from userdisplaypreferences where id = @id and userId=@userId and client=@client"; cmd.CommandText = "select data from userdisplaypreferences where id = @id and userId=@userId and client=@client";
var idParam = cmd.Parameters.Add("@id", DbType.Guid); cmd.Parameters.Add(cmd, "@id", DbType.Guid).Value = displayPreferencesId;
idParam.Value = displayPreferencesId; cmd.Parameters.Add(cmd, "@userId", DbType.Guid).Value = userId;
cmd.Parameters.Add(cmd, "@client", DbType.String).Value = client;
var userIdParam = cmd.Parameters.Add("@userId", DbType.Guid);
userIdParam.Value = userId;
var clientParam = cmd.Parameters.Add("@client", DbType.String);
clientParam.Value = client;
using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow)) using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow))
{ {

View File

@ -12,40 +12,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
/// </summary> /// </summary>
static class SqliteExtensions static class SqliteExtensions
{ {
/// <summary>
/// Adds the param.
/// </summary>
/// <param name="cmd">The CMD.</param>
/// <param name="param">The param.</param>
/// <returns>SQLiteParameter.</returns>
/// <exception cref="System.ArgumentNullException"></exception>
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;
}
/// <summary>
/// Adds the param.
/// </summary>
/// <param name="cmd">The CMD.</param>
/// <param name="param">The param.</param>
/// <param name="data">The data.</param>
/// <returns>SQLiteParameter.</returns>
/// <exception cref="System.ArgumentNullException"></exception>
public static SQLiteParameter AddParam(this SQLiteCommand cmd, string param, object data)
{
var sqliteParam = AddParam(cmd, param);
sqliteParam.Value = data;
return sqliteParam;
}
/// <summary> /// <summary>
/// Determines whether the specified conn is open. /// Determines whether the specified conn is open.
/// </summary> /// </summary>
@ -160,7 +126,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
/// <param name="dbPath">The db path.</param> /// <param name="dbPath">The db path.</param>
/// <returns>Task{IDbConnection}.</returns> /// <returns>Task{IDbConnection}.</returns>
/// <exception cref="System.ArgumentNullException">dbPath</exception> /// <exception cref="System.ArgumentNullException">dbPath</exception>
public static async Task<SQLiteConnection> ConnectToDb(string dbPath) public static async Task<IDbConnection> ConnectToDb(string dbPath)
{ {
if (string.IsNullOrEmpty(dbPath)) if (string.IsNullOrEmpty(dbPath))
{ {

View File

@ -7,7 +7,6 @@ using MediaBrowser.Model.Serialization;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.Data.SQLite;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
@ -20,7 +19,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
/// </summary> /// </summary>
public class SqliteItemRepository : IItemRepository public class SqliteItemRepository : IItemRepository
{ {
private SQLiteConnection _connection; private IDbConnection _connection;
private readonly ILogger _logger; private readonly ILogger _logger;
@ -52,14 +51,14 @@ namespace MediaBrowser.Server.Implementations.Persistence
/// <summary> /// <summary>
/// The _save item command /// The _save item command
/// </summary> /// </summary>
private SQLiteCommand _saveItemCommand; private IDbCommand _saveItemCommand;
private readonly string _criticReviewsPath; private readonly string _criticReviewsPath;
private SqliteChapterRepository _chapterRepository; private SqliteChapterRepository _chapterRepository;
private SQLiteCommand _deleteChildrenCommand; private IDbCommand _deleteChildrenCommand;
private SQLiteCommand _saveChildrenCommand; private IDbCommand _saveChildrenCommand;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="SqliteItemRepository"/> class. /// Initializes a new instance of the <see cref="SqliteItemRepository"/> class.
@ -136,29 +135,20 @@ namespace MediaBrowser.Server.Implementations.Persistence
/// </summary> /// </summary>
private void PrepareStatements() private void PrepareStatements()
{ {
_saveItemCommand = new SQLiteCommand _saveItemCommand = _connection.CreateCommand();
{ _saveItemCommand.CommandText = "replace into TypedBaseItems (guid, type, data) values (@1, @2, @3)";
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");
_saveItemCommand.Parameters.Add(new SQLiteParameter("@1")); _deleteChildrenCommand = _connection.CreateCommand();
_saveItemCommand.Parameters.Add(new SQLiteParameter("@2")); _deleteChildrenCommand.CommandText = "delete from ChildrenIds where ParentId=@ParentId";
_saveItemCommand.Parameters.Add(new SQLiteParameter("@3")); _deleteChildrenCommand.Parameters.Add(_deleteChildrenCommand, "@ParentId");
_deleteChildrenCommand = new SQLiteCommand _saveChildrenCommand = _connection.CreateCommand();
{ _saveChildrenCommand.CommandText = "replace into ChildrenIds (ParentId, ItemId) values (@ParentId, @ItemId)";
CommandText = "delete from ChildrenIds where ParentId=@ParentId" _saveChildrenCommand.Parameters.Add(_saveChildrenCommand, "@ParentId");
}; _saveChildrenCommand.Parameters.Add(_saveChildrenCommand, "@ItemId");
_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"));
} }
/// <summary> /// <summary>
@ -205,7 +195,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false); await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false);
SQLiteTransaction transaction = null; IDbTransaction transaction = null;
try try
{ {
@ -215,13 +205,13 @@ namespace MediaBrowser.Server.Implementations.Persistence
{ {
cancellationToken.ThrowIfCancellationRequested(); cancellationToken.ThrowIfCancellationRequested();
_saveItemCommand.Parameters[0].Value = item.Id; _saveItemCommand.GetParameter(0).Value = item.Id;
_saveItemCommand.Parameters[1].Value = item.GetType().FullName; _saveItemCommand.GetParameter(1).Value = item.GetType().FullName;
_saveItemCommand.Parameters[2].Value = _jsonSerializer.SerializeToBytes(item); _saveItemCommand.GetParameter(2).Value = _jsonSerializer.SerializeToBytes(item);
_saveItemCommand.Transaction = transaction; _saveItemCommand.Transaction = transaction;
await _saveItemCommand.ExecuteNonQueryAsync(cancellationToken); _saveItemCommand.ExecuteNonQuery();
} }
transaction.Commit(); transaction.Commit();
@ -274,8 +264,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
using (var cmd = _connection.CreateCommand()) using (var cmd = _connection.CreateCommand())
{ {
cmd.CommandText = "select type,data from TypedBaseItems where guid = @guid"; cmd.CommandText = "select type,data from TypedBaseItems where guid = @guid";
var guidParam = cmd.Parameters.Add("@guid", DbType.Guid); cmd.Parameters.Add(cmd, "@guid", DbType.Guid).Value = id;
guidParam.Value = id;
using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow)) 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.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)) using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
{ {
@ -479,27 +468,28 @@ namespace MediaBrowser.Server.Implementations.Persistence
await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false); await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false);
SQLiteTransaction transaction = null; IDbTransaction transaction = null;
try try
{ {
transaction = _connection.BeginTransaction(); transaction = _connection.BeginTransaction();
// First delete // First delete
_deleteChildrenCommand.Parameters[0].Value = parentId; _deleteChildrenCommand.GetParameter(0).Value = parentId;
_deleteChildrenCommand.Transaction = transaction; _deleteChildrenCommand.Transaction = transaction;
await _deleteChildrenCommand.ExecuteNonQueryAsync(cancellationToken);
_deleteChildrenCommand.ExecuteNonQuery();
foreach (var id in children) foreach (var id in children)
{ {
cancellationToken.ThrowIfCancellationRequested(); cancellationToken.ThrowIfCancellationRequested();
_saveChildrenCommand.Parameters[0].Value = parentId; _saveChildrenCommand.GetParameter(0).Value = parentId;
_saveChildrenCommand.Parameters[1].Value = id; _saveChildrenCommand.GetParameter(1).Value = id;
_saveChildrenCommand.Transaction = transaction; _saveChildrenCommand.Transaction = transaction;
await _saveChildrenCommand.ExecuteNonQueryAsync(cancellationToken); _saveChildrenCommand.ExecuteNonQuery();
} }
transaction.Commit(); transaction.Commit();