aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-07-08 12:10:34 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-07-08 12:10:34 -0400
commit0291df3193f6fd23806a6ec1e87bf1aa7ed49c25 (patch)
treeafc3c6c48119ea644f6111e2c3686e3aae3db637 /MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
parentdfa17aec70652d8a21d43c889f08f8c0fd805d09 (diff)
3.0.5666.2
Diffstat (limited to 'MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs92
1 files changed, 76 insertions, 16 deletions
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
index a247bbbe3..cc4b7f074 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
@@ -135,8 +135,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
_connection.RunQueries(queries, _logger);
- _connection.AddColumn(_logger, "TypedBaseItems", "Path", "Text");
- _connection.AddColumn(_logger, "TypedBaseItems", "StartDate", "DATETIME");
+ _connection.AddColumn(_logger, "TypedBaseItems", "Path", "Text");
+ _connection.AddColumn(_logger, "TypedBaseItems", "StartDate", "DATETIME");
_connection.AddColumn(_logger, "TypedBaseItems", "EndDate", "DATETIME");
_connection.AddColumn(_logger, "TypedBaseItems", "ChannelId", "Text");
_connection.AddColumn(_logger, "TypedBaseItems", "IsMovie", "BIT");
@@ -286,9 +286,9 @@ namespace MediaBrowser.Server.Implementations.Persistence
_saveItemCommand.GetParameter(index++).Value = item.GetType().FullName;
_saveItemCommand.GetParameter(index++).Value = _jsonSerializer.SerializeToBytes(item);
- _saveItemCommand.GetParameter(index++).Value = item.Path;
+ _saveItemCommand.GetParameter(index++).Value = item.Path;
- var hasStartDate = item as IHasStartDate;
+ var hasStartDate = item as IHasStartDate;
if (hasStartDate != null)
{
_saveItemCommand.GetParameter(index++).Value = hasStartDate.StartDate;
@@ -329,7 +329,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
_saveItemCommand.GetParameter(index++).Value = item.ParentIndexNumber;
_saveItemCommand.GetParameter(index++).Value = item.PremiereDate;
_saveItemCommand.GetParameter(index++).Value = item.ProductionYear;
-
+
_saveItemCommand.Transaction = transaction;
_saveItemCommand.ExecuteNonQuery();
@@ -1009,7 +1009,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
_deletePeopleCommand.GetParameter(0).Value = id;
_deletePeopleCommand.Transaction = transaction;
_deletePeopleCommand.ExecuteNonQuery();
-
+
// Delete the item
_deleteItemCommand.GetParameter(0).Value = id;
_deleteItemCommand.Transaction = transaction;
@@ -1133,20 +1133,27 @@ namespace MediaBrowser.Server.Implementations.Persistence
return _mediaStreamsRepository.SaveMediaStreams(id, streams, cancellationToken);
}
- public List<string> GetPeopleNames(Guid itemId)
+ public List<string> GetPeopleNames(InternalPeopleQuery query)
{
- if (itemId == Guid.Empty)
+ if (query == null)
{
- throw new ArgumentNullException("itemId");
+ throw new ArgumentNullException("query");
}
CheckDisposed();
using (var cmd = _connection.CreateCommand())
{
- cmd.CommandText = "select Distinct Name from People where ItemId=@ItemId order by ListOrder";
+ cmd.CommandText = "select Distinct Name from People";
- cmd.Parameters.Add(cmd, "@ItemId", DbType.Guid).Value = itemId;
+ var whereClauses = GetPeopleWhereClauses(query, cmd);
+
+ if (whereClauses.Count > 0)
+ {
+ cmd.CommandText += " where " + string.Join(" AND ", whereClauses.ToArray());
+ }
+
+ cmd.CommandText += " order by ListOrder";
var list = new List<string>();
@@ -1162,20 +1169,27 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
}
- public List<PersonInfo> GetPeople(Guid itemId)
+ public List<PersonInfo> GetPeople(InternalPeopleQuery query)
{
- if (itemId == Guid.Empty)
+ if (query == null)
{
- throw new ArgumentNullException("itemId");
+ throw new ArgumentNullException("query");
}
CheckDisposed();
using (var cmd = _connection.CreateCommand())
{
- cmd.CommandText = "select ItemId, Name, Role, PersonType, SortOrder from People where ItemId=@ItemId order by ListOrder";
+ cmd.CommandText = "select ItemId, Name, Role, PersonType, SortOrder from People";
+
+ var whereClauses = GetPeopleWhereClauses(query, cmd);
+
+ if (whereClauses.Count > 0)
+ {
+ cmd.CommandText += " where " + string.Join(" AND ", whereClauses.ToArray());
+ }
- cmd.Parameters.Add(cmd, "@ItemId", DbType.Guid).Value = itemId;
+ cmd.CommandText += " order by ListOrder";
var list = new List<PersonInfo>();
@@ -1191,6 +1205,51 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
}
+ private List<string> GetPeopleWhereClauses(InternalPeopleQuery query, IDbCommand cmd)
+ {
+ var whereClauses = new List<string>();
+
+ if (query.ItemId != Guid.Empty)
+ {
+ whereClauses.Add("ItemId=@ItemId");
+ cmd.Parameters.Add(cmd, "@ItemId", DbType.Guid).Value = query.ItemId;
+ }
+ if (query.AppearsInItemId != Guid.Empty)
+ {
+ whereClauses.Add("Name in (Select Name from People where ItemId=@AppearsInItemId)");
+ cmd.Parameters.Add(cmd, "@AppearsInItemId", DbType.Guid).Value = query.AppearsInItemId;
+ }
+ if (query.PersonTypes.Count == 1)
+ {
+ whereClauses.Add("PersonType=@PersonType");
+ cmd.Parameters.Add(cmd, "@PersonType", DbType.String).Value = query.PersonTypes[0];
+ }
+ if (query.PersonTypes.Count > 1)
+ {
+ var val = string.Join(",", query.PersonTypes.Select(i => "'" + i + "'").ToArray());
+
+ whereClauses.Add("PersonType in (" + val + ")");
+ }
+ if (query.ExcludePersonTypes.Count == 1)
+ {
+ whereClauses.Add("PersonType<>@PersonType");
+ cmd.Parameters.Add(cmd, "@PersonType", DbType.String).Value = query.ExcludePersonTypes[0];
+ }
+ if (query.ExcludePersonTypes.Count > 1)
+ {
+ var val = string.Join(",", query.ExcludePersonTypes.Select(i => "'" + i + "'").ToArray());
+
+ whereClauses.Add("PersonType not in (" + val + ")");
+ }
+ if (query.MaxListOrder.HasValue)
+ {
+ whereClauses.Add("ListOrder<=@MaxListOrder");
+ cmd.Parameters.Add(cmd, "@MaxListOrder", DbType.Int32).Value = query.MaxListOrder.Value;
+ }
+
+ return whereClauses;
+ }
+
public async Task UpdatePeople(Guid itemId, List<PersonInfo> people)
{
if (itemId == Guid.Empty)
@@ -1277,6 +1336,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
{
var item = new PersonInfo();
+ item.ItemId = reader.GetGuid(0);
item.Name = reader.GetString(1);
if (!reader.IsDBNull(2))