ManagedConnection.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4. using SQLitePCL.pretty;
  5. namespace Emby.Server.Implementations.Data
  6. {
  7. public class ManagedConnection : IDisposable
  8. {
  9. private SQLiteDatabaseConnection _db;
  10. private readonly SemaphoreSlim _writeLock;
  11. private bool _disposed = false;
  12. public ManagedConnection(SQLiteDatabaseConnection db, SemaphoreSlim writeLock)
  13. {
  14. _db = db;
  15. _writeLock = writeLock;
  16. }
  17. public IStatement PrepareStatement(string sql)
  18. {
  19. return _db.PrepareStatement(sql);
  20. }
  21. public IEnumerable<IStatement> PrepareAll(string sql)
  22. {
  23. return _db.PrepareAll(sql);
  24. }
  25. public void ExecuteAll(string sql)
  26. {
  27. _db.ExecuteAll(sql);
  28. }
  29. public void Execute(string sql, params object[] values)
  30. {
  31. _db.Execute(sql, values);
  32. }
  33. public void RunQueries(string[] sql)
  34. {
  35. _db.RunQueries(sql);
  36. }
  37. public void RunInTransaction(Action<IDatabaseConnection> action, TransactionMode mode)
  38. {
  39. _db.RunInTransaction(action, mode);
  40. }
  41. public T RunInTransaction<T>(Func<IDatabaseConnection, T> action, TransactionMode mode)
  42. {
  43. return _db.RunInTransaction(action, mode);
  44. }
  45. public IEnumerable<IReadOnlyList<IResultSetValue>> Query(string sql)
  46. {
  47. return _db.Query(sql);
  48. }
  49. public IEnumerable<IReadOnlyList<IResultSetValue>> Query(string sql, params object[] values)
  50. {
  51. return _db.Query(sql, values);
  52. }
  53. public void Dispose()
  54. {
  55. if (_disposed)
  56. {
  57. return;
  58. }
  59. _writeLock.Release();
  60. _db = null; // Don't dispose it
  61. _disposed = true;
  62. }
  63. }
  64. }