1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #pragma warning disable CS1591
- using System;
- using System.Collections.Generic;
- using System.Threading;
- using Microsoft.Data.Sqlite;
- namespace Emby.Server.Implementations.Data;
- public sealed class ManagedConnection : IDisposable
- {
- private readonly SemaphoreSlim? _writeLock;
- private SqliteConnection _db;
- private bool _disposed = false;
- public ManagedConnection(SqliteConnection db, SemaphoreSlim? writeLock)
- {
- _db = db;
- _writeLock = writeLock;
- }
- public SqliteTransaction BeginTransaction()
- => _db.BeginTransaction();
- public SqliteCommand CreateCommand()
- => _db.CreateCommand();
- public void Execute(string commandText)
- => _db.Execute(commandText);
- public SqliteCommand PrepareStatement(string sql)
- => _db.PrepareStatement(sql);
- public IEnumerable<SqliteDataReader> Query(string commandText)
- => _db.Query(commandText);
- public void Dispose()
- {
- if (_disposed)
- {
- return;
- }
- if (_writeLock is null)
- {
- // Read connections are managed with an internal pool
- _db.Dispose();
- }
- else
- {
- // Write lock is managed by BaseSqliteRepository
- // Don't dispose here
- _writeLock.Release();
- }
- _db = null!;
- _disposed = true;
- }
- }
|