mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-04 03:27:21 -05:00 
			
		
		
		
	limit knowledge of sqlite
This commit is contained in:
		
							parent
							
								
									373bdf4825
								
							
						
					
					
						commit
						cdfb009df8
					
				@ -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
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    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))
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
@ -12,40 +12,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    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>
 | 
			
		||||
        /// Determines whether the specified conn is open.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
@ -160,7 +126,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
 | 
			
		||||
        /// <param name="dbPath">The db path.</param>
 | 
			
		||||
        /// <returns>Task{IDbConnection}.</returns>
 | 
			
		||||
        /// <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))
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
@ -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,7 +19,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class SqliteItemRepository : IItemRepository
 | 
			
		||||
    {
 | 
			
		||||
        private SQLiteConnection _connection;
 | 
			
		||||
        private IDbConnection _connection;
 | 
			
		||||
 | 
			
		||||
        private readonly ILogger _logger;
 | 
			
		||||
 | 
			
		||||
@ -52,14 +51,14 @@ 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.
 | 
			
		||||
@ -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 = _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");
 | 
			
		||||
 | 
			
		||||
            _saveItemCommand.Parameters.Add(new SQLiteParameter("@1"));
 | 
			
		||||
            _saveItemCommand.Parameters.Add(new SQLiteParameter("@2"));
 | 
			
		||||
            _saveItemCommand.Parameters.Add(new SQLiteParameter("@3"));
 | 
			
		||||
            _deleteChildrenCommand = _connection.CreateCommand();
 | 
			
		||||
            _deleteChildrenCommand.CommandText = "delete from ChildrenIds where ParentId=@ParentId";
 | 
			
		||||
            _deleteChildrenCommand.Parameters.Add(_deleteChildrenCommand, "@ParentId");
 | 
			
		||||
 | 
			
		||||
            _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"));
 | 
			
		||||
            _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();
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user