aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Data/SqliteItemRepository.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Implementations/Data/SqliteItemRepository.cs')
-rw-r--r--Emby.Server.Implementations/Data/SqliteItemRepository.cs306
1 files changed, 162 insertions, 144 deletions
diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
index e3dd3f884..768f5b5a0 100644
--- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
@@ -123,17 +123,10 @@ namespace Emby.Server.Implementations.Data
}
}
- private SQLiteDatabaseConnection _backgroundConnection;
protected override void CloseConnection()
{
base.CloseConnection();
- if (_backgroundConnection != null)
- {
- _backgroundConnection.Dispose();
- _backgroundConnection = null;
- }
-
if (_shrinkMemoryTimer != null)
{
_shrinkMemoryTimer.Dispose();
@@ -379,8 +372,6 @@ namespace Emby.Server.Implementations.Data
userDataRepo.Initialize(WriteLock);
- //_backgroundConnection = CreateConnection(true);
-
_shrinkMemoryTimer = _timerFactory.Create(OnShrinkMemoryTimerCallback, null, TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(30));
}
@@ -1370,6 +1361,10 @@ namespace Emby.Server.Implementations.Data
{
return false;
}
+ if (type == typeof(AudioBook))
+ {
+ return false;
+ }
if (type == typeof(MusicAlbum))
{
return false;
@@ -2691,51 +2686,55 @@ namespace Emby.Server.Implementations.Data
{
using (var connection = CreateConnection(true))
{
- var statements = PrepareAllSafe(connection, string.Join(";", statementTexts.ToArray()))
- .ToList();
-
- if (!isReturningZeroItems)
+ connection.RunInTransaction(db =>
{
- using (var statement = statements[0])
+ var statements = PrepareAllSafe(db, string.Join(";", statementTexts.ToArray()))
+ .ToList();
+
+ if (!isReturningZeroItems)
{
- if (EnableJoinUserData(query))
+ using (var statement = statements[0])
{
- statement.TryBind("@UserId", query.User.Id);
- }
+ if (EnableJoinUserData(query))
+ {
+ statement.TryBind("@UserId", query.User.Id);
+ }
- BindSimilarParams(query, statement);
+ BindSimilarParams(query, statement);
- // Running this again will bind the params
- GetWhereClauses(query, statement);
+ // Running this again will bind the params
+ GetWhereClauses(query, statement);
- foreach (var row in statement.ExecuteQuery())
- {
- var item = GetItem(row, query);
- if (item != null)
+ foreach (var row in statement.ExecuteQuery())
{
- list.Add(item);
+ var item = GetItem(row, query);
+ if (item != null)
+ {
+ list.Add(item);
+ }
}
}
- }
- }
- if (query.EnableTotalRecordCount)
- {
- using (var statement = statements[statements.Count - 1])
- {
- if (EnableJoinUserData(query))
+ if (query.EnableTotalRecordCount)
{
- statement.TryBind("@UserId", query.User.Id);
- }
+ using (var statement = statements[statements.Count - 1])
+ {
+ if (EnableJoinUserData(query))
+ {
+ statement.TryBind("@UserId", query.User.Id);
+ }
- BindSimilarParams(query, statement);
+ BindSimilarParams(query, statement);
- // Running this again will bind the params
- GetWhereClauses(query, statement);
+ // Running this again will bind the params
+ GetWhereClauses(query, statement);
- totalRecordCount = statement.ExecuteQuery().SelectScalarInt().First();
+ totalRecordCount = statement.ExecuteQuery().SelectScalarInt().First();
+ }
+ }
}
- }
+
+ }, ReadTransactionMode);
LogQueryTime("GetItems", commandText, now);
@@ -3095,49 +3094,53 @@ namespace Emby.Server.Implementations.Data
{
using (var connection = CreateConnection(true))
{
- var statements = PrepareAllSafe(connection, string.Join(";", statementTexts.ToArray()))
- .ToList();
-
var totalRecordCount = 0;
- if (!isReturningZeroItems)
+ connection.RunInTransaction(db =>
{
- using (var statement = statements[0])
+ var statements = PrepareAllSafe(db, string.Join(";", statementTexts.ToArray()))
+ .ToList();
+
+ if (!isReturningZeroItems)
{
- if (EnableJoinUserData(query))
+ using (var statement = statements[0])
{
- statement.TryBind("@UserId", query.User.Id);
- }
+ if (EnableJoinUserData(query))
+ {
+ statement.TryBind("@UserId", query.User.Id);
+ }
- BindSimilarParams(query, statement);
+ BindSimilarParams(query, statement);
- // Running this again will bind the params
- GetWhereClauses(query, statement);
+ // Running this again will bind the params
+ GetWhereClauses(query, statement);
- foreach (var row in statement.ExecuteQuery())
- {
- list.Add(row[0].ReadGuid());
+ foreach (var row in statement.ExecuteQuery())
+ {
+ list.Add(row[0].ReadGuid());
+ }
}
}
- }
- if (query.EnableTotalRecordCount)
- {
- using (var statement = statements[statements.Count - 1])
+ if (query.EnableTotalRecordCount)
{
- if (EnableJoinUserData(query))
+ using (var statement = statements[statements.Count - 1])
{
- statement.TryBind("@UserId", query.User.Id);
- }
+ if (EnableJoinUserData(query))
+ {
+ statement.TryBind("@UserId", query.User.Id);
+ }
- BindSimilarParams(query, statement);
+ BindSimilarParams(query, statement);
- // Running this again will bind the params
- GetWhereClauses(query, statement);
+ // Running this again will bind the params
+ GetWhereClauses(query, statement);
- totalRecordCount = statement.ExecuteQuery().SelectScalarInt().First();
+ totalRecordCount = statement.ExecuteQuery().SelectScalarInt().First();
+ }
}
- }
+
+ }, ReadTransactionMode);
LogQueryTime("GetItemIds", commandText, now);
@@ -4426,6 +4429,7 @@ namespace Emby.Server.Implementations.Data
typeof(Movie),
typeof(Playlist),
typeof(AudioPodcast),
+ typeof(AudioBook),
typeof(Trailer),
typeof(BoxSet),
typeof(Episode),
@@ -4594,21 +4598,23 @@ namespace Emby.Server.Implementations.Data
commandText += " order by ListOrder";
var list = new List<string>();
-
using (WriteLock.Read())
{
using (var connection = CreateConnection(true))
{
- using (var statement = PrepareStatementSafe(connection, commandText))
+ connection.RunInTransaction(db =>
{
- // Run this again to bind the params
- GetPeopleWhereClauses(query, statement);
-
- foreach (var row in statement.ExecuteQuery())
+ using (var statement = PrepareStatementSafe(db, commandText))
{
- list.Add(row.GetString(0));
+ // Run this again to bind the params
+ GetPeopleWhereClauses(query, statement);
+
+ foreach (var row in statement.ExecuteQuery())
+ {
+ list.Add(row.GetString(0));
+ }
}
- }
+ }, ReadTransactionMode);
}
return list;
}
@@ -4640,16 +4646,19 @@ namespace Emby.Server.Implementations.Data
{
using (var connection = CreateConnection(true))
{
- using (var statement = PrepareStatementSafe(connection, commandText))
+ connection.RunInTransaction(db =>
{
- // Run this again to bind the params
- GetPeopleWhereClauses(query, statement);
-
- foreach (var row in statement.ExecuteQuery())
+ using (var statement = PrepareStatementSafe(db, commandText))
{
- list.Add(GetPerson(row));
+ // Run this again to bind the params
+ GetPeopleWhereClauses(query, statement);
+
+ foreach (var row in statement.ExecuteQuery())
+ {
+ list.Add(GetPerson(row));
+ }
}
- }
+ }, ReadTransactionMode);
}
}
@@ -4855,16 +4864,19 @@ namespace Emby.Server.Implementations.Data
{
using (var connection = CreateConnection(true))
{
- using (var statement = PrepareStatementSafe(connection, commandText))
+ connection.RunInTransaction(db =>
{
- foreach (var row in statement.ExecuteQuery())
+ using (var statement = PrepareStatementSafe(db, commandText))
{
- if (!row.IsDBNull(0))
+ foreach (var row in statement.ExecuteQuery())
{
- list.Add(row.GetString(0));
+ if (!row.IsDBNull(0))
+ {
+ list.Add(row.GetString(0));
+ }
}
}
- }
+ }, ReadTransactionMode);
}
}
LogQueryTime("GetItemValueNames", commandText, now);
@@ -5034,69 +5046,72 @@ namespace Emby.Server.Implementations.Data
{
using (var connection = CreateConnection(true))
{
- var statements = PrepareAllSafe(connection, string.Join(";", statementTexts.ToArray())).ToList();
-
- if (!isReturningZeroItems)
+ connection.RunInTransaction(db =>
{
- using (var statement = statements[0])
+ var statements = PrepareAllSafe(db, string.Join(";", statementTexts.ToArray())).ToList();
+
+ if (!isReturningZeroItems)
{
- statement.TryBind("@SelectType", returnType);
- if (EnableJoinUserData(query))
+ using (var statement = statements[0])
{
- statement.TryBind("@UserId", query.User.Id);
- }
+ statement.TryBind("@SelectType", returnType);
+ if (EnableJoinUserData(query))
+ {
+ statement.TryBind("@UserId", query.User.Id);
+ }
- if (typeSubQuery != null)
- {
- GetWhereClauses(typeSubQuery, null, "itemTypes");
- }
- BindSimilarParams(query, statement);
- GetWhereClauses(innerQuery, statement);
- GetWhereClauses(outerQuery, statement);
+ if (typeSubQuery != null)
+ {
+ GetWhereClauses(typeSubQuery, null, "itemTypes");
+ }
+ BindSimilarParams(query, statement);
+ GetWhereClauses(innerQuery, statement);
+ GetWhereClauses(outerQuery, statement);
- foreach (var row in statement.ExecuteQuery())
- {
- var item = GetItem(row);
- if (item != null)
+ foreach (var row in statement.ExecuteQuery())
{
- var countStartColumn = columns.Count - 1;
+ var item = GetItem(row);
+ if (item != null)
+ {
+ var countStartColumn = columns.Count - 1;
- list.Add(new Tuple<BaseItem, ItemCounts>(item, GetItemCounts(row, countStartColumn, typesToCount)));
+ list.Add(new Tuple<BaseItem, ItemCounts>(item, GetItemCounts(row, countStartColumn, typesToCount)));
+ }
}
- }
- LogQueryTime("GetItemValues", commandText, now);
+ LogQueryTime("GetItemValues", commandText, now);
+ }
}
- }
- if (query.EnableTotalRecordCount)
- {
- commandText = "select count (distinct PresentationUniqueKey)" + GetFromText();
+ if (query.EnableTotalRecordCount)
+ {
+ commandText = "select count (distinct PresentationUniqueKey)" + GetFromText();
- commandText += GetJoinUserDataText(query);
- commandText += whereText;
+ commandText += GetJoinUserDataText(query);
+ commandText += whereText;
- using (var statement = statements[statements.Count - 1])
- {
- statement.TryBind("@SelectType", returnType);
- if (EnableJoinUserData(query))
+ using (var statement = statements[statements.Count - 1])
{
- statement.TryBind("@UserId", query.User.Id);
- }
+ statement.TryBind("@SelectType", returnType);
+ if (EnableJoinUserData(query))
+ {
+ statement.TryBind("@UserId", query.User.Id);
+ }
- if (typeSubQuery != null)
- {
- GetWhereClauses(typeSubQuery, null, "itemTypes");
- }
- BindSimilarParams(query, statement);
- GetWhereClauses(innerQuery, statement);
- GetWhereClauses(outerQuery, statement);
+ if (typeSubQuery != null)
+ {
+ GetWhereClauses(typeSubQuery, null, "itemTypes");
+ }
+ BindSimilarParams(query, statement);
+ GetWhereClauses(innerQuery, statement);
+ GetWhereClauses(outerQuery, statement);
- count = statement.ExecuteQuery().SelectScalarInt().First();
+ count = statement.ExecuteQuery().SelectScalarInt().First();
- LogQueryTime("GetItemValues", commandText, now);
+ LogQueryTime("GetItemValues", commandText, now);
+ }
}
- }
+ }, ReadTransactionMode);
}
}
@@ -5344,25 +5359,28 @@ namespace Emby.Server.Implementations.Data
{
using (var connection = CreateConnection(true))
{
- using (var statement = PrepareStatementSafe(connection, cmdText))
+ connection.RunInTransaction(db =>
{
- statement.TryBind("@ItemId", query.ItemId.ToGuidParamValue());
-
- if (query.Type.HasValue)
+ using (var statement = PrepareStatementSafe(db, cmdText))
{
- statement.TryBind("@StreamType", query.Type.Value.ToString());
- }
+ statement.TryBind("@ItemId", query.ItemId.ToGuidParamValue());
- if (query.Index.HasValue)
- {
- statement.TryBind("@StreamIndex", query.Index.Value);
- }
+ if (query.Type.HasValue)
+ {
+ statement.TryBind("@StreamType", query.Type.Value.ToString());
+ }
- foreach (var row in statement.ExecuteQuery())
- {
- list.Add(GetMediaStream(row));
+ if (query.Index.HasValue)
+ {
+ statement.TryBind("@StreamIndex", query.Index.Value);
+ }
+
+ foreach (var row in statement.ExecuteQuery())
+ {
+ list.Add(GetMediaStream(row));
+ }
}
- }
+ }, ReadTransactionMode);
}
}