don't serialize user data in db

pull/702/head
Luke Pulverenti 12 years ago
parent fbd052abfc
commit 8f61e37498

@ -17,13 +17,13 @@ namespace MediaBrowser.Controller.Entities
/// <summary>
/// The _rating
/// </summary>
private float? _rating;
private double? _rating;
/// <summary>
/// Gets or sets the users 0-10 rating
/// </summary>
/// <value>The rating.</value>
/// <exception cref="System.ArgumentOutOfRangeException">Rating;A 0 to 10 rating is required for UserItemData.</exception>
public float? Rating
public double? Rating
{
get
{

@ -12,7 +12,7 @@ namespace MediaBrowser.Model.Dto
/// Gets or sets the rating.
/// </summary>
/// <value>The rating.</value>
public float? Rating { get; set; }
public double? Rating { get; set; }
/// <summary>
/// Gets or sets the playback position ticks.

@ -94,8 +94,9 @@ namespace MediaBrowser.Server.Implementations.Sqlite
string[] queries = {
"create table if not exists userdata (key nvarchar, userId GUID, data BLOB)",
"create unique index if not exists userdataindex on userdata (key, userId)",
"create table if not exists useritemdata (key nvarchar, userId GUID, Rating float null, PlaybackPositionTicks bigint, PlayCount int, IsFavorite bit, Played bit, LastPlayedDate bigint null)",
"create unique index if not exists useritemdataindex on useritemdata (key, userId)",
"create table if not exists schema_version (table_name primary key, version)",
//pragmas
"pragma temp_store = memory"
@ -180,16 +181,26 @@ namespace MediaBrowser.Server.Implementations.Sqlite
{
cancellationToken.ThrowIfCancellationRequested();
var serialized = _jsonSerializer.SerializeToBytes(userData);
cancellationToken.ThrowIfCancellationRequested();
using (var cmd = connection.CreateCommand())
{
cmd.CommandText = "replace into userdata (key, userId, data) values (@1, @2, @3)";
cmd.CommandText = "replace into useritemdata (key, userId, Rating,PlaybackPositionTicks,PlayCount,IsFavorite,Played,LastPlayedDate) values (@1, @2, @3, @4, @5, @6, @7, @8)";
cmd.AddParam("@1", key);
cmd.AddParam("@2", userId);
cmd.AddParam("@3", serialized);
cmd.AddParam("@3", userData.Rating);
cmd.AddParam("@4", userData.PlaybackPositionTicks);
cmd.AddParam("@5", userData.PlayCount);
cmd.AddParam("@6", userData.IsFavorite);
cmd.AddParam("@7", userData.Played);
if (userData.LastPlayedDate.HasValue)
{
cmd.AddParam("@8", userData.LastPlayedDate.Value.Ticks);
}
else
{
cmd.AddParam("@8", null);
}
using (var tran = connection.BeginTransaction())
{
@ -249,7 +260,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite
{
using (var cmd = connection.CreateCommand())
{
cmd.CommandText = "select data from userdata where key = @key and userId=@userId";
cmd.CommandText = "select Rating,PlaybackPositionTicks,PlayCount,IsFavorite,Played,LastPlayedDate from useritemdata where key = @key and userId=@userId";
var idParam = cmd.Parameters.Add("@key", DbType.String);
idParam.Value = key;
@ -257,18 +268,31 @@ namespace MediaBrowser.Server.Implementations.Sqlite
var userIdParam = cmd.Parameters.Add("@userId", DbType.Guid);
userIdParam.Value = userId;
var userdata = new UserItemData();
using (var reader = await cmd.ExecuteReaderAsync(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow).ConfigureAwait(false))
{
if (reader.Read())
{
using (var stream = GetStream(reader, 0))
if (!reader.IsDBNull(0))
{
userdata.Rating = reader.GetDouble(0);
}
userdata.PlaybackPositionTicks = reader.GetInt64(1);
userdata.PlayCount = reader.GetInt32(2);
userdata.IsFavorite = reader.GetBoolean(3);
userdata.Played = reader.GetBoolean(4);
var ticks = (long?) reader.GetValue(5);
if (ticks.HasValue)
{
return _jsonSerializer.DeserializeFromStream<UserItemData>(stream);
userdata.LastPlayedDate = new DateTime(ticks.Value);
}
}
}
return new UserItemData();
return userdata;
}
}
}

Loading…
Cancel
Save